Current File : /pages/54/47/d0016649/home/htdocs/ob_maxi/wp-content/plugins/digimember/webinc/js/tinymce_helper.js

var ncore_tiny_mce_target_obj
var ncore_tiny_mce_target_type
var ncore_tiny_mce_insert_shortcode_split

function digimember_tinymce_handleShortcode( ed )
{
    ncore_tiny_mce_target_obj = ed;
    ncore_tiny_mce_target_type = 'editor';

    dmDialogAjax_FetchUrl( __ncore_tinymce_helper( 'ajax_dialog_url' ) );
}

function digimember_tinymce_quicktag( button, textarea, editor )
{
    ncore_tiny_mce_target_obj = textarea;
    ncore_tiny_mce_target_type = 'textarea';

    dmDialogAjax_FetchUrl( __ncore_tinymce_helper( 'ajax_dialog_url' ) );
}

function digimember_tinymce_insertShortcode( shortcode )
{
    switch (ncore_tiny_mce_target_type)
    {
        case 'gutenberg':
            ncore_tiny_mce_target_obj(shortcode);
            break;

        case 'editor':
            ncore_tiny_mce_target_obj.selection.setContent( ncore_tiny_mce_target_obj.selection.getContent() + shortcode );
            break;

        case 'textarea':
             var obj = ncoreJQ( ncore_tiny_mce_target_obj );

             var pos = obj.prop("selectionEnd")
             var text = obj.val()

             text = text.substring( 0, pos ) + shortcode + text.substring( pos )

             obj.val( text )
             break;
    }
}


function ncore_tinymce_register_parser( parser_function )
{
    if (typeof ncore_tinymce_parsers == 'undefined')
        ncore_tinymce_parsers = [];

    ncore_tinymce_parsers.push( parser_function );
}

function ncore_tinymce_register_content_renderer( render_function )
{
    if (typeof ncore_tinymce_content_renderers == 'undefined')
        ncore_tinymce_content_renderers = [];

    ncore_tinymce_content_renderers.push( render_function );
}

