      1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166:

    <?php

    namespace WPGMZA\MarkerListing;

    class Carousel extends \WPGMZA\MarkerListing
    {
        public function __construct($map_id)
        {
            global $wpgmza;

            \WPGMZA\MarkerListing::__construct($map_id);

            $this->setAjaxParameters(array());

            if($wpgmza->settings->useLegacyHTML)
            {
                $document = $this->element->ownerDocument;

                $container = $document->createElement('div');

                if($map_id !== null)
                {
                    $container->setAttribute('id', "wpgmza_marker_list_container_$map_id");
                    $this->element->setAttribute('id', "wpgmza_marker_list_$map_id");
                }

                $container->addClass('wpgmza_marker_carousel');
                $this->element->addClass('owl-carousel');
                $this->element->addClass('owl-theme');

                $this->element->parentNode->appendChild($container);
                $container->appendChild($this->element);
            }

            $this->element->setAttribute('data-wpgmza-carousel-marker-listing', null);
            $this->element->addClass('wpgmza_marker_carousel');
            $this->element->removeClass('wpgmza_marker_list_class');
        }

        public function __get($name)
        {
            global $wpgmza;

            switch($name)
            {
                case 'hideImage':
                    return !empty($wpgmza->settings->wpgmza_settings_carousel_markerlist_image);
                    break;

                case 'hideTitle':
                    return !empty($wpgmza->settings->wpgmza_settings_carousel_markerlist_title);
                    break;

                case 'hideIcon':
                    return !empty($wpgmza->settings->wpgmza_settings_carousel_markerlist_icon);
                    break;

                case 'hideAddress':
                    return !empty($wpgmza->settings->wpgmza_settings_carousel_markerlist_address);
                    break;

                case 'hideDescription':
                    return !empty($wpgmza->settings->wpgmza_settings_carousel_markerlist_description);
                    break;

                case 'hideLink':
                    return !empty($wpgmza->settings->wpgmza_settings_carousel_markerlist_marker_link);
                    break;

                case 'hideDirectionsLink':
                    return !empty($wpgmza->settings->wpgmza_settings_carousel_markerlist_directions);
                    break;
            }

            return \WPGMZA\MarkerListing::__get($name);
        }

        protected function removeHiddenFields($item, $marker)
        {
            global $wpgmza;

            \WPGMZA\MarkerListing::removeHiddenFields($item, $marker);

            if($this->hideDirectionsLink && $el = $item->querySelector('.wpgmza_marker_directions_link'))
                $el->remove();

            if($this->hideImage && $el = $item->querySelector('.wpgmza_map_image'))
                $el->remove();
        }

        public function getAjaxResponse($request)
        {
            global $wpgmza;

            $response = $this->getRecords($request);

            $document = new \WPGMZA\DOMDocument();
            $document->loadPHPFile($this->getItemHTMLPath() . 'carousel-item.html.php');

            $template = $document->querySelector("body>*");
            $template->remove();

            $imageDimensions = $this->getImageDimensions();

            // TODO: Odd / even classnames

            $index = 1;
            foreach($response->data as $marker)
            {
                $item = $template->cloneNode(true);

                // Classes
                if($index % 2 == 1)
                    $item->addClass('wpgmza_carousel_odd');
                else
                    $item->addClass('wpgmza_carousel_even');

                $item->addClass('item owl-item');

                // Attributes
                $item->setAttribute('mid', $marker->id);
                $item->setAttribute('mapid', $request['map_id']);

                // Fields
                $icon = $marker->icon;
                if(empty($icon))
                    $icon = \WPGMZA\Marker::DEFAULT_ICON;

                $item->querySelector('.wpgmza_marker_icon')->setAttribute('src', $icon);
                $item->querySelector('.wpgmza_marker_title')->appendText($marker->title);
                $item->querySelector('.wpgmza_marker_address')->appendText($marker->address);
                $item->querySelector('.wpgmza_marker_description')->import($marker->description);

                if($img = $item->querySelector('.wpgmza_map_image'))
                {
                    if(empty($marker->pic))
                        $img->remove();
                    else
                        $img->setAttribute('src', $marker->pic);
                }

                // Link
                $a = $item->querySelector('.wpgmza-link > a, .wpgmza_marker_link > a');
                $text = __('More Details', 'wp-google-maps');

                if(!empty($wpgmza->settings->wpgmza_settings_infowindow_link_text))
                    $text = $wpgmza->settings->wpgmza_settings_infowindow_link_text;

                if($a && !empty($marker->link))
                {
                    $a->setAttribute('href', $marker->link);
                    $a->appendText($text);
                }

                $this->appendListingItem($document, $item, $marker);
                $index++;
            }

            $response->html = $document->saveInnerBody();

            unset($response->data);

            return $response;
        }
    }