File Manager

Current Path : /webspace/www.beetasty.be/html/wp-content/plugins/ameliabooking/public/js/tinymce/
Upload File :
Current File : //webspace/www.beetasty.be/html/wp-content/plugins/ameliabooking/public/js/tinymce/amelia-mce.js

/* eslint-disable */
(function () {
  tinymce.create('tinymce.plugins.ameliaBookingPlugin', {

    init: function (editor) {
      if (!('wpAmeliaLabels' in window)) {
        return
      }

      let win = null

      let entities = null
      let categories = null
      let services = null
      let employees = null
      let locations = null
      let servicesList = null
      let packages = null
      let events = null
      let tags = null
      let catalogView = null

      let setAndOpenEditor = function (view) {
        editor.windowManager.close()

        let viewBody = [{
          type: 'listbox',
          name: 'am_view_type',
          label: wpAmeliaLabels.select_view,
          values: [
            {value: 'stepbooking', text: 'Step Booking', classes: 'am-booking-shortcode'},
            {value: 'catalogbooking', text: 'Catalog Booking', classes: 'am-booking-shortcode'},
            {value: 'eventslistbooking', text: 'Events List Booking', classes: 'am-booking-shortcode'},
            {value: 'eventscalendarbooking', text: 'Events Calendar Booking', classes: 'am-booking-shortcode'},
            {value: 'customer_panel', text: 'Customer Panel', classes: 'am-booking-shortcode'},
            {value: 'employee_panel', text: 'Employee Panel', classes: 'am-booking-shortcode'},
            {value: 'booking', text: 'Booking', classes: 'am-booking-shortcode am-outdated-booking-shortcode'},
            {value: 'search', text: 'Search', classes: 'am-booking-shortcode am-outdated-booking-shortcode'},
            {value: 'catalog', text: 'Catalog', classes: 'am-booking-shortcode am-outdated-booking-shortcode'},
            {value: 'events', text: 'Events', classes: 'am-booking-shortcode am-outdated-booking-shortcode'},
          ],
          value: view,
          onSelect: function () {
            setAndOpenEditor(this.value())
          }
        },
        ]

        let filterItems = null

        // set view
        switch (view) {
          case ('booking'):
          case ('stepbooking'):

            // Filter
            filterItems = []

            if (categories.length > 1) {
              filterItems.push({
                type: 'listbox',
                name: 'am_booking_category',
                label: wpAmeliaLabels.select_category,
                classes: 'am-booking-categories',
                values: [{
                  value: 0,
                  text: wpAmeliaLabels.show_all_categories
                }].concat(categories),
              })
            }

            if (services.length > 1) {
              filterItems.push({
                type: 'listbox',
                name: 'am_booking_service',
                label: wpAmeliaLabels.select_service,
                classes: 'am-booking-services',
                values: [{
                  value: 0,
                  text: wpAmeliaLabels.show_all_services
                }].concat(services),
              })
            }

            if (employees.length > 1) {
              filterItems.push({
                type: 'listbox',
                name: 'am_booking_employee',
                label: wpAmeliaLabels.select_employee,
                classes: 'am-booking-employees',
                values: [{
                  value: 0,
                  text: wpAmeliaLabels.show_all_employees
                }].concat(employees),
              })
            }

            if (locations.length > 1) {
              filterItems.push({
                type: 'listbox',
                name: 'am_booking_location',
                label: wpAmeliaLabels.select_location,
                classes: 'am-booking-locations',
                values: [{
                  value: 0,
                  text: wpAmeliaLabels.show_all_locations
                }].concat(locations),
              })
            }

            if (packages.length) {
              if (view === 'stepbooking') {
                filterItems.push({
                  type: 'listbox',
                  name: 'am_booking_package',
                  label: wpAmeliaLabels.select_package,
                  classes: 'am-booking-packages',
                  values: [{
                    value: 0,
                    text: wpAmeliaLabels.show_all_packages
                  }].concat(packages),
                })
              }

              viewBody.push({
                type: 'listbox',
                name: 'am_show',
                values: [
                  {value: '', text: wpAmeliaLabels.show_all},
                  {value: 'services', text: wpAmeliaLabels.services},
                  {value: 'packages', text: wpAmeliaLabels.packages}
                ],
                classes: 'am-show',
              })
            }

            viewBody.push({
              type: 'checkbox',
              name: 'am_booking_filter',
              label: wpAmeliaLabels.filter,
              classes: 'am-booking-filter',
              onChange: function () {
                let filterForm = win.find('#am_booking_panel')
                filterForm.visible(!filterForm.visible())
              }
            })

            viewBody.push({
              type: 'form',
              name: 'am_booking_panel',
              classes: 'am-booking-panel',
              items: filterItems,
              visible: false,
            })

            if (view === 'stepbooking') {
              // Selector
              viewBody.push({
                type: 'listbox',
                label: wpAmeliaLabels.trigger_type,
                name: 'am_trigger_type',
                values: [
                  {value: 'id', text: wpAmeliaLabels.trigger_type_id},
                  {value: 'class', text: wpAmeliaLabels.trigger_type_class}
                ],
                classes: 'am-booking-events-view',
              })

              viewBody.push({
                type: 'checkbox',
                label: wpAmeliaLabels.in_dialog,
                name: 'am_in_dialog',
                classes: 'am-booking-dialog',
              })
            }

            break
          case ('search'):
            // Filter
            viewBody.push({
              type: 'checkbox',
              name: 'am_search_date',
              label: wpAmeliaLabels.search_date,
              classes: 'am-search-date',
            })

            if (packages.length) {
              viewBody.push({
                type: 'listbox',
                name: 'am_show',
                values: [
                  {value: '', text: wpAmeliaLabels.show_all},
                  {value: 'services', text: wpAmeliaLabels.services},
                  {value: 'packages', text: wpAmeliaLabels.packages}
                ],
                classes: 'am-show',
              })
            }

            break
          case ('catalog'):
          case ('catalogbooking'):
            var catalogOptions = [
              {value: 'catalog', text: wpAmeliaLabels.show_catalog},
              {value: 'category', text: wpAmeliaLabels.show_category},
              {value: 'service', text: wpAmeliaLabels.show_service}
            ]

            if (packages.length) {
              catalogOptions.push({value: 'package', text: wpAmeliaLabels.show_package})
            }

            viewBody.push({
              type: 'listbox',
              name: 'am_catalog_view_type',
              label: wpAmeliaLabels.select_catalog_view,
              values: catalogOptions,
              classes: 'am-catalog-view-type',
              onSelect: function () {
                catalogView = this.value()

                let categoryElement = win.find('#am_category')
                let serviceElement = win.find('#am_service')
                let packageElement = win.find('#am_package')
                let showElement = win.find('#am_show')

                if (catalogView === 'category') {
                  categoryElement.visible(true)
                  serviceElement.visible(false)
                  packageElement.visible(false)
                  showElement.visible(true)
                } else if (catalogView === 'service') {
                  categoryElement.visible(false)
                  serviceElement.visible(true)
                  packageElement.visible(false)
                  showElement.visible(view !== 'catalog')
                } else if (catalogView === 'package') {
                  categoryElement.visible(false)
                  serviceElement.visible(false)
                  packageElement.visible(true)
                  showElement.visible(false)
                } else {
                  categoryElement.visible(false)
                  serviceElement.visible(false)
                  packageElement.visible(false)
                  showElement.visible(true)
                }
              },
            })

            // Category
            viewBody.push({
              type: 'listbox',
              name: 'am_category',
              values: categories,
              classes: 'am-categories',
            })

            // Service
            viewBody.push({
              type: 'listbox',
              name: 'am_service',
              values: services,
              classes: 'am-services',
            })

            if (packages.length) {
              // Package
              viewBody.push({
                type: 'listbox',
                name: 'am_package',
                values: packages,
                classes: 'am-packages',
              })

              // Service
              viewBody.push({
                type: 'listbox',
                name: 'am_show',
                values: [
                  {value: '', text: wpAmeliaLabels.show_all},
                  {value: 'services', text: wpAmeliaLabels.services},
                  {value: 'packages', text: wpAmeliaLabels.packages}
                ],
                classes: 'am-show',
              })
            }

            // Filter
            filterItems = []

            if (employees.length > 1) {
              filterItems.push({
                type: 'listbox',
                name: 'am_booking_employee',
                label: wpAmeliaLabels.select_employee,
                classes: 'am-booking-employees',
                values: [{
                  value: 0,
                  text: wpAmeliaLabels.show_all_employees
                }].concat(employees),
              })
            }

            if (locations.length > 1) {
              filterItems.push({
                type: 'listbox',
                name: 'am_booking_location',
                label: wpAmeliaLabels.select_location,
                classes: 'am-booking-locations',
                values: [{
                  value: 0,
                  text: wpAmeliaLabels.show_all_locations
                }].concat(locations),
              })
            }

            if (view === 'catalogbooking') {
              filterItems.push({
                type: 'checkbox',
                name: 'am_booking_skip_categories',
                label: wpAmeliaLabels.skip_categories,
                classes: 'am-booking-skip-categories',
              })
            }

            viewBody.push({
              type: 'checkbox',
              name: 'am_booking_filter',
              label: wpAmeliaLabels.filter,
              classes: 'am-booking-filter',
              style: '',
              onChange: function () {
                let filterForm = win.find('#am_booking_panel')
                filterForm.visible(!filterForm.visible())
              }
            })

            viewBody.push({
              type: 'form',
              name: 'am_booking_panel',
              classes: 'am-booking-panel',
              items: filterItems,
              visible: false,
            })

            if (view === 'catalogbooking') {
              // Selector
              viewBody.push({
                type: 'listbox',
                label: wpAmeliaLabels.trigger_type,
                name: 'am_trigger_type',
                values: [
                  {value: 'id', text: wpAmeliaLabels.trigger_type_id},
                  {value: 'class', text: wpAmeliaLabels.trigger_type_class}
                ],
                classes: 'am-booking-events-view',
              })
            }

            break

          case ('events'):
          case ('eventslistbooking'):
          case ('eventscalendarbooking'):
            // Filter
            filterItems = [
              {
                type: 'listbox',
                name: 'am_booking_event',
                label: wpAmeliaLabels.select_event,
                classes: 'am-booking-events',
                values: [{
                  value: 0,
                  text: wpAmeliaLabels.show_all_events
                }].concat(events),
              },
              {
                type: 'checkbox',
                name: 'am_booking_event_recurring',
                label: wpAmeliaLabels.recurring_event,
                classes: 'am-recurring-event',
              },
              {
                type: 'listbox',
                name: 'am_booking_location',
                label: wpAmeliaLabels.select_location,
                classes: 'am-booking-locations',
                values: [{
                  value: 0,
                  text: wpAmeliaLabels.show_all_locations
                }].concat(locations),
              },
              {
                type: 'listbox',
                name: 'am_booking_tag',
                label: wpAmeliaLabels.select_tag,
                classes: 'am-booking-tags',
                values: [{
                  value: 0,
                  text: wpAmeliaLabels.show_all_tags
                }].concat(tags),
              }
            ]

            viewBody.push({
              type: 'checkbox',
              name: 'am_booking_filter',
              label: wpAmeliaLabels.filter,
              classes: 'am-booking-filter',
              onChange: function () {
                let filterForm = win.find('#am_booking_panel')
                filterForm.visible(!filterForm.visible())
              }
            })

            viewBody.push({
              type: 'form',
              name: 'am_booking_panel',
              classes: 'am-booking-panel',
              items: filterItems,
              visible: false,
            })

            if (view === 'eventslistbooking' || view === 'eventscalendarbooking') {
              viewBody.push({
                type: 'listbox',
                label: wpAmeliaLabels.trigger_type,
                name: 'am_trigger_type',
                values: [
                  {value: 'id', text: wpAmeliaLabels.trigger_type_id},
                  {value: 'class', text: wpAmeliaLabels.trigger_type_class}
                ],
                classes: 'am-booking-events-view',
              })

              viewBody.push({
                type: 'checkbox',
                label: wpAmeliaLabels.in_dialog,
                name: 'am_in_dialog',
                classes: 'am-booking-dialog',
              })
            }

            if (view === 'events' && !parseInt(wpAmeliaLabels.isLite)) {
              viewBody.push({
                type: 'listbox',
                name: 'am_booking_event_view_type',
                label: wpAmeliaLabels.show_event_view_type,
                values: [
                  {value: 'list', text: wpAmeliaLabels.show_event_view_list},
                  {value: 'calendar', text: wpAmeliaLabels.show_event_view_calendar}
                ],
                classes: 'am-booking-events-view',
              })
            }

            break

          case ('customer_panel'):
          case ('employee_panel'):

            viewBody.push({
              type: 'checkbox',
              name: 'am_cabinet_appointments',
              label: wpAmeliaLabels.appointments,
              classes: 'am_cabinet_appointments',
            })

            viewBody.push({
              type: 'checkbox',
              name: 'am_cabinet_events',
              label: wpAmeliaLabels.events,
              classes: 'am_cabinet_events',
            })

            if (view === 'employee_panel') {
              viewBody.push({
                type: 'checkbox',
                name: 'am_cabinet_profile',
                label: wpAmeliaLabels.profile,
                classes: 'am_cabinet_profile',
              })
            }

            if (view === 'customer_panel' || view === 'employee_panel') {
              // Selector
              viewBody.push({
                type: 'listbox',
                label: wpAmeliaLabels.choose_panel_version,
                name: 'am_version',
                values: [
                  {value: 1, text: wpAmeliaLabels.panel_version_old},
                  {value: 2, text: wpAmeliaLabels.panel_version_new}
                ],
                classes: 'am_cabinet_version',
              })
            }

            break
        }

        // Selector
        viewBody.push({
          type: 'textbox',
          label: wpAmeliaLabels.manually_loading,
          name: 'am_trigger',
          classes: 'am-text',
          tooltip: wpAmeliaLabels.manually_loading_description
        })

        // open editor
        win = editor.windowManager.open({
          title: 'Amelia Booking',
          width: 500,
          height: 435,
          body: viewBody,
          onSubmit: function (e) {
            let shortCodeString = ''

            switch (view) {
              case ('booking'):
              case ('stepbooking'):
                if (e.data.am_booking_service) {
                  shortCodeString += ' service=' + e.data.am_booking_service
                } else if (e.data.am_booking_category) {
                  shortCodeString += ' category=' + e.data.am_booking_category
                } else if (e.data.am_booking_package) {
                  shortCodeString += ' package=' + e.data.am_booking_package
                }

                if (e.data.am_booking_employee) {
                  shortCodeString += ' employee=' + e.data.am_booking_employee
                }

                if (e.data.am_booking_location) {
                  shortCodeString += ' location=' + e.data.am_booking_location
                }

                if (e.data.am_show) {
                  shortCodeString += ' show=' + e.data.am_show
                }

                if (e.data.am_trigger) {
                  shortCodeString += ' trigger=' + e.data.am_trigger
                }

                if (e.data.am_trigger && view === 'stepbooking' && e.data.am_trigger_type) {
                  shortCodeString += ' trigger_type=' + e.data.am_trigger_type
                }

                if (e.data.am_trigger && view === 'stepbooking' && e.data.am_in_dialog) {
                  shortCodeString += ' in_dialog=1'
                }

                editor.insertContent((view === 'stepbooking' ? '[ameliastepbooking' : '[ameliabooking') + shortCodeString + ']')

                break

              case ('search'):
                if (e.data.am_search_date) {
                  shortCodeString += ' today=1'
                }

                if (e.data.am_trigger) {
                  shortCodeString += ' trigger=' + e.data.am_trigger
                }

                if (e.data.am_show) {
                  shortCodeString += ' show=' + e.data.am_show
                }

                editor.insertContent('[ameliasearch' + shortCodeString + ']')

                break

              case ('catalog'):
                if (e.data.am_booking_employee) {
                  shortCodeString += ' employee=' + e.data.am_booking_employee
                }

                if (e.data.am_booking_location) {
                  shortCodeString += ' location=' + e.data.am_booking_location
                }

                if (e.data.am_show && catalogView !== 'service' && catalogView !== 'package') {
                  shortCodeString += ' show=' + e.data.am_show
                }

                if (e.data.am_trigger) {
                  shortCodeString += ' trigger=' + e.data.am_trigger
                }

                if (catalogView === 'category') {
                  editor.insertContent('[ameliacatalog category=' + e.data.am_category + shortCodeString + ']')
                } else if (catalogView === 'service') {
                  editor.insertContent('[ameliacatalog service=' + e.data.am_service + shortCodeString + ']')
                } else if (catalogView === 'package') {
                  editor.insertContent('[ameliacatalog package=' + e.data.am_package + shortCodeString + ']')
                } else {
                  editor.insertContent('[ameliacatalog' + shortCodeString + ']')
                }

                break

              case ('catalogbooking'):
                if (e.data.am_booking_employee) {
                  shortCodeString += ' employee=' + e.data.am_booking_employee
                }

                if (e.data.am_booking_location) {
                  shortCodeString += ' location=' + e.data.am_booking_location
                }

                if (e.data.am_trigger) {
                  shortCodeString += ' trigger=' + e.data.am_trigger
                }

                if (e.data.am_trigger && e.data.am_trigger_type) {
                  shortCodeString += ' trigger_type=' + e.data.am_trigger_type
                }

                if (e.data.am_trigger && e.data.am_in_dialog) {
                  shortCodeString += ' in_dialog=1'
                }

                if (e.data.am_booking_skip_categories) {
                  shortCodeString += ' categories_hidden=1'
                }

                if (catalogView === 'category') {
                  if (e.data.am_show) {
                    shortCodeString += ' show=' + e.data.am_show
                  }
                  editor.insertContent('[ameliacatalogbooking category=' + e.data.am_category + shortCodeString + ']')
                } else if (catalogView === 'service') {
                  if (e.data.am_show && e.data.am_show !== 'packages') {
                    shortCodeString += ' show=' + e.data.am_show
                  }
                  editor.insertContent('[ameliacatalogbooking service=' + e.data.am_service + shortCodeString + ']')
                } else if (catalogView === 'package') {
                  editor.insertContent('[ameliacatalogbooking package=' + e.data.am_package + shortCodeString + ']')
                } else {
                  if (e.data.am_show) {
                    shortCodeString += ' show=' + e.data.am_show
                  }
                  editor.insertContent('[ameliacatalogbooking' + shortCodeString + ']')
                }

                break

              case ('events'):
              case ('eventslistbooking'):
              case ('eventscalendarbooking'):
                if (e.data.am_booking_event) {
                  shortCodeString += ' event=' + e.data.am_booking_event

                  if (e.data.am_booking_event_recurring) {
                    shortCodeString += ' recurring=1'
                  }
                }

                if (view === 'events' && e.data.am_booking_event_view_type) {
                  shortCodeString += ' type=' + "'" + e.data.am_booking_event_view_type + "'"
                }

                if (e.data.am_booking_tag) {
                  shortCodeString += ` tag="${e.data.am_booking_tag}"`
                }

                if (e.data.am_booking_location) {
                  shortCodeString += ' location=' + e.data.am_booking_location
                }

                if (e.data.am_trigger) {
                  shortCodeString += ' trigger=' + e.data.am_trigger
                }

                if (e.data.am_trigger && (view === 'eventslistbooking' || view === 'eventscalendarbooking') && e.data.am_trigger_type) {
                  shortCodeString += ' trigger_type=' + e.data.am_trigger_type
                }

                if (e.data.am_trigger && (view === 'eventslistbooking' || view === 'eventscalendarbooking') && e.data.am_in_dialog) {
                  shortCodeString += ' in_dialog=1'
                }

                if (view === 'eventslistbooking') {
                  editor.insertContent('[ameliaeventslistbooking' + shortCodeString + ']')
                } else if (view === 'eventscalendarbooking') {
                  editor.insertContent('[ameliaeventscalendarbooking' + shortCodeString + ']')
                } else {
                  editor.insertContent('[ameliaevents' + shortCodeString + ']')
                }

                break

              case ('customer_panel'):
              case ('employee_panel'):
                if (e.data.am_version) {
                  shortCodeString += ' version=' + e.data.am_version
                }

                if (e.data.am_cabinet_appointments) {
                  shortCodeString += ' appointments=1'
                }

                if (e.data.am_cabinet_events) {
                  shortCodeString += ' events=1'
                }

                if (e.data.am_cabinet_profile && view !== 'customer_panel') {
                  shortCodeString += ' profile-hidden=1'
                }

                if (e.data.am_trigger) {
                  shortCodeString += ' trigger=' + e.data.am_trigger
                }

                editor.insertContent(view === 'customer_panel' ? '[ameliacustomerpanel' + shortCodeString + ']' : '[ameliaemployeepanel' + shortCodeString + ']')

                break
            }
          },
          onOpen: function () {
            categoryElement = win.find('#am_category')
            serviceElement = win.find('#am_service')
            packageElement = win.find('#am_package')

            categoryElement.visible(false)
            serviceElement.visible(false)
            packageElement.visible(false)
          },
        })
      }

      // Add new button
      editor.addButton('ameliaButton', {
        title: wpAmeliaLabels.insert_amelia_shortcode,
        cmd: 'ameliaButtonCommand',
        image: window.wpAmeliaPluginURL + 'public/img/amelia-logo-admin-icon.svg'
      })

      // Button functionality
      editor.addCommand('ameliaButtonCommand', function () {
        jQuery.ajax({
          url: ajaxurl + '?action=wpamelia_api&call=/entities&types[]=categories&types[]=employees&types[]=locations&types[]=events&types[]=tags&types[]=packages',
          dataType: 'json',
          success: function (response) {
            entities = response.data
            categories = []
            services = []
            employees = []
            locations = []
            packages = []
            servicesList = []
            events = []
            tags = []

            for (let i = 0; i < response.data.categories.length; i++) {
              categories.push({
                value: response.data.categories[i].id,
                text: response.data.categories[i].name + ' (id: ' + response.data.categories[i].id + ')'
              })
            }

            // Add all services to one array
            response.data.categories.map(category => category.serviceList).forEach(function (serviceList) {
              servicesList = servicesList.concat(serviceList)
            })

            // Create array of services objects
            for (let i = 0; i < servicesList.length; i++) {
              if (servicesList[i].show) {
                services.push({
                  value: servicesList[i].id,
                  text: servicesList[i].name + ' (id: ' + servicesList[i].id + ')'
                })
              }
            }

            // Create array of packages objects
            for (let i = 0; i < response.data.categories.length; i++) {
              if (response.data.categories[i].show) {
                packages.push({
                  value: response.data.categories[i].id,
                  text: response.data.categories[i].name + ' (id: ' + response.data.categories[i].id + ')'
                })
              }
            }

            // Create array of employees objects
            for (let i = 0; i < response.data.employees.length; i++) {
              employees.push({
                value: response.data.employees[i].id,
                text: response.data.employees[i].firstName + ' ' + response.data.employees[i].lastName + ' (id: ' + response.data.employees[i].id + ')'
              })
            }

            // Create array of locations objects
            for (let i = 0; i < response.data.locations.length; i++) {
              locations.push({
                value: response.data.locations[i].id,
                text: response.data.locations[i].name + ' (id: ' + response.data.locations[i].id + ')'
              })
            }

            // Create array of packages objects
            for (let i = 0; i < response.data.packages.length; i++) {
              packages.push({
                value: response.data.packages[i].id,
                text: response.data.packages[i].name + ' (id: ' + response.data.packages[i].id + ')'
              })
            }

            for (let i = 0; i < response.data.events.length; i++) {
              events.push({
                value: response.data.events[i].id,
                text: response.data.events[i].name + ' (id: ' + response.data.events[i].id + ') - ' + response.data.events[i].formattedPeriodStart
              })
            }

            for (let i = 0; i < response.data.tags.length; i++) {
              tags.push({
                value: response.data.tags[i].name,
                text: response.data.tags[i].name
              })
            }

            // set and open editor
            setAndOpenEditor('stepbooking')
          }
        })
      })
    }
  })

  tinymce.PluginManager.add('ameliaBookingPlugin', tinymce.plugins.ameliaBookingPlugin)
})()

File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com