function digimember_tinymce_callbackShortcode( form_id )
{
    try
    {
        var plugin_tag = ncoreJQ( '#'+form_id+' select[name=ncore_shortcode]' ).val();

        var css_selector = '#'+form_id+' .ncore_shortcode_' + plugin_tag + ' ';

        var shortcode = '[' + plugin_tag;

        var pos = plugin_tag.indexOf( '_' )

        var tag = plugin_tag.substr( pos+1 )

        var contents = '';

        var shortcodeHasSplit = false;

        var shortcodeObj = {
            shortcode: '',
            parts: {
                opentag: '',
                closetag: '',
                content: ''
            },
        };

        var br = ncore_tiny_mce_target_type == 'editor'
               ? "<br />\n"
               : "\n";

        shortcode += ncore_tinymce_parseText( css_selector, 'button_bg' )
                   + ncore_tinymce_parseText( css_selector, 'button_fg' )
                   + ncore_tinymce_parseSelect( css_selector, 'button_radius' )
                   + ncore_tinymce_parseText( css_selector, 'button_text' );

        switch (tag)
        {
            case 'account':
                shortcode += ncore_tinymce_parseCheckbox( css_selector, 'hide_display_name' )
                           + ncore_tinymce_parseCheckbox( css_selector, 'first_name' )
                           + ncore_tinymce_parseCheckbox( css_selector, 'last_name' )
                           + ncore_tinymce_parseCheckbox( css_selector, 'custom_fields' )
                           + ncore_tinymce_parseCheckbox( css_selector, 'delete_button' )
                           + ncore_tinymce_parseCheckbox( css_selector, 'data_export_button' );

                break;

            case 'autojoin':
                 shortcode += ncore_tinymce_parseSelect( css_selector, 'autoresponder' )
                            + ncore_tinymce_parseCheckboxList( css_selector, 'product' )
                            + ncore_tinymce_parseCheckbox( css_selector, 'do_login' )
                            + ncore_tinymce_parseCheckbox( css_selector, 'show_errors' );

                 var has_contents = ncoreJQ( css_selector+' select[name=ncore_has_contents]' ).val() == 'yes';

                 if (has_contents)
                 {
                    contents = __ncore_tinymce_helper( 'tinymce_autojoin_hint' ) + br + br
                               + __ncore_tinymce_helper( 'tinymce_label_username' )
                               + " [username]" + br
                               + __ncore_tinymce_helper( 'tinymce_label_password' )
                               + " [password]";
                 }
                 else
                 {
                     contents = 'closetag';
                 }
                 break;

            case 'counter':
                 shortcode += ncore_tinymce_parseSelect( css_selector, 'product' )
                            + ncore_tinymce_parseInt( css_selector, 'start' );
                 break;

             case 'days_left':
                 shortcode += ncore_tinymce_parseSelect( css_selector, 'product' );
                 break;

             case 'download':
                 shortcode += ncore_tinymce_parseUrl( css_selector, 'url' )
                            + ncore_tinymce_parseUrl( css_selector, 'text' )
                            + ncore_tinymce_parseUrl( css_selector, 'img' );

                 break;

             case 'downloads_left':
                 shortcode += ncore_tinymce_parseUrl( css_selector, 'url' );
                 break;

             case 'digistore_download':
                 shortcode += ncore_tinymce_parseCheckboxList( css_selector, 'product' )
                            + ncore_tinymce_parseCheckbox( css_selector, 'show_texts' )
                            + ncore_tinymce_parseSelect( css_selector, 'icon' );
                 break;

            case 'login':
                 shortcode += ncore_tinymce_parseSelect( css_selector, 'type' )
                            + ncore_tinymce_parseCheckbox( css_selector, 'hidden_if_logged_in' )
                            + ncore_tinymce_parseSelect( css_selector, 'facebook' )
                            + ncore_tinymce_parseCheckboxList( css_selector, 'fb_product' )
                            + ncore_tinymce_parseCheckbox( css_selector, 'stay_on_same_page' )
                            + ncore_tinymce_parseCheckbox( css_selector, 'redirect_if_logged_in' )
                            + ncore_tinymce_parseUrl( css_selector, 'url' )
                            + ncore_tinymce_parseText( css_selector, 'dialog_headline' )
                            + ncore_tinymce_parseUrl( css_selector, 'signup_url' )
                            + ncore_tinymce_parseText( css_selector, 'signup_msg' )
                            + ncore_tinymce_parseSelect( css_selector, 'style' )
                 break;

            case 'logout':
                 var arg = ncore_tinymce_parsePage( css_selector, 'page' );
                 if (!arg)
                 {
                     arg = ncore_tinymce_parseUrl( css_selector, 'url' );
                 }
                 shortcode += arg;

                 break;

            case 'menu':
                 shortcode += ncore_tinymce_parseSelect( css_selector, 'what' )
                            + ncore_tinymce_parseSelect( css_selector, 'depth' );
                 break;

            case 'lecture_buttons':
                shortcode += ncore_tinymce_parseCheckbox( css_selector, '2nd_level' )
                          + ncore_tinymce_parseSelect( css_selector, 'color' )
                          + ncore_tinymce_parseText( css_selector, 'bg' )
                          + ncore_tinymce_parseSelect( css_selector, 'round' )
                          + ncore_tinymce_parseSelect( css_selector, 'product' )
                          + ncore_tinymce_parseSelect( css_selector, 'align' );
                break;

            case 'subscriptions':
                shortcode += ncore_tinymce_parseSelect( css_selector, 'show' );
                break;

            case 'webpush':
                shortcode += ncore_tinymce_parseCheckbox( css_selector, 'optout' );
                break;

            case 'exam':
            case 'exam_certificate':
                shortcode += ncore_tinymce_parseSelect( css_selector, 'id' );
                break;


            case 'lecture_progress':
                shortcode += ncore_tinymce_parseSelect( css_selector, 'for' )
                          + ncore_tinymce_parseText( css_selector, 'color' )
                          + ncore_tinymce_parseText( css_selector, 'bg' )
                          + ncore_tinymce_parseSelect( css_selector, 'round' )
                          + ncore_tinymce_parseSelect( css_selector, 'product' );
                break;

            case 'firstname':
            case 'lastname':
                 shortcode += ncore_tinymce_parseCheckboxList( css_selector, 'space' );
                 break;


            case 'give_product':
                shortcode += ncore_tinymce_parseSelect( css_selector, 'product' )
                           + ncore_tinymce_parseText( css_selector, 'order_id' );
                break;

            case 'password':
                 shortcode += ncore_tinymce_parseText( css_selector, 'no_pw_text' );
                 break;



            case 'signup':
                 shortcode += ncore_tinymce_parseCheckboxList(
                                    css_selector,
                                    'product',
                                    '' // __ncore_tinymce_helper( 'tinymce_error_product_required' )
                              )
                            + ncore_tinymce_parseSelect( css_selector, 'type' )
                            + ncore_tinymce_parseCheckbox( css_selector, 'first_name' )
                            + ncore_tinymce_parseCheckbox( css_selector, 'last_name' )
                            + ncore_tinymce_parseCheckbox( css_selector, 'custom_fields' )
                            + ncore_tinymce_parseCheckbox( css_selector, 'login' )
                            + ncore_tinymce_parseCheckbox( css_selector, 'hideform' )
                            + ncore_tinymce_parseSelect( css_selector, 'facebook' )
                            + ncore_tinymce_parseText( css_selector, 'confirm' );

                 var have_captcha = ncore_tinymce_inputValue( css_selector, 'recaptcha_active') == 'Y';
                 if (have_captcha)
                 {
                     shortcode += ncore_tinymce_parseText( css_selector, 'recaptcha_key' )
                                + ncore_tinymce_parseText( css_selector, 'recaptcha_secret' );

                 }
                 break;

            case 'cancel_form':
                shortcode += ncore_tinymce_parseSelect( css_selector, 'type' )
                    + ncore_tinymce_parseCheckbox( css_selector, 'first_name' )
                    + ncore_tinymce_parseCheckbox( css_selector, 'last_name' )
                    + ncore_tinymce_parseCheckbox( css_selector, 'type_reason' )
                    + ncore_tinymce_parseCheckbox( css_selector, 'cancellation_date' )
                    + ncore_tinymce_parseText( css_selector, 'hintForOrderID' )
                    + ncore_tinymce_parseText( css_selector, 'cancel_email' );

                var have_captcha = ncore_tinymce_inputValue( css_selector, 'recaptcha_active') == 'Y';
                if (have_captcha)
                {
                    shortcode += ncore_tinymce_parseText( css_selector, 'recaptcha_key' )
                        + ncore_tinymce_parseText( css_selector, 'recaptcha_secret' );

                }
                break;

            case 'upgrade':
                 shortcode += ncore_tinymce_parseText( css_selector, 'id' )
                            + ncore_tinymce_parseUrl( css_selector, 'text' )
                            + ncore_tinymce_parseUrl( css_selector, 'confirm' )
                            + ncore_tinymce_parseUrl( css_selector, 'img' );
                 break;

            case 'renew':
            case 'receipt':
            case 'buyer_to_affiliate':
                 shortcode += ncore_tinymce_parseCheckboxList( css_selector, 'product' )
                            + ncore_tinymce_parseUrl( css_selector, 'text' )
                            + ncore_tinymce_parseUrl( css_selector, 'confirm' )
                            + ncore_tinymce_parseUrl( css_selector, 'img' );
                 break;


            case 'webinar':
                 shortcode += ncore_tinymce_parseUrl( css_selector, 'url' )
                            + ncore_tinymce_parseInt( css_selector, 'width' )
                            + ncore_tinymce_parseInt( css_selector, 'height' );
                 break;

            case 'if':
                 shortcode += ncore_tinymce_parseCheckboxList( css_selector, 'has_product' )
                            + ncore_tinymce_parseCheckboxList( css_selector, 'has_not_product' )
                            + ncore_tinymce_parseSelect( css_selector, 'logged_in' )
                            + ncore_tinymce_parseSelect( css_selector, 'mode' );

                 contents = __ncore_tinymce_helper('tinymce_if_hint');
                 break;
            case 'customfield':
                shortcode += ncore_tinymce_parseSelect( css_selector, 'customfield' );
                shortcode += ncore_tinymce_parseCheckboxList( css_selector, 'space' );
                break;
            case 'forms':
                shortcode += ncore_tinymce_parseSelect( css_selector, 'id' );
                break;
            case 'cancel':
                shortcode += ncore_tinymce_parseCheckboxList( css_selector, 'product' )
                          + ncore_tinymce_parseCheckbox( css_selector, 'use_generic' )
                          + ncore_tinymce_parseCheckbox( css_selector, 'show_product_name' )
                          + ncore_tinymce_parseCheckbox( css_selector, 'show_order_id' )
                          + ncore_tinymce_parseSelect( css_selector, 'style' );
                break;
        }

        if (typeof ncore_tinymce_parsers != 'undefined')
        {
            for (var i in ncore_tinymce_parsers) {
                var fct_name = ncore_tinymce_parsers[i];
                var fct      = window[ fct_name ];
                if (typeof fct == 'function')
                {
                    shortcode += fct( css_selector, tag );
                }
                else
                {
                    alert( "Ncore Tinymce Error: " + fct_name + " is not a function" );
                }
            }
        }

        if (typeof ncore_tinymce_content_renderers != 'undefined')
        {
            for (var i in ncore_tinymce_content_renderers) {
                var fct_name = ncore_tinymce_content_renderers[i];
                var fct      = window[ fct_name ];
                if (typeof fct == 'function')
                {
                    if (contents) contents += br;
                    contents += fct( css_selector, tag );
                }
                else
                {
                    alert( "Ncore Tinymce Error: " + fct_name + " is not a function" );
                }
            }
        }

        if (contents == 'closetag')
        {
            shortcode += ' /]';
        }
        else if (contents)
        {
            shortcode += "]" + br + contents + br + "[/" + plugin_tag + ']';
        }
        else
        {
            shortcode += ']';
        }

        /**
        if (contents == 'closetag')
        {
            shortcode += ' /]';
            shortcodeObj.shortcode = shortcode;
            shortcodeObj.parts.opentag = shortcode;
        }
        else if (contents)
        {
            shortcodeObj.parts.opentag = shortcode + "]";
            shortcodeObj.parts.content = contents;
            shortcodeObj.parts.closetag = "[/" + plugin_tag + ']';
            shortcode += "]" + br + contents + br + "[/" + plugin_tag + ']';
            shortcodeObj.shortcode = shortcode;
        }
        else
        {
            shortcodeObj.parts.opentag = shortcode + ']';
            shortcode += ']';
            shortcodeObj.shortcode = shortcode;
        }**/

        console.log(shortcodeObj);
        //digimember_tinymce_insertShortcode( shortcodeObj );
        digimember_tinymce_insertShortcode( shortcode );
    }

    catch( e )
    {
        alert( e )
    }
}


