modified file bootstrap-buttons.css
This commit is contained in:
@ -1,57 +0,0 @@
|
||||
.sections-no-sidebars.generate-sections-enabled .container.grid-container {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.sections-sidebars.no-sidebar.generate-sections-enabled .container.grid-container {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.sections-no-sidebars.generate-sections-enabled #primary.content-area {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sections-sidebars.no-sidebar.generate-sections-enabled #primary.content-area {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sections-no-sidebars.generate-sections-enabled.separate-containers #main.site-main,
|
||||
.sections-no-sidebars.generate-sections-enabled.separate-containers .hentry {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.sections-sidebars.no-sidebar.generate-sections-enabled.separate-containers #main.site-main,
|
||||
.sections-sidebars.no-sidebar.generate-sections-enabled.separate-containers .hentry {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.generate-sections-inside-container > *:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.generate-sections-container {
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.generate-sections-container.no-padding .generate-sections-inside-container {
|
||||
padding: 0px !important;
|
||||
}
|
||||
|
||||
.generate-sections-enabled.one-container .site-content {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.generate-sections-enabled.one-container .container {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.generate-sections-enabled.one-container .site-main {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.generate-sections-enabled .entry-content {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.separate-containers .site-main > .generate-sections-container {
|
||||
margin-bottom: 0;
|
||||
}
|
@ -1 +0,0 @@
|
||||
.sections-no-sidebars.generate-sections-enabled .container.grid-container,.sections-sidebars.no-sidebar.generate-sections-enabled .container.grid-container{max-width:100%}.sections-no-sidebars.generate-sections-enabled #primary.content-area,.sections-sidebars.no-sidebar.generate-sections-enabled #primary.content-area{width:100%}.sections-no-sidebars.generate-sections-enabled.separate-containers #main.site-main,.sections-no-sidebars.generate-sections-enabled.separate-containers .hentry,.sections-sidebars.no-sidebar.generate-sections-enabled.separate-containers #main.site-main,.sections-sidebars.no-sidebar.generate-sections-enabled.separate-containers .hentry{margin:0}.generate-sections-inside-container>:last-child{margin-bottom:0}.generate-sections-container{background-size:cover}.generate-sections-container.no-padding .generate-sections-inside-container{padding:0!important}.generate-sections-enabled.one-container .site-content{padding:0}.generate-sections-enabled.one-container .container{background:0 0}.generate-sections-enabled.one-container .site-main{margin:0!important}.generate-sections-enabled .entry-content{text-align:center}.separate-containers .site-main>.generate-sections-container{margin-bottom:0}
|
@ -1,329 +0,0 @@
|
||||
<?php
|
||||
// No direct access, please
|
||||
if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
include_once( 'metaboxes/metabox-functions.php' );
|
||||
|
||||
if ( ! function_exists( 'generate_sections_page_template' ) ) {
|
||||
add_filter( 'template_include', 'generate_sections_page_template' );
|
||||
/**
|
||||
* Use our custom template if sections are enabled
|
||||
*/
|
||||
function generate_sections_page_template( $template ) {
|
||||
|
||||
global $post;
|
||||
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
||||
|
||||
if ( is_home() || is_archive() || is_search() || is_attachment() || is_tax() ) {
|
||||
return $template;
|
||||
}
|
||||
|
||||
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
|
||||
|
||||
$new_template = dirname( __FILE__ ) . '/templates/template.php';
|
||||
|
||||
if ( '' != $new_template ) {
|
||||
return $new_template;
|
||||
}
|
||||
}
|
||||
return $template;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_show_excerpt' ) ) {
|
||||
add_filter( 'generate_show_excerpt', 'generate_sections_show_excerpt' );
|
||||
/**
|
||||
* If Sections is enabled on a post, make sure we use the excerpt field on the blog page
|
||||
*/
|
||||
function generate_sections_show_excerpt( $show_excerpt ) {
|
||||
global $post;
|
||||
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
||||
|
||||
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return $show_excerpt;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_styles' ) ) {
|
||||
add_action( 'wp_enqueue_scripts', 'generate_sections_styles' );
|
||||
/**
|
||||
* Enqueue necessary scripts if sections are enabled
|
||||
*/
|
||||
function generate_sections_styles() {
|
||||
|
||||
global $post;
|
||||
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
||||
|
||||
// Bail if we're on a posts page
|
||||
if ( is_home() || is_archive() || is_search() || is_attachment() || is_tax() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
|
||||
wp_enqueue_style( 'generate-sections-styles', plugin_dir_url( __FILE__ ) . 'css/style.min.css' );
|
||||
wp_enqueue_script( 'generate-sections-parallax', plugin_dir_url( __FILE__ ) . 'js/parallax.min.js', array(), GENERATE_SECTIONS_VERSION, true );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_body_classes' ) ) {
|
||||
add_filter( 'body_class', 'generate_sections_body_classes' );
|
||||
/**
|
||||
* Add classes to our <body> element when sections are enabled
|
||||
*/
|
||||
function generate_sections_body_classes( $classes ) {
|
||||
global $post;
|
||||
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
||||
$sidebars = apply_filters( 'generate_sections_sidebars', false );
|
||||
|
||||
// Bail if we're on a posts page
|
||||
if ( is_home() || is_archive() || is_search() || is_attachment() || is_tax() ) {
|
||||
return $classes;
|
||||
}
|
||||
|
||||
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
|
||||
$classes[] = 'generate-sections-enabled';
|
||||
}
|
||||
|
||||
if ( ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) && ! $sidebars ) {
|
||||
$classes[] = 'sections-no-sidebars';
|
||||
}
|
||||
|
||||
if ( ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) && $sidebars ) {
|
||||
$classes[] = 'sections-sidebars';
|
||||
}
|
||||
|
||||
return $classes;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_add_css' ) ) {
|
||||
add_action( 'wp_enqueue_scripts', 'generate_sections_add_css', 500 );
|
||||
/**
|
||||
* Create the CSS for our sections
|
||||
*/
|
||||
function generate_sections_add_css() {
|
||||
global $post;
|
||||
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
||||
|
||||
if ( ! isset( $use_sections['use_sections'] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( 'true' !== $use_sections['use_sections'] ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( is_home() || is_archive() || is_search() || is_attachment() || is_tax() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( function_exists( 'generate_spacing_get_defaults' ) ) {
|
||||
$spacing_settings = wp_parse_args(
|
||||
get_option( 'generate_spacing_settings', array() ),
|
||||
generate_spacing_get_defaults()
|
||||
);
|
||||
|
||||
$left_padding = $spacing_settings['content_left'];
|
||||
$right_padding = $spacing_settings['content_right'];
|
||||
$mobile_padding_left = ( isset( $spacing_settings[ 'mobile_content_left' ] ) ) ? $spacing_settings[ 'mobile_content_left' ] : 30;
|
||||
$mobile_padding_right = ( isset( $spacing_settings[ 'mobile_content_right' ] ) ) ? $spacing_settings[ 'mobile_content_right' ] : 30;
|
||||
} else {
|
||||
$right_padding = 40;
|
||||
$left_padding = 40;
|
||||
$mobile_padding = 30;
|
||||
}
|
||||
|
||||
$sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_sections', TRUE) : '';
|
||||
|
||||
// check if the repeater field has rows of data
|
||||
if ( $sections && '' !== $sections ) {
|
||||
|
||||
$css = '.generate-sections-inside-container {padding-left:' . $left_padding . 'px;padding-right:' . $right_padding . 'px;}';
|
||||
// loop through the rows of data
|
||||
$i = 0;
|
||||
foreach ( $sections['sections'] as $section ) :
|
||||
$i++;
|
||||
|
||||
// Get image details
|
||||
$image_id = ( isset( $section['background_image'] ) && '' !== $section['background_image'] ) ? intval( $section['background_image'] ) : '';
|
||||
$image_url = ( '' !== $image_id ) ? wp_get_attachment_image_src( $image_id, 'full' ) : '';
|
||||
|
||||
// Get the padding type
|
||||
$padding_type = apply_filters( 'generate_sections_padding_type','px' );
|
||||
|
||||
// If someone has changed the padding type using a filter, use their value
|
||||
if ( 'px' !== $padding_type ) {
|
||||
$top_padding_type = $padding_type;
|
||||
$bottom_padding_type = $padding_type;
|
||||
} else {
|
||||
$top_padding_type = ( isset( $section['top_padding_unit'] ) && '' !== $section['top_padding_unit'] ) ? $section['top_padding_unit'] : $padding_type;
|
||||
$bottom_padding_type = ( isset( $section['bottom_padding_unit'] ) && '' !== $section['bottom_padding_unit'] ) ? $section['bottom_padding_unit'] : $padding_type;
|
||||
}
|
||||
|
||||
// Default padding top
|
||||
$padding_top = apply_filters( 'generate_sections_default_padding_top','40' );
|
||||
|
||||
// Default padding bottom
|
||||
$padding_bottom = apply_filters( 'generate_sections_default_padding_bottom','40' );
|
||||
|
||||
$custom_id = ( isset( $section['custom_id'] ) ) ? $section['custom_id'] : '';
|
||||
$custom_id = ( '' == $custom_id ) ? "generate-section-$i" : $custom_id;
|
||||
|
||||
// Get the values
|
||||
$background_color = ( isset( $section['background_color'] ) && '' !== $section['background_color'] ) ? 'background-color:' . esc_attr( $section['background_color'] ) . ';' : '';
|
||||
$background_image = ( ! empty( $image_url[0] ) ) ? 'background-image:url(' . esc_url( $image_url[0] ) . ');' : '';
|
||||
|
||||
if ( isset( $section['background_color_overlay'] ) && '' !== $section['background_color_overlay'] ) {
|
||||
if ( '' !== $background_image && '' !== $background_color ) {
|
||||
$background_image = 'background-image:linear-gradient(0deg, ' . $section['background_color'] . ',' . $section['background_color'] . '), url(' . esc_url( $image_url[0] ) . ');';
|
||||
$background_color = '';
|
||||
}
|
||||
}
|
||||
|
||||
$text_color = ( isset( $section['text_color'] ) && '' !== $section['text_color'] ) ? 'color:' . esc_attr( $section['text_color'] ) . ';' : '';
|
||||
$link_color = ( isset( $section['link_color'] ) && '' !== $section['link_color'] ) ? 'color:' . esc_attr( $section['link_color'] ) . ';' : '';
|
||||
$link_color_hover = ( isset( $section['link_color_hover'] ) && '' !== $section['link_color_hover'] ) ? 'color:' . esc_attr( $section['link_color_hover'] ) . ';' : '';
|
||||
$top_padding = ( isset( $section['top_padding'] ) && '' !== $section['top_padding'] ) ? 'padding-top:' . absint( $section['top_padding'] ) . $top_padding_type . ';' : 'padding-top:' . $padding_top . 'px;';
|
||||
$bottom_padding = ( isset( $section['bottom_padding'] ) && '' !== $section['bottom_padding'] ) ? 'padding-bottom:' . absint( $section['bottom_padding'] ) . $bottom_padding_type . ';' : 'padding-bottom:' . $padding_bottom . 'px;';
|
||||
|
||||
// Outer container
|
||||
if ( '' !== $background_color || '' !== $background_image ) {
|
||||
$css .= '#' . $custom_id . '.generate-sections-container{' . $background_color . $background_image . '}';
|
||||
}
|
||||
|
||||
// Inner container
|
||||
if ( '' !== $top_padding || '' !== $bottom_padding || '' !== $text_color ) {
|
||||
$css .= '#' . $custom_id . ' .generate-sections-inside-container{' . $top_padding . $bottom_padding . $text_color . '}';
|
||||
}
|
||||
|
||||
// Link color
|
||||
if ( '' !== $link_color ) {
|
||||
$css .= '#' . $custom_id . ' a,#generate-section-' . $i . ' a:visited{' . $link_color . '}';
|
||||
}
|
||||
|
||||
// Link color hover
|
||||
if ( '' !== $link_color_hover ) {
|
||||
$css .= '#' . $custom_id . ' a:hover{' . $link_color_hover . '}';
|
||||
}
|
||||
|
||||
$mobile = generate_premium_get_media_query( 'mobile' );
|
||||
$css .= '@media ' . esc_attr( $mobile ) . ' {.generate-sections-inside-container {padding-left: ' . $mobile_padding_left . 'px;padding-right: ' . $mobile_padding_right . 'px;}}';
|
||||
endforeach;
|
||||
|
||||
// Build CSS
|
||||
wp_add_inline_style( 'generate-style', $css );
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_filter_admin_init' ) ) {
|
||||
add_action( 'admin_init', 'generate_sections_filter_admin_init' );
|
||||
/*
|
||||
* Recreate the default filters on the_content
|
||||
* this will make it much easier to output the meta content with proper/expected formatting
|
||||
*/
|
||||
function generate_sections_filter_admin_init() {
|
||||
if ( user_can_richedit() ) {
|
||||
add_filter( 'generate_section_content', 'convert_smilies' );
|
||||
add_filter( 'generate_section_content', 'convert_chars' );
|
||||
add_filter( 'generate_section_content', 'wpautop' );
|
||||
add_filter( 'generate_section_content', 'shortcode_unautop' );
|
||||
add_filter( 'generate_section_content', 'prepend_attachment' );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_filter' ) ) {
|
||||
add_action( 'init', 'generate_sections_filter' );
|
||||
/*
|
||||
* Recreate the default filters on the_content
|
||||
* this will make it much easier to output the meta content with proper/expected formatting
|
||||
*/
|
||||
function generate_sections_filter() {
|
||||
if ( is_admin() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
add_filter( 'generate_section_content', 'convert_smilies' );
|
||||
add_filter( 'generate_section_content', 'convert_chars' );
|
||||
add_filter( 'generate_section_content', 'wpautop' );
|
||||
add_filter( 'generate_section_content', 'shortcode_unautop' );
|
||||
add_filter( 'generate_section_content', 'prepend_attachment' );
|
||||
add_filter( 'generate_section_content', 'do_shortcode');
|
||||
|
||||
add_filter( 'generate_the_section_content', array($GLOBALS['wp_embed'], 'autoembed'), 9 );
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_save_content' ) ) {
|
||||
add_action( 'save_post', 'generate_sections_save_content', 99, 4 );
|
||||
/*
|
||||
* When we save our post, grab all of the section content and save it as regular content.
|
||||
*
|
||||
* This will prevent content loss/theme lock.
|
||||
*/
|
||||
function generate_sections_save_content( $post_id, $post ) {
|
||||
|
||||
if ( ! isset( $_POST['_generate_sections_nonce'] ) || ! wp_verify_nonce( $_POST['_generate_sections_nonce'], 'generate_sections_nonce' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! current_user_can('edit_post', $post_id ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// See if we're using sections
|
||||
$use_sections = get_post_meta( $post_id, '_generate_use_sections', true);
|
||||
|
||||
// Make sure use sections exists and that we're not saving a revision
|
||||
if ( ! isset( $use_sections['use_sections'] ) || wp_is_post_revision( $post_id ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Return if sections are set to false
|
||||
if ( 'true' !== $use_sections['use_sections'] ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get our sections
|
||||
$sections = get_post_meta( $post_id, '_generate_sections', true );
|
||||
|
||||
// Return if there's nothing in our sections
|
||||
if ( ! isset( $sections ) || '' == $sections ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Prevent infinite loop
|
||||
remove_action( 'save_post', 'generate_sections_save_content', 99, 4 );
|
||||
|
||||
// Let's do some stuff if sections aren't empty
|
||||
if ( '' !== $sections ) {
|
||||
// Set up our content variable
|
||||
$content = '';
|
||||
|
||||
// Loop through each section and add our content to the content variable
|
||||
foreach ( $sections['sections'] as $section ) {
|
||||
$content .= ( isset( $section['content'] ) && '' !== $section['content'] ) ? $section['content'] . "\n\n" : '';
|
||||
}
|
||||
|
||||
// Now update our post if we have section content
|
||||
if ( '' !== $content ) {
|
||||
$post->post_content = $content;
|
||||
wp_update_post( $post, true );
|
||||
}
|
||||
}
|
||||
|
||||
// Re-hook the save_post action
|
||||
add_action('save_post', 'generate_sections_save_content', 99, 4);
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
function generate_sections_parallax_element( selector, context ) {
|
||||
context = context || document;
|
||||
var elements = context.querySelectorAll( selector );
|
||||
return Array.prototype.slice.call( elements );
|
||||
}
|
||||
|
||||
window.addEventListener( "scroll", function() {
|
||||
var scrolledHeight= window.pageYOffset;
|
||||
generate_sections_parallax_element( ".generate-sections-container.enable-parallax" ).forEach( function( el, index, array ) {
|
||||
var limit = el.offsetTop + el.offsetHeight;
|
||||
if( scrolledHeight > el.offsetTop && scrolledHeight <= limit ) {
|
||||
el.style.backgroundPositionY = ( scrolledHeight - el.offsetTop ) / el.getAttribute( 'data-speed' ) + "px";
|
||||
} else {
|
||||
el.style.backgroundPositionY = "0";
|
||||
}
|
||||
});
|
||||
});
|
@ -1 +0,0 @@
|
||||
function generate_sections_parallax_element(e,t){var o=(t=t||document).querySelectorAll(e);return Array.prototype.slice.call(o)}window.addEventListener("scroll",function(){var e=window.pageYOffset;generate_sections_parallax_element(".generate-sections-container.enable-parallax").forEach(function(t,o,n){var a=t.offsetTop+t.offsetHeight;e>t.offsetTop&&e<=a?t.style.backgroundPositionY=(e-t.offsetTop)/t.getAttribute("data-speed")+"px":t.style.backgroundPositionY="0"})});
|
@ -1,348 +0,0 @@
|
||||
body {
|
||||
-webkit-backface-visibility: hidden;
|
||||
}
|
||||
#_generate_sections_metabox {
|
||||
opacity: 0;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#_generate_use_sections_metabox {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.generate_sections_control {
|
||||
padding-top: 8px;
|
||||
}
|
||||
|
||||
.generate-sections-enabled #postdivrich {
|
||||
opacity: 0;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.generate-sections-enabled #_generate_sections_metabox {
|
||||
opacity: 1;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.generate_sections_control .warning {
|
||||
color: red;
|
||||
}
|
||||
.generate_sections_control .dodelete-repeating_textareas {
|
||||
float: right;
|
||||
}
|
||||
.generate_sections_control .section {
|
||||
border: 1px solid #DFDFDF;
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
||||
margin: 6px 0px 8px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
background: white;
|
||||
}
|
||||
.generate_sections_control .section .section-title {
|
||||
font-size: 14px;
|
||||
padding: 0 0 0 15px;
|
||||
margin: 0;
|
||||
max-height: 50px;
|
||||
}
|
||||
.generate_sections_control .section .section-title > span {
|
||||
cursor: pointer;
|
||||
overflow:hidden;
|
||||
display:block;
|
||||
max-height:50px;
|
||||
line-height:50px;
|
||||
width:100%;
|
||||
}
|
||||
.generate_sections_control .section .section-controls {
|
||||
position: absolute;
|
||||
top:0;
|
||||
right:0;
|
||||
text-align: right;
|
||||
}
|
||||
.rtl .generate_sections_control .section .section-controls {
|
||||
right:auto;left:0;
|
||||
}
|
||||
.generate_sections_control .section .section-controls a {
|
||||
color: #aaa;
|
||||
display:block;
|
||||
float:left;
|
||||
border-left: 1px solid #efefef;
|
||||
}
|
||||
.generate_sections_control .section .section-controls a:hover {
|
||||
color: #777;
|
||||
}
|
||||
.generate_sections_control .section textarea {
|
||||
display: none;
|
||||
}
|
||||
.generate_sections_control .section h3 {
|
||||
color: #999;
|
||||
font-size: 1em;
|
||||
margin: 15px 6px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.generate_sections_control .section .ui-sortable-placeholder {
|
||||
line-height: 1.4em;
|
||||
border: 3px dashed #DDD;
|
||||
}
|
||||
.generate-sections-modal .media-menu-item {
|
||||
cursor: pointer;
|
||||
}
|
||||
.custom-classes input {
|
||||
width:100%;
|
||||
}
|
||||
.js .generate_sections_control .move-section {
|
||||
cursor: move;
|
||||
}
|
||||
.generate-sections-modal p {
|
||||
margin-top:5px;
|
||||
}
|
||||
#_generate_sections_metabox {
|
||||
box-shadow: 0 0 0 transparent;
|
||||
}
|
||||
.section-controls a {
|
||||
line-height:50px;
|
||||
padding: 0 15px;
|
||||
width:initial;
|
||||
height:initial;
|
||||
}
|
||||
|
||||
.generate_sections_control .section .section-controls a.delete-section:hover {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.generate_sections_control p {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
textarea#generate-sections-editor {
|
||||
border:0;
|
||||
}
|
||||
|
||||
#generate-sections-editor_ifr {
|
||||
min-height: 400px;
|
||||
}
|
||||
|
||||
a#generate-add-section, a#generate-delete-sections {
|
||||
height: auto;
|
||||
line-height: inherit;
|
||||
padding: 10px 20px;
|
||||
}
|
||||
|
||||
#wp-generate-sections-editor-wrap.old-sections-js .wp-media-buttons > * {
|
||||
display:none;
|
||||
}
|
||||
|
||||
#wp-generate-sections-editor-wrap.old-sections-js .wp-media-buttons > .generate-sections-add-media,
|
||||
#wp-generate-sections-editor-wrap.old-sections-js .wp-media-buttons > .su-generator-button,
|
||||
#wp-generate-sections-editor-wrap.old-sections-js .wp-media-buttons > .envira-gallery-choose-gallery,
|
||||
#wp-generate-sections-editor-wrap.old-sections-js .wp-media-buttons > .gridable-insert-row-button {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#custom-media-buttons > * {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#custom-media-buttons > .insert-media,
|
||||
#custom-media-buttons > .su-generator-button,
|
||||
#custom-media-buttons > .envira-gallery-choose-gallery,
|
||||
#custom-media-buttons > .gridable-insert-row-button,
|
||||
#custom-media-buttons > .bfa-iconpicker {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#_generate_sections_metabox {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
}
|
||||
#_generate_sections_metabox > .handlediv, #_generate_sections_metabox > .hndle {
|
||||
display: none;
|
||||
}
|
||||
#_generate_sections_metabox > .inside {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
body.wp-admin .grid-container {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.generate-sections-modal h3 {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
input#custom_classes,
|
||||
input#custom_id {
|
||||
width: 100%;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
.box-type select,
|
||||
.inner-box-type select,
|
||||
.parallax-effect select,
|
||||
.top-padding input,
|
||||
.bottom-padding input {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.send-to-editor {
|
||||
display: inline-block;
|
||||
margin-top: 15px !important;
|
||||
}
|
||||
|
||||
#generate-sections-modal-dialog .media-frame-title .dashicons-arrow-down {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.gs-grid-container {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-width: 100%;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.gs-grid-parent {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.gs-grid-container:before,
|
||||
.gs-grid-container:after {
|
||||
content: ".";
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 769px) {
|
||||
.gs-grid-50:before,
|
||||
.gs-grid-50:after,
|
||||
.gs-grid-33:before,
|
||||
.gs-grid-33:after,
|
||||
.gs-grid-25:before,
|
||||
.gs-grid-25:after
|
||||
.gs-grid-20:before,
|
||||
.gs-grid-20:after
|
||||
.gs-grid-12:before,
|
||||
.gs-grid-12:after {
|
||||
content: ".";
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
clear: both;
|
||||
}
|
||||
.gs-grid-50,
|
||||
.gs-grid-33,
|
||||
.gs-grid-25,
|
||||
.gs-grid-20,
|
||||
.gs-grid-12 {
|
||||
box-sizing: border-box;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
.gs-grid-50 {
|
||||
width: 50% !important;
|
||||
float: left;
|
||||
}
|
||||
.gs-grid-33 {
|
||||
width: 33.333% !important;
|
||||
float: left;
|
||||
}
|
||||
.gs-grid-25 {
|
||||
width: 25% !important;
|
||||
float: left;
|
||||
}
|
||||
.gs-grid-20 {
|
||||
width: 20% !important;
|
||||
float: left;
|
||||
}
|
||||
.gs-grid-12 {
|
||||
width: 12.5% !important;
|
||||
float: left;
|
||||
}
|
||||
.top-border {
|
||||
border-top: 1px solid #EFEFEF;
|
||||
}
|
||||
.bottom-border {
|
||||
border-bottom: 1px solid #EFEFEF;
|
||||
}
|
||||
.border-right {
|
||||
border-right: 1px solid #EFEFEF;
|
||||
}
|
||||
.border-left {
|
||||
border-left: 1px solid #EFEFEF;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.gs-grid-50, .gs-grid-33, .gs-grid-25, .gs-grid-12 {
|
||||
width: 100% !important;
|
||||
}
|
||||
.generate_sections_control .section .section-controls {
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 500px) {
|
||||
.generate_sections_control .section .section-controls a:first-child {
|
||||
border-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
#generate-sections-modal-dialog .media-modal-close {
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
}
|
||||
/*
|
||||
The styles below were ripped from the Media Modal in WordPress 3.5
|
||||
~~ Thanks for building a beautiful Modal UI ( that I could steal )
|
||||
*/
|
||||
body.generate-modal-open { overflow: hidden; }
|
||||
|
||||
.generate-sections-modal .media-modal { z-index: 65535; }
|
||||
.generate-sections-modal .media-modal-backdrop { z-index: 65534; }
|
||||
.generate-sections-modal .media-frame-content .panel { display: none; padding: 2em; }
|
||||
.generate-sections-modal .media-frame-content .panel.active { display: block; }
|
||||
.generate-sections-modal .media-frame-content .panel .section-title input { width:100%;padding:10px; }
|
||||
.generate-sections-modal .media-frame-content .panel .html-active .mce-panel { display: none; }
|
||||
.generate-sections-modal .media-frame-content .panel .html-active .wp-editor-area { display: block !important; min-height: 300px; }
|
||||
.generate-sections-modal .media-frame-content .panel .mce-wp-dfw, .generate-sections-modal .media-frame-content .panel .qt-dfw { display: none; }
|
||||
.generate-sections-modal .media-frame-content .panel .generate-sections-remove-image { display: none; }
|
||||
|
||||
textarea.no-rich-edit {
|
||||
width: 100%;
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.wp-picker-container .wp-color-result.button {
|
||||
height: 24px;
|
||||
margin: 0 6px 6px 0px;
|
||||
padding: 0 0 0 30px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.wp-color-result:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.wp-color-result-text {
|
||||
background: #f7f7f7;
|
||||
border-radius: 0 2px 2px 0;
|
||||
border-left: 1px solid #ccc;
|
||||
color: #555;
|
||||
display: block;
|
||||
line-height: 22px;
|
||||
padding: 0 6px;
|
||||
text-align: center;
|
||||
}
|
@ -1,92 +0,0 @@
|
||||
.lcs_wrap {
|
||||
display: inline-block;
|
||||
direction: ltr;
|
||||
height: 28px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.lcs_wrap input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.lcs_switch {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 73px;
|
||||
height: 28px;
|
||||
border-radius: 30px;
|
||||
background: #ddd;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
transition: all .2s ease-in-out;
|
||||
}
|
||||
.lcs_cursor {
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
border-radius: 100%;
|
||||
background: #fff;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2), 0 3px 4px 0 rgba(0, 0, 0, 0.1);
|
||||
z-index: 10;
|
||||
transition: all .2s linear;
|
||||
}
|
||||
.lcs_label {
|
||||
font-family: "Trebuchet MS", Helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
letter-spacing: 1px;
|
||||
line-height: 18px;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
position: absolute;
|
||||
width: 33px;
|
||||
top: 5px;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
opacity: 0;
|
||||
transition: all .2s ease-in-out .1s;
|
||||
}
|
||||
.lcs_label.lcs_label_on {
|
||||
left: -70px;
|
||||
z-index: 6;
|
||||
}
|
||||
.lcs_label.lcs_label_off {
|
||||
right: -70px;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
|
||||
/* on */
|
||||
.lcs_switch.lcs_on {
|
||||
background: #75b936;
|
||||
box-shadow: 0 0 2px #579022 inset;
|
||||
}
|
||||
.lcs_switch.lcs_on .lcs_cursor {
|
||||
left: 48px;
|
||||
}
|
||||
.lcs_switch.lcs_on .lcs_label_on {
|
||||
left: 10px;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
|
||||
/* off */
|
||||
.lcs_switch.lcs_off {
|
||||
background: #b2b2b2;
|
||||
box-shadow: 0px 0px 2px #a4a4a4 inset;
|
||||
}
|
||||
.lcs_switch.lcs_off .lcs_cursor {
|
||||
left: 3px;
|
||||
}
|
||||
.lcs_switch.lcs_off .lcs_label_off {
|
||||
right: 10px;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
|
||||
/* disabled */
|
||||
.lcs_switch.lcs_disabled {
|
||||
opacity: 0.65;
|
||||
filter: alpha(opacity=65);
|
||||
cursor: default;
|
||||
}
|
@ -1,835 +0,0 @@
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Generate Sections Metabox
|
||||
/*
|
||||
/* © Kathy Darling http://www.kathyisawesome.com
|
||||
/* 2016-07-19. */
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @type {Object} JavaScript namespace for our application.
|
||||
*/
|
||||
var Generate_Sections = {
|
||||
backbone_modal: {
|
||||
__instance: undefined
|
||||
}
|
||||
};
|
||||
|
||||
(function($, Generate_Sections) {
|
||||
|
||||
|
||||
// Model
|
||||
Generate_Sections.Section = Backbone.Model.extend({
|
||||
defaults: {
|
||||
"title": "",
|
||||
"box_type": "",
|
||||
"inner_box_type": "",
|
||||
"custom_classes": "",
|
||||
"custom_id": "",
|
||||
"top_padding": "",
|
||||
"bottom_padding": "",
|
||||
"top_padding_unit": "",
|
||||
"bottom_padding_unit": "",
|
||||
"background_color": "",
|
||||
"background_image": "",
|
||||
"background_image_preview": "",
|
||||
"parallax_effect": "",
|
||||
"background_color_overlay": "",
|
||||
"text_color": "",
|
||||
"link_color": "",
|
||||
"link_color_hover": "",
|
||||
"content": ""
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Collection
|
||||
Generate_Sections.SectionsCollection = Backbone.Collection.extend({
|
||||
model: Generate_Sections.Section,
|
||||
el: "#generate_sections_container",
|
||||
comparator: function(model) {
|
||||
return model.get('index');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Primary Modal Application Class
|
||||
*/
|
||||
Generate_Sections.backbone_modal.Application = Backbone.View.extend({
|
||||
|
||||
attributes: {
|
||||
id: "generate-sections-modal-dialog",
|
||||
class: "generate-sections-modal",
|
||||
role: "dialog"
|
||||
},
|
||||
|
||||
template: wp.template("generate-sections-modal-window"),
|
||||
|
||||
mediaUploader: null,
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* tinyMCE settings
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
tmc_settings: {},
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* tinyMCE defaults
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
tmc_defaults: {
|
||||
theme: "modern",
|
||||
menubar: false,
|
||||
wpautop: true,
|
||||
indent: false,
|
||||
toolbar1: "bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,link,unlink,fullscreen",
|
||||
plugins: "fullscreen,image,wordpress,wpeditimage,wplink",
|
||||
max_height: 500
|
||||
},
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* quicktags settings
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
qt_settings: {},
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* quicktags defaults
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
qt_defaults: {
|
||||
buttons: "strong,em,link,block,del,ins,img,ul,ol,li,code,more,close,fullscreen"
|
||||
},
|
||||
|
||||
model: Generate_Sections.Section,
|
||||
|
||||
events: {
|
||||
"click .media-modal-backdrop, .media-modal-close, .media-button-close": "closeModal",
|
||||
"click .media-button-insert": "saveModal",
|
||||
"click .media-menu-item": "switchTab",
|
||||
"keydown": "keydown",
|
||||
"click .generate-sections-upload-button": "openMediaUploader",
|
||||
"click .generate-sections-remove-image": "removeImage",
|
||||
"click div.media-frame-title h1": "toggleMenu"
|
||||
},
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Simple object to store any UI elements we need to use over the life of the application.
|
||||
*/
|
||||
ui: {
|
||||
nav: undefined,
|
||||
content: undefined
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates the Template object and triggers load.
|
||||
*/
|
||||
initialize: function() {
|
||||
_.bindAll(this, "render", "closeModal", "saveModal", "switchTab");
|
||||
|
||||
this.focusManager = new wp.media.view.FocusManager({
|
||||
el: this.el
|
||||
});
|
||||
|
||||
this.changeInsertText();
|
||||
this.tinyMCEsettings();
|
||||
this.render();
|
||||
},
|
||||
|
||||
/**
|
||||
* switch the insert button text to "insert section"
|
||||
*/
|
||||
changeInsertText: function(restore) {
|
||||
|
||||
var restore = typeof restore !== 'undefined' && restore == true ? true : false;
|
||||
|
||||
if (restore == false && typeof(wp.media.view.l10n.insertIntoPost) !== "undefined") {
|
||||
this.insertIntoPost = wp.media.view.l10n.insertIntoPost;
|
||||
wp.media.view.l10n.insertIntoPost = generate_sections_metabox_i18n.insert_into_section;
|
||||
// switch the insert button text back
|
||||
} else if (restore == true && typeof(this.insertIntoPost) !== "undefined") {
|
||||
wp.media.view.l10n.insertIntoPost = this.insertIntoPost;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Merge the default TinyMCE settings
|
||||
*/
|
||||
tinyMCEsettings: function() {
|
||||
// get the #content"s tinyMCE settings or use default
|
||||
var init_settings = typeof tinyMCEPreInit == "object" && "mceInit" in tinyMCEPreInit && "content" in tinyMCEPreInit.mceInit ? tinyMCEPreInit.mceInit.content : this.tmc_defaults;
|
||||
|
||||
// get the #content"s quicktags settings or use default
|
||||
var qt_settings = typeof tinyMCEPreInit == "object" && "qtInit" in tinyMCEPreInit && "content" in tinyMCEPreInit.qtInit ? tinyMCEPreInit.qtInit.content : this.qt_defaults;
|
||||
|
||||
var _this = this;
|
||||
var custom_settings = {
|
||||
selector: "#generate-sections-editor",
|
||||
wp_autoresize_on: false,
|
||||
cache_suffix: "",
|
||||
min_height: 400,
|
||||
}
|
||||
|
||||
// merge our settings with WordPress" and store for later use
|
||||
this.tmc_settings = $.extend({}, init_settings, custom_settings);
|
||||
|
||||
this.qt_settings = $.extend({}, qt_settings, {
|
||||
id: "generate-sections-editor"
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Assembles the UI from loaded template.
|
||||
* @internal Obviously, if the template fail to load, our modal never launches.
|
||||
*/
|
||||
render: function() {
|
||||
|
||||
"use strict";
|
||||
|
||||
// Build the base window and backdrop, attaching them to the $el.
|
||||
// Setting the tab index allows us to capture focus and redirect it in Application.preserveFocus
|
||||
this.$el.attr("tabindex", "0")
|
||||
.html(this.template);
|
||||
|
||||
// Handle any attempt to move focus out of the modal.
|
||||
//jQuery(document).on("focusin", this.preserveFocus);
|
||||
|
||||
// set overflow to "hidden" on the body so that it ignores any scroll events while the modal is active
|
||||
// and append the modal to the body.
|
||||
jQuery("body").addClass("generate-modal-open").prepend(this.$el);
|
||||
|
||||
// aria hide the background
|
||||
jQuery("#wpwrap").attr("aria-hidden", "true");
|
||||
|
||||
this.renderContent();
|
||||
|
||||
this.renderPreview();
|
||||
|
||||
this.selected();
|
||||
this.colorPicker();
|
||||
this.startTinyMCE();
|
||||
|
||||
// Set focus on the modal to prevent accidental actions in the underlying page
|
||||
this.$el.focus();
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
/**
|
||||
* Make the menu mobile-friendly
|
||||
*/
|
||||
toggleMenu: function() {
|
||||
this.$el.find('.media-menu').toggleClass('visible');
|
||||
},
|
||||
|
||||
/**
|
||||
* Create the nav tabs & panels
|
||||
*/
|
||||
renderContent: function() {
|
||||
|
||||
var model = this.model;
|
||||
|
||||
var menu_item = wp.template("generate-sections-modal-menu-item");
|
||||
|
||||
// Save a reference to the navigation bar"s unordered list and populate it with items.
|
||||
this.ui.nav = this.$el.find(".media-menu");
|
||||
|
||||
// reference to content area
|
||||
this.ui.panels = this.$el.find(".media-frame-content");
|
||||
|
||||
// loop through the tabs
|
||||
if (generate_sections_metabox_i18n.tabs.length) {
|
||||
|
||||
// for...of is nicer, but not supported by minify, so stay with for...in for now
|
||||
for (var tab in generate_sections_metabox_i18n.tabs) {
|
||||
|
||||
if (generate_sections_metabox_i18n.tabs.hasOwnProperty(tab)) {
|
||||
|
||||
tab = generate_sections_metabox_i18n.tabs[tab];
|
||||
|
||||
var $new_tab = $(menu_item({
|
||||
target: tab.target,
|
||||
name: tab.title
|
||||
}));
|
||||
|
||||
var panel = wp.template("generate-sections-edit-" + tab.target);
|
||||
|
||||
var $new_panel = $(panel(model.toJSON()));
|
||||
|
||||
if (tab.active == "true") {
|
||||
$new_tab.addClass("active");
|
||||
$new_panel.addClass("active");
|
||||
}
|
||||
|
||||
jQuery( 'body' ).on( 'generate_section_show_settings', function() {
|
||||
jQuery( '.generate-sections-modal .media-menu-item' ).removeClass('active');
|
||||
jQuery( '.generate-sections-modal .panel' ).removeClass('active');
|
||||
jQuery( '.generate-section-item-style' ).addClass('active');
|
||||
jQuery( '.generate-section-settings' ).addClass('active');
|
||||
});
|
||||
|
||||
this.ui.nav.append($new_tab);
|
||||
this.ui.panels.append($new_panel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Render the background image preview
|
||||
*/
|
||||
renderPreview: function(image_id) {
|
||||
|
||||
var image_id = typeof image_id !== 'undefined' ? image_id : this.model.get("background_image");
|
||||
|
||||
var $preview = $("#generate-section-image-preview");
|
||||
$preview.children().remove();
|
||||
|
||||
if (image_id > 0) {
|
||||
this.background = new wp.media.model.Attachment.get(image_id);
|
||||
|
||||
this.background.fetch({
|
||||
success: function(att) {
|
||||
if (_.contains(['png', 'jpg', 'gif', 'jpeg'], att.get('subtype'))) {
|
||||
$("<img/>").attr("src", att.attributes.sizes.thumbnail.url).appendTo($preview);
|
||||
$preview.next().find(".generate-sections-remove-image").show();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Set the default option for the select boxes
|
||||
*/
|
||||
selected: function() {
|
||||
|
||||
var _this = this;
|
||||
|
||||
this.$el.find("select").each(function(index, select) {
|
||||
|
||||
var attribute = jQuery(select).attr("name");
|
||||
var selected = _this.model.get(attribute);
|
||||
jQuery(select).val(selected);
|
||||
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Start the colorpicker
|
||||
*/
|
||||
colorPicker: function() {
|
||||
this.$el.find(".generate-sections-color").wpColorPicker();
|
||||
},
|
||||
|
||||
/**
|
||||
* Start TinyMCE on the textarea
|
||||
*/
|
||||
startTinyMCE: function() {
|
||||
|
||||
// set the default editor
|
||||
this.ui.panels.find("#wp-generate-sections-editor-wrap").addClass(generate_sections_metabox_i18n.default_editor);
|
||||
|
||||
// remove tool buttons if richedit disabled
|
||||
if (!generate_sections_metabox_i18n.user_can_richedit) {
|
||||
this.ui.panels.find(".wp-editor-tabs").remove();
|
||||
}
|
||||
|
||||
// add our copy to the collection in the tinyMCEPreInit object because switch editors
|
||||
if (typeof tinyMCEPreInit == 'object') {
|
||||
tinyMCEPreInit.mceInit["generate-sections-editor"] = this.tmc_settings;
|
||||
tinyMCEPreInit.qtInit["generate-sections-editor"] = this.qt_settings;
|
||||
tinyMCEPreInit.mceInit["generate-sections-editor"].wp_keep_scroll_position = false;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
var rich = (typeof tinyMCE != "undefined");
|
||||
|
||||
// turn on the quicktags editor
|
||||
quicktags(this.qt_settings);
|
||||
|
||||
// attempt to fix problem of quicktags toolbar with no buttons
|
||||
QTags._buttonsInit();
|
||||
|
||||
if (rich !== false) {
|
||||
// turn on tinyMCE
|
||||
tinyMCE.init(this.tmc_settings);
|
||||
}
|
||||
|
||||
} catch (e) {}
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Launch Media Uploader
|
||||
*/
|
||||
openMediaUploader: function(e) {
|
||||
|
||||
var _this = this;
|
||||
|
||||
$input = jQuery(e.currentTarget).prev("#generate-sections-background-image");
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
// If the uploader object has already been created, reopen the dialog
|
||||
if (this.mediaUploader) {
|
||||
this.mediaUploader.open();
|
||||
return;
|
||||
}
|
||||
// Extend the wp.media object
|
||||
this.mediaUploader = wp.media.frames.file_frame = wp.media({
|
||||
title: generate_sections_metabox_i18n.media_library_title,
|
||||
button: {
|
||||
text: generate_sections_metabox_i18n.media_library_button
|
||||
},
|
||||
multiple: false
|
||||
});
|
||||
|
||||
|
||||
// When a file is selected, grab the URL and set it as the text field"s value
|
||||
this.mediaUploader.on("select", function() {
|
||||
|
||||
attachment = _this.mediaUploader.state().get("selection").first().toJSON();
|
||||
|
||||
$input.val(attachment.id);
|
||||
|
||||
_this.renderPreview(attachment.id);
|
||||
});
|
||||
// Open the uploader dialog
|
||||
this.mediaUploader.open();
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Remove the background image
|
||||
*/
|
||||
removeImage: function(e) {
|
||||
e.preventDefault();
|
||||
$("#generate-section-image-preview").children().remove();
|
||||
$("#generate-section-image-preview").next().find(".generate-sections-remove-image").hide();
|
||||
$("#generate-sections-background-image").val("");
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Closes the modal and cleans up after the instance.
|
||||
* @param e {object} A jQuery-normalized event object.
|
||||
*/
|
||||
closeModal: function(e) {
|
||||
"use strict";
|
||||
|
||||
e.preventDefault();
|
||||
this.undelegateEvents();
|
||||
jQuery(document).off("focusin");
|
||||
jQuery("body").removeClass("generate-modal-open");
|
||||
jQuery("body").removeClass("generate-section-content");
|
||||
|
||||
// remove restricted media modal tab focus once it's closed
|
||||
this.$el.undelegate('keydown');
|
||||
|
||||
// remove the tinymce editor
|
||||
// this needs to be called before the modal is closed or it will fail in Firefox (that was fun to figure out...)
|
||||
if (typeof tinyMCE != "undefined") {
|
||||
tinymce.EditorManager.execCommand("mceRemoveEditor", true, "generate-sections-editor");
|
||||
}
|
||||
|
||||
// remove modal and unset instances
|
||||
this.remove();
|
||||
Generate_Sections.backbone_modal.__instance = undefined;
|
||||
this.mediaUploader = null;
|
||||
Generate_Sections.modalOpen = null;
|
||||
|
||||
// switch the insert button text back
|
||||
this.changeInsertText(true);
|
||||
|
||||
// send focus back to where it was prior to modal open
|
||||
Generate_Sections.lastFocus.focus();
|
||||
|
||||
// aria unhide the background
|
||||
jQuery("#wpwrap").attr("aria-hidden", "false");
|
||||
|
||||
// Fix bug where the window scrolls down 50px on close
|
||||
var topDistance = jQuery("body").offset().top;
|
||||
if ( topDistance >= jQuery("body").scrollTop() ) {
|
||||
jQuery("body").scrollTop(0);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Responds to the btn-ok.click event
|
||||
* @param e {object} A jQuery-normalized event object.
|
||||
* @todo You should make this your own.
|
||||
*/
|
||||
saveModal: function(e) {
|
||||
"use strict";
|
||||
|
||||
this.model.get("index");
|
||||
|
||||
var model = this.model;
|
||||
|
||||
// send the tinymce content to the textarea
|
||||
if (typeof tinyMCE != "undefined") {
|
||||
tinymce.triggerSave();
|
||||
}
|
||||
|
||||
var $inputs = this.ui.panels.find("input, select, textarea");
|
||||
|
||||
$inputs.each(function(index, input) {
|
||||
|
||||
var name = $(input).attr("name");
|
||||
|
||||
if (model.attributes.hasOwnProperty(name)) {
|
||||
var value = $(input).val();
|
||||
model.set(name, value);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
this.closeModal(e);
|
||||
},
|
||||
|
||||
/**
|
||||
* Handles tab clicks and switches to corresponding panel
|
||||
* @param e {object} A jQuery-normalized event object.
|
||||
*/
|
||||
switchTab: function(e) {
|
||||
"use strict";
|
||||
e.preventDefault();
|
||||
|
||||
// close lingering wp link windows
|
||||
if (typeof tinyMCE != "undefined" && 'style' == jQuery( e.currentTarget ).data( 'target' ) && this.ui.panels.find( '#wp-generate-sections-editor-wrap' ).hasClass( 'tmce-active' )) {
|
||||
tinyMCE.activeEditor.execCommand('wp_link_cancel');
|
||||
tinyMCE.activeEditor.execCommand('wp_media_cancel');
|
||||
}
|
||||
|
||||
this.ui.nav.children().removeClass("active");
|
||||
this.ui.panels.children().removeClass("active");
|
||||
|
||||
var target = jQuery(e.currentTarget).addClass("active").data("target");
|
||||
|
||||
this.ui.panels.find("div[data-id=" + target + "]").addClass("active");
|
||||
},
|
||||
|
||||
/**
|
||||
* close on keyboard shortcuts
|
||||
* @param {Object} event
|
||||
*/
|
||||
keydown: function(e) {
|
||||
// Close the modal when escape is pressed.
|
||||
if (27 === e.which && this.$el.is(':visible')) {
|
||||
this.closeModal(e);
|
||||
e.stopImmediatePropagation();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
// Singular View
|
||||
Generate_Sections.sectionView = Backbone.View.extend({
|
||||
|
||||
model: Generate_Sections.Section,
|
||||
tagName: 'div',
|
||||
|
||||
initialize: function() {
|
||||
// re-render on all changes EXCEPT index
|
||||
this.listenTo(this.model, "change", this.maybeRender);
|
||||
},
|
||||
|
||||
attributes: {
|
||||
class: "ui-state-default section"
|
||||
},
|
||||
|
||||
// Get the template from the DOM
|
||||
template: wp.template("generate-sections-section"),
|
||||
|
||||
events: {
|
||||
'click .edit-section': 'editSection',
|
||||
'click .section-title > span': 'editSection',
|
||||
'click .delete-section': 'removeSection',
|
||||
'click .toggle-section': 'toggleSection',
|
||||
'reorder': 'reorder',
|
||||
},
|
||||
|
||||
maybeRender: function(e) {
|
||||
if (this.model.hasChanged('index')) return;
|
||||
this.render();
|
||||
},
|
||||
|
||||
// Render the single model - include an index.
|
||||
render: function() {
|
||||
this.model.set('index', this.model.collection.indexOf(this.model));
|
||||
this.$el.html(this.template(this.model.toJSON()));
|
||||
|
||||
if (!this.model.get('title')) {
|
||||
this.$el.find('h3.section-title > span').text(generate_sections_metabox_i18n.default_title);
|
||||
}
|
||||
this.$el.find('textarea').val(JSON.stringify(this.model));
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
|
||||
// launch the edit modal
|
||||
editSection: function(e) {
|
||||
|
||||
// stash the current focus
|
||||
Generate_Sections.lastFocus = document.activeElement;
|
||||
Generate_Sections.modalOpen = true;
|
||||
|
||||
e.preventDefault();
|
||||
if (Generate_Sections.backbone_modal.__instance === undefined) {
|
||||
Generate_Sections.backbone_modal.__instance = new Generate_Sections.backbone_modal.Application({
|
||||
model: this.model
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
// reorder after sort
|
||||
reorder: function(event, index) {
|
||||
this.$el.trigger('update-sort', [this.model, index]);
|
||||
},
|
||||
|
||||
// remove/destroy a model
|
||||
removeSection: function(e) {
|
||||
e.preventDefault();
|
||||
if (confirm(generate_sections_metabox_i18n.confirm)) {
|
||||
this.model.destroy();
|
||||
Generate_Sections.sectionList.render(); // manually calling instead of listening since listening interferes with sorting
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
// List View
|
||||
Generate_Sections.sectionListView = Backbone.View.extend({
|
||||
|
||||
el: "#generate_sections_container",
|
||||
events: {
|
||||
'update-sort': 'updateSort',
|
||||
// 'add-section': 'addOne'
|
||||
},
|
||||
|
||||
// callback for clone button
|
||||
addSection: function(model) {
|
||||
this.collection.add(model);
|
||||
this.addOne(model);
|
||||
},
|
||||
|
||||
addOne: function(model) {
|
||||
var view = new Generate_Sections.sectionView({
|
||||
model: model
|
||||
});
|
||||
this.$el.append(view.render().el);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
this.$el.children().remove();
|
||||
this.collection.each(this.addOne, this);
|
||||
return this;
|
||||
},
|
||||
|
||||
updateSort: function(event, model, position) {
|
||||
this.collection.remove(model);
|
||||
|
||||
// renumber remaining models around missing model
|
||||
this.collection.each(function(model, index) {
|
||||
|
||||
var new_index = index;
|
||||
if (index >= position) {
|
||||
new_index += 1;
|
||||
}
|
||||
model.set('index', new_index);
|
||||
});
|
||||
|
||||
// set the index of the missing model
|
||||
model.set('index', position);
|
||||
|
||||
// add the model back to the collection
|
||||
this.collection.add(model, {
|
||||
at: position
|
||||
});
|
||||
|
||||
this.render();
|
||||
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
// The Buttons & Nonce
|
||||
Generate_Sections.ButtonControls = Backbone.View.extend({
|
||||
|
||||
attributes: {
|
||||
class: "generate_sections_buttons"
|
||||
},
|
||||
|
||||
tagName: 'p',
|
||||
|
||||
el: "#_generate_sections_metabox",
|
||||
|
||||
template: wp.template("generate-sections-buttons"),
|
||||
|
||||
// Attach events
|
||||
events: {
|
||||
"click .button-primary": "newSection",
|
||||
"click #generate-delete-sections": "clearAll",
|
||||
'click .edit-section': 'editSection',
|
||||
},
|
||||
|
||||
// create new
|
||||
newSection: function(e) {
|
||||
e.preventDefault();
|
||||
var newSection = new Generate_Sections.Section();
|
||||
Generate_Sections.sectionList.addSection(newSection);
|
||||
},
|
||||
|
||||
// clear all models
|
||||
clearAll: function(e) {
|
||||
e.preventDefault();
|
||||
if (confirm(generate_sections_metabox_i18n.confirm)) {
|
||||
Generate_Sections.sectionCollection.reset();
|
||||
Generate_Sections.sectionList.render();
|
||||
}
|
||||
},
|
||||
|
||||
render: function() {
|
||||
this.$el.find(".generate_sections_control").append(this.template);
|
||||
return this;
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
// init
|
||||
Generate_Sections.initApplication = function() {
|
||||
|
||||
// Create Collection From Existing Meta
|
||||
Generate_Sections.sectionCollection = new Generate_Sections.SectionsCollection(generate_sections_metabox_i18n.sections);
|
||||
|
||||
// Create the List View
|
||||
Generate_Sections.sectionList = new Generate_Sections.sectionListView({
|
||||
collection: Generate_Sections.sectionCollection
|
||||
});
|
||||
Generate_Sections.sectionList.render();
|
||||
|
||||
// Buttons
|
||||
Generate_Sections.Buttons = new Generate_Sections.ButtonControls({
|
||||
collection: Generate_Sections.sectionCollection
|
||||
});
|
||||
Generate_Sections.Buttons.render();
|
||||
|
||||
};
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Execute the above methods in the Generate_Sections object.
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
jQuery(document).ready(function($) {
|
||||
|
||||
Generate_Sections.initApplication();
|
||||
|
||||
$( '#generate_sections_container' ).sortable({
|
||||
axis: "y",
|
||||
opacity: 0.5,
|
||||
grid: [20, 10],
|
||||
tolerance: "pointer",
|
||||
handle: ".move-section",
|
||||
update: function(event, ui) {
|
||||
ui.item.trigger("reorder", ui.item.index());
|
||||
}
|
||||
} );
|
||||
|
||||
if ( $( '.use-sections-switch' ).is( ':checked' ) ) {
|
||||
setTimeout( function() {
|
||||
generateShowSections();
|
||||
}, 200 );
|
||||
} else {
|
||||
generateHideSections();
|
||||
}
|
||||
|
||||
$( '.use-sections-switch' ).on( 'change', function( e ) {
|
||||
var status = ( $(this).is( ':checked' ) ) ? 'checked' : 'unchecked';
|
||||
|
||||
if ( 'checked' == status ) {
|
||||
generateShowSections();
|
||||
} else if ( 'unchecked' == status ) {
|
||||
generateHideSections();
|
||||
}
|
||||
} );
|
||||
|
||||
function generateShowSections() {
|
||||
|
||||
// Hide send to editor button
|
||||
$('.send-to-editor').css('display', 'none');
|
||||
|
||||
// Hide the editor
|
||||
$('#postdivrich').css({
|
||||
'opacity': '0',
|
||||
'height': '0',
|
||||
'overflow': 'hidden'
|
||||
});
|
||||
|
||||
// Show the sections
|
||||
$('#_generate_sections_metabox').css({
|
||||
'opacity': '1',
|
||||
'height': 'auto'
|
||||
});
|
||||
|
||||
// Remove and add the default editor - this removes any visible toolbars etc..
|
||||
// We need to set a timeout for this to work
|
||||
// if (typeof tinyMCE != "undefined") {
|
||||
// tinyMCE.EditorManager.execCommand("mceRemoveEditor", true, "content");
|
||||
// $( '.use-sections-cover' ).css( 'z-index','10000' );
|
||||
// setTimeout('tinyMCE.EditorManager.execCommand("mceAddEditor", true, "content");', 1);
|
||||
// setTimeout('jQuery( ".use-sections-cover" ).css( "z-index","-1" );', 1000);
|
||||
// }
|
||||
|
||||
// Set a trigger
|
||||
$('body').trigger('generate_show_sections');
|
||||
|
||||
}
|
||||
|
||||
function generateHideSections() {
|
||||
|
||||
// Show send to editor button
|
||||
$('.send-to-editor').css('display', 'inline-block');
|
||||
|
||||
// Show the editor
|
||||
$('#postdivrich').css({
|
||||
'opacity': '1',
|
||||
'height': 'auto'
|
||||
});
|
||||
|
||||
// Hide the sections
|
||||
$('#_generate_sections_metabox').css({
|
||||
'opacity': '0',
|
||||
'height': '0',
|
||||
'overflow': 'hidden'
|
||||
});
|
||||
|
||||
$('body').trigger('generate_hide_sections');
|
||||
|
||||
}
|
||||
|
||||
$( document ).on( 'click', '.edit-section.edit-settings', function() {
|
||||
$( 'body' ).trigger( 'generate_section_show_settings' );
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
})(jQuery, Generate_Sections);
|
@ -1,858 +0,0 @@
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Generate Sections Metabox
|
||||
/*
|
||||
/* © Kathy Darling http://www.kathyisawesome.com
|
||||
/* 2016-07-19. */
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @type {Object} JavaScript namespace for our application.
|
||||
*/
|
||||
var Generate_Sections = {
|
||||
backbone_modal: {
|
||||
__instance: undefined
|
||||
}
|
||||
};
|
||||
|
||||
(function($, Generate_Sections) {
|
||||
|
||||
|
||||
// Model
|
||||
Generate_Sections.Section = Backbone.Model.extend({
|
||||
defaults: {
|
||||
"title": "",
|
||||
"box_type": "",
|
||||
"inner_box_type": "",
|
||||
"custom_classes": "",
|
||||
"custom_id": "",
|
||||
"top_padding": "",
|
||||
"bottom_padding": "",
|
||||
"top_padding_unit": "",
|
||||
"bottom_padding_unit": "",
|
||||
"background_color": "",
|
||||
"background_image": "",
|
||||
"background_image_preview": "",
|
||||
"parallax_effect": "",
|
||||
"background_color_overlay": "",
|
||||
"text_color": "",
|
||||
"link_color": "",
|
||||
"link_color_hover": "",
|
||||
"content": ""
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Collection
|
||||
Generate_Sections.SectionsCollection = Backbone.Collection.extend({
|
||||
model: Generate_Sections.Section,
|
||||
el: "#generate_sections_container",
|
||||
comparator: function(model) {
|
||||
return model.get('index');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Primary Modal Application Class
|
||||
*/
|
||||
Generate_Sections.backbone_modal.Application = Backbone.View.extend({
|
||||
|
||||
attributes: {
|
||||
id: "generate-sections-modal-dialog",
|
||||
class: "generate-sections-modal",
|
||||
role: "dialog"
|
||||
},
|
||||
|
||||
template: wp.template("generate-sections-modal-window"),
|
||||
|
||||
mediaUploader: null,
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* tinyMCE settings
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
tmc_settings: {},
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* tinyMCE defaults
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
tmc_defaults: {
|
||||
theme: "modern",
|
||||
menubar: false,
|
||||
wpautop: true,
|
||||
indent: false,
|
||||
toolbar1: "bold,italic,underline,blockquote,strikethrough,bullist,numlist,alignleft,aligncenter,alignright,undo,redo,link,unlink,fullscreen",
|
||||
plugins: "fullscreen,image,wordpress,wpeditimage,wplink",
|
||||
max_height: 500
|
||||
},
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* quicktags settings
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
qt_settings: {},
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* quicktags defaults
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
qt_defaults: {
|
||||
buttons: "strong,em,link,block,del,ins,img,ul,ol,li,code,more,close,fullscreen"
|
||||
},
|
||||
|
||||
model: Generate_Sections.Section,
|
||||
|
||||
events: {
|
||||
"click .media-modal-backdrop, .media-modal-close, .media-button-close": "closeModal",
|
||||
"click .media-button-insert": "saveModal",
|
||||
"click .media-menu-item": "switchTab",
|
||||
"keydown": "keydown",
|
||||
"click .generate-sections-upload-button": "openMediaUploader",
|
||||
"click .generate-sections-remove-image": "removeImage",
|
||||
"click div.media-frame-title h1": "toggleMenu"
|
||||
},
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Simple object to store any UI elements we need to use over the life of the application.
|
||||
*/
|
||||
ui: {
|
||||
nav: undefined,
|
||||
content: undefined
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates the Template object and triggers load.
|
||||
*/
|
||||
initialize: function() {
|
||||
_.bindAll(this, "render", "closeModal", "saveModal", "switchTab");
|
||||
|
||||
this.focusManager = new wp.media.view.FocusManager({
|
||||
el: this.el
|
||||
});
|
||||
|
||||
this.changeInsertText();
|
||||
//this.tinyMCEsettings();
|
||||
this.render();
|
||||
},
|
||||
|
||||
/**
|
||||
* switch the insert button text to "insert section"
|
||||
*/
|
||||
changeInsertText: function(restore) {
|
||||
|
||||
var restore = typeof restore !== 'undefined' && restore == true ? true : false;
|
||||
|
||||
if (restore == false && typeof(wp.media.view.l10n.insertIntoPost) !== "undefined") {
|
||||
this.insertIntoPost = wp.media.view.l10n.insertIntoPost;
|
||||
wp.media.view.l10n.insertIntoPost = generate_sections_metabox_i18n.insert_into_section;
|
||||
// switch the insert button text back
|
||||
} else if (restore == true && typeof(this.insertIntoPost) !== "undefined") {
|
||||
wp.media.view.l10n.insertIntoPost = this.insertIntoPost;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Assembles the UI from loaded template.
|
||||
* @internal Obviously, if the template fail to load, our modal never launches.
|
||||
*/
|
||||
render: function() {
|
||||
|
||||
"use strict";
|
||||
|
||||
// Build the base window and backdrop, attaching them to the $el.
|
||||
// Setting the tab index allows us to capture focus and redirect it in Application.preserveFocus
|
||||
this.$el.attr("tabindex", "0").html(this.template);
|
||||
|
||||
// Handle any attempt to move focus out of the modal.
|
||||
//jQuery(document).on("focusin", this.preserveFocus);
|
||||
|
||||
// set overflow to "hidden" on the body so that it ignores any scroll events while the modal is active
|
||||
// and append the modal to the body.
|
||||
jQuery("body").addClass("generate-modal-open").prepend(this.$el);
|
||||
|
||||
// aria hide the background
|
||||
jQuery("#wpwrap").attr("aria-hidden", "true");
|
||||
|
||||
this.renderContent();
|
||||
|
||||
this.renderPreview();
|
||||
|
||||
this.selected();
|
||||
this.colorPicker();
|
||||
//this.startTinyMCE();
|
||||
this.launchEditor();
|
||||
|
||||
// Set focus on the modal to prevent accidental actions in the underlying page
|
||||
this.$el.focus();
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
launchEditor: function() {
|
||||
var id = this.ui.panels.find( ".generate-sections-editor-wrap" ).find( 'textarea' ).attr( 'id' ),
|
||||
customButtonsContainer = this.ui.panels.find( '.generate-sections-editor-wrap' ).find( '#custom-media-buttons' );
|
||||
|
||||
customButtonsContainer.find( '.insert-media' ).remove();
|
||||
var customButtons = customButtonsContainer.html();
|
||||
customButtonsContainer.remove();
|
||||
|
||||
var init_settings = true;
|
||||
|
||||
if ( typeof tinyMCEPreInit == "object" && "mceInit" in tinyMCEPreInit && "content" in tinyMCEPreInit.mceInit ) {
|
||||
init_settings = tinyMCEPreInit.mceInit.content;
|
||||
} else if ( typeof window.wpEditorL10n !== "undefined" ) {
|
||||
init_settings = window.wpEditorL10n.tinymce.settings;
|
||||
} else {
|
||||
init_settings = this.tmc_defaults;
|
||||
}
|
||||
|
||||
var thisPanel = this.ui.panels;
|
||||
|
||||
var custom_settings = {
|
||||
wp_autoresize_on: false,
|
||||
cache_suffix: "",
|
||||
min_height: 400,
|
||||
wp_keep_scroll_position: false,
|
||||
setup: function( editor ) {
|
||||
editor.on( 'init', function( e ) {
|
||||
if ( 'html-active' === generate_sections_metabox_i18n.default_editor && generate_sections_metabox_i18n.user_can_richedit ) {
|
||||
thisPanel.find( '#wp-generate-sections-editor-wrap' ).removeClass( 'tmce-active' ).addClass( 'html-active' );
|
||||
editor.hidden = true;
|
||||
}
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
init_settings = $.extend({}, init_settings, custom_settings);
|
||||
|
||||
var qt_settings = true;
|
||||
|
||||
if ( typeof tinyMCEPreInit == "object" && "qtInit" in tinyMCEPreInit && "content" in tinyMCEPreInit.qtInit ) {
|
||||
qt_settings = tinyMCEPreInit.qtInit.content;
|
||||
} else {
|
||||
qt_settings = this.qt_defaults;
|
||||
}
|
||||
|
||||
if ( ! generate_sections_metabox_i18n.user_can_richedit ) {
|
||||
init_settings = false;
|
||||
}
|
||||
|
||||
wp.sectionsEditor.initialize( id, {
|
||||
tinymce: init_settings,
|
||||
quicktags: qt_settings,
|
||||
mediaButtons: true
|
||||
} );
|
||||
|
||||
var buttonsElement = this.ui.panels.find( '#wp-generate-sections-editor-wrap' ).find( '.wp-media-buttons' );
|
||||
buttonsElement.attr( 'id', 'custom-media-buttons' );
|
||||
$( customButtons ).appendTo( buttonsElement );
|
||||
|
||||
if ( ! generate_sections_metabox_i18n.user_can_richedit ) {
|
||||
this.ui.panels.find( '#generate-sections-editor' ).addClass( 'no-rich-edit' );
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Make the menu mobile-friendly
|
||||
*/
|
||||
toggleMenu: function() {
|
||||
this.$el.find('.media-menu').toggleClass('visible');
|
||||
},
|
||||
|
||||
/**
|
||||
* Create the nav tabs & panels
|
||||
*/
|
||||
renderContent: function() {
|
||||
|
||||
var model = this.model;
|
||||
|
||||
var menu_item = wp.template("generate-sections-modal-menu-item");
|
||||
|
||||
// Save a reference to the navigation bar"s unordered list and populate it with items.
|
||||
this.ui.nav = this.$el.find(".media-menu");
|
||||
|
||||
// reference to content area
|
||||
this.ui.panels = this.$el.find(".media-frame-content");
|
||||
|
||||
// loop through the tabs
|
||||
if (generate_sections_metabox_i18n.tabs.length) {
|
||||
|
||||
// for...of is nicer, but not supported by minify, so stay with for...in for now
|
||||
for (var tab in generate_sections_metabox_i18n.tabs) {
|
||||
|
||||
if (generate_sections_metabox_i18n.tabs.hasOwnProperty(tab)) {
|
||||
|
||||
tab = generate_sections_metabox_i18n.tabs[tab];
|
||||
|
||||
var $new_tab = $(menu_item({
|
||||
target: tab.target,
|
||||
name: tab.title
|
||||
}));
|
||||
|
||||
var panel = wp.template("generate-sections-edit-" + tab.target);
|
||||
|
||||
var $new_panel = $(panel(model.toJSON()));
|
||||
|
||||
if (tab.active == "true") {
|
||||
$new_tab.addClass("active");
|
||||
$new_panel.addClass("active");
|
||||
}
|
||||
|
||||
jQuery( 'body' ).on( 'generate_section_show_settings', function() {
|
||||
jQuery( '.generate-sections-modal .media-menu-item' ).removeClass('active');
|
||||
jQuery( '.generate-sections-modal .panel' ).removeClass('active');
|
||||
jQuery( '.generate-section-item-style' ).addClass('active');
|
||||
jQuery( '.generate-section-settings' ).addClass('active');
|
||||
});
|
||||
|
||||
this.ui.nav.append($new_tab);
|
||||
this.ui.panels.append($new_panel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Render the background image preview
|
||||
*/
|
||||
renderPreview: function(image_id) {
|
||||
|
||||
var image_id = typeof image_id !== 'undefined' ? image_id : this.model.get("background_image");
|
||||
|
||||
var $preview = $("#generate-section-image-preview");
|
||||
$preview.children().remove();
|
||||
|
||||
if (image_id > 0) {
|
||||
this.background = new wp.media.model.Attachment.get(image_id);
|
||||
|
||||
this.background.fetch({
|
||||
success: function(att) {
|
||||
if (_.contains(['png', 'jpg', 'gif', 'jpeg'], att.get('subtype'))) {
|
||||
$("<img/>").attr("src", att.attributes.sizes.thumbnail.url).appendTo($preview);
|
||||
$preview.next().find(".generate-sections-remove-image").show();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Set the default option for the select boxes
|
||||
*/
|
||||
selected: function() {
|
||||
|
||||
var _this = this;
|
||||
|
||||
this.$el.find("select").each(function(index, select) {
|
||||
|
||||
var attribute = jQuery(select).attr("name");
|
||||
var selected = _this.model.get(attribute);
|
||||
jQuery(select).val(selected);
|
||||
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Start the colorpicker
|
||||
*/
|
||||
colorPicker: function() {
|
||||
this.$el.find(".generate-sections-color").wpColorPicker();
|
||||
},
|
||||
|
||||
/**
|
||||
* Launch Media Uploader
|
||||
*/
|
||||
openMediaUploader: function(e) {
|
||||
|
||||
var _this = this;
|
||||
|
||||
$input = jQuery(e.currentTarget).prev("#generate-sections-background-image");
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
// If the uploader object has already been created, reopen the dialog
|
||||
if (this.mediaUploader) {
|
||||
this.mediaUploader.open();
|
||||
return;
|
||||
}
|
||||
// Extend the wp.media object
|
||||
this.mediaUploader = wp.media.frames.file_frame = wp.media({
|
||||
title: generate_sections_metabox_i18n.media_library_title,
|
||||
button: {
|
||||
text: generate_sections_metabox_i18n.media_library_button
|
||||
},
|
||||
multiple: false
|
||||
});
|
||||
|
||||
|
||||
// When a file is selected, grab the URL and set it as the text field"s value
|
||||
this.mediaUploader.on("select", function() {
|
||||
|
||||
attachment = _this.mediaUploader.state().get("selection").first().toJSON();
|
||||
|
||||
$input.val(attachment.id);
|
||||
|
||||
_this.renderPreview(attachment.id);
|
||||
});
|
||||
// Open the uploader dialog
|
||||
this.mediaUploader.open();
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Remove the background image
|
||||
*/
|
||||
removeImage: function(e) {
|
||||
e.preventDefault();
|
||||
$("#generate-section-image-preview").children().remove();
|
||||
$("#generate-section-image-preview").next().find(".generate-sections-remove-image").hide();
|
||||
$("#generate-sections-background-image").val("");
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Closes the modal and cleans up after the instance.
|
||||
* @param e {object} A jQuery-normalized event object.
|
||||
*/
|
||||
closeModal: function(e) {
|
||||
"use strict";
|
||||
|
||||
e.preventDefault();
|
||||
this.undelegateEvents();
|
||||
jQuery(document).off("focusin");
|
||||
jQuery("body").removeClass("generate-modal-open");
|
||||
jQuery("body").removeClass("generate-section-content");
|
||||
|
||||
// remove restricted media modal tab focus once it's closed
|
||||
this.$el.undelegate('keydown');
|
||||
|
||||
// remove the tinymce editor
|
||||
// this needs to be called before the modal is closed or it will fail in Firefox (that was fun to figure out...)
|
||||
if (typeof tinyMCE != "undefined") {
|
||||
tinymce.EditorManager.execCommand("mceRemoveEditor", true, "generate-sections-editor");
|
||||
}
|
||||
|
||||
// remove modal and unset instances
|
||||
this.remove();
|
||||
Generate_Sections.backbone_modal.__instance = undefined;
|
||||
this.mediaUploader = null;
|
||||
Generate_Sections.modalOpen = null;
|
||||
|
||||
// switch the insert button text back
|
||||
this.changeInsertText(true);
|
||||
|
||||
// send focus back to where it was prior to modal open
|
||||
Generate_Sections.lastFocus.focus();
|
||||
|
||||
// aria unhide the background
|
||||
jQuery("#wpwrap").attr("aria-hidden", "false");
|
||||
|
||||
// Fix bug where the window scrolls down 50px on close
|
||||
var topDistance = jQuery("body").offset().top;
|
||||
if ( topDistance >= jQuery("body").scrollTop() ) {
|
||||
jQuery("body").scrollTop(0);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Responds to the btn-ok.click event
|
||||
* @param e {object} A jQuery-normalized event object.
|
||||
* @todo You should make this your own.
|
||||
*/
|
||||
saveModal: function(e) {
|
||||
"use strict";
|
||||
|
||||
this.model.get("index");
|
||||
|
||||
var model = this.model;
|
||||
|
||||
// send the tinymce content to the textarea
|
||||
if (typeof tinyMCE != "undefined") {
|
||||
tinymce.triggerSave();
|
||||
}
|
||||
|
||||
var $inputs = this.ui.panels.find("input, select, textarea");
|
||||
|
||||
$inputs.each(function(index, input) {
|
||||
|
||||
var name = $(input).attr("name");
|
||||
|
||||
if (model.attributes.hasOwnProperty(name)) {
|
||||
var value = $(input).val();
|
||||
model.set(name, value);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
this.closeModal(e);
|
||||
},
|
||||
|
||||
/**
|
||||
* Handles tab clicks and switches to corresponding panel
|
||||
* @param e {object} A jQuery-normalized event object.
|
||||
*/
|
||||
switchTab: function(e) {
|
||||
"use strict";
|
||||
e.preventDefault();
|
||||
|
||||
// close lingering wp link windows
|
||||
if (typeof tinyMCE != "undefined" && 'style' == jQuery( e.currentTarget ).data( 'target' ) && this.ui.panels.find( '#wp-generate-sections-editor-wrap' ).hasClass( 'tmce-active' )) {
|
||||
tinyMCE.activeEditor.execCommand('wp_link_cancel');
|
||||
tinyMCE.activeEditor.execCommand('wp_media_cancel');
|
||||
}
|
||||
|
||||
this.ui.nav.children().removeClass("active");
|
||||
this.ui.panels.children().removeClass("active");
|
||||
|
||||
var target = jQuery(e.currentTarget).addClass("active").data("target");
|
||||
|
||||
this.ui.panels.find("div[data-id=" + target + "]").addClass("active");
|
||||
},
|
||||
|
||||
/**
|
||||
* close on keyboard shortcuts
|
||||
* @param {Object} event
|
||||
*/
|
||||
keydown: function(e) {
|
||||
// Close the modal when escape is pressed.
|
||||
if (27 === e.which && this.$el.is(':visible')) {
|
||||
this.closeModal(e);
|
||||
e.stopImmediatePropagation();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
// Singular View
|
||||
Generate_Sections.sectionView = Backbone.View.extend({
|
||||
|
||||
model: Generate_Sections.Section,
|
||||
tagName: 'div',
|
||||
|
||||
initialize: function() {
|
||||
// re-render on all changes EXCEPT index
|
||||
this.listenTo(this.model, "change", this.maybeRender);
|
||||
},
|
||||
|
||||
attributes: {
|
||||
class: "ui-state-default section"
|
||||
},
|
||||
|
||||
// Get the template from the DOM
|
||||
template: wp.template("generate-sections-section"),
|
||||
|
||||
events: {
|
||||
'click .edit-section': 'editSection',
|
||||
'click .section-title > span': 'editSection',
|
||||
'click .delete-section': 'removeSection',
|
||||
'click .toggle-section': 'toggleSection',
|
||||
'reorder': 'reorder',
|
||||
},
|
||||
|
||||
maybeRender: function(e) {
|
||||
if (this.model.hasChanged('index')) return;
|
||||
this.render();
|
||||
},
|
||||
|
||||
// Render the single model - include an index.
|
||||
render: function() {
|
||||
this.model.set('index', this.model.collection.indexOf(this.model));
|
||||
this.$el.html(this.template(this.model.toJSON()));
|
||||
|
||||
if (!this.model.get('title')) {
|
||||
this.$el.find('h3.section-title > span').text(generate_sections_metabox_i18n.default_title);
|
||||
}
|
||||
this.$el.find('textarea').val(JSON.stringify(this.model));
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
|
||||
// launch the edit modal
|
||||
editSection: function(e) {
|
||||
|
||||
// stash the current focus
|
||||
Generate_Sections.lastFocus = document.activeElement;
|
||||
Generate_Sections.modalOpen = true;
|
||||
|
||||
e.preventDefault();
|
||||
if (Generate_Sections.backbone_modal.__instance === undefined) {
|
||||
Generate_Sections.backbone_modal.__instance = new Generate_Sections.backbone_modal.Application({
|
||||
model: this.model
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
// reorder after sort
|
||||
reorder: function(event, index) {
|
||||
this.$el.trigger('update-sort', [this.model, index]);
|
||||
},
|
||||
|
||||
// remove/destroy a model
|
||||
removeSection: function(e) {
|
||||
e.preventDefault();
|
||||
if (confirm(generate_sections_metabox_i18n.confirm)) {
|
||||
this.model.destroy();
|
||||
Generate_Sections.sectionList.render(); // manually calling instead of listening since listening interferes with sorting
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
// List View
|
||||
Generate_Sections.sectionListView = Backbone.View.extend({
|
||||
|
||||
el: "#generate_sections_container",
|
||||
events: {
|
||||
'update-sort': 'updateSort',
|
||||
// 'add-section': 'addOne'
|
||||
},
|
||||
|
||||
// callback for clone button
|
||||
addSection: function(model) {
|
||||
this.collection.add(model);
|
||||
this.addOne(model);
|
||||
},
|
||||
|
||||
addOne: function(model) {
|
||||
var view = new Generate_Sections.sectionView({
|
||||
model: model
|
||||
});
|
||||
this.$el.append(view.render().el);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
this.$el.children().remove();
|
||||
this.collection.each(this.addOne, this);
|
||||
return this;
|
||||
},
|
||||
|
||||
updateSort: function(event, model, position) {
|
||||
this.collection.remove(model);
|
||||
|
||||
// renumber remaining models around missing model
|
||||
this.collection.each(function(model, index) {
|
||||
|
||||
var new_index = index;
|
||||
if (index >= position) {
|
||||
new_index += 1;
|
||||
}
|
||||
model.set('index', new_index);
|
||||
});
|
||||
|
||||
// set the index of the missing model
|
||||
model.set('index', position);
|
||||
|
||||
// add the model back to the collection
|
||||
this.collection.add(model, {
|
||||
at: position
|
||||
});
|
||||
|
||||
this.render();
|
||||
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
// The Buttons & Nonce
|
||||
Generate_Sections.ButtonControls = Backbone.View.extend({
|
||||
|
||||
attributes: {
|
||||
class: "generate_sections_buttons"
|
||||
},
|
||||
|
||||
tagName: 'p',
|
||||
|
||||
el: "#_generate_sections_metabox",
|
||||
|
||||
template: wp.template("generate-sections-buttons"),
|
||||
|
||||
// Attach events
|
||||
events: {
|
||||
"click .button-primary": "newSection",
|
||||
"click #generate-delete-sections": "clearAll",
|
||||
'click .edit-section': 'editSection',
|
||||
},
|
||||
|
||||
// create new
|
||||
newSection: function(e) {
|
||||
e.preventDefault();
|
||||
var newSection = new Generate_Sections.Section();
|
||||
Generate_Sections.sectionList.addSection(newSection);
|
||||
},
|
||||
|
||||
// clear all models
|
||||
clearAll: function(e) {
|
||||
e.preventDefault();
|
||||
if (confirm(generate_sections_metabox_i18n.confirm)) {
|
||||
Generate_Sections.sectionCollection.reset();
|
||||
Generate_Sections.sectionList.render();
|
||||
}
|
||||
},
|
||||
|
||||
render: function() {
|
||||
this.$el.find(".generate_sections_control").append(this.template);
|
||||
return this;
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
// init
|
||||
Generate_Sections.initApplication = function() {
|
||||
|
||||
// Create Collection From Existing Meta
|
||||
Generate_Sections.sectionCollection = new Generate_Sections.SectionsCollection(generate_sections_metabox_i18n.sections);
|
||||
|
||||
// Create the List View
|
||||
Generate_Sections.sectionList = new Generate_Sections.sectionListView({
|
||||
collection: Generate_Sections.sectionCollection
|
||||
});
|
||||
Generate_Sections.sectionList.render();
|
||||
|
||||
// Buttons
|
||||
Generate_Sections.Buttons = new Generate_Sections.ButtonControls({
|
||||
collection: Generate_Sections.sectionCollection
|
||||
});
|
||||
Generate_Sections.Buttons.render();
|
||||
|
||||
};
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Execute the above methods in the Generate_Sections object.
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
jQuery( function( $ ) {
|
||||
|
||||
Generate_Sections.initApplication();
|
||||
|
||||
$( '#generate_sections_container' ).sortable({
|
||||
axis: "y",
|
||||
opacity: 0.5,
|
||||
grid: [20, 10],
|
||||
tolerance: "pointer",
|
||||
handle: ".move-section",
|
||||
update: function(event, ui) {
|
||||
ui.item.trigger("reorder", ui.item.index());
|
||||
}
|
||||
} );
|
||||
|
||||
if ( $( '.use-sections-switch' ).is( ':checked' ) ) {
|
||||
setTimeout( function() {
|
||||
generateShowSections();
|
||||
}, 200 );
|
||||
} else {
|
||||
generateHideSections();
|
||||
}
|
||||
|
||||
$( '.use-sections-switch' ).on( 'change', function( e ) {
|
||||
var status = ( $(this).is( ':checked' ) ) ? 'checked' : 'unchecked';
|
||||
|
||||
if ( 'checked' == status ) {
|
||||
generateShowSections();
|
||||
} else if ( 'unchecked' == status ) {
|
||||
generateHideSections();
|
||||
}
|
||||
} );
|
||||
|
||||
function generateShowSections() {
|
||||
|
||||
// Hide send to editor button
|
||||
$('.send-to-editor').css('display', 'none');
|
||||
|
||||
// Hide the editor
|
||||
$('#postdivrich').css({
|
||||
'opacity': '0',
|
||||
'height': '0',
|
||||
'overflow': 'hidden'
|
||||
});
|
||||
|
||||
$( '.block-editor-block-list__layout' ).hide();
|
||||
|
||||
$( '.edit-post-layout .edit-post-visual-editor' ).css( {
|
||||
'flex-grow': 'unset',
|
||||
'flex-basis': '0'
|
||||
} );
|
||||
|
||||
$( '.edit-post-visual-editor .block-editor-writing-flow__click-redirect' ).css( {
|
||||
'min-height': '0'
|
||||
} );
|
||||
|
||||
$( '.edit-post-layout__metaboxes:not(:empty)' ).css( 'border-top', '0' );
|
||||
|
||||
// Show the sections
|
||||
$('#_generate_sections_metabox').css({
|
||||
'opacity': '1',
|
||||
'height': 'auto'
|
||||
});
|
||||
|
||||
// Remove and add the default editor - this removes any visible toolbars etc..
|
||||
// We need to set a timeout for this to work
|
||||
// if (typeof tinyMCE != "undefined") {
|
||||
// tinyMCE.EditorManager.execCommand("mceRemoveEditor", true, "content");
|
||||
// $( '.use-sections-cover' ).css( 'z-index','10000' );
|
||||
// setTimeout('tinyMCE.EditorManager.execCommand("mceAddEditor", true, "content");', 1);
|
||||
// setTimeout('jQuery( ".use-sections-cover" ).css( "z-index","-1" );', 1000);
|
||||
// }
|
||||
|
||||
// Set a trigger
|
||||
$('body').trigger('generate_show_sections');
|
||||
|
||||
}
|
||||
|
||||
function generateHideSections() {
|
||||
|
||||
// Show send to editor button
|
||||
$('.send-to-editor').css('display', 'inline-block');
|
||||
|
||||
// Show the editor
|
||||
$('#postdivrich').css({
|
||||
'opacity': '1',
|
||||
'height': 'auto'
|
||||
});
|
||||
|
||||
$( '.block-editor-block-list__layout' ).show();
|
||||
|
||||
$( '.edit-post-layout .edit-post-visual-editor' ).css( {
|
||||
'flex-grow': '',
|
||||
'flex-basis': ''
|
||||
} );
|
||||
|
||||
$( '.edit-post-visual-editor .block-editor-writing-flow__click-redirect' ).css( {
|
||||
'min-height': ''
|
||||
} );
|
||||
|
||||
$( '.edit-post-layout__metaboxes:not(:empty)' ).css( 'border-top', '' );
|
||||
|
||||
// Hide the sections
|
||||
$('#_generate_sections_metabox').css({
|
||||
'opacity': '0',
|
||||
'height': '0',
|
||||
'overflow': 'hidden'
|
||||
});
|
||||
|
||||
$('body').trigger('generate_hide_sections');
|
||||
|
||||
}
|
||||
|
||||
$( document ).on( 'click', '.edit-section.edit-settings', function() {
|
||||
$( 'body' ).trigger( 'generate_section_show_settings' );
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
})(jQuery, Generate_Sections);
|
@ -1,396 +0,0 @@
|
||||
<?php
|
||||
// No direct access, please
|
||||
if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
if ( ! function_exists( 'generate_sections_admin_body_class' ) ) {
|
||||
add_filter( 'admin_body_class', 'generate_sections_admin_body_class' );
|
||||
|
||||
function generate_sections_admin_body_class( $classes ) {
|
||||
global $post;
|
||||
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
||||
|
||||
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
|
||||
$classes .= ' generate-sections-enabled';
|
||||
}
|
||||
|
||||
return $classes;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_content_width' ) ) {
|
||||
add_action( 'wp', 'generate_sections_content_width', 50 );
|
||||
/**
|
||||
* Set our content width when sections are enabled
|
||||
*/
|
||||
function generate_sections_content_width() {
|
||||
global $post;
|
||||
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
||||
|
||||
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
|
||||
global $content_width;
|
||||
$content_width = 2000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_add_metaboxes' ) ) {
|
||||
add_action( 'add_meta_boxes', 'generate_sections_add_metaboxes', 5 );
|
||||
/*
|
||||
* Functions for creating the metaboxes
|
||||
*/
|
||||
function generate_sections_add_metaboxes() {
|
||||
|
||||
$post_types = apply_filters( 'generate_sections_post_types', array( 'page', 'post' ) );
|
||||
|
||||
add_meta_box(
|
||||
'_generate_use_sections_metabox',
|
||||
__( 'Sections', 'gp-premium' ),
|
||||
'generate_sections_use_sections_metabox',
|
||||
$post_types,
|
||||
'side',
|
||||
'high'
|
||||
);
|
||||
|
||||
add_meta_box(
|
||||
'_generate_sections_metabox',
|
||||
__( 'Sections', 'gp-premium' ),
|
||||
'generate_sections_sections_metabox',
|
||||
$post_types,
|
||||
'normal',
|
||||
'high'
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_sanitize_function' ) ) {
|
||||
/*
|
||||
* Sanitize our settings
|
||||
*/
|
||||
function generate_sections_sanitize_function( $data, $post_id ) {
|
||||
|
||||
$section = array();
|
||||
|
||||
if ( isset( $data['title'] ) ) {
|
||||
$section['title'] = sanitize_text_field( $data['title'] );
|
||||
}
|
||||
|
||||
if ( isset( $data['content'] ) ) {
|
||||
$section['content'] = sanitize_post_field( 'post_content', $data['content'], $post_id, 'db' );
|
||||
}
|
||||
|
||||
if ( isset( $data['custom_classes'] ) ) {
|
||||
$section['custom_classes'] = sanitize_text_field( $data['custom_classes'] );
|
||||
}
|
||||
|
||||
if ( isset( $data['custom_id'] ) ) {
|
||||
$section['custom_id'] = sanitize_text_field( $data['custom_id'] );
|
||||
}
|
||||
|
||||
if ( isset( $data['top_padding'] ) ) {
|
||||
$section['top_padding'] = '' == $data['top_padding'] ? $data['top_padding'] : absint( $data['top_padding'] );
|
||||
}
|
||||
|
||||
if ( isset( $data['bottom_padding'] ) ) {
|
||||
$section['bottom_padding'] = '' == $data['bottom_padding'] ? $data['bottom_padding'] : absint( $data['bottom_padding'] );
|
||||
}
|
||||
|
||||
if ( isset( $data['top_padding_unit'] ) ) {
|
||||
$section['top_padding_unit'] = $data['top_padding_unit'] == '%' ? '%' : '';
|
||||
}
|
||||
|
||||
if ( isset( $data['bottom_padding_unit'] ) ) {
|
||||
$section['bottom_padding_unit'] = $data['bottom_padding_unit'] == '%' ? '%' : '';
|
||||
}
|
||||
|
||||
if ( isset( $data['background_image'] ) ) {
|
||||
$section['background_image'] = absint( $data['background_image'] );
|
||||
}
|
||||
|
||||
if ( isset( $data['background_color'] ) ) {
|
||||
$section['background_color'] = generate_sections_sanitize_rgba( $data['background_color'] );
|
||||
}
|
||||
|
||||
if ( isset( $data['text_color'] ) ) {
|
||||
$section['text_color'] = generate_sections_sanitize_hex_color( $data['text_color'] );
|
||||
}
|
||||
|
||||
if ( isset( $data['link_color'] ) ) {
|
||||
$section['link_color'] = generate_sections_sanitize_hex_color( $data['link_color'] );
|
||||
}
|
||||
|
||||
if ( isset( $data['link_color_hover'] ) ) {
|
||||
$section['link_color_hover'] = generate_sections_sanitize_hex_color( $data['link_color_hover'] );
|
||||
}
|
||||
|
||||
if ( isset( $data['box_type'] ) ) {
|
||||
$section['box_type'] = $data['box_type'] == 'contained' ? 'contained' : '';
|
||||
}
|
||||
|
||||
if ( isset( $data['inner_box_type'] ) ) {
|
||||
$section['inner_box_type'] = $data['inner_box_type'] == 'fluid' ? 'fluid' : '';
|
||||
}
|
||||
|
||||
if ( isset( $data['parallax_effect'] ) ) {
|
||||
$section['parallax_effect'] = $data['parallax_effect'] == 'enable' ? 'enable' : '';
|
||||
}
|
||||
|
||||
if ( isset( $data['background_color_overlay'] ) ) {
|
||||
$section['background_color_overlay'] = $data['background_color_overlay'] == 'enable' ? 'enable' : '';
|
||||
}
|
||||
|
||||
return $section;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_metabox_scripts' ) ) {
|
||||
add_action( 'admin_enqueue_scripts', 'generate_sections_metabox_scripts', 20 );
|
||||
/*
|
||||
* Enqueue styles and scripts specific to metaboxs
|
||||
*/
|
||||
function generate_sections_metabox_scripts( $hook ) {
|
||||
// I prefer to enqueue the styles only on pages that are using the metaboxes
|
||||
if ( in_array( $hook, array( "post.php", "post-new.php" ) ) ) {
|
||||
|
||||
$post_types = apply_filters( 'generate_sections_post_types', array( 'page', 'post' ) );
|
||||
|
||||
$screen = get_current_screen();
|
||||
$post_type = $screen->id;
|
||||
|
||||
if ( in_array( $post_type, (array) $post_types ) ) {
|
||||
wp_enqueue_style( 'generate-sections-metabox', plugin_dir_url( __FILE__ ) . 'css/generate-sections-metabox.css', false, GENERATE_SECTIONS_VERSION );
|
||||
wp_enqueue_style( 'generate-lc-switch', plugin_dir_url( __FILE__ ) . 'css/lc_switch.css', false, GENERATE_SECTIONS_VERSION );
|
||||
|
||||
//make sure we enqueue some scripts just in case ( only needed for repeating metaboxes )
|
||||
wp_enqueue_script( 'jquery' );
|
||||
wp_enqueue_script( 'jquery-ui-core' );
|
||||
wp_enqueue_script( 'jquery-ui-widget' );
|
||||
wp_enqueue_script( 'jquery-ui-mouse' );
|
||||
wp_enqueue_script( 'jquery-ui-sortable' );
|
||||
wp_enqueue_script( 'editor' );
|
||||
wp_enqueue_script( 'media-upload' );
|
||||
wp_enqueue_script( 'wp-color-picker' );
|
||||
wp_enqueue_style( 'wp-color-picker' );
|
||||
wp_enqueue_script( 'wp-color-picker-alpha', GP_LIBRARY_DIRECTORY_URL . 'alpha-color-picker/wp-color-picker-alpha.min.js', array( 'wp-color-picker' ), '3.0.0', true );
|
||||
|
||||
wp_add_inline_script(
|
||||
'wp-color-picker-alpha',
|
||||
'jQuery( function() { jQuery( ".color-picker" ).wpColorPicker(); } );'
|
||||
);
|
||||
|
||||
wp_enqueue_media();
|
||||
|
||||
if ( function_exists( 'wp_enqueue_editor' ) ) {
|
||||
wp_enqueue_editor();
|
||||
|
||||
wp_add_inline_script(
|
||||
'editor',
|
||||
'window.wp.sectionsEditor = window.wp.editor;',
|
||||
'after'
|
||||
);
|
||||
}
|
||||
|
||||
if ( version_compare( get_bloginfo( 'version' ), '5.0', '<' ) ) {
|
||||
wp_enqueue_script( 'generate-sections-metabox', plugin_dir_url( __FILE__ ) . 'js/generate-sections-metabox-4.9.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-mouse', 'jquery-ui-sortable', 'editor', 'media-upload', 'wp-color-picker' ), GENERATE_SECTIONS_VERSION, true );
|
||||
} else {
|
||||
wp_enqueue_script( 'generate-sections-metabox', plugin_dir_url( __FILE__ ) . 'js/generate-sections-metabox.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-mouse', 'jquery-ui-sortable', 'editor', 'media-upload', 'wp-color-picker' ), GENERATE_SECTIONS_VERSION, true );
|
||||
}
|
||||
|
||||
if ( function_exists( 'wp_add_inline_script' ) ) {
|
||||
if ( function_exists( 'generate_get_default_color_palettes' ) ) {
|
||||
// Grab our palette array and turn it into JS
|
||||
$palettes = json_encode( generate_get_default_color_palettes() );
|
||||
|
||||
// Add our custom palettes
|
||||
// json_encode takes care of escaping
|
||||
wp_add_inline_script( 'wp-color-picker', 'jQuery.wp.wpColorPicker.prototype.options.palettes = ' . $palettes . ';' );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_admin_footer_scripts' ) ) {
|
||||
add_action( 'admin_footer', 'generate_sections_admin_footer_scripts' );
|
||||
|
||||
function generate_sections_admin_footer_scripts() {
|
||||
// We don't need this if wp_add_inline_script exists
|
||||
if ( function_exists( 'wp_add_inline_script' ) ) {
|
||||
return;
|
||||
}
|
||||
?>
|
||||
<script>
|
||||
if ( typeof lc_switch !== 'undefined' ) {
|
||||
jQuery(document).ready(function($) { $(".use-sections-switch").lc_switch("","");});
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( ! function_exists( 'generate_sections_use_sections_metabox' ) ) {
|
||||
function generate_sections_use_sections_metabox() {
|
||||
include_once( plugin_dir_path( __FILE__ ) . 'views/use-sections.php' );
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_sections_metabox' ) ) {
|
||||
function generate_sections_sections_metabox() {
|
||||
global $post;
|
||||
|
||||
$meta = get_post_meta( $post->ID, '_generate_sections', true );
|
||||
|
||||
$sections = isset( $meta['sections'] ) && is_array( $meta['sections' ] ) ? $meta['sections'] : array();
|
||||
|
||||
$translation_array = array(
|
||||
'confirm' => __( 'This action can not be undone, are you sure?', 'gp-premium' ),
|
||||
'post_id' => $post->ID,
|
||||
'sections' => $sections,
|
||||
'default_title' => __( 'Section', 'gp-premium' ),
|
||||
'default_content_title' => __( 'Content', 'gp-premium' ),
|
||||
'tabs' => array(
|
||||
array( 'title' => __( 'Settings', 'gp-premium' ), 'target' => 'style', 'active' => 'false' ),
|
||||
array( 'title' => __( 'Content', 'gp-premium' ), 'target' => 'content', 'active' => 'true' ),
|
||||
//array( 'title' => __( 'Layout', 'gp-premium' ), 'target' => 'layout', 'active' => 'false' ),
|
||||
),
|
||||
'top_padding' => apply_filters( 'generate_sections_default_padding_top','40' ),
|
||||
'bottom_padding' => apply_filters( 'generate_sections_default_padding_bottom','40' ),
|
||||
'media_library_title' => __('Section Background', 'gp-premium' ),
|
||||
'media_library_button' => __( 'Set as Section Background', 'gp-premium' ),
|
||||
'generate_nonce' => wp_create_nonce( 'generate_sections_nonce' ),
|
||||
'default_editor' => user_can_richedit() && wp_default_editor() == 'tinymce' ? 'tmce-active' : 'html-active',
|
||||
'user_can_richedit' => user_can_richedit(),
|
||||
'insert_into_section' => __( 'Insert into Section', 'gp-premium' ),
|
||||
'edit_section' => __( 'Edit Section', 'gp-premium' )
|
||||
|
||||
);
|
||||
wp_localize_script( 'generate-sections-metabox', 'generate_sections_metabox_i18n', $translation_array );
|
||||
|
||||
include_once( plugin_dir_path( __FILE__ ) . 'views/sections.php' );
|
||||
include_once( plugin_dir_path( __FILE__ ) . 'views/sections-template.php' );
|
||||
add_action( 'print_media_templates', 'generate_sections_print_templates' );
|
||||
|
||||
do_action( 'generate_sections_metabox' );
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_save_use_metabox' ) ) {
|
||||
add_action( 'save_post', 'generate_sections_save_use_metabox' );
|
||||
/*
|
||||
* Save the "use" metabox
|
||||
*/
|
||||
function generate_sections_save_use_metabox( $post_id ) {
|
||||
if ( ! isset( $_POST['_generate_sections_use_sections_nonce'] ) || ! wp_verify_nonce( $_POST['_generate_sections_use_sections_nonce'], 'generate_sections_use_sections_nonce' ) ) {
|
||||
return $post_id;
|
||||
}
|
||||
|
||||
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
|
||||
return $post_id;
|
||||
}
|
||||
|
||||
if ( ! current_user_can('edit_post', $post_id ) ) {
|
||||
return $post_id;
|
||||
}
|
||||
|
||||
if ( isset ( $_POST['_generate_use_sections'] ) && isset ( $_POST['_generate_use_sections']['use_sections'] ) && $_POST['_generate_use_sections']['use_sections'] == 'true' ) {
|
||||
update_post_meta( $post_id, '_generate_use_sections', array( 'use_sections' => 'true' ) );
|
||||
} else {
|
||||
delete_post_meta( $post_id, '_generate_use_sections' );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_save_sections_metabox' ) ) {
|
||||
add_action( 'save_post', 'generate_sections_save_sections_metabox', 20 );
|
||||
/*
|
||||
* Save the sections metabox
|
||||
*/
|
||||
function generate_sections_save_sections_metabox( $post_id ) {
|
||||
|
||||
if ( ! isset( $_POST['_generate_sections_nonce'] ) || ! wp_verify_nonce( $_POST['_generate_sections_nonce'], 'generate_sections_nonce' ) ) {
|
||||
return $post_id;
|
||||
}
|
||||
|
||||
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
|
||||
return $post_id;
|
||||
}
|
||||
|
||||
if ( ! current_user_can('edit_post', $post_id ) ) {
|
||||
return $post_id;
|
||||
}
|
||||
|
||||
$clean = array();
|
||||
|
||||
if ( isset ( $_POST['_generate_sections'] ) && isset( $_POST['_generate_sections']['sections'] ) && is_array( $_POST['_generate_sections']['sections'] ) ) {
|
||||
|
||||
foreach( $_POST['_generate_sections']['sections'] as $section ) {
|
||||
|
||||
$section = json_decode( stripslashes( trim($section) ), true);
|
||||
|
||||
$section = generate_sections_sanitize_function( $section, $post_id );
|
||||
if ( ! empty( $section ) ){
|
||||
$clean[] = $section;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// save data
|
||||
if ( ! empty( $clean ) ) {
|
||||
// this maintains data structure of previous version
|
||||
$meta = array( 'sections' => $clean );
|
||||
update_post_meta( $post_id, '_generate_sections', $meta );
|
||||
} else {
|
||||
delete_post_meta( $post_id, '_generate_sections' );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_sanitize_hex_color' ) ) {
|
||||
/*
|
||||
* Sanitize colors
|
||||
* We don't use the built in function so we can use empty values
|
||||
*/
|
||||
function generate_sections_sanitize_hex_color( $color ) {
|
||||
if ( '' === $color ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
// 3 or 6 hex digits, or the empty string.
|
||||
if ( preg_match('|^#([A-Fa-f0-9]{3}){1,2}$|', $color ) ) {
|
||||
return $color;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'generate_sections_sanitize_rgba' ) ) {
|
||||
/**
|
||||
* Sanitize RGBA colors
|
||||
* @since 1.3.42
|
||||
*/
|
||||
function generate_sections_sanitize_rgba( $color ) {
|
||||
if ( '' === $color ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
// If string does not start with 'rgba', then treat as hex
|
||||
// sanitize the hex color and finally convert hex to rgba
|
||||
if ( false === strpos( $color, 'rgba' ) ) {
|
||||
return generate_sections_sanitize_hex_color( $color );
|
||||
}
|
||||
|
||||
// By now we know the string is formatted as an rgba color so we need to further sanitize it.
|
||||
$color = str_replace( ' ', '', $color );
|
||||
sscanf( $color, 'rgba(%d,%d,%d,%f)', $red, $green, $blue, $alpha );
|
||||
return 'rgba('.$red.','.$green.','.$blue.','.$alpha.')';
|
||||
|
||||
return '';
|
||||
}
|
||||
}
|
@ -1,279 +0,0 @@
|
||||
<?php
|
||||
// No direct access, please
|
||||
if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
/**
|
||||
* Prints the templates used in the sections metabox
|
||||
*
|
||||
* @global bool $is_IE
|
||||
*/
|
||||
function generate_sections_print_templates() {
|
||||
global $is_IE;
|
||||
$class = 'media-modal wp-core-ui';
|
||||
if ( $is_IE && strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 7') !== false ){
|
||||
$class .= ' ie7';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Backbone Templates
|
||||
* This file contains all of the HTML used in our application
|
||||
*
|
||||
* Each template is wrapped in a script block ( note the type is set to "text/html" ) and given an ID prefixed with
|
||||
* 'tmpl'. The wp.template method retrieves the contents of the script block and converts these blocks into compiled
|
||||
* templates to be used and reused in your application.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* The Singular List View
|
||||
*/
|
||||
?>
|
||||
<script type="text/template" id="tmpl-generate-sections-section">
|
||||
|
||||
<h3 class="section-title">
|
||||
<span class="text generate-section-text" title="<?php _e( 'Click to edit', 'gp-premium' );?>">{{{ data.title }}}</span>
|
||||
<div class="section-controls">
|
||||
<a class="edit-section edit-content dashicons dashicons-edit" href="#" title="<?php _e( 'Click to edit content', 'gp-premium' );?>"></a>
|
||||
<a class="edit-section edit-settings dashicons dashicons-admin-generic" href="#" title="<?php _e( 'Click to edit settings', 'gp-premium' );?>"></a>
|
||||
<a class="move-section dashicons dashicons-move" href="#" title="<?php _e( 'Click and drag to sort', 'gp-premium' );?>"></a>
|
||||
<a class="delete-section dashicons dashicons-no" href="#" title="<?php esc_attr_e( 'Click to remove', 'gp-premium' );?>"></a>
|
||||
</div>
|
||||
|
||||
</h3>
|
||||
<textarea name="_generate_sections[sections][{{{ data.index }}}]" readonly="readonly"></textarea>
|
||||
|
||||
</script>
|
||||
|
||||
<?php
|
||||
/**
|
||||
* The Add/Clear buttons
|
||||
*/
|
||||
?>
|
||||
<script type="text/template" id="tmpl-generate-sections-buttons">
|
||||
<a href="#" id="generate-add-section" class="button-primary button-large"><?php _e( 'Add Section', 'gp-premium' );?></a>
|
||||
<a href="#" style="display:none;" id="generate-delete-sections" class="button button-large"><?php _e( 'Remove Sections', 'gp-premium');?></a>
|
||||
<?php wp_nonce_field( 'generate_sections_nonce', '_generate_sections_nonce' ); ?>
|
||||
</script>
|
||||
|
||||
|
||||
<?php
|
||||
/**
|
||||
* The Modal Window, including sidebar and content area.
|
||||
* Add menu items to ".media-frame-menu"
|
||||
* Add content to ".media-frame-content"
|
||||
*/
|
||||
?>
|
||||
<script type="text/html" id="tmpl-generate-sections-modal-window">
|
||||
<div class="<?php echo esc_attr( $class ); ?>">
|
||||
<button type="button" class="button-link media-modal-close" aria-label="close"><span class="media-modal-icon"><span class="screen-reader-text"><?php _e( 'Close', 'gp-premium' ); ?></span></span></button>
|
||||
<div class="media-modal-content">
|
||||
<div class="media-frame mode-select wp-core-ui hide-router">
|
||||
<div class="media-frame-menu"><div class="media-menu"></div></div>
|
||||
<div class="media-frame-title">
|
||||
<h1><?php _e( 'Edit Section', 'gp-premium' ); ?><span class="dashicons dashicons-arrow-down"></span></h1>
|
||||
</div>
|
||||
<div class="media-frame-content"></div>
|
||||
<div class="media-frame-toolbar">
|
||||
<div class="media-toolbar">
|
||||
<div class="media-toolbar-primary">
|
||||
<button type="button" class="button media-button button-primary button-large media-button-insert"><?php _e( 'Apply', 'gp-premium' ); ?></button>
|
||||
<button type="button" class="button button media-button button button-large media-button-close"><?php _e( 'Cancel', 'gp-premium' ); ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="media-modal-backdrop"></div>
|
||||
</script>
|
||||
|
||||
<?php
|
||||
/**
|
||||
* Base template for a navigation-bar menu item
|
||||
*/
|
||||
?>
|
||||
<script type="text/html" id='tmpl-generate-sections-modal-menu-item'>
|
||||
<a class="media-menu-item generate-section-item-{{ data.target }}" data-target="{{ data.target }}">{{ data.name }}</a>
|
||||
</script>
|
||||
|
||||
|
||||
<?php
|
||||
/**
|
||||
* the Edit Sections
|
||||
*/
|
||||
?>
|
||||
<script type="text/html" id="tmpl-generate-sections-edit-content">
|
||||
<div data-id="content" class="panel generate-section-content">
|
||||
|
||||
<div class="gs-grid-100 section-title">
|
||||
<label for="title"><?php _e( 'Section Label', 'gp-premium' );?></label>
|
||||
|
||||
<p>
|
||||
<input type="text" name="title" placeholder="{{{ generate_sections_metabox_i18n.default_title }}}" id="title" value="{{{ data.title }}}"/>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<?php if ( version_compare( get_bloginfo( 'version' ), '5.0', '<' ) ) : ?>
|
||||
<div class="gs-grid-100 wp-core-ui wp-editor-wrap">
|
||||
|
||||
<div class="postarea wp-editor-expand">
|
||||
|
||||
<div id="wp-generate-sections-editor-wrap" class="wp-core-ui wp-editor-wrap old-sections-js">
|
||||
|
||||
<div id="wp-generate-sections-editor-editor-tools" class="wp-editor-tools hide-if-no-js">
|
||||
|
||||
<div class="wp-media-buttons">
|
||||
<button type="button" class="button insert-media add_media generate-sections-add-media" data-editor="generate-sections-editor"><span class="wp-media-buttons-icon"></span><?php _e( 'Add Media', 'gp-premium' );?></button>
|
||||
<?php do_action( 'media_buttons' ); ?>
|
||||
</div>
|
||||
|
||||
<div class="wp-editor-tabs">
|
||||
<button type="button" id="content-tmce" class="wp-switch-editor switch-tmce" data-wp-editor-id="generate-sections-editor"><?php _e( 'Visual', 'gp-premium' ); ?></button>
|
||||
<button type="button" id="content-html" class="wp-switch-editor switch-html" data-wp-editor-id="generate-sections-editor"><?php _ex( 'Text', 'Name for the Text editor tab (formerly HTML)', 'gp-premium' ); ?></button>
|
||||
</div>
|
||||
|
||||
</div><!-- .wp-editor-tools -->
|
||||
|
||||
<div class="wp-editor-container">
|
||||
<textarea id="generate-sections-editor" class="wp-editor-area" autocomplete="off" cols="40" name="content">{{{ data.content }}}</textarea>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div class="gs-grid-100 generate-sections-editor-wrap">
|
||||
<div id="custom-media-buttons">
|
||||
<?php do_action( 'media_buttons' ); ?>
|
||||
</div>
|
||||
|
||||
<textarea id="generate-sections-editor" class="wp-editor-area" autocomplete="off" cols="40" name="content">{{{ data.content }}}</textarea>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
<script type="text/html" id="tmpl-generate-sections-edit-layout">
|
||||
|
||||
<div data-id="layout" class="panel">
|
||||
|
||||
</div>
|
||||
|
||||
</script>
|
||||
<script type="text/html" id="tmpl-generate-sections-edit-style">
|
||||
|
||||
<div data-id="style" class="panel generate-section-settings">
|
||||
<div class="gs-grid-container gs-grid-parent">
|
||||
<div class="gs-grid-33">
|
||||
<h3><?php _e( 'Layout', 'gp-premium' ); ?></h3>
|
||||
<label for="box_type"><?php _e('Box Type', 'gp-premium');?></label>
|
||||
|
||||
<p>
|
||||
<select name="box_type" id="box_type">
|
||||
<option value=""><?php _e( 'Full Width', 'gp-premium' );?></option>
|
||||
<option value="contained"><?php _ex( 'Contained', 'Width', 'gp-premium' );?></option>
|
||||
</select>
|
||||
</p>
|
||||
|
||||
<label for="inner_box_type"><?php _e('Inner Box Type', 'gp-premium');?></label>
|
||||
|
||||
<p>
|
||||
<select name="inner_box_type" id="inner_box_type">
|
||||
<option value=""><?php _ex( 'Contained', 'Width', 'gp-premium' );?></option>
|
||||
<option value="fluid"><?php _e( 'Full Width', 'gp-premium' );?></option>
|
||||
</select>
|
||||
</p>
|
||||
|
||||
<label for="custom_id"><?php _e( 'Custom ID', 'gp-premium' );?></label>
|
||||
|
||||
<p>
|
||||
<input type="text" name="custom_id" id="custom_id" value="{{{ data.custom_id }}}"/>
|
||||
</p>
|
||||
|
||||
<label for="custom_classes"><?php _e( 'Custom Classes', 'gp-premium' );?></label>
|
||||
|
||||
<p>
|
||||
<input type="text" name="custom_classes" id="custom_classes" value="{{{ data.custom_classes }}}"/>
|
||||
</p>
|
||||
|
||||
<label for="top_padding"><?php _e( 'Top Padding', 'gp-premium' );?></label>
|
||||
|
||||
<p>
|
||||
<input placeholder="{{{ generate_sections_metabox_i18n.top_padding }}}" type="number" name="top_padding" id="top_padding" value="{{{ data.top_padding }}}"/><select style="margin:0;position:relative;top:-2px;" name="top_padding_unit" id="top_padding_unit">
|
||||
<option value="">px</option>
|
||||
<option value="%">%</option>
|
||||
</select>
|
||||
</p>
|
||||
|
||||
<label for="bottom_padding"><?php _e( 'Bottom Padding', 'gp-premium' );?></label>
|
||||
|
||||
<p>
|
||||
<input placeholder="{{{ generate_sections_metabox_i18n.bottom_padding }}}" type="number" name="bottom_padding" id="bottom_padding" value="{{{ data.bottom_padding }}}"/><select style="margin:0;position:relative;top:-2px;" name="bottom_padding_unit" id="bottom_padding_unit">
|
||||
<option value="">px</option>
|
||||
<option value="%">%</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
<div class="gs-grid-33">
|
||||
<h3><?php _e( 'Colors', 'gp-premium' ); ?></h3>
|
||||
<label for="background_color"><?php _e( 'Background Color', 'gp-premium' );?></label>
|
||||
<p>
|
||||
<input class="generate-sections-color" type="text" class="color-picker" data-alpha-enabled="true" data-alpha-color-type="hex" name="background_color" id="background_color" value="{{{ data.background_color }}}"/>
|
||||
</p>
|
||||
|
||||
<label for="text_color"><?php _e( 'Text Color', 'gp-premium' );?></label>
|
||||
|
||||
<p>
|
||||
<input class="generate-sections-color" type="text" name="text_color" id="text_color" value="{{{ data.text_color }}}"/>
|
||||
</p>
|
||||
|
||||
<label for="link_color"><?php _e( 'Link Color', 'gp-premium' );?></label>
|
||||
|
||||
<p>
|
||||
<input class="generate-sections-color" type="text" name="link_color" id="link_color" value="{{{ data.link_color }}}"/>
|
||||
</p>
|
||||
|
||||
<label for="link_color_hover"><?php _e('Link Color Hover', 'gp-premium');?></label>
|
||||
|
||||
<p>
|
||||
<input class="generate-sections-color" type="text" name="link_color_hover" id="link_color_hover" value="{{{ data.link_color_hover }}}"/>
|
||||
</p>
|
||||
</div>
|
||||
<div class="gs-grid-33">
|
||||
<h3><?php _e( 'Background', 'gp-premium' ); ?></h3>
|
||||
<label for="generate-sections-background-image"><?php _e( 'Background Image', 'gp-premium' );?></label>
|
||||
<p id="generate-section-image-preview"></p>
|
||||
<p>
|
||||
|
||||
<input class="image_id" type="hidden" id="generate-sections-background-image" name="background_image" value="{{{ data.background_image }}}" />
|
||||
<button id="image_button" class="generate-sections-upload-button button" type="button" data-uploader_title="<?php _e( 'Background Image', 'gp-premium' );?>"><?php _e('Upload', 'gp-premium') ;?></button>
|
||||
<button id="remove_image" class="generate-sections-remove-image button" type="button"><?php _e( 'Remove', 'gp-premium' );?></button>
|
||||
|
||||
</p>
|
||||
|
||||
<label for="parallax_effect"><?php _e('Parallax Effect', 'gp-premium');?></label>
|
||||
<p>
|
||||
<select name="parallax_effect" id="parallax_effect">
|
||||
<option value=""><?php _e( 'Disable', 'gp-premium' );?></option>
|
||||
<option value="enable"><?php _e( 'Enable', 'gp-premium' );?></option>
|
||||
</select>
|
||||
</p>
|
||||
|
||||
<label for="background_color_overlay"><?php _e( 'Background Color Overlay', 'gp-premium' );?></label>
|
||||
<p>
|
||||
<select name="background_color_overlay" id="background_color_overlay">
|
||||
<option value=""><?php _e( 'Disable', 'gp-premium' );?></option>
|
||||
<option value="enable"><?php _e( 'Enable', 'gp-premium' );?></option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
|
||||
<?php
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
<?php
|
||||
// No direct access, please
|
||||
if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
?>
|
||||
<div class="generate_sections_control">
|
||||
|
||||
<noscript>
|
||||
<?php _e('Javascript must be enabled to use Generate Sections', 'gp-premium' );?>
|
||||
</noscript>
|
||||
|
||||
<div id="generate_sections_container"></div>
|
||||
|
||||
</div>
|
@ -1,17 +0,0 @@
|
||||
<?php
|
||||
// No direct access, please
|
||||
if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
?>
|
||||
<div class="generate_sections_control">
|
||||
|
||||
<?php
|
||||
global $post;
|
||||
$use_sections = get_post_meta( $post->ID, '_generate_use_sections', true );
|
||||
//$use_sections = isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ? true : false;
|
||||
wp_nonce_field( 'generate_sections_use_sections_nonce', '_generate_sections_use_sections_nonce' );
|
||||
?>
|
||||
<label for="_generate_use_sections[use_sections]">
|
||||
<input type="checkbox" class="use-sections-switch" name="_generate_use_sections[use_sections]" id="_generate_use_sections[use_sections]" value="true" <?php if ( isset ( $use_sections['use_sections'] ) ) checked( $use_sections['use_sections'], 'true', true );?> />
|
||||
<?php _e( 'Use Sections', 'gp-premium' ); ?>
|
||||
</label>
|
||||
</div>
|
@ -1,122 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The template for displaying all pages.
|
||||
*
|
||||
* This is the template that displays all pages by default.
|
||||
* Please note that this is the WordPress construct of pages
|
||||
* and that other 'pages' on your WordPress site will use a
|
||||
* different template.
|
||||
*
|
||||
* @package Generate
|
||||
*/
|
||||
|
||||
// No direct access, please
|
||||
if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
get_header();
|
||||
$sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_sections', TRUE) : '';
|
||||
$sidebars = apply_filters( 'generate_sections_sidebars', false );
|
||||
?>
|
||||
|
||||
<div id="primary" <?php echo $sidebars ? generate_content_class() : 'class="content-area grid-parent grid-100"' ?>>
|
||||
<main id="main" <?php if ( function_exists( 'generate_main_class' ) ) generate_main_class(); ?>>
|
||||
<?php do_action('generate_before_main_content'); ?>
|
||||
|
||||
<?php if ( post_password_required() ) : ?>
|
||||
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?> <?php generate_article_schema( 'CreativeWork' ); ?>>
|
||||
<div class="inside-article">
|
||||
<div class="entry-content" itemprop="text">
|
||||
<?php the_content(); ?>
|
||||
</div><!-- .entry-content -->
|
||||
</div><!-- .inside-article -->
|
||||
</article><!-- #post-## -->
|
||||
|
||||
<?php else : ?>
|
||||
|
||||
<?php
|
||||
// check if the repeater field has rows of data
|
||||
if( $sections && '' !== $sections ) :
|
||||
|
||||
// loop through the rows of data
|
||||
$i = 0;
|
||||
$return = '';
|
||||
foreach ( $sections['sections'] as $section ) :
|
||||
$i++;
|
||||
|
||||
// Get the values
|
||||
$box_type = ( isset( $section['box_type'] ) ) ? $section['box_type'] : 'fluid';
|
||||
$inner_box_type = ( isset( $section['inner_box_type'] ) ) ? $section['inner_box_type'] : 'contained';
|
||||
$custom_classes = ( isset( $section['custom_classes'] ) ) ? $section['custom_classes'] : '';
|
||||
$custom_id = ( isset( $section['custom_id'] ) ) ? $section['custom_id'] : '';
|
||||
$parallax_effect = ( isset( $section['parallax_effect'] ) ) ? $section['parallax_effect'] : '';
|
||||
$content = ( isset( $section['content'] ) ) ? apply_filters( 'generate_the_section_content', $section['content'] ) : '';
|
||||
|
||||
// Set up parallax
|
||||
$parallax = ( 'enable' == $parallax_effect ) ? ' enable-parallax' : '';
|
||||
$parallax_speed = apply_filters( 'generate_sections_parallax_speed', 6 );
|
||||
$parallax_data = ( 'enable' == $parallax_effect ) ? ' data-speed="' . intval( $parallax_speed ) . '"' : '';
|
||||
|
||||
// Set up custom classes
|
||||
$classes = ( ! empty( $custom_classes ) ) ? ' ' . sanitize_text_field( $custom_classes ) : '';
|
||||
|
||||
// Set up custom ID
|
||||
$custom_id = ( '' == $custom_id ) ? "generate-section-$i" : $custom_id;
|
||||
|
||||
// Create container arrays
|
||||
$container = array();
|
||||
$inner_container = array();
|
||||
|
||||
// Create container
|
||||
if ( 'contained' == $box_type ) :
|
||||
$container['before'] = '<div id="' . esc_attr( $custom_id ) . '" class="grid-container grid-parent generate-sections-container' . $parallax . $classes . '"' . $parallax_data . '>';
|
||||
$container['after'] = '</div>';
|
||||
else :
|
||||
$container['before'] = '<div id="' . esc_attr( $custom_id ) . '" class="generate-sections-container' . $parallax . $classes . '"' . $parallax_data . '>';
|
||||
$container['after'] = '</div>';
|
||||
endif;
|
||||
|
||||
// Create inner container
|
||||
if ( 'fluid' == $inner_box_type ) :
|
||||
$inner_container['before'] = '<div class="generate-sections-inside-container" itemprop="text">';
|
||||
$inner_container['after'] = '</div>';
|
||||
else :
|
||||
$inner_container['before'] = '<div class="grid-container grid-parent generate-sections-inside-container" itemprop="text">';
|
||||
$inner_container['after'] = '</div>';
|
||||
endif;
|
||||
|
||||
// Output the container
|
||||
$return .= $container['before'];
|
||||
$return .= $inner_container['before'];
|
||||
|
||||
// Output the content
|
||||
// Add \n\n to fix issue where paragraph wrapping was off
|
||||
$return .= "\n\n" . $content;
|
||||
|
||||
// Output the closing containers
|
||||
$return .= $container['after'];
|
||||
$return .= $inner_container['after'];
|
||||
|
||||
endforeach;
|
||||
|
||||
// Return our sections through the_content filter
|
||||
echo apply_filters( 'the_content', $return );
|
||||
else :
|
||||
?>
|
||||
<div class="generate-sections-inside-container inside-article">
|
||||
<div class="grid-container grid-parent generate-sections-inside-container inside-article">
|
||||
<?php _e( 'No sections added!', 'gp-premium' ); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<?php
|
||||
endif;
|
||||
?>
|
||||
<?php endif; ?>
|
||||
<?php do_action('generate_after_main_content'); ?>
|
||||
</main><!-- #main -->
|
||||
</div><!-- #primary -->
|
||||
|
||||
<?php
|
||||
if ( $sidebars) do_action('generate_sidebars');
|
||||
get_footer();
|
@ -1,21 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The Sections module.
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @deprecated 2.0.0
|
||||
*
|
||||
* @package GP Premium
|
||||
*/
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit; // No direct access, please.
|
||||
}
|
||||
|
||||
// Define the version.
|
||||
if ( ! defined( 'GENERATE_SECTIONS_VERSION' ) ) {
|
||||
define( 'GENERATE_SECTIONS_VERSION', GP_PREMIUM_VERSION );
|
||||
}
|
||||
|
||||
// Include functions identical between standalone addon and GP Premium.
|
||||
require plugin_dir_path( __FILE__ ) . 'functions/generate-sections.php';
|
Reference in New Issue
Block a user