function ncore_tinymce_getValue( css_selector, name )
{
    var value = ncoreJQ( css_selector + 'select[name=ncore_'+name+']' ).val();

    if (value) {
        return value;
    }

    value = ncoreJQ( css_selector + 'select[input=ncore_'+name+']' ).val();

    if (value) {
        return value;
    }

    return false;
}




function ncore_tinymce_parseInt( css_selector, name )
{
    return ncore_tinymce_parseText( css_selector, name, null, true );
}

function ncore_tinymce_parseUrl( css_selector, name )
{
    var url = ncoreJQ( css_selector+' input[name=ncore_'+name+']' ).val();

    var is_void = !url || url == 'http://' || url == 'https://';
    if (is_void)
    {
        return '';
    }


    if (!__digimember_tinymce_validUrl( url ))
    {
        throw __ncore_tinymce_helper( 'tinymce_error_url' );
    }

    return ' ' + name + '="' + url + '"';
}

function ncore_tinymce_parsePage( css_selector, name )
{
    var page_id = ncoreJQ( css_selector+' select[name=ncore_'+name+']' ).val();
    if (page_id>0)
    {
        return ' ' + name + '=' + page_id;
    }
    return '';
}

function ncore_tinymce_parseText( css_selector, name, required_msg, skip_quotes )
{
    var value = ncoreJQ( css_selector+' input[name=ncore_'+name+']' ).val();

    if (value)
    {
        var quote = skip_quotes
                  ? ''
                  : (value.indexOf( '"' ) >= 0
                     ? "'"
                     : '"');

        return  ' ' + name + '=' + quote + value + quote;
    }

    if (required_msg)
    {
        throw required_msg;
    }

    return ''
}




function ncore_tinymce_parseSelect( css_selector, name, first_value )
{
    var value = ncoreJQ( css_selector+'select[name=ncore_'+name+']' ).val();

    if (value)
    {
        return ' ' + name + '=' + value;
    }

    if (first_value)
    {
        var checked = ncoreJQ( css_selector+' input[name=ncore_'+first_value+']' ).val();
        if (checked)
        {
            return ' ' + name + '=' + first_value;
        }
    }

    return '';
}

function ncore_tinymce_inputValue( css_selector, name )
{
    var input = ncoreJQ( css_selector+' input[name=ncore_'+name+']' )

    return input.val();
}


function ncore_tinymce_parseCheckbox( css_selector, name, value )
{
    // var cb = ncoreJQ( css_selector+' input[name=ncore_'+name+']' )
    // var checked = cb.attr( 'checked' )

    var checked = ncoreJQ( css_selector+' input[name=ncore_'+name+']' ).val();
    if (checked && checked != '0')
    {
        var have_value = typeof value != 'undefined'

        if (have_value)
        {
            return ' ' + value;
        }
        else
        {
            return ' ' + name;
        }
    }
    return ''
}

function ncore_tinymce_parseCheckboxList( css_selector, name, required_msg )
{
    return ncore_tinymce_parseText( css_selector, name, required_msg );
}


function __digimember_tinymce_validUrl( url ){

    return true
}

class ncore_shortcode_parser {
    constructor(shortcode) {
        this.shortCodeData = {
            'shortcode': shortcode,
            'elements': [],
            'hasopen': false,
            'hasclose': false,
            'hassplit': false,
            'hascontent': false,
            'innerContent': false,
        }
        this.findStart();
        this.findEnd();
        this.getContent();
        return this;
    }
    findStart() {
        let start = this.shortCodeData.shortcode.indexOf('[');
        if (start !== -1) {
            let end = this.shortCodeData.shortcode.indexOf(']');
            let tag = this.shortCodeData.shortcode.substring(start+1,end);
            if (!this.isCloseTag(tag)) {
                let type = 'open';
                const {newtag, attributes} = this.getTagAttributes(tag)
                this.addElement({
                    'tag': newtag,
                    'attributes': attributes.length > 0 ? attributes : false,
                    'type': type,
                    'pos': start,
                    'length': start+end,
                });
                this.shortCodeData.hasopen = true;
            }


        }
        return false;
    }
    findEnd() {
        let startElement = this.getStartElement();
        let endCode = '[/'+startElement.tag+']';
        let start = this.shortCodeData.shortcode.indexOf(endCode);
        if (start !== -1) {
            let end = start + endCode.length;
            let type = 'close';
            this.addElement({
                'tag': startElement.tag,
                'type': type,
                'pos': start,
                'length': endCode.length,
            });
            this.shortCodeData.hassplit = true;
            this.shortCodeData.hasclose = true;
            return true;
        }
        return false;
    }
    getContent() {
        if (this.hasSplit()) {
            let startElement = this.getStartElement();
            let endElement = this.getEndElement();
            let start = startElement.pos+startElement.length+1;
            let end = endElement.pos;
            let content = this.shortCodeData.shortcode.substring(start,end);
            if (content !== '') {
                this.addElement({
                    'tag': content,
                    'type': 'content',
                    'pos': start,
                    'length': content.length,
                });
                this.shortCodeData.hascontent = true;
            }

        }
        return false;
    }
    setInnerContent(content) {
        this.shortCodeData.innerContent = content;
    }
    setContent(contentString) {
        if (this.hasContent()) {
            let contentElement = this.getContentElement();
            this.updateElementByTag(contentElement.tag, contentString);
            return true;
        }
        if (this.hasStart()) {
            let startTag = this.getStartElement().tag;
            let startElement = this.getStartElement();
            let endElement = this.getEndElement();
            let newShortcode = this.getStartAsTag()
            newShortcode += contentString;
            newShortcode += this.hasEnd() ? this.getEndAsTag() : '[/'+this.getStartElement().tag+']';
            this.shortCodeData.shortcode = newShortcode;
            this.findStart();
            this.findEnd();
            this.getContent();
            return true;
        }
        return false;
    }
    getTagAttributes(tag) {
        let attributeArray = tag.split(' ');
        if (attributeArray.length > 1) {
            return {
                'newtag': attributeArray.shift(),
                'attributes': attributeArray
            };
        }
        return {
            'newtag': attributeArray[0],
            'attributes': []
        };
    }
    hasSplit() {
        return this.shortCodeData.hassplit;
    }
    hasStart() {
        return this.shortCodeData.hasopen;
    }
    hasEnd() {
        return this.shortCodeData.hasclose;
    }
    hasContent() {
        return this.shortCodeData.hascontent;
    }
    getStartElement(){
        return this.shortCodeData.elements.find(element => {
            return element.type === 'open';
        })
    }
    getStartAsTag(){
        let startElement = this.getStartElement();
        let startTag = '['+startElement.tag;
        for (let a = 0; a < startElement.attributes.length; a++) {
            startTag += ' '+startElement.attributes[a];
        }
        return startTag+']';
    }
    getEndAsTag(){
        let endElement = this.getEndElement();
        return '[/'+endElement.tag+']';
    }
    getEndElement(){
        return this.shortCodeData.elements.find(element => {
            return element.type === 'close';
        })
    }
    getContentElement() {
        return this.shortCodeData.elements.find(element => {
            return element.type === 'content';
        })
    }
    getContentAsString() {
        let contentElement = this.getContentElement();
        return contentElement.tag;
    }
    updateElementByTag(tag,updatetag) {
        return this.shortCodeData.elements.find(element => {
            if (element.tag === tag) {
                element.tag = updatetag
            }
        })
    }
    addElement(elementData) {
        this.shortCodeData.elements.push(elementData);
    }
    getDefaultElement() {
        return {
            'tag': '',
            'type': '',
            'pos': 0,
            'length': 0,
        }
    }
    isCloseTag(tag) {
        if (tag.substring(0,1) === '/') {
            return true;
        }
        return false;
    }

}