Your IP : 216.73.217.68


Current Path : /home/w/u/e/wuectly/www/03cbe/
Upload File :
Current File : /home/w/u/e/wuectly/www/03cbe/extensions.tar

popups/jcemediabox.xml000060400000010407152455706710011100 0ustar00<?xml version="1.0" ?>
<extension version="3.4" type="plugin" group="jce" method="upgrade">
    <name>WF_POPUPS_JCEMEDIABOX_TITLE</name>
    <version>2.9.99.2</version>
    <creationDate>22-04-2026</creationDate>
    <author>Ryan Demmer</author>
    <authorEmail>info@joomlacontenteditor.net</authorEmail>
    <authorUrl>https://www.joomlacontenteditor.net/</authorUrl>
    <copyright>Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved</copyright>
    <license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
    <description>WF_POPUPS_JCEMEDIABOX_DESC</description>
    <files>
        <file>jcemediabox.php</file>
        <folder>jcemediabox</folder>
    </files>
    <fields name="jcemediabox">
        <fieldset name="jcemediabox">
            <field name="enable" type="yesno" default="1" label="WF_LABEL_EXTENSION_ENABLE" description="WF_LABEL_EXTENSION_ENABLE_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            
            <field name="popup_group" type="text" default="" label="WF_POPUPS_JCEMEDIABOX_GROUP" description="WF_POPUPS_JCEMEDIABOX_GROUP_DESC" />

            <field name="popup_icon" type="yesno" default="1" label="WF_POPUPS_JCEMEDIABOX_ICON" description="WF_POPUPS_JCEMEDIABOX_ICON_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>

            <field name="popup_icon_position" type="list" default="" label="WF_POPUPS_JCEMEDIABOX_ICON_POSITION" description="WF_POPUPS_JCEMEDIABOX_ICON_POSITION_DESC">
                <option value="">WF_OPTION_NOT_SET</option>
                <option value="icon-left">WF_OPTION_LEFT</option>
                <option value="icon-right">WF_OPTION_RIGHT</option>
                <option value="icon-top-left">WF_OPTION_TOP_LEFT</option>
                <option value="icon-top-right">WF_OPTION_TOP_RIGHT</option>
                <option value="icon-bottom-left">WF_OPTION_BOTTOM_LEFT</option>
                <option value="icon-bottom-right">WF_OPTION_BOTTOM_RIGHT</option>
            </field>

            <field name="popup_autopopup" type="list" default="" label="WF_POPUPS_JCEMEDIABOX_AUTO" description="WF_POPUPS_JCEMEDIABOX_AUTO_DESC">
                <option value="">WF_OPTION_NOT_SET</option>
                <option value="autopopup-single">WF_POPUPS_JCEMEDIABOX_AUTO_SINGLE</option>
                <option value="autopopup-multiple">WF_POPUPS_JCEMEDIABOX_AUTO_MULTIPLE</option>
            </field>

            <field name="popup_hide" type="yesno" default="0" label="WF_POPUPS_JCEMEDIABOX_HIDE" description="WF_POPUPS_JCEMEDIABOX_HIDE_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>

            <field name="popup_mediatype" type="list" default="" label="WF_POPUPS_JCEMEDIABOX_MEDIATYPE" description="WF_POPUPS_JCEMEDIABOX_MEDIATYPE_DESC">
                <option value="">WF_OPTION_NOT_SET</option>
                <option value="text/html">WF_POPUPS_JCEMEDIABOX_INTERNAL</option>
                <option value="iframe">WF_POPUPS_JCEMEDIABOX_EXTERNAL</option>
                <option value="image">WF_POPUPS_JCEMEDIABOX_IMAGE</option>
                <option value="application/x-shockwave-flash">WF_POPUPS_JCEMEDIABOX_FLASH</option>
                <option value="video/quicktime">WF_POPUPS_JCEMEDIABOX_QUICKTIME</option>
                <option value="application/x-mplayer2">WF_POPUPS_JCEMEDIABOX_WINDOWSMEDIA</option>
                <option value="video/divx">WF_POPUPS_JCEMEDIABOX_DIVX</option>
                <option value="application/x-director">WF_POPUPS_JCEMEDIABOX_DIRECTOR</option>
                <option value="audio/x-pn-realaudio-plugin">WF_POPUPS_JCEMEDIABOX_REAL</option>
                <option value="video/mp4">WF_POPUPS_JCEMEDIABOX_VIDEO_MP4</option>
                <option value="audio/mp3">WF_POPUPS_JCEMEDIABOX_AUDIO_MP3</option>
                <option value="video/webm">WF_POPUPS_JCEMEDIABOX_VIDEO_WEBM</option>
                <option value="audio/webm">WF_POPUPS_JCEMEDIABOX_AUDIO_WEBM</option>
            </field>

        </fieldset>
    </fields>
    <media></media>
    <plugins>link,imgmanager_ext,mediamanager,filemanager</plugins>
    <languages></languages>
</extension>
 popups/index.html000060400000000054152455706710010076 0ustar00<html><body bgcolor="#FFFFFF"></body></html>popups/jcemediabox.php000060400000004114152455706710011065 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Plugin\PluginHelper;

class WFPopupsExtension_Jcemediabox
{
    /**
     * Constructor activating the default information of the class.
     */
    public function __construct()
    {
        if (self::isEnabled()) {
            $scripts = array();

            $document = WFDocument::getInstance();

            $document->addScript('jcemediabox', 'extensions/popups/jcemediabox/js');
            $document->addStyleSheet('jcemediabox', 'extensions/popups/jcemediabox/css');
        }
    }

    public function getParams()
    {
        $wf = WFEditorPlugin::getInstance();

        return array(
            'width' => 600,
            'album' => '#jcemediabox_popup_group',
            'multiple' => '#jcemediabox_popup_title,#jcemediabox_popup_caption',
            'attribute' => $wf->getParam('popups.jcemediabox.attribute', 'data-mediabox'),
            'popup_group' => $wf->getParam('popups.jcemediabox.popup_group', ''),
            'popup_icon' => $wf->getParam('popups.jcemediabox.popup_icon', 1),
            'popup_icon_position' => $wf->getParam('popups.jcemediabox.popup_icon_position', ''),
            'popup_autopopup' => $wf->getParam('popups.jcemediabox.popup_autopopup', ''),
            'popup_hide' => $wf->getParam('popups.jcemediabox.popup_hide', 0),
            'popup_mediatype' => $wf->getParam('popups.jcemediabox.popup_mediatype', ''),
        );
    }

    public function isEnabled()
    {
        $wf = WFEditorPlugin::getInstance();

        if ((PluginHelper::isEnabled('system', 'jcemediabox') || PluginHelper::isEnabled('system', 'wf_lightcase')) && $wf->getParam('popups.jcemediabox.enable', 1) == 1) {
            return true;
        }

        return false;
    }

    public function checkVersion()
    {
        return true;
    }
}
popups/jcemediabox/css/jcemediabox.css000060400000000076152455706710014133 0ustar00#jcemediabox_popup_height,#jcemediabox_popup_width{width:65px}popups/jcemediabox/css/index.html000060400000000054152455706710013140 0ustar00<html><body bgcolor="#FFFFFF"></body></html>popups/jcemediabox/js/index.html000060400000000054152455706710012764 0ustar00<html><body bgcolor="#FFFFFF"></body></html>popups/jcemediabox/js/jcemediabox.js000060400000024312152455706710013602 0ustar00/* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */
var JCEMediaBox = {
    Popup: {
        addons: {},
        setAddons: function(n, o) {
            void 0 === this.addons[n] && (this.addons[n] = {}), $.extend(this.addons[n], o);
        },
        getAddons: function(n) {
            return n ? this.addons[n] : this.addons;
        },
        getAddon: function(v, n) {
            var r, cp = !1, n = this.getAddons(n);
            return $.each(n, function(addon, o) {
                o = o[addon] || function() {};
                void 0 !== (r = o.call(this, v)) && (cp = r);
            }), cp;
        }
    },
    trim: function(s) {
        return $.trim(s);
    }
};

WFPopups.addPopup("jcemediabox", {
    params: {
        popup_group: "",
        popup_icon: 1,
        popup_icon_position: "",
        popup_autopopup: "",
        popup_hide: 0,
        popup_mediatype: ""
    },
    setup: function() {
        var self = this;
        $("#jcemediabox_popup_icon").on("change", function() {
            self.setIcon();
        }), $.each(this.params, function(k, v) {
            "popup_icon_position" === k && (v = v.replace("icon-", "zoom-")), $("#jcemediabox_" + k).val(v);
        });
    },
    check: function(n) {
        return /(jce(popup|_popup|lightbox)|wfpopup)/.test(n.className) || n.getAttribute("data-mediabox");
    },
    getMediaType: function(n) {
        var mt, o;
        switch (n.type) {
          case "image/gif":
          case "image/jpeg":
          case "image/png":
          case "image/*":
          case "image":
            mt = "image";
            break;

          case "iframe":
            mt = "iframe";
            break;

          case "director":
          case "application/x-director":
            mt = "application/x-director";
            break;

          case "windowsmedia":
          case "mplayer":
          case "application/x-mplayer2":
            mt = "application/x-mplayer2";
            break;

          case "quicktime":
          case "video/quicktime":
            mt = "video/quicktime";
            break;

          case "real":
          case "realaudio":
          case "audio/x-pn-realaudio-plugin":
            mt = "audio/x-pn-realaudio-plugin";
            break;

          case "divx":
          case "video/divx":
            mt = "video/divx";
            break;

          case "flash":
          case "application/x-shockwave-flash":
            mt = "application/x-shockwave-flash";
            break;

          case "ajax":
          case "text/xml":
          case "text/html":
            mt = "text/html";
        }
        return (mt = !mt && n.href && (JCEMediaBox.options = {
            popup: {
                google_viewer: 0,
                pdfjs: 0
            }
        }, o = JCEMediaBox.Popup.getAddon(n.href)) && o.type ? o.type : mt) || n.type || "";
    },
    getImageType: function(s) {
        s = /\.(jp(eg|g)|png|bmp|gif|tiff)$/.exec(s);
        return s ? ("jpg" === s[1] && (s[1] = "jpeg"), "image/" + s[1]) : "image/jpeg";
    },
    remove: function(n) {
        var ed = tinyMCEPopup.editor;
        $.each([ "jcepopup", "jcelightbox", "jcebox", "icon-left", "icon-right", "icon-top-left", "icon-top-right", "icon-bottom-left", "icon-bottom-right", "zoom-left", "zoom-right", "zoom-top-left", "zoom-top-right", "zoom-bottom-left", "zoom-bottom-right", "noicon", "noshow", "autopopup-single", "autopopup-multiple" ], function(i, v) {
            ed.dom.removeClass(n, v);
        }), ed.dom.setAttrib(n, "data-mediabox", null), ed.dom.setAttrib(n, "data-mediabox-title", null), 
        ed.dom.setAttrib(n, "data-mediabox-caption", null), ed.dom.setAttrib(n, "data-mediabox-group", null);
    },
    convertData: function(s) {
        var data;
        return /^{[\w\W]+}$/.test(s) ? $.parseJSON(function(s) {
            return s.replace(/:"([^"]+)"/, function(a, b) {
                return ':"' + b.replace(/^\s+|\s+$/, "").replace(/\s*::\s*/, "::") + '"';
            });
        }(s)) : /\w+\[[^\]]+\]/.test(s) ? (data = {}, tinymce.each(tinymce.explode(s, ";"), function(p) {
            p = p.match(/([\w-]+)\[(.*)\]$/);
            p && 3 === p.length && (data[p[1]] = p[2]);
        }), data) : {};
    },
    getAttributes: function(n, index, callback) {
        var v, ed = tinyMCEPopup.editor, data = {}, rel = ed.dom.getAttrib(n, "rel"), icon = /noicon/g.test(n.className), hide = /noshow/g.test(n.className), hide = (/(autopopup(.?|-single|-multiple))/.test(n.className) && (v = /autopopup-multiple/.test(n.className) ? "autopopup-multiple" : "autopopup-single", 
        $("#jcemediabox_popup_autopopup").val(v)), $("#jcemediabox_popup_icon").val(icon ? 0 : 1), 
        $("#jcemediabox_popup_icon_position").prop("disabled", icon), $("#jcemediabox_popup_hide").val(hide ? 1 : 0), 
        (icon = /(zoom|icon)-(top-right|top-left|bottom-right|bottom-left|left|right)/.exec(n.className)) && (v = icon[0]) && (v = v.replace("icon-", "zoom-"), 
        $("#jcemediabox_popup_icon_position").val(v)), /(^|\\s+)alternate|stylesheet|start|next|prev|contents|index|glossary|copyright|chapter|section|subsection|appendix|help|bookmark|nofollow|noopener|noreferrer|licence|tag|friend(\\s+|$)/gi), icon = ed.dom.getAttrib(n, "data-json") || ed.dom.getAttrib(n, "data-mediabox"), x = (icon && (data = this.convertData(icon)), 
        rel && /\w+\[.*\]/.test(rel) ? (v = "", (icon = hide.exec(rel)) && (v = icon[1], 
        rel = rel.replace(hide, "")), /^\w+\[/.test(rel) && ((data = this.convertData($.trim(rel)) || {}).rel = v)) : (icon = $.trim(rel.replace(hide, "")), 
        $("#jcemediabox_popup_group").val(icon)), $.isEmptyObject(data) && $.each(ed.dom.getAttribs(n), function(i, at) {
            var k, at = at.name || at.nodeName;
            at && -1 !== at.indexOf("data-mediabox-") && (k = at.substr(14), data[k] = ed.dom.getAttrib(n, at));
        }), data.title && /::/.test(data.title) && (1 < (v = data.title.split("::")).length && (data.caption = v[1]), 
        data.title = v[0]), $.each(data, function(k, v) {
            if ($("#jcemediabox_popup_" + k).get(0) && "" !== v) {
                if ("title" == k || "caption" == k || "group" == k) try {
                    v = decodeURIComponent(v);
                } catch (e) {}
                v = tinymce.DOM.decode(v), $("#jcemediabox_popup_" + k).val(v).trigger("change"), 
                "title" != k && "caption" != k || $('input[name^="jcemediabox_popup_' + k + '"]').eq(index).val(v), 
                delete data[k];
            }
        }), $.each([ "href", "type", "data-mediabox-width", "data-mediabox-height" ], function(i, name) {
            var val = ed.dom.getAttrib(n, name);
            val && (0 === (name = "href" === name ? "src" : name).indexOf("data-mediabox-") && (name = name.substr(14)), 
            data[name] = val);
        }), data = callback(data), 0);
        return $.each(data, function(k, v) {
            if ("src" == k || "width" == k || "height" == k) return !0;
            if ("" !== v) {
                try {
                    v = decodeURIComponent(v);
                } catch (e) {}
                var n = $(".uk-repeatable", "#jcemediabox_popup_params").eq(0), n = (0 < x && $(n).clone(!0).appendTo($(n).parent()), 
                $(".uk-repeatable", "#jcemediabox_popup_params").eq(x).find("input, select"));
                $(n).eq(0).val(k), $(n).eq(1).val(v);
            }
            x++;
        }), $("#jcemediabox_popup_mediatype").val(this.getMediaType(n)), data;
    },
    setAttributes: function(n, args, index) {
        var ed = tinyMCEPopup.editor, auto = (index = index || 0, this.remove(n), 
        index = index || 0, ed.dom.addClass(n, "jcepopup"), ed.dom.setAttrib(n, "data-mediabox", 1), 
        $("#jcemediabox_popup_autopopup").val()), data = (auto && ed.dom.addClass(n, auto), 
        args.data || {}), auto = (args.title && (ed.dom.setAttrib(n, "title", args.title), 
        delete args.title), $.each([ "group", "width", "height", "title", "caption" ], function(i, k) {
            var mv, v = $("#jcemediabox_popup_" + k).val() || args[k] || "";
            "title" != k && "caption" != k || void 0 !== (mv = $('input[name^="jcemediabox_popup_' + k + '"]').eq(index).val()) && (v = mv), 
            data[k] = v;
        }), $(".uk-repeatable", "#jcemediabox_popup_params").each(function() {
            var k = $('input[name^="jcemediabox_popup_params_name"]', this).val(), v = $('input[name^="jcemediabox_popup_params_value"]', this).val();
            "" !== k && "" !== v && (data[k] = v);
        }), $("#jcemediabox_popup_mediatype").val() || n.type || args.type || "");
        "image" == auto && (auto = this.getImageType(n.href)), ed.dom.setAttrib(n, "type", auto), 
        data.type && delete data.type;
        auto = (auto = ed.dom.getAttrib(n, "rel", "")) && auto.replace(/([a-z0-9]+)(\[([^\]]+)\]);?/gi, "");
        $(".uk-repeatable", "#jcemediabox_popup_params").each(function() {
            var elements = $("input, select", this), key = $(elements).eq(0).val(), elements = $(elements).eq(1).val();
            data[key] = elements;
        });
        for (var attrs = n.attributes, i = attrs.length - 1; 0 <= i; i--) {
            var attrName = attrs[i].name;
            attrName && -1 !== attrName.indexOf("data-mediabox-") && n.removeAttribute(attrName);
        }
        $.each(data, function(k, v) {
            if ("src" == k) return !0;
            ed.dom.setAttrib(n, "data-mediabox-" + k, v);
        }), ed.dom.setAttrib(n, "rel", $.trim(auto)), 0 == $("#jcemediabox_popup_icon").val() ? ed.dom.addClass(n, "noicon") : ed.dom.addClass(n, $("#jcemediabox_popup_icon_position").val()), 
        1 == $("#jcemediabox_popup_hide").val() && ed.dom.addClass(n, "noshow");
    },
    setIcon: function() {
        var v = $("#jcemediabox_popup_icon").val();
        parseInt(v, 10) ? $("#jcemediabox_popup_icon_position").prop("disabled", !1).removeAttr("disabled") : $("#jcemediabox_popup_icon_position").attr("disabled", "disabled");
    },
    onSelect: function() {},
    onSelectFile: function(args) {
        $.each(args, function(k, v) {
            $("#jcemediabox_popup_" + k).val(v);
        });
    }
});popups/jcemediabox/tmpl/default.php000060400000023503152455706710013470 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

?>
    <div class="uk-form-row uk-grid uk-grid-small">
        <label for="jcemediabox_popup_title" class="uk-form-label uk-width-1-5 hastip" title="<?php echo Text::_('WF_POPUPS_JCEMEDIABOX_OPTION_TITLE_DESC'); ?>"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_OPTION_TITLE'); ?></label>
        <div class="uk-form-controls uk-width-4-5">
          <input id="jcemediabox_popup_title" class="uk-input-multiple" type="text" class="text" value="" />
        </div>
    </div>

    <div class="uk-form-row uk-grid uk-grid-small">
        <label for="jcemediabox_popup_caption" class="uk-form-label uk-width-1-5 hastip" title="<?php echo Text::_('WF_POPUPS_JCEMEDIABOX_CAPTION_DESC'); ?>"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_CAPTION'); ?></label>
        <div class="uk-form-controls uk-width-4-5">
          <input id="jcemediabox_popup_caption" class="uk-input-multiple" type="text" class="text" value="" />
        </div>
    </div>

    <div class="uk-form-row uk-grid uk-grid-small">
        <label for="jcemediabox_popup_group" class="uk-form-label uk-width-1-5 hastip" title="<?php echo Text::_('WF_POPUPS_JCEMEDIABOX_GROUP_DESC'); ?>"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_GROUP'); ?></label>
        <div class="uk-form-controls uk-width-4-5">
          <input id="jcemediabox_popup_group" type="text" class="text" value="" />
        </div>
    </div>

    <div class="uk-form-row uk-grid uk-grid-small">
            <label class="hastip uk-form-label uk-width-1-5" title="<?php echo Text::_('WF_LABEL_DIMENSIONS_DESC'); ?>">
                <?php echo Text::_('WF_LABEL_DIMENSIONS'); ?>
            </label>
            <div class="uk-form-controls uk-grid uk-grid-collapse uk-width-4-5 uk-form-constrain">

                <div class="uk-form-controls">
                    <input type="text" id="jcemediabox_popup_width" value="" class="uk-text-center" />
                </div>

                <div class="uk-form-controls">
                    <strong class="uk-form-label uk-text-center uk-vertical-align-middle">&times;</strong>
                </div>

                <div class="uk-form-controls">
                    <input type="text" id="jcemediabox_popup_height" value="" class="uk-text-center" />
                </div>

                <label class="uk-form-label">
                    <input class="uk-constrain-checkbox" type="checkbox" checked />
                    <?php echo Text::_('WF_LABEL_PROPORTIONAL'); ?>
                </label>
            </div>
        </div>

    <div class="uk-form-row uk-grid uk-grid-small">
        <label for="jcemediabox_popup_icon" class="uk-form-label uk-width-1-5 hastip" title="<?php echo Text::_('WF_POPUPS_JCEMEDIABOX_ICON_DESC'); ?>"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_ICON'); ?></label>
        <div class="uk-form-controls uk-width-4-5">
            <div class="uk-width-1-5">
              <select id="jcemediabox_popup_icon">
                  <option value="0"><?php echo Text::_('JNO'); ?></option>
                  <option value="1" selected="selected"><?php echo Text::_('JYES'); ?></option>
              </select>
            </div>
            <div class="uk-width-3-5 uk-margin-left">
              <label for="jcemediabox_popup_icon_position" class="uk-form-label uk-width-2-5 hastip" title="<?php echo Text::_('WF_POPUPS_JCEMEDIABOX_ICON_POSITION_DESC'); ?>"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_ICON_POSITION'); ?></label>
              <div class="uk-form-controls uk-width-3-5">
                <select id="jcemediabox_popup_icon_position">
                    <option value=""><?php echo Text::_('WF_OPTION_NOT_SET'); ?></option>
                    <option value="zoom-left"><?php echo Text::_('WF_OPTION_LEFT'); ?></option>
                    <option value="zoom-right"><?php echo Text::_('WF_OPTION_RIGHT'); ?></option>
                    <option value="zoom-top-left"><?php echo Text::_('WF_OPTION_TOP_LEFT'); ?></option>
                    <option value="zoom-top-right"><?php echo Text::_('WF_OPTION_TOP_RIGHT'); ?></option>
                    <option value="zoom-bottom-left"><?php echo Text::_('WF_OPTION_BOTTOM_LEFT'); ?></option>
                    <option value="zoom-bottom-right"><?php echo Text::_('WF_OPTION_BOTTOM_RIGHT'); ?></option>
                </select>
              </div>
            </div>
        </div>
    </div>

    <div class="uk-form-row uk-grid uk-grid-small">
        <label for="jcemediabox_popup_hide" class="uk-form-label uk-width-1-5 hastip" title="<?php echo Text::_('WF_POPUPS_JCEMEDIABOX_HIDE_DESC'); ?>"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_HIDE'); ?></label>
        <div class="uk-form-controls uk-width-4-5">
            <div class="uk-width-1-5">
                <select id="jcemediabox_popup_hide">
                      <option value="0"><?php echo Text::_('JNO'); ?></option>
                      <option value="1"><?php echo Text::_('JYES'); ?></option>
                </select>
            </div>
            <div class="uk-width-3-5 uk-margin-left">
                <label for="jcemediabox_popup_autopopup" class="uk-form-label uk-width-2-5 hastip" title="<?php echo Text::_('WF_POPUPS_JCEMEDIABOX_AUTO_DESC'); ?>"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_AUTO'); ?></label>
                <div class="uk-form-controls uk-width-3-5">
                    <select id="jcemediabox_popup_autopopup">
                        <option value=""><?php echo Text::_('WF_OPTION_NOT_SET'); ?></option>
                        <option value="autopopup-single"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_AUTO_SINGLE'); ?></option>
                        <option value="autopopup-multiple"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_AUTO_MULTIPLE'); ?></option>
                    </select>
                </div>
            </div>
        </div>
    </div>

    <div class="uk-form-row uk-grid uk-grid-small">
        <label for="jcemediabox_popup_mediatype" class="uk-form-label uk-width-1-5 hastip" title="<?php echo Text::_('WF_POPUPS_JCEMEDIABOX_MEDIATYPE_DESC'); ?>"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_MEDIATYPE'); ?></label>
        <div class="uk-form-controls uk-width-2-5">
          <select id="jcemediabox_popup_mediatype">
                <option value=""><?php echo Text::_('WF_OPTION_NOT_SET'); ?></option>
                <option value="text/html"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_INTERNAL'); ?></option>
                <option value="iframe"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_EXTERNAL'); ?></option>
                <option value="image"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_IMAGE'); ?></option>
                <option value="video/youtube"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_YOUTUBE'); ?></option>
                <option value="video/vimeo"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_VIMEO'); ?></option>
                <option value="application/x-shockwave-flash"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_FLASH'); ?></option>
                <option value="video/quicktime"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_QUICKTIME'); ?></option>
                <option value="application/x-mplayer2"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_WINDOWSMEDIA'); ?></option>
                <option value="video/divx"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_DIVX'); ?></option>
                <option value="application/x-director"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_DIRECTOR'); ?></option>
                <option value="audio/x-pn-realaudio-plugin"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_REAL'); ?></option>
                <option value="video/mp4"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_VIDEO_MP4'); ?></option>
                <option value="audio/mp3"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_AUDIO_MP3'); ?></option>
                <option value="video/webm"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_VIDEO_WEBM'); ?></option>
                <option value="audio/webm"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_AUDIO_WEBM'); ?></option>
            </select>
        </div>
    </div>
    <div class="uk-form-row uk-grid uk-grid-small">
        <label for="jcemediabox_popup_params" class="uk-form-label uk-width-1-5 hastip" title="<?php echo Text::_('WF_POPUPS_JCEMEDIABOX_PARAMS_DESC'); ?>"><?php echo Text::_('WF_POPUPS_JCEMEDIABOX_PARAMS'); ?></label>
        <div class="uk-width-4-5" id="jcemediabox_popup_params">
          <div class="uk-form-row uk-repeatable">
                  <div class="uk-form-controls uk-grid uk-grid-small uk-width-9-10">
                      <label class="uk-form-label uk-width-1-6"><?php echo Text::_('WF_LABEL_NAME'); ?></label>
                      <div class="uk-form-controls uk-width-1-3">
                        <input type="text" name="jcemediabox_popup_params_name[]" />
                      </div>
                      <label class="uk-form-label uk-width-1-6"><?php echo Text::_('WF_LABEL_VALUE'); ?></label>
                      <div class="uk-form-controls uk-width-1-3">
                        <input type="text" name="jcemediabox_popup_params_value[]" />
                      </div>
                  </div>
                  <div class="uk-form-controls uk-margin-small-left">
                    <button class="uk-button uk-button-link uk-repeatable-create" aria-label="<?php echo Text::_('WF_LABEL_ADD'); ?>" title="<?php echo Text::_('WF_LABEL_ADD'); ?>"><i class="uk-icon-plus"></i></button>
                    <button class="uk-button uk-button-link uk-repeatable-delete" aria-label="<?php echo Text::_('WF_LABEL_REMOVE'); ?>" title="<?php echo Text::_('WF_LABEL_REMOVE'); ?>"><i class="uk-icon-trash"></i></button>
                  </div>
          </div>
        </div>
    </div>
popups/jcemediabox/tmpl/index.html000060400000000054152455706710013324 0ustar00<html><body bgcolor="#FFFFFF"></body></html>popups/jcemediabox/index.html000060400000000054152455706710012350 0ustar00<html><body bgcolor="#FFFFFF"></body></html>popups/widgetkit2/js/index.html000060400000000054152455706710012567 0ustar00<html><body bgcolor="#FFFFFF"></body></html>popups/widgetkit2/js/widgetkit.js000060400000005323152455706710013127 0ustar00/* JCE Editor - 2.5.16 | 08 April 2016 | http://www.joomlacontenteditor.net | Copyright (C) 2006 - 2016 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */
(function(){WFPopups.addPopup('widgetkit2',{params:{lightbox_keyboard:'',lightbox_duration:'',lightbox_group:''},setup:function(){$.each(this.params,function(k,v){$('#widgetkit_'+k).val(v);});},check:function(n){return n.getAttribute('data-lightbox')||n.getAttribute('data-uk-lightbox');},remove:function(n){tinyMCEPopup.editor.dom.setAttribs(n,{'data-lightbox':null,'data-uk-lightbox':null,'data-lightbox-type':null});},str2json:function(str,notevil){try{if(notevil){return JSON.parse(str.replace(/([\$\w]+)\s*:/g,function(_,$1){return'"'+$1+'":';}).replace(/'([^']+)'/g,function(_,$1){return'"'+$1+'"';}));}else{return(new Function("","var json = "+str+"; return JSON.parse(JSON.stringify(json));"))();}}catch(e){return false;}},convertData:function(s){if(s.indexOf('{')===0){var start=(s?s.indexOf("{"):-1),options={};if(start!=-1){try{options=this.str2json(string.substr(start));}catch(e){}}
return options;}else{var a=[];$.each(s.split(';'),function(i,n){if(n){n=n.replace(/([\w]+):(.*)/,'"$1":"$2"');a.push(n);}});return $.parseJSON('{'+a.join(',')+'}');}},getAttributes:function(n){var ed=tinyMCEPopup.editor,args={};var data=ed.dom.getAttrib(n,'data-lightbox')||ed.dom.getAttrib(n,'data-uk-lightbox');if(data&&data!=="on"){data=this.convertData(data);$.each(data,function(k,v){$('#widgetkit_lightbox_'+k).val(v);});}
$('#widgetkit_lightbox_title').val(ed.dom.getAttrib(n,'title'));var map=WFPopups.config.map||{'href':'src'};$.each(map,function(from,to){var href=ed.dom.getAttrib(n,from);href=href.replace(/(\?|&)tmpl=component/i,'');$('#'+to).val(href);args.src=href;});return args;},setAttributes:function(n,args){var self=this,ed=tinyMCEPopup.editor,data=[];this.remove(n);tinymce.each(['group','keyboard','duration'],function(k){var v=$('#widgetkit_lightbox_'+k).val();if(v==''||v==null){if(args[k]){v=args[k];}else{return;}}
data.push(k+':'+v);});if(args.data){$.each(args.data,function(k,v){data.push(k+':'+v);});}
var src=ed.dom.getAttrib(n,'href');if(/index\.php/.test(src)&&/:\/\//.test(src)===false){if(/\?/.test(src)){src+='&tmpl=component';}else{src+='?tmpl=component';}
ed.dom.setAttrib(n,'href',src);}
var value="on";if(data.length){value=$.map(data,function(s){var v=s.split(':');return"{"+v[0]+":'"+v[1]+"'}";}).join(',');}
var type=$('#widgetkit_lightbox_type').val();if(type){ed.dom.setAttrib(n,'data-lightbox-type',type);}
ed.dom.setAttrib(n,'data-uk-lightbox',value);ed.dom.setAttrib(n,'title',$('#widgetkit_lightbox_title').val());ed.dom.setAttrib(n,'target','_blank');},onSelect:function(){},onSelectFile:function(args){}});})();popups/widgetkit2/css/widgetkit.css000060400000000575152455706710013463 0ustar00/*JCE Editor - 2.5.16 | 08 April 2016 | http://www.joomlacontenteditor.net | Copyright (C) 2006 - 2016 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html*/
#popup_extension_widgetkit input[type="text"]{width:250px;}#popup_extension_widgetkit #widgetkit_lightbox_title{width:350px;}#popup_extension_widgetkit select{width:auto;}popups/widgetkit2/css/index.html000060400000000054152455706710012743 0ustar00<html><body bgcolor="#FFFFFF"></body></html>popups/widgetkit2/index.html000060400000000054152455706710012153 0ustar00<html><body bgcolor="#FFFFFF"></body></html>popups/widgetkit2/tmpl/index.html000060400000000054152455706710013127 0ustar00<html><body bgcolor="#FFFFFF"></body></html>popups/widgetkit2/tmpl/default.php000060400000004133152455706710013271 0ustar00<?php
/**
 * @package   	JCE
 * @copyright 	Copyright (c) 2009-2016 Ryan Demmer. All rights reserved.
 * @license   	GNU/GPL 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * JCE is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 */
defined('_WF_EXT') or die('RESTRICTED');
?>
<table border="0" cellpadding="3" cellspacing="0">
    <tr>
        <td><label for="widgetkit_lightbox_title" class="hastip" title="<?php echo WFText::_('WF_POPUPS_WIDGETKIT_BOXTITLE_DESC'); ?>"><?php echo WFText::_('WF_POPUPS_WIDGETKIT_BOXTITLE'); ?></label></td>
        <td colspan="3"><input id="widgetkit_lightbox_title" type="text" class="text" value="" /></td>
    </tr>
    <tr>
        <td><label for="widgetkit_lightbox_group" class="hastip" title="<?php echo WFText::_('WF_POPUPS_WIDGETKIT_GROUP_DESC'); ?>"><?php echo WFText::_('WF_POPUPS_WIDGETKIT_GROUP'); ?></label></td>
        <td colspan="3"><input id="widgetkit_lightbox_group" type="text" class="text" value="" /></td>
    </tr>
    <tr>
        <td><label for="widgetkit_lightbox_type" class="hastip" title="<?php echo WFText::_('WF_POPUPS_WIDGETKIT_TYPE_DESC'); ?>"><?php echo WFText::_('WF_POPUPS_WIDGETKIT_TYPE'); ?></label></td>
        <td>
            <select id="widgetkit_lightbox_type">
                <option value=""><?php echo WFText::_('WF_POPUPS_WIDGETKIT_DETECT'); ?></option>
                <option value="image"><?php echo WFText::_('WF_POPUPS_WIDGETKIT_IMAGE'); ?></option>
                <option value="video"><?php echo WFText::_('WF_POPUPS_WIDGETKIT_VIDEO'); ?></option>
                <option value="youtube"><?php echo WFText::_('WF_POPUPS_WIDGETKIT_YOUTUBE'); ?></option>
                <option value="vimeo"><?php echo WFText::_('WF_POPUPS_WIDGETKIT_VIMEO'); ?></option>
                <!--option value="iframe"><?php echo WFText::_('WF_POPUPS_WIDGETKIT_IFRAME'); ?></option-->
            </select>
        </td>
    </tr>
</table>aggregator/audio.php000060400000004200152455706710010504 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

class WFAggregatorExtension_Audio extends WFAggregatorExtension
{
    /**
     * Constructor activating the default information of the class.
     */
    public function __construct()
    {
        parent::__construct(array(
            'format' => 'video',
        ));
    }

    public function display()
    {
        $document = WFDocument::getInstance();
        $document->addScript('audio', 'extensions/aggregator/audio/js');
    }

    public function isEnabled()
    {
        return true;
    }

    public function getParams()
    {
        $plugin = WFEditorPlugin::getInstance();

        $defaults = array(
            'controls' => (int) $plugin->getParam('aggregator.audio.controls', 1),
            'loop' => (int) $plugin->getParam('aggregator.audio.loop', 0),
            'autoplay' => (int) $plugin->getParam('aggregator.audio.autoplay', 0),
            'muted' => (int) $plugin->getParam('aggregator.audio.mute', 0),
        );

        $attributes = $plugin->getParam('aggregator.audio.attributes', '');

        if ($attributes) {            
            $defaults['attributes'] = $this->getCustomDefaultAttributes($attributes);
        }

        return $defaults;
    }

    public function getEmbedData($data, $url)
    {
        $params = $this->getParams();

        $default = array(
            'controls' => 1,
            'loop' => 0,
            'autoplay' => 0,
            'muted' => 0,
        );

        foreach ($params as $name => $value) {
            if ($default[$name] === $value) {
                continue;
            }

            if ($name == 'attributes') {
                $data[$name] = $value;
                continue;
            }

            if ($value !== '') {
                $data[$name] = $value;
            }
        }

        $data['src'] = $url;

        return $data;
    }
}
aggregator/audio.xml000060400000003376152455706710010532 0ustar00<?xml version="1.0" ?>
<extension version="3.4" type="plugin" group="jce" method="upgrade">
	<name>WF_AGGREGATOR_AUDIO_TITLE</name>
	<version>2.9.99.2</version>
	<creationDate>22-04-2026</creationDate>
	<author>Ryan Demmer</author>
	<authorEmail>info@joomlacontenteditor.net</authorEmail>
	<authorUrl>https://www.joomlacontenteditor.net/</authorUrl>
	<copyright>Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved</copyright>
	<license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
	<description>WF_AGGREGATOR_AUDIO_DESC</description>
	<files>
		<filename>audio.php</filename>
		<folder>audio</folder>
	</files>
	<fields name="audio">
		<fieldset name="aggregator.audio">
			<field name="controls" type="yesno" default="1"  label="WF_AGGREGATOR_AUDIO_CONTROLS" description="WF_AGGREGATOR_AUDIO_CONTROLS_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="loop" type="yesno" default="0"  label="WF_AGGREGATOR_AUDIO_LOOP" description="WF_AGGREGATOR_AUDIO_LOOP_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="autoplay" type="yesno" default="0"  label="WF_AGGREGATOR_AUDIO_AUTOPLAY" description="WF_AGGREGATOR_AUDIO_AUTOPLAY_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="mute" type="yesno" default="0"  label="WF_AGGREGATOR_AUDIO_MUTE" description="WF_AGGREGATOR_AUDIO_MUTE_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="attributes" type="keyvalue" default="" label="WF_PARAM_CUSTOM_ATTRIBUTES" description="WF_PARAM_CUSTOM_ATTRIBUTES_DESC" boolean="true" />
		</fieldset>
	</fields>
	<plugins></plugins>
</extension>
aggregator/index.html000060400000000054152455706710010672 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/youtube/index.html000060400000000054152455706710012366 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/youtube/js/index.html000060400000000054152455706710013002 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/youtube/js/youtube.js000060400000016544152455706710013052 0ustar00/* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */
WFAggregator.add("youtube", {
    params: {
        width: 560,
        height: 315,
        embed: !0
    },
    props: {
        rel: 1,
        autoplay: 0,
        mute: 0,
        controls: 1,
        modestbranding: 0,
        enablejsapi: 0,
        loop: 0,
        playlist: "",
        start: "",
        end: "",
        privacy: 0
    },
    setup: function() {
        $.each(this.params, function(k, v) {
            var x;
            if ("attributes" == k) return x = 0, $.each(v, function(key, value) {
                var $repeatable = $(".uk-repeatable", "#youtube_attributes"), $repeatable = (0 < x && ($repeatable.eq(0).clone(!0).appendTo($repeatable.parent()), 
                $repeatable = $(".uk-repeatable", "#youtube_attributes")), $repeatable.eq(x).find("input, select"));
                $repeatable.eq(0).val(key), $repeatable.eq(1).val(value), x++;
            }), !0;
            $("#youtube_" + k).val(v).filter(":checkbox, :radio").prop("checked", !!v);
        }), $("#youtube_autoplay").on("change", function() {
            this.checked && $("#youtube_mute").prop("checked", !0);
        }).trigger("change");
    },
    getTitle: function() {
        return this.title || this.name;
    },
    getType: function() {
        return $("#youtube_embed:visible").is(":checked") ? "flash" : "iframe";
    },
    isSupported: function(v) {
        return !!v && !!/youtu(\.)?be(.+)?\/(.+)/.test(v) && "youtube";
    },
    getValues: function(data) {
        var id, self = this, args = {}, type = this.getType(), src = data.src, u = this.parseURL(src), u = ($.extend(args, u.query), 
        src = src.replace(/^(http:)?\/\//, "https://"), $(":input", "#youtube_options").not("#youtube_embed, #youtube_https, #youtube_privacy").each(function() {
            var k = $(this).attr("id"), v = $(this).val();
            if (!k) return !0;
            k = k.substr(k.indexOf("_") + 1), $(this).is(":checkbox") && (v = $(this).is(":checked") ? 1 : 0), 
            self.props[k] != v && "" !== v && (args[k] = v);
        }), 1 == args.autoplay && (args.mute = 1), src = src.replace(/youtu(\.)?be([^\/]+)?\/(.+)/, function(a, b, c, d) {
            return d = d.replace(/(watch\?v=|v\/|embed\/|live\/)/, ""), b && !c && (c = ".com"), 
            id = d.replace(/([^\?&#]+)/, function($0, $1) {
                return $1;
            }), "youtube" + c + "/" + ("iframe" == type ? "embed" : "v") + "/" + d;
        }), id && args.loop && !args.playlist && (args.playlist = id), src = $("#youtube_privacy").is(":checked") ? src.replace(/youtube\./, "youtube-nocookie.") : src.replace(/youtube-nocookie\./, "youtube."), 
        "iframe" == type ? $.extend(data, {
            allowfullscreen: "allowfullscreen",
            frameborder: 0
        }) : $.extend(!0, data, {
            param: {
                allowfullscreen: "allowfullscreen",
                wmode: "opaque"
            }
        }), $(".uk-repeatable", "#youtube_params").each(function() {
            var key = $('input[name^="youtube_params_name"]', this).val(), value = $('input[name^="youtube_params_value"]', this).val();
            key && (args[key] = value);
        }), $.param(args));
        return u && (src = src + (/\?/.test(src) ? "&" : "?") + u), data.src = src, 
        $(".uk-repeatable", "#youtube_attributes").each(function() {
            var elements = $("input, select", this), key = $(elements).eq(0).val(), elements = $(elements).eq(1).val();
            key && (data["youtube_" + key] = elements);
        }), data;
    },
    parseURL: function(url) {
        var o = {};
        try {
            var urlObj = new URL(url);
            o.host = urlObj.hostname, o.path = urlObj.pathname, o.query = {}, urlObj.searchParams.forEach(function(value, key) {
                o.query[key] = value;
            }), o.anchor = urlObj.hash ? urlObj.hash.substring(1) : null;
        } catch (e) {
            console.error("Invalid URL:", url);
        }
        return o;
    },
    setValues: function(data) {
        var attribs, params, u, s, x, self = this, id = "", src = data.src || data.data || "";
        return src && (attribs = {}, params = {}, src = "https://" + (u = this.parseURL(src)).host + u.path, 
        $.each(data, function(key, val) {
            0 === key.indexOf("youtube_") && (key = key.substr(key.indexOf("_") + 1), 
            "" !== val && !0 !== val || (val = key), attribs[key] = val, delete data[key]);
        }), -1 !== src.indexOf("youtube-nocookie") ? data.youtube_privacy = 1 : data.youtube_privacy = 0, 
        u.query.v ? id = u.query.v : (s = /\/?(embed|live|shorts|v)?\/([\w-]+)\b/.exec(u.path)) && "array" === $.type(s) && (id = s.pop()), 
        $.each(u.query, function(key, val) {
            if ("v" == key) return !0;
            "t" == key && (key = "start", val = val.replace(/(\D)/g, ""));
            try {
                val = decodeURIComponent(val);
            } catch (e) {}
            return "autoplay" == key && (val = parseInt(val, 10)), "mute" == key && (val = parseInt(val, 10)), 
            "playlist" == key && val == id || "wmode" == key || self.props[key] === val || (void 0 !== self.props[key] ? (data["youtube_" + key] = val, 
            !0) : (params[key] = val, void delete data[key]));
        }), src = src.replace(/youtu(\.)?be([^\/]+)?\/(.+)/, function(a, b, c, d) {
            var args = "youtube";
            return b && (args += ".com"), c && (args += c), args += "/embed/" + id, 
            u.anchor && (args += "#" + u.anchor.replace(/(\?|&)(.+)/, "")), args;
        }).replace(/\/\/youtube/i, "//www.youtube"), $.each(data, function(key, val) {
            /^iframe_(allow|frameborder|allowfullscreen)/.test(key) && delete data[key];
        }), x = 0, $.each(params, function(key, val) {
            var $repeatable = $(".uk-repeatable", "#youtube_params");
            if ("feature" == key && "oembed" == val) return !0;
            0 < x && ($repeatable.eq(0).clone(!0).appendTo($repeatable.parent()), 
            $repeatable = $(".uk-repeatable", "#youtube_params"));
            $repeatable = $repeatable.eq(x).find("input, select");
            $repeatable.eq(0).val(key), $repeatable.eq(1).val(val), x++;
        }), x = 0, $.each(attribs, function(key, val) {
            var $repeatable = $(".uk-repeatable", "#youtube_attributes"), $repeatable = (0 < x && ($repeatable.eq(0).clone(!0).appendTo($repeatable.parent()), 
            $repeatable = $(".uk-repeatable", "#youtube_attributes")), $repeatable.eq(x).find("input, select"));
            $repeatable.eq(0).val(key), $repeatable.eq(1).val(val), x++;
        }), data.src = src), data;
    },
    getAttributes: function(src) {
        var args = {}, data = this.setValues({
            src: src
        }) || {}, width = ($.each(data, function(k, v) {
            "src" !== k && (args[k] = v);
        }), this.params.width), height = this.params.height;
        return -1 !== src.indexOf("/shorts/") && (width = this.params.height, height = this.params.width), 
        args = $.extend(args, {
            src: data.src || src,
            width: width,
            height: height
        });
    },
    setAttributes: function() {},
    onSelectFile: function() {},
    onInsert: function() {}
});aggregator/youtube/tmpl/default.php000060400000014527152455706710013514 0ustar00<?php

/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

?>
<div class="uk-form-row uk-grid uk-grid-small">
  <div class="uk-width-4-10">
    <input type="checkbox" id="youtube_controls" checked />
    <label for="youtube_controls" title="<?php echo Text::_('WF_AGGREGATOR_YOUTUBE_CONTROLS_DESC') ?>" class="tooltip">
      <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_CONTROLS') ?>
    </label>
  </div>
  <div class="uk-width-6-10">
    <input type="checkbox" id="youtube_loop" />
    <label for="youtube_loop" title="<?php echo Text::_('WF_AGGREGATOR_YOUTUBE_LOOP_DESC') ?>" class="tooltip">
      <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_LOOP') ?>
    </label>
  </div>
</div>
<div class="uk-form-row uk-grid uk-grid-small">
  <div class="uk-width-4-10">
    <input type="checkbox" id="youtube_autoplay" />
    <label for="youtube_autoplay" title="<?php echo Text::_('WF_AGGREGATOR_YOUTUBE_AUTOPLAY_DESC') ?>" class="tooltip">
      <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_AUTOPLAY') ?>
    </label>
  </div>
  <div class="uk-width-6-10">
    <input type="checkbox" id="youtube_mute" />
    <label for="youtube_mute" title="<?php echo Text::_('WF_AGGREGATOR_YOUTUBE_MUTE_DESC') ?>" class="tooltip">
      <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_MUTE') ?>
    </label>
  </div>
</div>
<div class="uk-form-row uk-grid uk-grid-small">
  <div class="uk-width-4-10">
    <input type="checkbox" id="youtube_modestbranding" checked />
    <label for="youtube_modestbranding" title="<?php echo Text::_('WF_AGGREGATOR_YOUTUBE_MODESTBRANDING_DESC') ?>" class="tooltip">
      <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_MODESTBRANDING') ?>
    </label>
  </div>

  <div class="uk-width-6-10">
    <input type="checkbox" id="youtube_privacy" />
    <label for="youtube_privacy" title="<?php echo Text::_('WF_AGGREGATOR_YOUTUBE_PRIVACY_DESC') ?>" class="tooltip">
      <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_PRIVACY') ?>
    </label>
  </div>

</div>

<div class="uk-grid uk-grid-small">
  <label for="youtube_rel" class="uk-form-label uk-width-1-5 tooltip" title="<?php echo Text::_('WF_AGGREGATOR_YOUTUBE_RELATED_DESC') ?>">
    <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_RELATED') ?>
  </label>

  <div class="uk-form-controls uk-width-4-5">

    <select id="youtube_rel">
      <option value="1">
        <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_RELATED_ALL') ?>
      </option>
      <option value="0">
        <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_RELATED_CHANNEL') ?>
      </option>
    </select>

  </div>
</div>

<div class="uk-grid uk-grid-small">
  <label for="youtube_start" title="<?php echo Text::_('WF_AGGREGATOR_YOUTUBE_START_DESC') ?>" class="tooltip uk-form-label uk-width-2-10">
    <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_START') ?>
  </label>

  <div class="uk-form-controls uk-width-2-10">
    <input type="number" id="youtube_start" />
  </div>
  <div class="uk-width-6-10">
    <label for="youtube_end" class="uk-form-label uk-width-2-10" title="<?php echo Text::_('WF_AGGREGATOR_YOUTUBE_END_DESC') ?>" class="tooltip">
      <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_END') ?>
    </label>
    <div class="uk-form-controls uk-width-3-10">
      <input type="number" id="youtube_end" />
    </div>
  </div>
</div>

<div class="uk-grid uk-grid-small">
  <label for="youtube_playlist" class="uk-form-label uk-width-1-5" title="<?php echo Text::_('WF_AGGREGATOR_YOUTUBE_PLAYLIST_DESC') ?>" class="tooltip">
    <?php echo Text::_('WF_AGGREGATOR_YOUTUBE_PLAYLIST') ?>
  </label>
  <div class="uk-form-controls uk-width-4-5">
    <input type="text" id="youtube_playlist" />
  </div>
</div>

<div class="uk-form-row uk-grid uk-grid-small">
  <label for="youtube_params" class="uk-form-label uk-width-1-5 hastip" title="<?php echo Text::_('WF_AGGREGATOR_YOUTUBE_PARAMS_DESC'); ?>"><?php echo Text::_('WF_AGGREGATOR_YOUTUBE_PARAMS'); ?></label>
  <div class="uk-width-4-5" id="youtube_params">
    <div class="uk-form-row uk-repeatable">
      <div class="uk-form-controls uk-grid uk-grid-small uk-width-9-10">
        <label class="uk-form-label uk-width-1-10"><?php echo Text::_('WF_LABEL_NAME'); ?></label>
        <div class="uk-form-controls uk-width-4-10">
          <input type="text" name="youtube_params_name[]" />
        </div>
        <label class="uk-form-label uk-width-1-10"><?php echo Text::_('WF_LABEL_VALUE'); ?></label>
        <div class="uk-form-controls uk-width-4-10">
          <input type="text" name="youtube_params_value[]" />
        </div>
      </div>
      <div class="uk-form-controls uk-margin-small-left">
        <button type="button" class="uk-button uk-button-link uk-repeatable-create"><i class="uk-icon-plus"></i></button>
        <button type="button" class="uk-button uk-button-link uk-repeatable-delete"><i class="uk-icon-trash"></i></button>
      </div>
    </div>
  </div>
</div>

<div class="uk-form-row uk-grid uk-grid-small">
  <label for="youtube_attributes" class="uk-form-label uk-width-1-5"><?php echo Text::_('WF_LABEL_ATTRIBUTES'); ?></label>
  <div class="uk-width-4-5" id="youtube_attributes">
    <div class="uk-form-row uk-repeatable">
      <div class="uk-form-controls uk-grid uk-grid-small uk-width-9-10">
        <label class="uk-form-label uk-width-1-10"><?php echo Text::_('WF_LABEL_NAME'); ?></label>
        <div class="uk-form-controls uk-width-4-10">
          <input type="text" name="youtube_attributes_name[]" />
        </div>
        <label class="uk-form-label uk-width-1-10"><?php echo Text::_('WF_LABEL_VALUE'); ?></label>
        <div class="uk-form-controls uk-width-4-10">
          <input type="text" name="youtube_attributes_value[]" />
        </div>
      </div>
      <div class="uk-form-controls uk-margin-small-left">
        <button class="uk-button uk-button-link uk-repeatable-create" aria-label="<?php echo Text::_('WF_LABEL_ADD'); ?>" title="<?php echo Text::_('WF_LABEL_ADD'); ?>"><i class="uk-icon-plus"></i></button>
        <button class="uk-button uk-button-link uk-repeatable-delete" aria-label="<?php echo Text::_('WF_LABEL_REMOVE'); ?>" title="<?php echo Text::_('WF_LABEL_REMOVE'); ?>"><i class="uk-icon-trash"></i></button>
      </div>
    </div>
  </div>
</div>aggregator/youtube/tmpl/index.html000060400000000054152455706710013342 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/vimeo.php000060400000005720152455706710010532 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

class WFAggregatorExtension_Vimeo extends WFAggregatorExtension
{
    /**
     * Constructor activating the default information of the class.
     */
    public function __construct()
    {
        parent::__construct(array(
            'format' => 'video',
        ));
    }

    public function display()
    {
        $document = WFDocument::getInstance();
        $document->addScript('vimeo', 'extensions/aggregator/vimeo/js');
    }

    public function isEnabled()
    {
        $plugin = WFEditorPlugin::getInstance();

        return $plugin->checkAccess('aggregator.vimeo.enable', 1);
    }

    public function getParams()
    {
        $plugin = WFEditorPlugin::getInstance();

        $defaults = array(
            'width' => $plugin->getParam('aggregator.vimeo.width', 400),
            'height' => $plugin->getParam('aggregator.vimeo.height', 225),

            'color' => (string) $plugin->getParam('aggregator.vimeo.color', ''),
            'loop' => (int) $plugin->getParam('aggregator.vimeo.loop', 0),
            'autoplay' => (int) $plugin->getParam('aggregator.vimeo.autoplay', 0),
            'intro' => (int) $plugin->getParam('aggregator.vimeo.intro', 0),
            'title' => (int) $plugin->getParam('aggregator.vimeo.title', 0),
            'byline' => (int) $plugin->getParam('aggregator.vimeo.byline', 0),
            'portrait' => (int) $plugin->getParam('aggregator.vimeo.portrait', 0),
            'fullscreen' => (int) $plugin->getParam('aggregator.vimeo.fullscreen', 1),
            'dnt' => (int) $plugin->getParam('aggregator.vimeo.dnt', 0),
        );

        $attributes = $plugin->getParam('aggregator.vimeo.attributes', '');

        if ($attributes) {            
            $defaults['attributes'] = $this->getCustomDefaultAttributes($attributes);
        }

        return $defaults;
    }

    public function getEmbedData($data, $url)
    {
        $params = $this->getParams();

        $default = array(
            'width' => 560,
            'height' => 315,
            'controls' => 1,
            'loop' => 0,
            'autoplay' => 0,
            'rel' => 1,
            'modestbranding' => 0,
            'privacy' => 0,
        );

        foreach ($params as $name => $value) {
            if (isset($default[$name]) && $value === $default[$name]) {
                continue;
            }

            if ($name == 'width' || $name == 'height' || $name == 'attributes') {
                $data[$name] = $value;
                continue;
            }

            $query[$name] = $value;
        }

        if (!empty($options)) {
            $data['query'] = http_build_query($options);
        }

        return $data;
    }
}
aggregator/vimeo.xml000060400000006342152455706710010544 0ustar00<?xml version="1.0" ?>
<extension version="3.4" type="plugin" group="jce" method="upgrade">
	<name>WF_AGGREGATOR_VIMEO_TITLE</name>
	<version>2.9.99.2</version>
	<creationDate>22-04-2026</creationDate>
	<author>Ryan Demmer</author>
	<authorEmail>info@joomlacontenteditor.net</authorEmail>
	<authorUrl>https://www.joomlacontenteditor.net/</authorUrl>
	<copyright>Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved</copyright>
	<license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
	<description>WF_AGGREGATOR_VIMEO_DESC</description>
	<files>
		<filename>vimeo.php</filename>
		<folder>vimeo</folder>
	</files>
	<fields name="vimeo">
		<fieldset name="aggregator.vimeo">
			<field name="enable" type="yesno" default="1" label="WF_LABEL_EXTENSION_ENABLE" description="WF_LABEL_EXTENSION_ENABLE_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>
			<field name="width" type="number" default="400" class="input-small" label="WF_LABEL_WIDTH" description="WF_AGGREGATOR_VIMEO_WIDTH_DESC" />
			<field name="height" type="number" default="225" class="input-small" label="WF_LABEL_HEIGHT" description="WF_AGGREGATOR_VIMEO_HEIGHT_DESC" />

			<field name="color" type="color" size="10" default="" label="WF_AGGREGATOR_VIMEO_COLOR" description="WF_AGGREGATOR_VIMEO_COLOR_DESC" />

			<field name="intro" type="yesno" default="0" label="WF_AGGREGATOR_VIMEO_INTRO" description="WF_AGGREGATOR_VIMEO_INTRO_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="portrait" type="yesno" default="0" label="WF_AGGREGATOR_VIMEO_PORTRAIT" description="WF_AGGREGATOR_VIMEO_PORTRAIT_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="title" type="yesno" default="0" label="WF_AGGREGATOR_VIMEO_INTROTITLE" description="WF_AGGREGATOR_VIMEO_INTROTITLE_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="byline" type="yesno" default="0" label="WF_AGGREGATOR_VIMEO_BYLINE" description="WF_AGGREGATOR_VIMEO_BYLINE_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="autoplay" type="yesno" default="0" label="WF_AGGREGATOR_VIMEO_AUTOPLAY" description="WF_AGGREGATOR_VIMEO_AUTOPLAY_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="loop" type="yesno" default="0" label="WF_AGGREGATOR_VIMEO_LOOP" description="WF_AGGREGATOR_VIMEO_LOOP_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="fullscreen" type="yesno" default="1" label="WF_AGGREGATOR_VIMEO_FULLSCREEN" description="WF_AGGREGATOR_VIMEO_FULLSCREEN_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="dnt" type="yesno" default="0" label="WF_AGGREGATOR_VIMEO_DNT" description="WF_AGGREGATOR_VIMEO_DNT_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="attributes" type="keyvalue" default="" label="WF_PARAM_CUSTOM_ATTRIBUTES" description="WF_PARAM_CUSTOM_ATTRIBUTES_DESC" boolean="true" />
		</fieldset>
	</fields>
	<plugins></plugins>
</extension>aggregator/audio/index.html000060400000000054152455706710011773 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/audio/js/index.html000060400000000054152455706710012407 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/audio/js/audio.js000060400000005612152455706710012056 0ustar00/* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */
WFAggregator.add("audio", {
    params: {},
    props: {
        autoplay: 0,
        loop: 0,
        controls: 1,
        mute: 0
    },
    setup: function() {
        var x = 0;
        $.each(this.params, function(k, v) {
            "attributes" == k ? $.each(v, function(key, value) {
                var $repeatable = $(".media_option.audio .uk-repeatable"), $repeatable = (0 < x && ($repeatable.eq(0).clone(!0).appendTo($repeatable.parent()), 
                $repeatable = $(".media_option.audio .uk-repeatable")), $repeatable.eq(x).find("input, select"));
                $repeatable.eq(0).val(key), $repeatable.eq(1).val(value), x++;
            }) : $("#audio_" + k).val(v).filter(":checkbox, :radio").prop("checked", !!v);
        });
    },
    getTitle: function() {
        return this.title || this.name;
    },
    getType: function() {
        return "audio";
    },
    isSupported: function(v) {
        return !!v && (v = v.split("?")[0], !!/\.(mp3|oga|webm|wav|m4a|aiff)$/.test(v)) && "audio";
    },
    getValues: function(data) {
        var sources = [], agent = ($("input[id], select[id]", "#video_options").each(function() {
            var key = $(this).attr("id"), val = $(this).val();
            if (!key) return !0;
            "checkbox" === this.type && (val = !!this.checked), data[key] = val;
        }), $('input[name="audio_source[]"]').each(function() {
            var val = $(this).val();
            val !== data.src && sources.push(val);
        }), sources.length && (data.audio_source = sources), delete data.width, 
        delete data.height, navigator.userAgent.match(/(Opera|Chrome|Safari|Gecko)/));
        return agent && (data.classes += " mce-object-agent-" + agent[0].toLowerCase()), 
        $(".uk-repeatable", "#audio_attributes").each(function() {
            var elements = $("input, select", this), key = $(elements).eq(0).val(), elements = $(elements).eq(1).val();
            key && (data["audio_" + key] = elements);
        }), data;
    },
    setValues: function(data) {
        var x = 0;
        return $.each(data, function(key, val) {
            if (-1 === key.indexOf("audio_")) return !0;
            key = key.substr(key.indexOf("_") + 1);
            var $repeatable = $(".uk-repeatable", "#audio_attributes"), $repeatable = (0 < x && ($repeatable.eq(0).clone(!0).appendTo($repeatable.parent()), 
            $repeatable = $(".uk-repeatable", "#audio_attributes")), $repeatable.eq(x).find("input, select"));
            $repeatable.eq(0).val(key), $repeatable.eq(1).val(val), x++;
        }), data;
    },
    getAttributes: function(src) {
        return {
            width: "",
            height: ""
        };
    }
});aggregator/dailymotion.xml000060400000002526152455706710011755 0ustar00<?xml version="1.0" ?>
<extension version="3.4" type="plugin" group="jce" method="upgrade">
	<name>WF_AGGREGATOR_DAILYMOTION_TITLE</name>
	<version>2.9.99.2</version>
	<creationDate>22-04-2026</creationDate>
	<author>Ryan Demmer</author>
	<authorEmail>info@joomlacontenteditor.net</authorEmail>
	<authorUrl>https://www.joomlacontenteditor.net/</authorUrl>
	<copyright>Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved</copyright>
	<license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
	<description>WF_AGGREGATOR_DAILYMOTION_DESC</description>
	<files>
		<filename>dailymotion</filename>
		<folder>dailymotion</folder>
	</files>
	<fields name="dailymotion">
		<fieldset name="aggregator.dailymotion">
			<field name="enable" type="yesno" default="1" label="WF_LABEL_EXTENSION_ENABLE" description="WF_LABEL_EXTENSION_ENABLE_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>
			<field name="width" type="number" default="400" class="input-small" label="WF_LABEL_WIDTH" />
			<field name="height" type="number" default="225" class="input-small" label="WF_LABEL_HEIGHT" />

			<field name="attributes" type="keyvalue" default="" label="WF_PARAM_CUSTOM_ATTRIBUTES" description="WF_PARAM_CUSTOM_ATTRIBUTES_DESC" boolean="true" />
		</fieldset>
	</fields>
	<plugins></plugins>
</extension>aggregator/dailymotion.php000060400000004125152455706710011741 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

class WFAggregatorExtension_Dailymotion extends WFAggregatorExtension
{
    /**
     * Constructor activating the default information of the class.
     */
    public function __construct()
    {
        parent::__construct(array(
            'format' => 'video',
        ));
    }

    public function display()
    {
        $document = WFDocument::getInstance();
        $document->addScript('dailymotion', 'extensions/aggregator/dailymotion/js');
        $document->addStyleSheet('dailymotion', 'extensions/aggregator/dailymotion/css');
    }

    public function isEnabled()
    {
        $plugin = WFEditorPlugin::getInstance();

        return $plugin->checkAccess('aggregator.dailymotion.enable', 1);
    }

    public function getParams()
    {
        $plugin = WFEditorPlugin::getInstance();

        $defaults = array(
            'width' => $plugin->getParam('aggregator.dailymotion.width', 480),
            'height' => $plugin->getParam('aggregator.dailymotion.height', 270),
        );

        $attributes = $plugin->getParam('aggregator.dailymotion.attributes', '');

        if ($attributes) {            
            $defaults['attributes'] = $this->getCustomDefaultAttributes($attributes);
        }

        return $defaults;
    }

    public function getEmbedData($data, $url)
    {
        $params = $this->getParams();

        $default = array(
            'width' => 480,
            'height' => 270,
        );

        foreach ($params as $name => $value) {
            if (isset($default[$name]) && $value === $default[$name]) {
                continue;
            }

            if ($name == 'width' || $name == 'height' || $name == 'attributes') {
                $data[$name] = $value;
                continue;
            }
        }

        return $data;
    }
}
aggregator/vimeo/index.html000060400000000054152455706710012011 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/vimeo/js/index.html000060400000000054152455706710012425 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/vimeo/js/vimeo.js000060400000010656152455706710012116 0ustar00/* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */
WFAggregator.add("vimeo", {
    params: {
        width: 480,
        height: 480,
        embed: !0
    },
    props: {
        color: "",
        autoplay: 0,
        loop: 0,
        fullscreen: 1,
        dnt: 0
    },
    setup: function() {
        $("#vimeo_embed").toggle(this.params.embed), $.each(this.params, function(k, v) {
            var x;
            if ("attributes" == k) return x = 0, $.each(v, function(key, value) {
                var $repeatable = $(".media_option.vimeo .uk-repeatable"), $repeatable = (0 < x && ($repeatable.eq(0).clone(!0).appendTo($repeatable.parent()), 
                $repeatable = $(".media_option.vimeo .uk-repeatable")), $repeatable.eq(x).find("input, select"));
                $repeatable.eq(0).val(key), $repeatable.eq(1).val(value), x++;
            }), !0;
            $("#vimeo_" + k).val(v).filter(":checkbox, :radio").prop("checked", !!v);
        });
    },
    getTitle: function() {
        return this.title || this.name;
    },
    getType: function() {
        return "iframe";
    },
    isSupported: function(v) {
        return !!v && !!/vimeo(.+)?\/(.+)/.test(v) && !/\/external\//.test(v) && "vimeo";
    },
    getValues: function(data) {
        var hash, self = this, args = {}, id = "", src = data.src, matches = (-1 !== src.indexOf("=") && $.extend(args, Wf.String.query(src)), 
        $("input, select", "#vimeo_options").not("#vimeo_embed").each(function() {
            var k = $(this).attr("id"), v = $(this).val();
            if (!k) return !0;
            k = k.substr(k.indexOf("_") + 1), $(this).is(":checkbox") && (v = $(this).is(":checked") ? 1 : 0), 
            self.props[k] != v && "" !== v && ("color" === k && "#" === v.charAt(0) && (v = v.substr(1)), 
            args[k] = v);
        }), args.clip_id ? id = args.clip_id : (hash = id = "", (matches = /vimeo\.com\/([0-9]+)\/?([a-z0-9]+)?/.exec(src)) && tinymce.is(matches, "array") && (id = matches[1], 
        2 < matches.length) && (hash = matches[2]), id += hash ? "?h=" + hash : ""), 
        src = "https://player.vimeo.com/video/" + id, $.param(args));
        return matches && (src = src + (/\?/.test(src) ? "&" : "?") + matches), 
        data.src = src, $.extend(data, {
            frameborder: 0
        }), 0 !== args.fullscreen && $.extend(data, {
            allowfullscreen: !0
        }), $(".uk-repeatable", "#vimeo_attributes").each(function() {
            var elements = $("input, select", this), key = $(elements).eq(0).val(), elements = $(elements).eq(1).val();
            key && (data["vimeo_" + key] = elements);
        }), data;
    },
    setValues: function(data) {
        var query, hash, matches, self = this, src = data.src || data.data || "", id = "";
        return src && (query = Wf.String.query(src), src = src.replace(/&amp;/g, "&"), 
        /moogaloop.swf/.test(src) ? (data.vimeo_embed = !0, id = query.clip_id, 
        delete query.clip_id, delete data.clip_id, $.each([ "portrait", "title", "byline" ], function(i, s) {
            delete data["show_" + s];
        })) : (hash = id = "", (matches = /vimeo\.com\/(?:\w+\/){0,3}((?:[0-9]+\b)(?:\/[a-z0-9]+)?)/.exec(src)) && "array" == $.type(matches) && (id = (matches = matches[1].split("/"))[0], 
        id += (hash = 2 == matches.length ? matches[1] : hash) ? "/" + hash : "")), 
        $.each(query, function(key, val) {
            if (self.props[key] === val) return !0;
            "color" == key && "#" !== val.charAt(0) && (val = "#" + val), "autoplay" == key && (val = parseInt(val, 10)), 
            data["vimeo_" + key] = val;
        }), src = "https://vimeo.com/" + id, $.each(data, function(key, val) {
            /^iframe_(allow|frameborder|allowfullscreen)/.test(key) && delete data[key];
        }), data.src = src), data;
    },
    getAttributes: function(src) {
        var args = {}, data = this.setValues({
            src: src
        }) || {};
        return $.each(data, function(k, v) {
            "src" != k && (args["vimeo_" + k] = v);
        }), $.extend(args, {
            src: data.src || src,
            width: this.params.width,
            height: this.params.height
        }), args;
    },
    setAttributes: function() {},
    onSelectFile: function() {},
    onInsert: function() {}
});aggregator/vimeo/tmpl/default.php000060400000011567152455706710013140 0ustar00<?php

/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

?>
<div class="uk-form-row uk-flex">
       <label for="vimeo_color" title="<?php echo Text::_('WF_AGGREGATOR_VIMEO_COLOR_DESC') ?>"
              class="tooltip uk-form-label uk-width-1-5"><?php echo Text::_('WF_AGGREGATOR_VIMEO_COLOR') ?></label>

       <div class="uk-form-controls uk-width-1-5">
              <input type="text" id="vimeo_color" class="color" />
       </div>
</div>

<div class="uk-form-row uk-flex">

       <label for="vimeo_intro" title="<?php echo Text::_('WF_AGGREGATOR_VIMEO_INTRO_DESC') ?>"
              class="tooltip uk-form-label uk-width-1-5"><?php echo Text::_('WF_AGGREGATOR_VIMEO_INTRO') ?></label>

       <div class="uk-form-controls uk-form-row uk-flex uk-width-4-5">
              <label for="vimeo_portrait" class="uk-checkbox-label tooltip" title="<?php echo Text::_('WF_AGGREGATOR_VIMEO_PORTRAIT_DESC') ?>">
                     <input type="checkbox" id="vimeo_portrait" /><?php echo Text::_('WF_AGGREGATOR_VIMEO_PORTRAIT'); ?>
              </label>

              <label for="vimeo_title" class="uk-checkbox-label tooltip" title="<?php echo Text::_('WF_AGGREGATOR_VIMEO_INTROTITLE_DESC') ?>">
                     <input type="checkbox" id="vimeo_title" /><?php echo Text::_('WF_AGGREGATOR_VIMEO_INTROTITLE'); ?>
              </label>

              <label for="vimeo_byline" class="uk-checkbox-label tooltip" title="<?php echo Text::_('WF_AGGREGATOR_VIMEO_BYLINE_DESC') ?>">
                     <input type="checkbox" id="vimeo_byline" /><?php echo Text::_('WF_AGGREGATOR_VIMEO_BYLINE'); ?>
              </label>
       </div>
</div>

<div class="uk-form-row uk-flex">
       <label for="vimeo_special"
              class="uk-form-label uk-width-1-5"><?php echo Text::_('WF_AGGREGATOR_VIMEO_SPECIAL') ?></label>
       <div class="uk-form-controls uk-form-row uk-flex uk-width-4-5">

              <label for="vimeo_autoplay" class="uk-checkbox-label tooltip" title="<?php echo Text::_('WF_AGGREGATOR_VIMEO_AUTOPLAY_DESC') ?>">
                     <input type="checkbox" id="vimeo_autoplay" /><?php echo Text::_('WF_AGGREGATOR_VIMEO_AUTOPLAY'); ?>
              </label>

              <label for="vimeo_loop" class="uk-checkbox-label tooltip" title="<?php echo Text::_('WF_AGGREGATOR_VIMEO_LOOP_DESC') ?>">
                     <input type="checkbox" id="vimeo_loop" /><?php echo Text::_('WF_AGGREGATOR_VIMEO_LOOP'); ?>
              </label>

              <label for="vimeo_fullscreen" class="uk-checkbox-label tooltip" title="<?php echo Text::_('WF_AGGREGATOR_VIMEO_FULLSCREEN_DESC') ?>">
                     <input type="checkbox" id="vimeo_fullscreen" /><?php echo Text::_('WF_AGGREGATOR_VIMEO_FULLSCREEN'); ?>
              </label>

              <label for="vimeo_dnt" class="uk-checkbox-label tooltip" title="<?php echo Text::_('WF_AGGREGATOR_VIMEO_DNT_DESC') ?>">
                     <input type="checkbox" id="vimeo_dnt" /><?php echo Text::_('WF_AGGREGATOR_VIMEO_DNT'); ?>
              </label>
       </div>
</div>

<div class="uk-form-row uk-flex">
       <label for="vimeo_attributes" class="uk-form-label uk-width-1-5"><?php echo Text::_('WF_LABEL_ATTRIBUTES'); ?></label>
       <div class="uk-width-4-5" id="vimeo_attributes">
              <div class="uk-form-row uk-repeatable">
                     <div class="uk-form-controls uk-grid uk-grid-small uk-width-9-10">
                            <label class="uk-form-label uk-width-1-10"><?php echo Text::_('WF_LABEL_NAME'); ?></label>
                            <div class="uk-form-controls uk-width-4-10">
                                   <input type="text" name="vimeo_attributes_name[]" />
                            </div>
                            <label class="uk-form-label uk-width-1-10"><?php echo Text::_('WF_LABEL_VALUE'); ?></label>
                            <div class="uk-form-controls uk-width-4-10">
                                   <input type="text" name="vimeo_attributes_value[]" />
                            </div>
                     </div>
                     <div class="uk-form-controls uk-width-1-10 uk-margin-small-left">
                            <button class="uk-button uk-button-link uk-repeatable-create" aria-label="<?php echo Text::_('WF_LABEL_ADD'); ?>" title="<?php echo Text::_('WF_LABEL_ADD'); ?>"><i class="uk-icon-plus"></i></button>
                            <button class="uk-button uk-button-link uk-repeatable-delete" aria-label="<?php echo Text::_('WF_LABEL_REMOVE'); ?>" title="<?php echo Text::_('WF_LABEL_REMOVE'); ?>"><i class="uk-icon-trash"></i></button>
                     </div>
              </div>
       </div>
</div>aggregator/vimeo/tmpl/index.html000060400000000054152455706710012765 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/dailymotion/tmpl/default.php000060400000006755152455706710014354 0ustar00<?php

/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

?>
<div class="uk-form-row uk-grid uk-grid-small">
    <label for="dailymotion_autoPlay" title="<?php echo Text::_('WF_AGGREGATOR_DAILYMOTION_AUTOPLAY_DESC') ?>"
        class="tooltip uk-form-label uk-width-1-5"><?php echo Text::_('WF_AGGREGATOR_DAILYMOTION_AUTOPLAY') ?></label>
    <div class="uk-width-4-5">
        <div class="uk-form-controls uk-width-1-5">
            <input type="checkbox" id="dailymotion_autoPlay" />
        </div>

        <label for="dailymotion_start" title="<?php echo Text::_('WF_AGGREGATOR_DAILYMOTION_START_DESC') ?>"
            class="tooltip uk-form-label uk-width-1-5"><?php echo Text::_('WF_AGGREGATOR_DAILYMOTION_START') ?></label>
        <div class="uk-form-controls uk-width-1-5">
            <input id="dailymotion_start" type="number" value="" />
        </div>
    </div>
</div>
<div class="uk-form-row uk-grid uk-grid-small">
    <label class="uk-form-label uk-width-1-5"
        title="<?php echo Text::_('WF_AGGREGATOR_DAILYMOTION_SIZE'); ?>"><?php echo Text::_('WF_AGGREGATOR_DAILYMOTION_SIZE'); ?></label>

    <div class="uk-form-controls uk-width-4-5">
        <select id="dailymotion_player_size">
            <option value="320"><?php echo Text::_('WF_AGGREGATOR_DAILYMOTION_SIZE_SMALL'); ?></option>
            <option value="480"><?php echo Text::_('WF_AGGREGATOR_DAILYMOTION_SIZE_MEDIUM'); ?></option>
            <option value="560"><?php echo Text::_('WF_AGGREGATOR_DAILYMOTION_SIZE_LARGE'); ?></option>
            <option value=""><?php echo Text::_('WF_AGGREGATOR_DAILYMOTION_SIZE_CUSTOM'); ?></option>
        </select>

        <input type="number" id="dailymotion_player_size_custom" class="uk-hidden uk-margin-small-left" />
    </div>
</div>

<div class="uk-form-row uk-grid uk-grid-small">
    <label for="dailymotion_attributes" class="uk-form-label uk-width-1-5"><?php echo Text::_('WF_LABEL_ATTRIBUTES'); ?></label>
    <div class="uk-width-4-5" id="dailymotion_attributes">
        <div class="uk-form-row uk-repeatable">
            <div class="uk-form-controls uk-grid uk-grid-small uk-width-9-10">
                <label class="uk-form-label uk-width-1-10"><?php echo Text::_('WF_LABEL_NAME'); ?></label>
                <div class="uk-form-controls uk-width-4-10">
                    <input type="text" name="dailymotion_attributes_name[]" />
                </div>
                <label class="uk-form-label uk-width-1-10"><?php echo Text::_('WF_LABEL_VALUE'); ?></label>
                <div class="uk-form-controls uk-width-4-10">
                    <input type="text" name="dailymotion_attributes_value[]" />
                </div>
            </div>
            <div class="uk-form-controls uk-width-1-10 uk-margin-small-left">
                <button class="uk-button uk-button-link uk-repeatable-create" aria-label="<?php echo Text::_('WF_LABEL_ADD'); ?>" title="<?php echo Text::_('WF_LABEL_ADD'); ?>"><i class="uk-icon-plus"></i></button>
                <button class="uk-button uk-button-link uk-repeatable-delete" aria-label="<?php echo Text::_('WF_LABEL_REMOVE'); ?>" title="<?php echo Text::_('WF_LABEL_REMOVE'); ?>"><i class="uk-icon-trash"></i></button>
            </div>
        </div>
    </div>
</div>aggregator/dailymotion/tmpl/index.html000060400000000054152455706710014176 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/dailymotion/index.html000060400000000054152455706710013222 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/dailymotion/js/dailymotion.js000060400000010152152455706710014527 0ustar00/* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */
WFAggregator.add("dailymotion", {
    params: {
        width: 480,
        height: 270,
        autoPlay: !1
    },
    props: {
        autoPlay: 0,
        start: 0
    },
    setup: function() {
        $("#dailymotion_autoPlay").prop("checked", this.params.autoPlay), $("#dailymotion_player_size").on("change", function() {
            var v = parseInt(this.value, 10);
            $("#dailymotion_player_size_custom").toggleClass("uk-hidden", !!this.value), 
            v && ($("#width").val(v), $("#height").val(Math.round(9 * v / 16)));
        }), $("#dailymotion_player_size_custom").on("change", function() {
            var v = parseInt(this.value, 10);
            v && ($("#width").val(v), $("#height").val(Math.round(16 * v / 9)));
        });
        var attributes = this.params.attributes || {}, x = 0;
        $.each(attributes, function(key, value) {
            var $repeatable = $(".media_option.dailymotion .uk-repeatable"), $repeatable = (0 < x && ($repeatable.eq(0).clone(!0).appendTo($repeatable.parent()), 
            $repeatable = $(".media_option.dailymotion .uk-repeatable")), $repeatable.eq(x).find("input, select"));
            $repeatable.eq(0).val(key), $repeatable.eq(1).val(value), x++;
        });
    },
    getTitle: function() {
        return this.title || this.name;
    },
    getType: function() {
        return "iframe";
    },
    isSupported: function(v) {
        return !!v && !!/dai\.?ly(motion)?(\.com)?/.test(v) && "dailymotion";
    },
    extractSource: function(src) {
        var matches;
        return /\/\/(?:[\w-]+\.)?dailymotion\.com\/embed\/video\/[a-z0-9]+/i.test(src) || /\/\/geo\.dailymotion\.com\/player\.html/i.test(src) || ((matches = src.match(/(?:^|\/\/)(?:[\w-]+\.)?dai\.?ly(?:motion\.com)?\/(?:embed\/)?(?:swf\/|video\/)?([a-z0-9]+)_?/i)) && matches[1] || (matches = src.match(/[?&]video=([a-z0-9]+)/i)) && matches[1]) && (src = "https://www.dailymotion.com/embed/video/" + matches[1]), 
        src;
    },
    getValues: function(data) {
        var query, self = this, args = {}, src = data.src;
        return -1 !== src.indexOf("=") && $.extend(args, Wf.String.query(src)), 
        $("input[id], select[id]", "#dailymotion_options").each(function() {
            var k = $(this).attr("id"), v = $(this).val();
            if (!k) return !0;
            k = k.substr(k.indexOf("_") + 1), $(this).is(":checkbox") && (v = $(this).is(":checked") ? 1 : 0), 
            -1 === k.indexOf("player_size") && self.props[k] !== v && "" !== v && (args[k] = v);
        }), (src = this.extractSource(src)) && ((query = $.param(args)) && (src = src + (/\?/.test(src) ? "&" : "?") + query), 
        data.src = src), $.extend(data, {
            frameborder: 0,
            allowfullscreen: "allowfullscreen"
        }), $(".uk-repeatable", "#dailymotion_attributes").each(function() {
            var elements = $("input, select", this), key = $(elements).eq(0).val(), elements = $(elements).eq(1).val();
            key && (data["dailymotion_" + key] = elements);
        }), data;
    },
    setValues: function(data) {
        var query, self = this, src = data.src || data.data || "";
        return src && (query = Wf.String.query(src), $.each(query, function(key, val) {
            if (self.props[key] == val) return !0;
            data["dailymotion_" + key] = val;
        }), src = src.replace(/&amp;/g, "&"), src = this.extractSource(src)) && (data.src = src), 
        data;
    },
    getAttributes: function(src) {
        var args = {}, data = this.setValues({
            src: src
        }) || {};
        return $.each(data, function(k, v) {
            "src" != k && (args["dailymotion_" + k] = v);
        }), $.extend(args, {
            src: data.src || src,
            width: this.params.width,
            height: this.params.height
        }), args;
    },
    setAttributes: function() {},
    onSelectFile: function() {},
    onInsert: function() {}
});aggregator/dailymotion/js/index.html000060400000000054152455706710013636 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/dailymotion/css/dailymotion.css000060400000000144152455706710015057 0ustar00#dailymotion_player_size{width:150px!important}#dailymotion_player_size_custom{width:65px!important}aggregator/dailymotion/css/index.html000060400000000054152455706710014012 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/youtube.php000060400000005446152455706710011114 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

class WFAggregatorExtension_Youtube extends WFAggregatorExtension
{
    /**
     * Constructor activating the default information of the class.
     */
    public function __construct()
    {
        parent::__construct(array(
            'format' => 'video',
        ));
    }

    public function display()
    {
        $document = WFDocument::getInstance();
        $document->addScript('youtube', 'extensions/aggregator/youtube/js');
    }

    public function isEnabled()
    {
        $plugin = WFEditorPlugin::getInstance();

        return $plugin->checkAccess('aggregator.youtube.enable', 1);
    }

    public function getParams()
    {
        $plugin = WFEditorPlugin::getInstance();

        $defaults = array(
            'width' => $plugin->getParam('aggregator.youtube.width', 560),
            'height' => $plugin->getParam('aggregator.youtube.height', 315),

            'controls' => (int) $plugin->getParam('aggregator.youtube.controls', 1),
            'loop' => (int) $plugin->getParam('aggregator.youtube.loop', 0),
            'autoplay' => (int) $plugin->getParam('aggregator.youtube.autoplay', 0),
            'rel' => (int) $plugin->getParam('aggregator.youtube.related', 1),
            'modestbranding' => (int) $plugin->getParam('aggregator.youtube.modestbranding', 0),
            'privacy' => (int) $plugin->getParam('aggregator.youtube.privacy', 0),
        );

        $attributes = $plugin->getParam('aggregator.youtube.attributes', '');

        if ($attributes) {            
            $defaults['attributes'] = $this->getCustomDefaultAttributes($attributes);
        }

        return $defaults;
    }

    public function getEmbedData($data)
    {
        $params = $this->getParams();

        $default = array(
            'width' => 560,
            'height' => 315,
            'controls' => 1,
            'loop' => 0,
            'autoplay' => 0,
            'rel' => 1,
            'modestbranding' => 0,
            'privacy' => 0,
        );

        $options = array();

        foreach ($params as $name => $value) {
            if (isset($default[$name]) && $value === $default[$name]) {
                continue;
            }

            if ($name == 'width' || $name == 'height' || $name == 'attributes') {
                $data[$name] = $value;
                continue;
            }

            $options[$name] = $value;
        }

        if (!empty($options)) {
            $data['query'] = http_build_query($options);
        }

        return $data;
    }
}
aggregator/video.php000060400000004422152455706710010517 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

class WFAggregatorExtension_Video extends WFAggregatorExtension
{
    /**
     * Constructor activating the default information of the class.
     */
    public function __construct()
    {
        parent::__construct(array(
            'format' => 'video',
        ));
    }

    public function display()
    {
        $document = WFDocument::getInstance();
        $document->addScript('video', 'extensions/aggregator/video/js');
    }

    public function isEnabled()
    {
        return true;
    }

    public function getParams()
    {
        $plugin = WFEditorPlugin::getInstance();

        $defaults = array(
            'width' => $plugin->getParam('aggregator.video.width', ''),
            'height' => $plugin->getParam('aggregator.video.height', ''),

            'controls' => (int) $plugin->getParam('aggregator.video.controls', 1),
            'loop' => (int) $plugin->getParam('aggregator.video.loop', 0),
            'autoplay' => (int) $plugin->getParam('aggregator.video.autoplay', 0),
            'muted' => (int) $plugin->getParam('aggregator.video.mute', 0)
        );

        $attributes = $plugin->getParam('aggregator.video.attributes', '');

        if ($attributes) {            
            $defaults['attributes'] = $this->getCustomDefaultAttributes($attributes);
        }

        return $defaults;
    }

    public function getEmbedData($data, $url)
    {
        $params = $this->getParams();

        $default = array(
            'controls' => 1,
            'loop' => 0,
            'autoplay' => 0,
            'muted' => 0,
        );

        foreach ($params as $name => $value) {
            if ($default[$name] === $value) {
                continue;
            }

            if ($name == 'attributes') {
                $data[$name] = $value;
                continue;
            }

            if ($value !== '') {
                $data[$name] = $value;
            }
        }

        $data['src'] = $url;

        return $data;
    }
}
aggregator/video.xml000060400000004001152455706710010521 0ustar00<?xml version="1.0" ?>
<extension version="3.4" type="plugin" group="jce" method="upgrade">
	<name>WF_AGGREGATOR_VIDEO_TITLE</name>
	<version>2.9.99.2</version>
	<creationDate>22-04-2026</creationDate>
	<author>Ryan Demmer</author>
	<authorEmail>info@joomlacontenteditor.net</authorEmail>
	<authorUrl>https://www.joomlacontenteditor.net/</authorUrl>
	<copyright>Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved</copyright>
	<license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
	<description>WF_AGGREGATOR_VIDEO_DESC</description>
	<files>
		<filename>video.php</filename>
	</files>
	<fields name="video">
		<fieldset name="aggregator.video">

			<field name="width" type="number" default="" class="input-small" label="WF_LABEL_WIDTH" description="WF_AGGREGATOR_VIDEO_WIDTH_DESC" />
			<field name="height" type="number" default="" class="input-small" label="WF_LABEL_HEIGHT" description="WF_AGGREGATOR_VIDEO_HEIGHT_DESC" />

			<field name="controls" type="yesno" default="1"  label="WF_AGGREGATOR_VIDEO_CONTROLS" description="WF_AGGREGATOR_VIDEO_CONTROLS_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="loop" type="yesno" default="0"  label="WF_AGGREGATOR_VIDEO_LOOP" description="WF_AGGREGATOR_VIDEO_LOOP_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="autoplay" type="yesno" default="0"  label="WF_AGGREGATOR_VIDEO_AUTOPLAY" description="WF_AGGREGATOR_VIDEO_AUTOPLAY_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="mute" type="yesno" default="0"  label="WF_AGGREGATOR_VIDEO_MUTE" description="WF_AGGREGATOR_VIDEO_MUTE_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="attributes" type="keyvalue" default="" label="WF_PARAM_CUSTOM_ATTRIBUTES" description="WF_PARAM_CUSTOM_ATTRIBUTES_DESC" boolean="true" />

		</fieldset>
	</fields>
	<plugins></plugins>
</extension>
aggregator/youtube.xml000060400000005356152455706710011125 0ustar00<?xml version="1.0" ?>
<extension version="3.4" type="plugin" group="jce" method="upgrade">
	<name>WF_AGGREGATOR_YOUTUBE_TITLE</name>
	<version>2.9.99.2</version>
	<creationDate>22-04-2026</creationDate>
	<author>Ryan Demmer</author>
	<authorEmail>info@joomlacontenteditor.net</authorEmail>
	<authorUrl>https://www.joomlacontenteditor.net/</authorUrl>
	<copyright>Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved</copyright>
	<license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
	<description>WF_AGGREGATOR_YOUTUBE_DESC</description>
	<files>
		<filename>youtube.php</filename>
		<folder>youtube</folder>
	</files>
	<fields name="youtube">
		<fieldset name="aggregator.youtube">
			<field name="enable" type="yesno" default="1" label="WF_LABEL_EXTENSION_ENABLE" description="WF_LABEL_EXTENSION_ENABLE_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>
			<field name="width" type="number" default="560" class="input-small" label="WF_LABEL_WIDTH" description="WF_AGGREGATOR_YOUTUBE_WIDTH_DESC" />
			<field name="height" type="number" default="315" class="input-small" label="WF_LABEL_HEIGHT" description="WF_AGGREGATOR_YOUTUBE_HEIGHT_DESC" />

			<field name="controls" type="yesno" default="1"  label="WF_AGGREGATOR_YOUTUBE_CONTROLS" description="WF_AGGREGATOR_YOUTUBE_CONTROLS_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="related" type="yesno" default="1"  label="WF_AGGREGATOR_YOUTUBE_RELATED" description="WF_AGGREGATOR_YOUTUBE_RELATED_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="loop" type="yesno" default="1"  label="WF_AGGREGATOR_YOUTUBE_LOOP" description="WF_AGGREGATOR_YOUTUBE_LOOP_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="autoplay" type="yesno" default="0"  label="WF_AGGREGATOR_YOUTUBE_AUTOPLAY" description="WF_AGGREGATOR_YOUTUBE_AUTOPLAY_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="privacy" type="yesno" default="0"  label="WF_AGGREGATOR_YOUTUBE_PRIVACY" description="WF_AGGREGATOR_YOUTUBE_PRIVACY_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="modestbranding" type="yesno" default="0"  label="WF_AGGREGATOR_YOUTUBE_MODESTBRANDING" description="WF_AGGREGATOR_YOUTUBE_MODESTBRANDING_DESC">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field name="attributes" type="keyvalue" default="" label="WF_PARAM_CUSTOM_ATTRIBUTES" description="WF_PARAM_CUSTOM_ATTRIBUTES_DESC" boolean="true" />
		</fieldset>
	</fields>
	<plugins></plugins>
</extension>
aggregator/video/index.html000060400000000054152455706710012000 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/video/js/index.html000060400000000054152455706710012414 0ustar00<html><body bgcolor="#FFFFFF"></body></html>aggregator/video/js/video.js000060400000005547152455706710012077 0ustar00/* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */
WFAggregator.add("video", {
    params: {
        width: "",
        height: ""
    },
    props: {
        autoplay: 0,
        loop: 0,
        controls: 1,
        muted: 0
    },
    setup: function() {
        var x = 0;
        $.each(this.params, function(k, v) {
            "attributes" == k ? $.each(v, function(key, value) {
                var $repeatable = $(".media_option.video .uk-repeatable"), $repeatable = (0 < x && ($repeatable.eq(0).clone(!0).appendTo($repeatable.parent()), 
                $repeatable = $(".media_option.video .uk-repeatable")), $repeatable.eq(x).find("input, select"));
                $repeatable.eq(0).val(key), $repeatable.eq(1).val(value), x++;
            }) : $("#video_" + k).val(v).filter(":checkbox, :radio").prop("checked", !!v);
        });
    },
    getTitle: function() {
        return this.title || this.name;
    },
    getType: function() {
        return "video";
    },
    isSupported: function(v) {
        return !!v && (v = v.split("?")[0], !!/\.(mp4|m4v|ogv|ogg|webm)$/.test(v)) && "video";
    },
    getValues: function(data) {
        var sources = [];
        return $("input[id], select[id]", "#video_options").each(function() {
            var key = $(this).attr("id"), val = $(this).val();
            if (!key) return !0;
            "checkbox" === this.type && (val = !!this.checked), data[key] = val;
        }), $('input[name="video_source[]"]').each(function() {
            var val = $(this).val();
            val !== data.src && sources.push(val);
        }), sources.length && (data.video_source = sources), $(".uk-repeatable", "#video_attributes").each(function() {
            var elements = $("input, select", this), key = $(elements).eq(0).val(), elements = $(elements).eq(1).val();
            key && (data["video_" + key] = elements);
        }), data;
    },
    setValues: function(data) {
        var x = 0, self = this;
        return $.each(data, function(key, val) {
            if (-1 === key.indexOf("video_")) return !0;
            if ((key = key.substr(key.indexOf("_") + 1)) in self.props) return !0;
            "" != val && 1 != val || (val = key);
            var $repeatable = $(".uk-repeatable", "#video_attributes"), $repeatable = (0 < x && ($repeatable.eq(0).clone(!0).appendTo($repeatable.parent()), 
            $repeatable = $(".uk-repeatable", "#video_attributes")), $repeatable.eq(x).find("input, select"));
            $repeatable.eq(0).val(key), $repeatable.eq(1).val(val), x++;
        }), data;
    },
    getAttributes: function(src) {
        return {
            width: this.params.width,
            height: this.params.height
        };
    }
});links/index.html000060400000000054152455706710007670 0ustar00<html><body bgcolor="#FFFFFF"></body></html>links/joomlalinks/index.html000060400000000054152455706710012212 0ustar00<html><body bgcolor="#FFFFFF"></body></html>links/joomlalinks/weblinks.php000060400000021210152455706710012541 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Object\CMSObject;

class JoomlalinksWeblinks extends CMSObject
{
    private $option = 'com_weblinks';

    /**
     * Returns a reference to a editor object.
     * @return JCE The editor object
     *
     * @since    1.5
     */
    public static function getInstance($options = array())
    {
        static $instance;

        if (!is_object($instance)) {
            $instance = new self($options);
        }

        return $instance;
    }

    public function getOption()
    {
        return $this->option;
    }

    public function getList()
    {
        return '<li id="index.php?option=com_weblinks&view=categories" class="folder menu nolink"><div class="uk-tree-row"><a href="#"><span class="uk-tree-icon"></span><span class="uk-tree-text">' . Text::_('WF_LINKS_JOOMLALINKS_WEBLINKS') . '</span></a></div></li>';
    }

    public function getLinks($args)
    {
        $wf = WFEditorPlugin::getInstance();
        $items = array();

        $version = new Joomla\CMS\Version();

        if (!$version->isCompatible('4.0')) {
            require_once JPATH_SITE . '/includes/application.php';
        }

        require_once JPATH_SITE . '/components/com_weblinks/helpers/route.php';

        $language = '';

        switch ($args->view) {
            // Get all WebLink categories
            default:
            case 'categories':
                $categories = WFLinkBrowser::getCategory('com_weblinks', 1, $wf->getParam('links.joomlalinks.category_alias', 1));

                foreach ($categories as $category) {
                    $url = '';

                    if (method_exists('WeblinksHelperRoute', 'getCategoryRoute')) {
                        // language
                        if (isset($category->language)) {
                            $language = $category->language;
                        }

                        $id = WeblinksHelperRoute::getCategoryRoute($category->id, $language);

                        if (strpos($id, 'index.php?Itemid=') !== false) {
                            $url = $id;
                            $id = 'index.php?option=com_weblinks&view=category&id=' . $category->id;
                        }
                    } else {
                        $itemid = WFLinkBrowser::getItemId('com_weblinks', array('categories' => null, 'category' => $category->id));
                        $id = 'index.php?option=com_weblinks&view=category&id=' . $category->id . $itemid;
                    }

                    $items[] = array(
                        'url' => self::route($url),
                        'id' => $id,
                        'name' => $category->title . ' / ' . $category->alias,
                        'class' => 'folder weblink',
                    );
                }
                break;
            // Get all links in the category
            case 'category':
                $categories = WFLinkBrowser::getCategory('com_weblinks', $args->id, $wf->getParam('links.joomlalinks.category_alias', 1));

                if (count($categories)) {
                    foreach ($categories as $category) {
                        $children = WFLinkBrowser::getCategory('com_weblinks', $category->id, $wf->getParam('links.joomlalinks.category_alias', 1));

                        $url = '';

                        if ($children) {
                            $id = 'index.php?option=com_weblinks&view=category&id=' . $category->id;
                        } else {
                            if (method_exists('WeblinksHelperRoute', 'getCategoryRoute')) {
                                // language
                                if (isset($category->language)) {
                                    $language = $category->language;
                                }

                                $id = WeblinksHelperRoute::getCategoryRoute($category->id, $language);

                                if (strpos($id, 'index.php?Itemid=') !== false) {
                                    $url = $id;
                                    $id = 'index.php?option=com_weblinks&view=category&id=' . $category->id;
                                }
                            } else {
                                $itemid = WFLinkBrowser::getItemId('com_weblinks', array('categories' => null, 'category' => $category->id));
                                $id = 'index.php?option=com_weblinks&view=category&id=' . $category->id . $itemid;
                            }
                        }

                        $items[] = array(
                            'url' => self::route($url),
                            'id' => $id,
                            'name' => $category->title . ' / ' . $category->alias,
                            'class' => 'folder weblink',
                        );
                    }
                }

                $weblinks = self::getWeblinks($args->id);

                foreach ($weblinks as $weblink) {
                    // language

                    if (isset($weblink->language)) {
                        $language = $weblink->language;
                    }

                    $id = WeblinksHelperRoute::getWeblinkRoute($weblink->slug, $weblink->catslug, $language);

                    // Joomla 4/5/6
                    if ($version->isCompatible('4.0')) {
                        $id .= '&task=weblink.go';
                    }

                    $items[] = array(
                        'id' => self::route($id),
                        'name' => $weblink->title . ' / ' . $weblink->alias,
                        'class' => 'file',
                    );
                }
                break;
        }

        return $items;
    }

    public static function getWeblinks($id)
    {
        $wf = WFEditorPlugin::getInstance();

        $db = Factory::getDBO();
        $user = Factory::getUser();

        $query = $db->getQuery(true);

        $section = Text::_('Web Links');

        $query = $db->getQuery(true);

        $case = '';

        if ((int) $wf->getParam('links.joomlalinks.weblinks_alias', 0)) {
            //sqlsrv changes
            $case_when1 = ' CASE WHEN ';
            $case_when1 .= $query->charLength('a.alias', '!=', '0');
            $case_when1 .= ' THEN ';

            // Joomla 3 compatibility
            if (method_exists($query, 'castAsChar')) {
                $a_id = $query->castAsChar('a.id');
            } else {
                $a_id = $query->castAs('CHAR', 'a.id');
            }

            $case_when1 .= $query->concatenate(array($a_id, 'a.alias'), ':');
            $case_when1 .= ' ELSE ';
            $case_when1 .= $a_id . ' END as slug';

            $case_when2 = ' CASE WHEN ';
            $case_when2 .= $query->charLength('b.alias', '!=', '0');
            $case_when2 .= ' THEN ';

            // Joomla 3 compatibility
            if (method_exists($query, 'castAsChar')) {
                $c_id = $query->castAsChar('b.id');
            } else {
                $c_id = $query->castAs('CHAR', 'b.id');
            }

            $case_when2 .= $query->concatenate(array($c_id, 'b.alias'), ':');
            $case_when2 .= ' ELSE ';
            $case_when2 .= $c_id . ' END as catslug';

            $case .= ',' . $case_when1 . ',' . $case_when2;
        }

        $query->select('a.id AS slug, b.id AS catslug, a.title AS title, a.description AS text, a.url, a.alias, a.language' . $case);

        $query->from('#__weblinks AS a');
        $query->innerJoin('#__categories AS b ON b.id = ' . (int) $id);
        $query->where('a.catid = ' . (int) $id);

        $query->where('a.state = 1');

        if (!$user->authorise('core.admin')) {
            $query->where('b.access IN (' . implode(',', $user->getAuthorisedViewLevels()) . ')');
        }

        $query->where('b.published = 1');
        $query->order('a.title');

        $db->setQuery($query, 0);

        return $db->loadObjectList();
    }

    private static function route($url)
    {
        $wf = WFEditorPlugin::getInstance();

        if ($wf->getParam('links.joomlalinks.sef_url', 0)) {
            $url = WFLinkHelper::route($url);
        }

        // remove Itemid if "home"
        $url = WFLinkHelper::removeHomeItemId($url);

        // remove Itemid
        if ((bool) $wf->getParam('links.joomlalinks.itemid', 1) === false) {
            $url = WFLinkHelper::removeItemId($url);
        }

        return $url;
    }
}
links/joomlalinks/content.php000060400000026216152455706710012410 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\RouteHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Object\CMSObject;
use Joomla\CMS\Table\Table;

class JoomlalinksContent extends CMSObject
{
    private $option = 'com_content';

    /**
     * Returns a reference to a editor object.
     *
     * @return JCE The editor object
     *
     * @since    1.5
     */
    public static function getInstance($options = array())
    {
        static $instance;

        if (!is_object($instance)) {
            $instance = new self($options);
        }

        return $instance;
    }

    public function getOption()
    {
        return $this->option;
    }

    public function getList()
    {
        return '<li id="index.php?option=com_content" class="folder content nolink"><div class="uk-tree-row"><a href="#"><span class="uk-tree-icon"></span><span class="uk-tree-text">' . Text::_('WF_LINKS_JOOMLALINKS_CONTENT') . '</span></a></div></li>';
    }

    public function getLinks($args)
    {
        $items = array();
        $view = isset($args->view) ? $args->view : '';

        $language = '';

        // create a new RouteHelper instance
        $router = new RouteHelper();

        switch ($view) {
            // get top-level categories
            default:
                $articles = array();

                if (!isset($args->id)) {
                    $args->id = 1;
                }

                $categories = WFLinkBrowser::getCategory('com_content', $args->id);

                // get any articles in this category (in Joomla! 1.6+ a category can contain sub-categories and articles)
                $articles = self::getArticles($args->id);

                foreach ($categories as $category) {
                    $url = '';

                    if (isset($category->language)) {
                        $language = $category->language;
                    }

                    $id = RouteHelper::getCategoryRoute($category->id, $language, 'com_content');

                    $url = $id;

                    if (strpos($id, 'index.php?Itemid=') !== false) {
                        $url = self::getMenuLink($id);
                        $id = 'index.php?option=com_content&view=category&id=' . $category->id;
                    }

                    $items[] = array(
                        'url' => self::route($url),
                        'id' => $id,
                        'name' => $category->title . ' / ' . $category->alias,
                        'class' => 'folder content',
                    );
                }

                if (!empty($articles)) {
                    // output article links
                    foreach ($articles as $article) {
                        if (isset($article->language)) {
                            $language = $article->language;
                        }

                        $id = $router->getRoute($article->slug, 'com_content.article', '', $language, $article->catslug);
                        $id = self::route($id);

                        $items[] = array(
                            'id' => $id,
                            'name' => $article->title . ' / ' . $article->alias,
                            'class' => 'file',
                        );

                        $anchors = self::getAnchors($article->content);

                        foreach ($anchors as $anchor) {
                            $items[] = array(
                                'id' => $id . '#' . $anchor,
                                'name' => '#' . $anchor,
                                'class' => 'file anchor',
                            );
                        }
                    }
                }

                break;
            // get articles and / or sub-categories
            case 'category':
                // get any articles in this category (in Joomla! 1.6+ a category can contain sub-categories and articles)
                $articles = self::getArticles($args->id);

                // get sub-categories
                $categories = WFLinkBrowser::getCategory('com_content', $args->id);

                if (count($categories)) {
                    foreach ($categories as $category) {
                        // check for sub-categories
                        $sub = WFLinkBrowser::getCategory('com_content', $category->id);

                        // language
                        if (isset($category->language)) {
                            $language = $category->language;
                        }

                        $id = RouteHelper::getCategoryRoute($category->id, $language, 'com_content');
                        $url = $id;

                        // get sub-categories
                        if (count($sub)) {
                            $url = $id;
                            $id = 'index.php?option=com_content&view=section&id=' . $category->id;
                            // no sub-categories, get articles for category
                        } else {
                            // no com_content, might be link like index.php?ItemId=1
                            if (strpos($id, 'index.php?Itemid=') !== false) {
                                $url = $id;
                                $id = 'index.php?option=com_content&view=category&id=' . $category->id;
                            }
                        }

                        if (strpos($url, 'index.php?Itemid=') !== false) {
                            $url = self::getMenuLink($url);
                        }

                        $items[] = array(
                            'url' => self::route($url),
                            'id' => $id,
                            'name' => $category->title . ' / ' . $category->alias,
                            'class' => 'folder content',
                        );
                    }
                }

                // output article links
                foreach ($articles as $article) {
                    // language
                    if (isset($article->language)) {
                        $language = $article->language;
                    }

                    $id = $router->getRoute($article->slug, 'com_content.article', '', $language, $article->catslug);
                    $id = self::route($id);

                    $items[] = array(
                        'id' => $id,
                        'name' => $article->title . ' / ' . $article->alias,
                        'class' => 'file' . ($article->state ? '' : ' unpublished uk-text-muted'),
                    );

                    $anchors = self::getAnchors($article->content);

                    foreach ($anchors as $anchor) {
                        $items[] = array(
                            'id' => $id . '#' . $anchor,
                            'name' => '#' . $anchor,
                            'class' => 'file anchor',
                        );
                    }
                }

                break;
        }

        return $items;
    }

    private static function getMenuLink($url)
    {
        $wf = WFEditorPlugin::getInstance();

        // resolve the url from the menu link
        if ($wf->getParam('links.joomlalinks.article_resolve_alias', 1)) {
            // get itemid
            preg_match('#Itemid=([\d]+)#', $url, $matches);
            // get link from menu
            if (count($matches) > 1) {
                $menu = Table::getInstance('menu');
                $menu->load($matches[1]);

                if ($menu->link) {
                    return $menu->link . '&Itemid=' . $menu->id;
                }
            }
        }

        return $url;
    }

    private function getArticles($id)
    {
        $db = Factory::getDBO();
        $user = Factory::getUser();

        $wf = WFEditorPlugin::getInstance();

        $query = $db->getQuery(true);

        $case = '';

        if ($wf->getParam('links.joomlalinks.article_alias', 0)) {
            //sqlsrv changes
            $case_when1 = ' CASE WHEN ';
            $case_when1 .= $query->charLength('a.alias', '!=', '0');
            $case_when1 .= ' THEN ';

            // Joomla 3 compatibility
            if (method_exists($query, 'castAsChar')) {
                $a_id = $query->castAsChar('a.id');
            } else {
                $a_id = $query->castAs('CHAR', 'a.id');
            }

            $case_when1 .= $query->concatenate(array($a_id, 'a.alias'), ':');
            $case_when1 .= ' ELSE ';
            $case_when1 .= $a_id . ' END as slug';

            $case_when2 = ' CASE WHEN ';
            $case_when2 .= $query->charLength('b.alias', '!=', '0');
            $case_when2 .= ' THEN ';

            // Joomla 3 compatibility
            if (method_exists($query, 'castAsChar')) {
                $c_id = $query->castAsChar('b.id');
            } else {
                $c_id = $query->castAs('CHAR', 'b.id');
            }

            $case_when2 .= $query->concatenate(array($c_id, 'b.alias'), ':');
            $case_when2 .= ' ELSE ';
            $case_when2 .= $c_id . ' END as catslug';

            $case = ',' . $case_when1 . ',' . $case_when2;
        }

        $groups = implode(',', $user->getAuthorisedViewLevels());

        $query->select('a.id AS slug, b.id AS catslug, a.alias, a.state, a.title AS title, a.access, ' . $query->concatenate(array('a.introtext', 'a.fulltext')) . ' AS content, a.language' . $case);
        $query->from('#__content AS a');
        $query->innerJoin('#__categories AS b ON b.id = ' . (int) $id);

        $query->where('a.catid = ' . (int) $id);

        if ($wf->getParam('links.joomlalinks.article_unpublished', 0) == 1) {
            $query->where('(a.state = 0 OR a.state = 1)');
        } else {
            $query->where('a.state = 1');
        }

        if (!$user->authorise('core.admin')) {
            $query->where('a.access IN (' . $groups . ')');
            $query->where('b.access IN (' . $groups . ')');
        }

        $query->order('a.title');

        $db->setQuery($query, 0);

        return $db->loadObjectList();
    }

    private static function getAnchors($content)
    {
        preg_match_all('#<a([^>]+)(name|id)="([a-z]+[\w\-\:\.]*)"([^>]*)>#i', $content, $matches, PREG_SET_ORDER);

        $anchors = array();

        if (!empty($matches)) {
            foreach ($matches as $match) {
                if (strpos($match[0], 'href') === false) {
                    $anchors[] = $match[3];
                }
            }
        }

        return $anchors;
    }

    private static function route($url)
    {
        $wf = WFEditorPlugin::getInstance();

        if ((bool) $wf->getParam('links.joomlalinks.sef_url', 0)) {
            $url = WFLinkHelper::route($url);
        }

        // remove Itemid if "home"
        $url = WFLinkHelper::removeHomeItemId($url);

        // remove Itemid if set
        if ((bool) $wf->getParam('links.joomlalinks.itemid', 1) === false) {
            $url = WFLinkHelper::removeItemId($url);
        }

        return $url;
    }
}
links/joomlalinks/contact.php000060400000012325152455706710012365 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Object\CMSObject;
use Joomla\CMS\Helper\RouteHelper;

class JoomlalinksContact extends CMSObject
{
    private $option = 'com_contact';

    /**
     * Returns a reference to a editor object.
     *
     * @return JCE The editor object
     *
     * @since    1.5
     */
    public static function getInstance($options = array())
    {
        static $instance;

        if (!is_object($instance)) {
            $instance = new self($options);
        }

        return $instance;
    }

    public function getOption()
    {
        return $this->option;
    }

    public function getList()
    {
        return '<li id="index.php?option=com_contact" class="folder contact nolink"><div class="uk-tree-row"><a href="#"><span class="uk-tree-icon"></span><span class="uk-tree-text">' . Text::_('WF_LINKS_JOOMLALINKS_CONTACTS') . '</span></a></div></li>';
    }

    public function getLinks($args)
    {
        $items = array();
        $view = isset($args->view) ? $args->view : '';

        $language = '';

        // create a new RouteHelper instance
        $router = new RouteHelper();

        switch ($view) {
            default:
                $categories = WFLinkBrowser::getCategory('com_contact', 1, $this->get('category_alias', 1));

                foreach ($categories as $category) {
                    // language
                    if (isset($category->language)) {
                        $language = $category->language;
                    }

                    $url = RouteHelper::getCategoryRoute($category->id, $language, 'com_contact');

                    // convert to SEF
                    $url = self::route($url);

                    $items[] = array(
                        'id' => 'index.php?option=com_contact&view=category&id=' . $category->id,
                        'url' => $url,
                        'name' => $category->title . ' / ' . $category->alias,
                        'class' => 'folder contact',
                    );
                }
                break;
            case 'category':
                $categories = WFLinkBrowser::getCategory('com_contact', $args->id, $this->get('category_alias', 1));

                foreach ($categories as $category) {
                    $children = WFLinkBrowser::getCategory('com_contact', $category->id, $this->get('category_alias', 1));

                    // language
                    if (isset($category->language)) {
                        $language = $category->language;
                    }

                    if ($children) {
                        $id = RouteHelper::getCategoryRoute($category->id, $language, 'com_contact');
                    } else {
                        $id = RouteHelper::getCategoryRoute($category->slug, $language, 'com_contact');
                    }

                    // convert to SEF
                    $url = self::route($id);

                    $items[] = array(
                        'url' => $url,
                        'id' => $id,
                        'name' => $category->title . ' / ' . $category->alias,
                        'class' => 'folder content',
                    );
                }

                $contacts = self::getContacts($args->id);

                foreach ($contacts as $contact) {
                    // language
                    if (isset($contact->language)) {
                        $language = $contact->language;
                    }

                    $id = $router->getRoute($contact->id, 'com_contact.contact', '', $language, $args->id);
                    $id = self::route($id);

                    $items[] = array(
                        'id' => $id,
                        'name' => $contact->name . ' / ' . $contact->alias,
                        'class' => 'file',
                    );
                }
                break;
        }

        return $items;
    }

    private static function route($url)
    {
        $wf = WFEditorPlugin::getInstance();

        if ((bool) $wf->getParam('links.joomlalinks.sef_url', 0)) {
            $url = WFLinkHelper::route($url);
        }

        // remove Itemid if "home"
        $url = WFLinkHelper::removeHomeItemId($url);

        // remove Itemid
        if ((bool) $wf->getParam('links.joomlalinks.itemid', 1) === false) {
            $url = WFLinkHelper::removeItemId($url);
        }

        return $url;
    }

    private static function getContacts($id)
    {
        $db = Factory::getDBO();
        $user = Factory::getUser();

        $query = $db->getQuery(true);
        $query->select('id, name, alias, language')->from('#__contact_details')->where(array('catid=' . (int) $id, 'published = 1'));

        if (!$user->authorise('core.admin')) {
            $query->where('access IN (' . implode(',', $user->getAuthorisedViewLevels()) . ')');
        }

        $db->setQuery($query);

        return $db->loadObjectList();
    }
}
links/joomlalinks/css/joomlalinks.css000060400000000056152455706710014043 0ustar00.unpublished .uk-icon::before{content:"\e99d"}links/joomlalinks/css/index.html000060400000000054152455706710013002 0ustar00<html><body bgcolor="#FFFFFF"></body></html>links/joomlalinks/menu.php000060400000024121152455706710011673 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Object\CMSObject;
use Joomla\Registry\Registry;
use Joomla\CMS\Uri\Uri;

class JoomlalinksMenu extends CMSObject
{
    private $option = 'com_menu';

    /**
     * Returns a reference to a editor object.
     * @return JCE The editor object
     *
     * @since    1.5
     */
    public static function getInstance($options = array())
    {
        static $instance;

        if (!is_object($instance)) {
            $instance = new self($options);
        }

        return $instance;
    }

    public function getOption()
    {
        return $this->option;
    }

    public function getList()
    {
        return '<li id="index.php?option=com_menu" class="folder menu nolink"><div class="uk-tree-row"><a href="#"><span class="uk-tree-icon"></span><span class="uk-tree-text">' . Text::_('WF_LINKS_JOOMLALINKS_MENU') . '</span></a></div></li>';
    }

    public function getLinks($args)
    {
        $items = array();
        $view = isset($args->view) ? $args->view : '';
        switch ($view) {
            // create top-level (non-linkable) menu types
            default:
                $types = self::getMenuTypes();
                foreach ($types as $type) {
                    $items[] = array(
                        'id' => 'index.php?option=com_menu&view=menu&type=' . $type->id,
                        'name' => $type->title,
                        'class' => 'folder menu nolink',
                    );
                }
                break;
            // get menus and sub-menus
            case 'menu':
                $type = isset($args->type) ? $args->type : 0;
                $id = $type ? 0 : $args->id;

                $menus = self::getMenu($id, $type);

                foreach ($menus as $menu) {
                    $class = array();

                    // bypass errors in menu parameters syntax
                    try {
                        $params = new Registry($menu->params);
                    } catch (Exception $e) {
                        $params = new Registry();
                    }

                    switch ($menu->type) {
                        case 'separator':
                            if (!$menu->link) {
                                $class[] = 'nolink';
                            }

                            $link = '';
                            break;

                        case 'alias':
                            // If this is an alias use the item id stored in the parameters to make the link.
                            $link = 'index.php?Itemid=' . $params->get('aliasoptions');
                            break;

                        default:
                            // resolve link
                            $link = $this->resolveLink($menu);
                            break;
                    }

                    $children = (int) self::getChildren($menu->id);
                    $title = isset($menu->name) ? $menu->name : $menu->title;

                    if ($children) {
                        $class = array_merge($class, array('folder', 'menu'));
                    } else {
                        $class[] = 'file';
                    }

                    if ($params->get('secure')) {
                        $link = self::toSSL($link);
                    }

                    // language
                    if (isset($menu->language)) {
                        $link .= $this->getLangauge($menu->language);
                    }

                    $items[] = array(
                        'id' => $children ? 'index.php?option=com_menu&view=menu&id=' . $menu->id : $link,
                        'url' => self::route($link),
                        'name' => $title . ' / ' . $menu->alias,
                        'class' => implode(' ', $class),
                    );
                }
                break;
            // get menu items
            case 'submenu':
                $menus = self::getMenu($args->id);
                foreach ($menus as $menu) {
                    if ($menu->type == 'menulink') {
                        //$menu = AdvlinkMenu::_alias($menu->id);
                    }

                    $children = (int) self::getChildren($menu->id);

                    $title = isset($menu->name) ? $menu->name : $menu->title;

                    // get params
                    $params = new Registry($menu->params);

                    // resolve link
                    $link = $this->resolveLink($menu);

                    // language
                    if (isset($menu->language)) {
                        $link .= $this->getLangauge($menu->language);
                    }

                    if ($params->get('secure')) {
                        $link = self::toSSL($link);
                    }

                    $items[] = array(
                        'id' => self::route($link),
                        'name' => $title . ' / ' . $menu->alias,
                        'class' => $children ? 'folder menu' : 'file',
                    );
                }
                break;
        }

        return $items;
    }

    /**
     * Convert link to SSL.
     *
     * @param type $link
     *
     * @return string
     */
    private static function toSSL($link)
    {
        if (strcasecmp(substr($link, 0, 4), 'http') && (strpos($link, 'index.php?') !== false)) {
            $uri = Uri::getInstance();

            // Get prefix
            $prefix = $uri->toString(array('host', 'port'));

            // trim slashes
            $link = trim($link, '/');

            // Build the URL.
            $link = 'https://' . $prefix . '/' . $link;
        }

        return $link;
    }

    private function resolveLink($menu)
    {
        $wf = WFEditorPlugin::getInstance();

        // get link from menu object
        $link = $menu->link;

        // internal link
        if ($link && strpos($link, 'index.php') === 0) {
            if ((bool) $wf->getParam('links.joomlalinks.menu_resolve_alias', 0)) {
                // no Itemid
                if (strpos($link, 'Itemid=') === false) {
                    $link .= '&Itemid=' . $menu->id;
                }
                // short link
            } else {
                $link = 'index.php?Itemid=' . $menu->id;
            }
        }

        return $link;
    }

    private static function getMenuTypes()
    {
        $db = Factory::getDBO();

        $query = $db->getQuery(true);

        $query->select('*')->from('#__menu_types')->where('client_id = 0')->order('title');

        $db->setQuery($query, 0);

        return $db->loadObjectList();
    }

    private static function getAlias($id)
    {
        $db = Factory::getDBO();
        $user = Factory::getUser();

        $query = $db->getQuery(true);

        $query->select('params')->from('#__menu')->where('id = ' . (int) $id);

        $db->setQuery($query, 0);
        $params = new Registry($db->loadResult());

        $query->clear();
        $query->select('id, name, link, alias')->from('#__menu')->where(array('published = 1', 'id = ' . (int) $params->get('menu_item')));

        if (!$user->authorise('core.admin')) {
            $query->where('access IN (' . implode(',', $user->getAuthorisedViewLevels()) . ')');
        }

        $query->order('name');

        $db->setQuery($query, 0);

        return $db->loadObject();
    }

    private static function getChildren($id)
    {
        $db = Factory::getDBO();
        $user = Factory::getUser();

        $query = $db->getQuery(true);

        $query->select('COUNT(id)')->from('#__menu')->where(array('published = 1', 'client_id = 0'));

        if (!$user->authorise('core.admin')) {
            $query->where('access IN (' . implode(',', $user->getAuthorisedViewLevels()) . ')');
        }

        if ($id) {
            $query->where('parent_id = ' . (int) $id);
        }

        $db->setQuery($query, 0);

        return $db->loadResult();
    }

    private static function getMenu($parent = 0, $type = 0)
    {
        $db = Factory::getDBO();
        $user = Factory::getUser();

        $query = $db->getQuery(true);

        $query->select('m.*')->from('#__menu AS m');

        if ($type) {
            $query->innerJoin('#__menu_types AS s ON s.id = ' . (int) $type);
            $query->where('m.menutype = s.menutype');
        }

        if ($parent == 0) {
            $parent = 1;
        }

        $query->where(array('m.published = 1', 'm.parent_id = ' . (int) $parent));

        if (!$user->authorise('core.admin')) {
            $query->where('m.access IN (' . implode(',', $user->getAuthorisedViewLevels()) . ')');
        }

        // only site menu items
        $query->where('m.client_id = 0');

        $query->order('m.lft ASC');

        $db->setQuery($query, 0);

        return $db->loadObjectList();
    }

    private function getLangauge($language)
    {
        $db = Factory::getDBO();
        $query = $db->getQuery(true);

        $link = '';

        $query->select('a.sef AS sef');
        $query->select('a.lang_code AS lang_code');
        $query->from('#__languages AS a');
        $db->setQuery($query);
        $langs = $db->loadObjectList();

        foreach ($langs as $lang) {
            if ($language == $lang->lang_code) {
                $language = $lang->sef;
                $link .= '&lang=' . $language;
            }
        }
        return $link;
    }

    private static function route($url)
    {
        $wf = WFEditorPlugin::getInstance();

        if ((bool) $wf->getParam('links.joomlalinks.sef_url', 0)) {
            $url = WFLinkHelper::route($url);
        }

        // remove Itemid if "home"
        $url = WFLinkHelper::removeHomeItemId($url);

        // remove Itemid
        if ((bool) $wf->getParam('links.joomlalinks.itemid', 1) === false) {
            $url = WFLinkHelper::removeItemId($url);
        }

        return $url;
    }
}
links/joomlalinks/img/icons.png000060400000012330152455706710012612 0ustar00�PNG


IHDR�����iCCPICC Profile(��T�OA-�b�""6�l<hc�,hbD[Z�֦|��l��ve�]g��#o�ƻ�#��������1!�5Fc��b���vQ��dv~��o~�͛��(�J�I3��0>1)4�� �FA�$z$�l����7`�z������1d����!��ԍ�:5�5�wO�:�z�i�� �cl,2��q��d��#>(��"ⶬ�^�a;�5'�F�"�iZ�+*����Zq��ޤ���'���Q�X��\q���Q�L�8�q-��j���ʃ��<Gbq�O��Fu8�r�})���4�FB�C7ӎN�USSC�~���aמW���=���������ay�@�R����$ڨ��.��b��;�!
(�A�@�8&Ъ�G�( CY�.���{*�e+� ���=�zC�W�}ݳ��R����(	�܀�]f;���r����-]_oZ��j��b	�b�>_ym1�)�ɝ�v
�<��V�,n���g�?Ԩ�K�"��̳_�9���g�8
��W�i+��4�E���,���q��Kr�\�%�2���pv�r|�����|��0��?�������۫���E|i��U�)ku����̘�R���Y����%��>KDHjrG� ��`����*�u{��븕�޲@˪g3�\����g���0���la�S�,��+����@�5��?�eϚ��漯ն�~4<ع_�}R��<E�M�W�O�#
�C��	pHYs��~�6iTXtXML:com.adobe.xmp<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/">
         <dc:subject>
            <rdf:Bag/>
         </dc:subject>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:xmp="http://ns.adobe.com/xap/1.0/">
         <xmp:CreatorTool>Adobe Fireworks CS5 11.0.0.484 Macintosh</xmp:CreatorTool>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
Ifn=IDATh��{p\�}�?�ܻ+��I�~�,ٵ���Ȏ)$�L�y�4�LB�G�ԙv �$L���@�3a�6褍)�L3ng�q���1㗂L?�a�ڕ֫ݽ{���.+�ݕ�C�f�읽�|���s����֚3䇊��4'k7lX������)����q���f���7?���i�F���p�7��g��v�bʞ능�糯����\���##���a�x�+��lV��a>1o�vw38<\lx�W���ļy��a�lV�� =����t]y%{f0����q�`"��Ç��J��0���%8���U
���t-X�+r.��<��\<�+ҵ`�p��p�B�n�8)v:-]��]�@M
3g�d�|r�����@MM��0M�t�0���3���d����4���;x�OvvRWW�w���d�$�c���C2~=ۖ�֤-������#�$�йh�H��'���\�k{^��϶��RFֲ8{�<M��H�U
�H�����}�$���8Y��r5�K�]�p�D"�v_mW\A0�/ފ�yE3C��W�=X=o�5��FV��ٳ��^���~�mv/�j�U���k�Y����R2����A�@0}�cC]��ޅ�
u�>��{c��
VcXL�o��
l:� 9���G|�؏>����
�H�/��3�?|rJ�Z��[���G��(���ʑ#Gx|׮�k�Klݼ�Di_ߔ�m����9�e�M�%�J1::�>��v՚���N
�	! � `�MSJ�$	~��S\�x�#���o�k׮]���`D"׽��7�h��rZ$��_�֚H$Ž���}�R3{�G:DWW��1<�g��ť�K��u]iY��bY_��XԒ�,j��h���ms�@�4�uB�y�?�m��q\��q��V�̚E<��6�0�1�ZS`�U"�Ug4N��娩��6`z�4'��<�1h�=���a�6��`�6�\m e.5�R�ض�u���R�h=.�"z&����P8������({��att��{��8��!�@
�!�D��j�
��㠔�k�AJ9�S)Ud(�@��b���Á��^��,���T
˲��;E
�#e�,!�jjjFo����kj��_�~���h@�46⒦&0�N�e�@&��G.�����gO[�n�{�%�0�Ӧi"�$�H�!Z���:;NS����Ќ7�X��b�%!����w��h�E�#�)��*V�G�
�<oƿ��#9��ί�Jk�9–�;��f�z���G'�Bx�+�R(�E�6�e�΋�=��#�����"5�>������;n����D�?��
��Dc1�g��b�?��}'w�x�7�j)���9:f�$�n"������o�TL�Z�_[��_����u�$�!��q���V��%��z�0'O��SԘfQ��##������&R�+i
�R
��9sPJ���P�������6M

X�4�v])���>b��x���F)�R��˗c�66���q�:��bC�:��L&�!H���X�+��R__O<'���"��pyk+�P)%(5&ZWah�Rh��/�F�)*�0
-%H�s�j*:�-E��֚��z2�3c�b��߼��;���׋$,��]k�v9��R���P�LOk���Z�f���O�2�B��K���&��5��)���9 ���'JƆϞ�Z��~
KS_���H]�)c��p�YYx����cݩ��2�%�~����q��WL�����=�F��ۣp�\��uT�)�a�S>1��=�Y6��9�H�iH~��9�ri���>�wR��J�ˮc,i��H�i����璆:��i��/���SJ��Z!x��)ޡ�wϟ�	"��~�y��c���2��c�WneeJK�$��у�h�ϞW{�Y��>e�ʽ�c:Vbì%T%���0L]�;�ק�ʱ�ί\MTgh��avc#�--��4aҬ��R_��X�W]�?�[΂F�Ļ'I�=łK5��������! �r��E%�jf��b�{�'�����)'%��Μ�L
�$���v�\ �1���[[�v��v۶������]�,+_ߺuk���_�r�k��miiY��YXV�q�Zb�!���G~x�F`j�RʨeY{{{q]��kR�p�ΝuSN�4M�jժ�m�}������%㦔Z�s�NT~��Bttt��܌��\.gT�l����ѣ,_��@ @2�T�¸�L&Y�l����Ne�V�\��G?�с|F�2��;nB�}gΜy<9]�~����z�,�c�|?ȸ��r9ö�q�V���0�Lr����+Pu�*1��[�aa܄�ujR�����%K�l���m���"�EM��Q�8Lɣ��>���*�(��S�(��غiӉ���R��Gb՚��;)��(Ǐub����\NJ!x�Сq����)�(�y�2@/�~]�j)lf*�<ʄ�k��G)�j�Z�v~bb��l�E��y_@;��ĭ�Bu��)d��˕�A�m��(}}}E���z�����4�b,֧�&t��y.0,G���_��OgVK�>��99üG)�a"�@)Ed�X�SX�ű����C<��醰�������B���@CC�؆�H�y7��J&I_H|�h���

���Oo�WN��\H5���
|�e��BH�,�H�Ƌ_`&�;nX�tl�6����+2�D���`�[�*��(�[V�̊��K-��y��_��h�M[���O8�4�)"��0D"pⴊ�j�@�&�h�Cͷ���C��d��{�Z�%�4�B��Z�S)!D=0m�f9�u���z�������"�/�{���e鳙�>�J���������wΝ�烕?B�&��Ǿ�a��1AƗ?�z��jŅ��?Ļ{9�ӱ�uܯ��u.7i������<�ٻ�8��R�����7O�)L��'����{�q��|��_}}��	�WS
�W�8ݗc��k�r�B�R̼��hV^{˒�Oo��eX��!DeMIf��z^��ҕ5�p����O�b�c8����YF����U��\M9~F��Ħ(m���ιMD+h���O�5e,.���>�O�Z��d���Z�'������y@J���\ɧ������������ϰ�O��+�_�E���|���/�C�7_0yʕ|�*���AEI��(RB��-�Db�O�r�wrRbH�i���a�򵔼�)cXէ��H���R���ׇ��-[�?#�m�l�~�C;T�)Zk���o۾}���g���۷�ooo��Z�I#�ȷ����i����H$�j�'�T*�Ύ;���~ǎR��;U;L�X�y���X����<8x��G{6�5��0��E���h��Ø��8@[[�7����Z�v]�	�0���r�u�'����=U������^z饾����x�(�2��PJe
�v����c�V�XѶdɒ�|Sv�ضm[߬Y��֭�cK&�9����7�d2�#��ݱe֬Ym۶m�s��t]�hk�h[�z�7��so�F��L)�f4�TG��[7n��7W�^�@[[G���b�M�.�>�D��F|�ug�'LӼw�3��i��vv.{��^ԥ�"�ȺI�����τB���w�ӝ�K�ڱ�U�ٹ�ݻ��P(�����3~��.��P�:��v��,ˡ�6���mBl�f�/�v�y2$Z��a�b���S����0�[�ǗK�(`Te(�0�&ƴ"`�\!D����y��V8j��e�����/v�Q�B�SIEND�B`�links/joomlalinks/img/index.html000060400000000054152455706710012766 0ustar00<html><body bgcolor="#FFFFFF"></body></html>links/joomlalinks/tags.php000060400000010754152455706710011674 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\RouteHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Object\CMSObject;

class JoomlalinksTags extends CMSObject
{
    private $option = 'com_tags';

    /**
     * Returns a reference to a editor object.
     * @return JCE The editor object
     *
     * @since    1.5
     */
    public static function getInstance($options = array())
    {
        static $instance;

        if (!is_object($instance)) {
            $instance = new self($options);
        }

        return $instance;
    }

    public function getOption()
    {
        return $this->option;
    }

    public function getList()
    {
        return '<li id="index.php?option=com_tags" class="folder content nolink"><div class="uk-tree-row"><a href="#"><span class="uk-tree-icon"></span><span class="uk-tree-text">' . Text::_('WF_LINKS_JOOMLALINKS_TAGS') . '</span></a></div></li>';
    }

    public function getLinks($args)
    {
        require_once JPATH_SITE . '/components/com_tags/helpers/route.php';

        $items = array();
        $view = isset($args->view) ? $args->view : '';

        $language = '';

        // create a new RouteHelper instance
        $router = new RouteHelper();

        $tags = array();

        if (!isset($args->id)) {
            $args->id = 1;
        }

        // get any articles in this category (in Joomla! 1.6+ a category can contain sub-categories and articles)
        $tags = self::getTags($args->id);

        if (!empty($tags)) {
            // output article links
            foreach ($tags as $tag) {
                if (isset($tag->language)) {
                    $language = $tag->language;
                }

                $id = $router->getRoute($tag->slug ?? $tag->id, 'com_tags.tag', '', $language);
                $id = $this->route($id);

                $items[] = array(
                    'id' => $id,
                    'name' => $tag->title . ' / ' . $tag->alias,
                    'class' => 'file',
                );
            }
        }

        return $items;
    }

    private static function getTags($id)
    {
        $db = Factory::getDBO();
        $user = Factory::getUser();

        $wf = WFEditorPlugin::getInstance();

        $query = $db->getQuery(true);
        $query->select('a.id, a.title, a.alias');

        if ($wf->getParam('links.joomlalinks.tag_alias', 0)) {
            $case_when_item_alias = ' CASE WHEN ';
            $case_when_item_alias .= $query->charLength('a.alias', '!=', '0');
            $case_when_item_alias .= ' THEN ';

            // Joomla 3 compatibility
            if (method_exists($query, 'castAsChar')) {
                $a_id = $query->castAsChar('a.id');
            } else {
                $a_id = $query->castAs('CHAR', 'a.id');
            }

            $case_when_item_alias .= $query->concatenate(array($a_id, 'a.alias'), ':');
            $case_when_item_alias .= ' ELSE ';
            $case_when_item_alias .= $a_id . ' END as slug';
            $query->select($case_when_item_alias);
        }

        $query->from('#__tags AS a');
        $query->where('a.alias <> ' . $db->quote('root'));
        $query->where($db->qn('a.published') . ' = 1');

        if (!$user->authorise('core.admin')) {
            $groups = implode(',', $user->getAuthorisedViewLevels());
            $query->where('a.access IN (' . $groups . ')');
        }

        if (Multilanguage::isEnabled()) {
            $tag = Factory::getLanguage()->getTag();
            $query->where('a.language in (' . $db->quote($tag) . ',' . $db->quote('*') . ')');
        }

        $query->order('a.title');

        $db->setQuery($query, 0);

        return $db->loadObjectList();
    }

    private static function route($url)
    {
        $wf = WFEditorPlugin::getInstance();

        if ((bool) $wf->getParam('links.joomlalinks.sef_url', 0)) {
            $url = WFLinkHelper::route($url);
        }

        // remove Itemid if "home"
        $url = WFLinkHelper::removeHomeItemId($url);

        // remove Itemid
        if ((bool) $wf->getParam('links.joomlalinks.itemid', 1) === false) {
            $url = WFLinkHelper::removeItemId($url);
        }

        return $url;
    }
}
links/joomlalinks.php000060400000005603152455706710010733 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\Filesystem\Folder;

class WFLinkBrowser_Joomlalinks
{
    public $_option = array();
    public $_adapters = array();

    /**
     * Constructor activating the default information of the class.
     */
    public function __construct($options = array())
    {
        $wf = WFEditorPlugin::getInstance();

        $path = __DIR__ . '/joomlalinks';

        // Get all files
        $files = Folder::files($path, '\.(php)$');

        if (!empty($files)) {
            foreach ($files as $file) {
                $name = basename($file, '.php');

                if (!$this->checkOptionAccess($name)) {
                    continue;
                }

                // skip weblinks if it doesn't exist!
                if ($name == 'weblinks' && !ComponentHelper::isEnabled('com_weblinks')) {
                    continue;
                }

                require_once $path . '/' . $file;

                $classname = 'Joomlalinks' . ucfirst($name);

                if (class_exists($classname)) {
                    $this->_adapters[] = new $classname();
                }
            }
        }
    }

    protected function checkOptionAccess($option)
    {
        $wf = WFEditorPlugin::getInstance();

        $option = str_replace('com_', '', $option);

        if ($option === "contact") {
            $option = "contacts";
        }

        return (int) $wf->getParam('links.joomlalinks.' . $option, 1) === 1;
    }

    public function display()
    {
        // Load css
        $document = WFDocument::getInstance();
        $document->addStyleSheet(array('joomlalinks'), 'extensions/links/joomlalinks/css');
    }

    public function isEnabled()
    {
        $wf = WFEditorPlugin::getInstance();
        return (bool) $wf->getParam('links.joomlalinks.enable', 1);
    }

    public function getOption()
    {
        foreach ($this->_adapters as $adapter) {
            $this->_option[] = $adapter->getOption();
        }

        return $this->_option;
    }

    public function getList()
    {
        $list = '';

        foreach ($this->_adapters as $adapter) {
            $list .= $adapter->getList();
        }

        return $list;
    }

    public function getLinks($args)
    {
        $wf = WFEditorPlugin::getInstance();

        foreach ($this->_adapters as $adapter) {
            if ($adapter->getOption() == $args->option) {

                if (!$this->checkOptionAccess($args->option)) {
                    continue;
                }

                return $adapter->getLinks($args);
            }
        }
    }
}
links/joomlalinks.xml000060400000011220152455706710010734 0ustar00<?xml version="1.0" ?>
<extension version="3.4" type="plugin" group="jce" method="upgrade">
    <name>WF_LINKS_JOOMLALINKS_TITLE</name>
    <version>2.9.99.2</version>
    <creationDate>22-04-2026</creationDate>
    <author>Ryan Demmer</author>
    <authorEmail>info@joomlacontenteditor.net</authorEmail>
    <authorUrl>https://www.joomlacontenteditor.net/</authorUrl>
    <copyright>Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved</copyright>
    <license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
    <description>WF_LINKS_JOOMLALINKS_DESC</description>
    <files>
        <filename>joomlalinks.php</filename>
        <folder>joomlalinks</folder>
    </files>
    <!--params group="links">
		<field name="joomlalinks" type="yesno" label="WF_LABEL_EXTENSION_ENABLE" description="WF_LABEL_EXTENSION_ENABLE_DESC">
        	<option value="1">JYES</option>
        	<option value="0">JNO</option>
    	</field>
	</params-->
    <fields name="joomlalinks">
        <fieldset name="links.joomlalinks">
            <field name="content" type="yesno" default="1" label="WF_LINKS_JOOMLALINKS_PARAM_CONTENT" description="WF_LINKS_JOOMLALINKS_PARAM_CONTENT_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="article_alias" type="yesno" default="0" label="WF_LINKS_JOOMLALINKS_PARAM_ARTICLE_ALIAS" description="WF_LINKS_JOOMLALINKS_PARAM_ARTICLE_ALIAS_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="article_unpublished" type="yesno" default="0" label="WF_LINKS_JOOMLALINKS_PARAM_ARTICLE_UNPUBLISHED" description="WF_LINKS_JOOMLALINKS_PARAM_ARTICLE_UNPUBLISHED_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="static" type="yesno" default="1" label="WF_LINKS_JOOMLALINKS_PARAM_UNCATEGORIZED" description="WF_LINKS_JOOMLALINKS_PARAM_UNCATEGORIZED_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="contacts" type="yesno" default="1" label="WF_LINKS_JOOMLALINKS_PARAM_CONTACT" description="WF_LINKS_JOOMLALINKS_PARAM_CONTACT_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="weblinks" type="yesno" default="1" label="WF_LINKS_JOOMLALINKS_PARAM_WEBLINKS" description="WF_LINKS_JOOMLALINKS_PARAM_WEBLINKS_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="weblinks_alias" type="yesno" default="0" label="WF_LINKS_JOOMLALINKS_PARAM_WEBLINKS_ALIAS" description="WF_LINKS_JOOMLALINKS_PARAM_WEBLINKS_ALIAS_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="menu" type="yesno" default="1" label="WF_LINKS_JOOMLALINKS_PARAM_MENU" description="WF_LINKS_JOOMLALINKS_PARAM_MENU_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="menu_resolve_alias" type="yesno" default="0" label="WF_LINKS_JOOMLALINKS_PARAM_ARTICLE_MENU_LINK" description="WF_LINKS_JOOMLALINKS_PARAM_ARTICLE_MENU_LINK_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="tags" type="yesno" default="1" label="WF_LINKS_JOOMLALINKS_PARAM_TAGS" description="WF_LINKS_JOOMLALINKS_PARAM_TAGS_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="tags_alias" type="yesno" default="0" label="WF_LINKS_JOOMLALINKS_PARAM_TAGS_ALIAS" description="WF_LINKS_JOOMLALINKS_PARAM_TAGS_ALIAS_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="itemid" type="yesno" default="1" label="WF_LINKS_JOOMLALINKS_ITEMID" description="WF_LINKS_JOOMLALINKS_ITEMID_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="sef_url" type="yesno" default="0" label="WF_LINKS_JOOMLALINKS_SEF_URL" description="WF_LINKS_JOOMLALINKS_SEF_URL_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
        </fieldset>
    </fields>
    <plugins></plugins>
</extension>
filesystem/index.html000060400000000054152455706710010734 0ustar00<html><body bgcolor="#FFFFFF"></body></html>filesystem/joomla.xml000060400000004343152455706710010747 0ustar00<?xml version="1.0" ?>
<extension version="3.8">
    <name>WF_FILESYSTEM_JOOMLA_TITLE</name>
    <version>2.9.99.2</version>
    <creationDate>22-04-2026</creationDate>
    <author>Ryan Demmer</author>
    <authorEmail>info@joomlacontenteditor.net</authorEmail>
    <authorUrl>https://www.joomlacontenteditor.net/</authorUrl>
    <copyright>Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved</copyright>
    <license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
    <description>WF_FILESYSTEM_JOOMLA_DESC</description>
    <files></files>
    <fields>
        <fieldset name="filesystem.joomla">
            <field name="allow_root" type="radio" default="0" label="WF_PARAM_ALLOW_ROOT" description="WF_PARAM_ALLOW_ROOT_DESC" class="btn-group btn-group-yesno">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>

            <field name="restrict_dir" type="checkboxes" class="flex-row" default="administrator,api,bin,cache,components,cli,includes,language,layouts,libraries,logs,media,modules,plugins,templates,tmp,xmlrpc" multiple="true" label="WF_PARAM_DIRECTORY_RESTRICTED" description="WF_PARAM_DIRECTORY_RESTRICTED_DESC" showon="allow_root:1">
                <option value="administrator">administrator</option>
                <option value="api">api</option>
                <option value="bin">bin</option>
                <option value="cache">cache</option>
                <option value="components">components</option>
                <option value="cli">cli</option>
                <option value="includes">includes</option>
                <option value="language">language</option>
                <option value="layouts">layouts</option>
                <option value="libraries">libraries</option>
                <option value="logs">logs</option>
                <option value="media">media</option>
                <option value="modules">modules</option>
                <option value="plugins">plugins</option>
                <option value="templates">templates</option>
                <option value="tmp">tmp</option>
                <option value="xmlrpc">xmlrpc</option>
            </field>
        </fieldset>
    </fields>
</extension>filesystem/joomla.php000060400000066106152455706710010743 0ustar00<?php

/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Client\ClientHelper;
use Joomla\CMS\Factory;
use Joomla\Filesystem\File;
use Joomla\Filesystem\Folder;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Uri\Uri;
use Joomla\Registry\Registry;

class WFJoomlaFileSystem extends WFFileSystem
{
    /**
     * A list of restricted directories if allowroot is set to true.
     *
     * @var array
     */
    protected $restricted = array(
        'administrator',
        'api',
        'bin',
        'cache',
        'components',
        'cli',
        'includes',
        'language',
        'layouts',
        'libraries',
        'logs',
        'media',
        'modules',
        'plugins',
        'templates',
        'tmp',
        'xmlrpc',
    );

    /**
     * Allow root access to the filesystem.
     *
     * @var boolean
     */
    protected $allowroot = false;

    /**
     * Constructor activating the default information of the class.
     */
    public function __construct($config = array())
    {
        // normalize allow_root as boolean to "allowroot"
        if (isset($config['allow_root'])) {
            $this->allowroot = (bool) $config['allow_root'];
            
            // remove allow_root from config
            unset($config['allow_root']);
        }

        if (isset($config['restrict_dir'])) {
            $restricted = $config['restrict_dir'];

            // Normalize $restricted to array
            if (is_string($restricted)) {
                $restricted = array_map('trim', explode(',', $restricted));
            }

            // Clean empty values
            $restricted = array_filter($restricted);

            // update class property
            $this->restricted = $restricted;
        }

        // remove root folder restrictions
        if ($this->allowroot === false) {
            $this->restricted = [];
        }

        if (!isset($config['root'])) {
            $config['root'] = 'images';
        }

        if (!isset($config['list_limit'])) {
            $config['list_limit'] = 0; // "all
        }

        // this is a "local" filesystem
        $config['local'] = true;        

        parent::__construct($config);
    }

    /**
     * Get the base directory.
     *
     * @return string base dir
     */
    public function getBaseDir($path = '')
    {
        return JPATH_SITE;
    }

    /**
     * Get the full base url.
     *
     * @return string base url
     */
    public function getBaseURL($path = '')
    {
        return Uri::root(true);
    }

    /**
     * Return the full user directory path. Create if required.
     *
     * @param string    The base path
     *
     * @return Full path to folder
     */
    public function getRootDir()
    {        
        if ($this->get('allowroot')) {
            return ''; // return a blank value for allowroot
        }

        return $this->get('root', 'images');
    }

    public function toAbsolute($path)
    {
        if (empty($path)) {
            $path = $this->getRootDir();
        }
        
        return WFUtility::makePath($this->getBaseDir(), $path);
    }

    public function toRelative($path, $isabsolute = true)
    {
        // path is absolute
        $base = $this->getBaseDir();

        // path is relative to Joomla! root, eg: images/folder
        if ($isabsolute === false) {
            $base = '';
        }

        if (function_exists('mb_substr')) {
            $path = mb_substr($path, mb_strlen($base));
        } else {
            $path = substr($path, strlen($base));
        }

        $path = WFUtility::cleanPath($path);

        return ltrim($path, '/');
    }

    /**
     * Determine whether FTP mode is enabled.
     *
     * @return bool
     */
    public function isFtp()
    {
        // Initialize variables
        $FTPOptions = ClientHelper::getCredentials('ftp');

        return $FTPOptions['enabled'] == 1;
    }

    public function getTotalSize($path, $recurse = true)
    {
        $total = 0;

        if (strpos($path, $this->getBaseDir()) === false) {
            $path = $this->toAbsolute($path);
        }

        if (is_dir($path)) {
            $files = Folder::files($path, '.', $recurse, true, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html', 'thumbs.db'));

            foreach ($files as $file) {
                $total += filesize($file);
            }
        }

        return $total;
    }

    /**
     * Count the number of files in a folder.
     *
     * @return int File total
     *
     * @param string $path Absolute path to folder
     */
    public function countFiles($path, $recurse = false)
    {
        if (strpos($path, $this->getBaseDir()) === false) {
            $path = $this->toAbsolute($path);
        }

        if (is_dir($path)) {
            $files = Folder::files($path, '.', $recurse, false, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html', 'thumbs.db'));

            return count($files);
        }

        return 0;
    }

    /**
     * Count the number of folders in a folder.
     *
     * @return int Folder total
     *
     * @param string $path Absolute path to folder
     */
    public function countFolders($path)
    {
        if (strpos($path, $this->getBaseDir()) === false) {
            $path = $this->toAbsolute($path);
        }

        if (is_dir($path)) {
            $folders = Folder::folders($path, '.', false, false, array('.svn', 'CVS', '.DS_Store', '__MACOSX'));

            return count($folders);
        }

        return 0;
    }

    public function getFolders($relative, $filter = '', $sort = '', $limit = 25, $start = 0, $depth = 0)
    {
        // trim to remove leading and trailing slashes
        $relative = trim($relative, '/');

        // resolve to absolute path, defaulting to root directory if empty
        $path = $this->toAbsolute($relative);
        $path = WFUtility::fixPath($path);

        // if the path does not exist, set to root directory
        if (!is_dir($path)) {
            $relative = '';
            $path = $this->toAbsolute($relative);
        }

        $list = Folder::folders($path, $filter, $depth, true);

        $folders = array();

        $restrictedPaths = array_map(function ($val) use ($relative) {
            $absolute = $this->toAbsolute($val);
            $absolute = WFUtility::makePath($absolute, $relative);

            // trim trailing slashes
            $absolute = rtrim($absolute, '/');

            return $absolute;
        }, $this->restricted);

        if (!empty($list)) {
            // Sort alphabetically by default
            natcasesort($list);

            foreach ($list as $item) {
                $item = rawurldecode($item);

                // clean path to remove multiple slashes
                $item = WFUtility::cleanPath($item);

                $name = WFUtility::mb_basename($item);
                $name = WFUtility::convertEncoding($name);

                if (in_array($item, $restrictedPaths, true)) {
                    continue;
                }

                $id = WFUtility::makePath($relative, $name, '/');

                if ($depth) {
                    $id = $this->toRelative($item);
                    $id = WFUtility::convertEncoding($id);
                    $name = $id;
                }

                // trim leading slash
                $id = ltrim($id, '/');

                $data = array(
                    'id' => $id,
                    'name' => $name,
                    'writable' => is_writable($item) || $this->isFtp(),
                    'type' => 'folders',
                    'properties' => $this->getFolderDetails($id),
                );

                $folders[] = $data;
            }
        }

        if ($sort && strpos($sort, 'extension') === false) {
            $folders = self::sortItemsByKey($folders, $sort);
        }

        return $folders;
    }

    public function getFiles($relative, $filter = '', $sort = '', $limit = 25, $start = 0, $depth = 0)
    {
        // trim to remove leading and trailing slashes
        $relative = trim($relative, '/');

        // resolve to absolute path, defaulting to root directory if empty
        $path = $this->toAbsolute($relative);
        $path = WFUtility::fixPath($path);

        // if the path does not exist, set to root directory
        if (!is_dir($path)) {
            $relative = '';
            $path = $this->toAbsolute($relative);
        }

        // excluded files
        $exclude = array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html');

        $list = Folder::files($path, $filter, $depth, true, $exclude);

        $files = array();

        // get the total files in the list
        $count = count($list);

        if (!empty($list)) {
            // Sort alphabetically by default
            natcasesort($list);

            foreach ($list as $item) {
                $item = rawurldecode($item);

                $name = WFUtility::mb_basename($item);
                $name = WFUtility::convertEncoding($name);

                if ($depth) {
                    $relative = $this->toRelative($item);
                    $relative = WFUtility::mb_dirname($relative);
                }

                // create relative file
                $id = WFUtility::makePath($relative, $name, '/');

                // check for file validity - prevent display of files with invalid encoding that have been "cleaned"
                if (!is_file(WFUtility::makePath($this->getBaseDir(), $id, '/'))) {
                    continue;
                }

                // reset name for recursive search
                if ($depth) {
                    $name = trim($id, '/');
                }

                // create url from absolute path
                $url = $this->toRelative($item);

                // remove leading slash
                $url = trim($url, '/');

                $data = array(
                    'id' => $id,
                    'url' => $url,
                    'name' => $name,
                    'writable' => is_writable($item) || $this->isFtp(),
                    'type' => 'files',
                    'extension' => WFUtility::getExtension($name),
                    'properties' => $this->getFileDetails($id, $count),
                );

                $files[] = $data;
            }
        }

        if ($sort) {
            $files = self::sortItemsByKey($files, $sort);
        }

        return $files;
    }

    public function searchItems($relative, $query = '', $filetypes = array(), $sort = '', $depth = 3)
    {
        $result = array(
            'folders' => array(),
            'files' => array(),
        );

        if ($query) {
            // get folder list
            $result['folders'] = $this->getFolders($relative, $query, 0, 0, $sort, $depth);
        }
        
        $filter = $query;

        // create filter for filetypes
        if (!empty($filetypes)) {
            $filter .= '\.(?i)(' . implode('|', $filetypes) . ')$';
        }

        // get file list
        $result['files'] = $this->getFiles($relative, $filter, 0, 0, $sort, $depth);

        return $result;
    }

    /**
     * Get a folders properties.
     *
     * @return array Array of properties
     *
     * @param string $dir   Folder relative path
     * @param string $types File Types
     */
    public function getFolderDetails($dir)
    {
        clearstatcache();

        if (is_array($dir)) {
            $dir = isset($dir['path']) ? $dir['path'] : '';
        }

        if (empty($dir)) {
            return array();
        }

        $path = $this->toAbsolute(rawurldecode($dir));
        $date = @filemtime($path);

        return array('modified' => $date, 'size' => '');
    }

    /**
     * Get the source directory of a file path.
     */
    public function getSourceDir($path)
    {
        // return nothing if absolute $path
        if (preg_match('#^(file|http(s)?):\/\/#', $path)) {
            return '';
        }

        // directory path relative base directory
        if ($this->is_dir($path)) {
            return $path;
        }

        // file url relative to site root
        if ($this->is_file($path)) {
            return dirname($path);
        }

        return '';
    }

    public function isMatch($needle, $haystack)
    {
        return $needle == $haystack;
    }

    /**
     * Return constituent parts of a file path eg: base directory, file name.
     *
     * @param $path Relative or absolute path
     */
    public function pathinfo($path)
    {
        return pathinfo($path);
    }

    /**
     * Get a files properties.
     *
     * @return array Array of properties
     *
     * @param string $file File relative path
     */
    public function getFileDetails($file, $count = 1)
    {
        clearstatcache();

        if (is_array($file)) {
            $file = isset($file['path']) ? $file['path'] : '';
        }

        if (empty($file)) {
            return array();
        }

        $path = $this->toAbsolute(rawurldecode($file));
        $url = WFUtility::makePath($this->getBaseUrl(), rawurldecode($file));

        $date = @filemtime($path);
        $size = @filesize($path);

        $data = array(
            'size' => $size,
            'modified' => $date,
        );

        $data['preview'] = WFUtility::cleanPath($url, '/');

        if (preg_match('#\.(jpg|jpeg|bmp|gif|tiff|png|apng|webp|svg)#i', $file)) {
            $image = array();

            if ($count <= 100) {
                if (preg_match('#\.svg$#i', $file)) {
                    $svg = @simplexml_load_file($path);

                    if ($svg && isset($svg['viewBox'])) {
                        list($start_x, $start_y, $end_x, $end_y) = explode(' ', $svg['viewBox']);

                        $width = (int) $end_x;
                        $height = (int) $end_y;

                        if ($width && $height) {
                            $image['width'] = $width;
                            $image['height'] = $height;
                        }
                    }
                } else {
                    list($image['width'], $image['height']) = @getimagesize($path);
                }
            }

            $data['preview'] .= '?' . $date;

            return array_merge_recursive($data, $image);
        }

        return $data;
    }

    private function checkRestrictedDirectory($path)
    {
        if ($this->allowroot) {
            foreach ($this->restricted as $name) {
                $restricted = $this->toAbsolute($name);

                $match = false;

                if (function_exists('mb_substr')) {
                    $match = (mb_substr($path, 0, mb_strlen($restricted)) === $restricted);
                } else {
                    $match = (substr($path, 0, strlen($restricted)) === $restricted);
                }

                if ($match === true) {
                    throw new Exception('Access to the target directory is restricted');
                }
            }
        }

        return true;
    }

    /**
     * Delete the relative file(s).
     *
     * @param $files the relative path to the file name or comma seperated list of multiple paths
     *
     * @return string $error on failure
     */
    public function delete($src)
    {
        $path = $this->toAbsolute($src);

        // get error class
        $result = new WFFileSystemResult();

        // check path does not fall within a restricted folder
        $this->checkRestrictedDirectory($path);

        Factory::getApplication()->triggerEvent('onWfFileSystemBeforeDelete', array(&$path));

        if (is_file($path)) {
            $result->type = 'files';
            $result->state = File::delete($path);
        } elseif (is_dir($path)) {
            $result->type = 'folders';

            if ($this->countFiles($path) > 0 || $this->countFolders($path) > 0) {
                $result->message = Text::sprintf('WF_MANAGER_FOLDER_NOT_EMPTY', WFUtility::mb_basename($path));
            } else {
                $result->state = Folder::delete($path);
            }
        }

        Factory::getApplication()->triggerEvent('onWfFileSystemAfterDelete', array($path, $result->state));

        return $result;
    }

    /**
     * Rename a file.
     *
     * @param string $src  The relative path of the source file
     * @param string $dest The name of the new file
     *
     * @return string $error
     */
    public function rename($src, $dest)
    {
        $src = $this->toAbsolute(rawurldecode($src));
        $dir = WFUtility::mb_dirname($src);

        Factory::getApplication()->triggerEvent('onWfFileSystemBeforeRename', array(&$src, &$dest));

        $result = new WFFileSystemResult();

        if (is_file($src)) {
            $ext = WFUtility::getExtension($src);
            $file = $dest . '.' . $ext;
            $path = WFUtility::makePath($dir, $file);

            // check path does not fall within a restricted folder
            $this->checkRestrictedDirectory($path);

            $result->type = 'files';
            $result->state = File::move($src, $path);
            $result->path = $path;
            // include original source path
            $result->source = $src;
        } elseif (is_dir($src)) {
            $path = WFUtility::makePath($dir, $dest);

            $result->type = 'folders';
            $result->state = Folder::move($src, $path);
            $result->path = $path;
            // include original source path
            $result->source = $src;
        }

        Factory::getApplication()->triggerEvent('onWfFileSystemAfterRename', array(&$result));

        return $result;
    }

    /**
     * Copy a file.
     *
     * @param string $files The relative file or comma seperated list of files
     * @param string $dest  The relative path of the destination dir
     *
     * @return string $error on failure
     */
    public function copy($file, $destination, $conflict = 'replace')
    {
        $result = new WFFileSystemResult();

        // trim to remove leading slash
        $file = trim($file, '/');

        $src = $this->toAbsolute($file);
        // destination relative path
        $dest = WFUtility::makePath($destination, WFUtility::mb_basename($file));
        // destination full path
        $dest = $this->toAbsolute($dest);

        // check destination path does not fall within a restricted folder
        $this->checkRestrictedDirectory($dest);

        Factory::getApplication()->triggerEvent('onWfFileSystemBeforeCopy', array(&$src, &$dest));

        // src is a file
        if (is_file($src)) {
            // resolve filename conflict by creating a copy if required
            if ($conflict == 'copy') {
                $name = WFUtility::mb_basename($file);
                $dest = $this->resolveFilenameConflict($dest, $name, true);
            }

            $result->type = 'files';
            $result->state = File::copy($src, $dest);
            $result->path = $dest;
            // include original source path
            $result->source = $src;
        } elseif (is_dir($src)) {
            // Folders cannot be copied into themselves as this creates an infinite copy / paste loop
            if ($file === $destination) {
                $result->message = Text::_('WF_MANAGER_COPY_INTO_ERROR');
                return $result;
            }

            $result->type = 'folders';
            $result->state = Folder::copy($src, $dest);
            $result->path = $dest;
            // include original source path
            $result->source = $src;
        }

        Factory::getApplication()->triggerEvent('onWfFileSystemAfterCopy', array(&$result));

        return $result;
    }

    /**
     * Copy a file.
     *
     * @param string $files The relative file or comma seperated list of files
     * @param string $dest  The relative path of the destination dir
     *
     * @return string $error on failure
     */
    public function move($file, $destination)
    {
        $result = new WFFileSystemResult();

        // trim to remove leading slash
        $file = trim($file, '/');

        $src = $this->toAbsolute($file);
        // destination relative path
        $dest = WFUtility::makePath($destination, WFUtility::mb_basename($file));
        // destination full path
        $dest = $this->toAbsolute($dest);

        // check destination path does not fall within a restricted folder
        $this->checkRestrictedDirectory($dest);

        Factory::getApplication()->triggerEvent('onWfFileSystemBeforeMove', array(&$src, &$dest));

        if ($src != $dest) {
            // src is a file
            if (is_file($src)) {
                $result->type = 'files';
                $result->state = File::move($src, $dest);
                $result->path = $dest;
                // include original source path
                $result->source = $src;
            } elseif (is_dir($src)) {
                // Folders cannot be copied into themselves as this creates an infinite copy / paste loop
                if ($file === $destination) {
                    $result->message = Text::_('WF_MANAGER_COPY_INTO_ERROR');
                    return $result;
                }

                $result->type = 'folders';
                $result->state = Folder::move($src, $dest);
                $result->path = $dest;
                // include original source path
                $result->source = $src;
            }
        }

        Factory::getApplication()->triggerEvent('onWfFileSystemAfterMove', array(&$result));

        return $result;
    }

    /**
     * New folder base function. A wrapper for the Folder::create function.
     *
     * @param string $folder The folder to create
     *
     * @return bool true on success
     */
    public function folderCreate($folder)
    {
        if (is_dir($folder)) {
            return false;
        }

        if (@Folder::create($folder)) {
            $buffer = '<html><body bgcolor="#FFFFFF"></body></html>';
            File::write($folder . '/index.html', $buffer);
        } else {
            return false;
        }

        return true;
    }

    /**
     * New folder.
     *
     * @param string $dir     The base dir
     * @param string $new_dir The folder to be created
     *
     * @return string $error on failure
     */
    public function createFolder($dir, $new)
    {
        // relative new folder path
        $dir = WFUtility::makePath(rawurldecode($dir), $new);
        // full folder path
        $path = $this->toAbsolute($dir);

        // check path does not fall within a restricted folder
        $this->checkRestrictedDirectory($path);

        $result = new WFFileSystemResult();

        $result->state = $this->folderCreate($path);
        $result->path = $path;
        $result->type = 'folders';

        Factory::getApplication()->triggerEvent('onWfFileSystemCreateFolder', array($path, $result->state));

        return $result;
    }

    public function getDimensions($file)
    {
        $path = $this->toAbsolute(utf8_decode(rawurldecode($file)));

        $data = array(
            'width' => '',
            'height' => '',
        );

        if (file_exists($path)) {
            $dim = @getimagesize($path);
            $data = array(
                'width' => $dim[0],
                'height' => $dim[1],
            );
        }

        return $data;
    }

    protected function resolveFilenameConflict($destination, $name, $createCopy = false)
    {
        // get overwrite state
        $conflict = $this->get('upload_conflict', 'overwrite');

        // get suffix
        $suffix = $this->get('upload_suffix', '_copy');

        $path = WFUtility::mb_dirname($destination);

        if ($conflict == 'unique' || $createCopy) {
            // get extension
            $extension = WFUtility::getExtension($name);
            // get name without extension
            $name = WFUtility::stripExtension($name);
            // create tmp copy
            $tmpname = $name;

            $x = 1;

            while (is_file($destination)) {
                if (strpos($suffix, '$') !== false) {
                    $tmpname = $name . str_replace('$', $x, $suffix);
                } else {
                    $tmpname .= $suffix;
                }

                $destination = WFUtility::makePath($path, $tmpname . '.' . $extension);

                ++$x;
            }
        }

        return $destination;
    }

    public function upload($method, $src, $dir, $name, $chunks = 1, $chunk = 0)
    {
        $app = Factory::getApplication();

        // full destination directory path
        $path = $this->toAbsolute(rawurldecode($dir));
        // full file path
        $dest = WFUtility::makePath($path, $name);

        // check destination path does not fall within a restricted folder
        $this->checkRestrictedDirectory($dest);

        // check for safe mode
        $safe_mode = false;

        if (function_exists('ini_get')) {
            $safe_mode = ini_get('safe_mode');
        } else {
            $safe_mode = true;
        }

        $result = new WFFileSystemResult();

        // resolve filename conflict by creating a copy if required
        $dest = $this->resolveFilenameConflict($dest, $name);

        $app->triggerEvent('onWfFileSystemBeforeUpload', array(&$src, &$dest));

        // create object to pass to joomla event
        $object_file = new StdClass;
        $object_file->name = WFUtility::mb_basename($dest);
        $object_file->tmp_name = $src;
        $object_file->filepath = $dest;

        // vars for Joomla events
        $vars = array('com_jce.file', &$object_file, true, array());

        // trigger Joomla event before upload
        $app->triggerEvent('onContentBeforeSave', $vars);

        if (File::upload($src, $dest, false, true)) {
            $result->state = true;
            $result->path = $dest;
        }

        $app->triggerEvent('onWfFileSystemAfterUpload', array(&$result));

        // update $object_file
        $object_file->name = WFUtility::mb_basename($result->path);
        $object_file->filepath = $result->path;

        // trigger Joomla event after upload
        $app->triggerEvent('onContentAfterSave', $vars);

        return $result;
    }

    public function exists($path)
    {
        return $this->is_dir($path) || $this->is_file($path);
    }

    public function read($file)
    {
        $file = rawurldecode($file);

        $path = $this->toAbsolute($file);

        return file_get_contents($path);
    }

    public function write($file, $content)
    {
        $file = rawurldecode($file);

        $path = $this->toAbsolute($file);

        // check path does not fall within a restricted folder
        $this->checkRestrictedDirectory($path);

        Factory::getApplication()->triggerEvent('onWfFileSystemBeforeWrite', array(&$path, &$content));

        $result = File::write($path, $content);

        Factory::getApplication()->triggerEvent('onWfFileSystemAfterWrite', array($path, $result));

        return $result;
    }

    public function is_file($path)
    {
        $path = $this->toAbsolute($path);
        return is_file($path);
    }

    public function is_dir($path)
    {
        $path = $this->toAbsolute($path);
        return is_dir($path);
    }
}
search/link.php000060400000033423152455706710007474 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Filter\InputFilter;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Uri\Uri;
use Joomla\String\StringHelper;

class WFLinkSearchExtension extends WFSearchExtension
{
    private $enabled = array();

    protected function loadDefaultAdapter($plugin)
    {
        $app = Factory::getApplication();

        // create component name from plugin - special case for "contacts"
        $component = ($plugin == 'contacts') ? 'com_contact' : 'com_' . $plugin;

        // check for associated component
        if (!ComponentHelper::isEnabled($component)) {
            return;
        }

        $adapter = __DIR__ . '/adapter/' . $plugin . '/' . $plugin . '.php';

        if (!is_file($adapter)) {
            return;
        }

        require_once $adapter;

        // create classname, eg: PlgSearchContent
        $className = 'PlgWfSearch' . ucfirst($plugin);

        if (!class_exists($className)) {
            return;
        }

        // simple plugin config
        $config = array(
            'name' => $plugin,
            'type' => 'search',
            'params' => array(
                'search_limit' => 10,
            ),
        );

        // Joomla 4+
        if (method_exists($app, 'getDispatcher')) {
            $dispatcher = $app->getDispatcher();
            $instance = new $className($dispatcher, (array) $config);
            $instance->registerListeners();
        } else {
            $dispatcher = JEventDispatcher::getInstance();
            $instance = new $className($dispatcher, (array) $config);
        }

        $this->enabled[] = $plugin;
    }

    /**
     * Constructor activating the default information of the class.
     */
    public function __construct()
    {
        parent::__construct();

        $request = WFRequest::getInstance();

        $request->setRequest(array($this, 'doSearch'));
        $request->setRequest(array($this, 'getAreas'));

        $wf = WFEditorPlugin::getInstance();

        // get plugins
        $plugins = $wf->getParam('search.link.plugins', array());

        // set defaults if empty
        if (empty($plugins)) {
            $plugins = array('categories', 'contacts', 'content', 'tags');
        }

        // list core adapters
        $adapters = array('categories', 'contacts', 'content', 'tags', 'weblinks');

        // check and load external search plugins
        foreach ($plugins as $plugin) {
            // process core search plugins
            if (in_array($plugin, $adapters)) {
                $this->loadDefaultAdapter($plugin);
                continue;
            }

            // plugin must be enabled
            if (!PluginHelper::isEnabled('search', $plugin)) {
                continue;
            }

            // check plugin imports correctly - plugin may have a db entry, but is missing files
            if (PluginHelper::importPlugin('search', $plugin)) {
                $this->enabled[] = $plugin;
            }
        }

        PluginHelper::importPlugin('jce');
    }

    public function display()
    {
        parent::display();

        $document = WFDocument::getInstance();
        $document->addScript(array('link'), 'extensions.search.js');
        $document->addStylesheet(array('link'), 'extensions.search.css');
    }

    public function isEnabled()
    {
        $wf = WFEditorPlugin::getInstance();
        return (bool) $wf->getParam('search.link.enable', 1) && !empty($this->enabled);
    }

    /**
     * Method to get the search areas.
     */
    public function getAreas()
    {
        $app = Factory::getApplication('site');

        $areas = array();
        $results = array();

        $searchareas = $app->triggerEvent('onContentSearchAreas');

        foreach ($searchareas as $area) {
            if (is_array($area)) {
                $areas = array_merge($areas, $area);
            }
        }

        foreach ($areas as $k => $v) {
            $results[$k] = Text::_($v);
        }

        return $results;
    }

    /*
     * Truncate search text
     * This method uses portions of components/com_finder/views/search/tmpl/default_result.php
     * @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
     */
    private function truncateText($text, $searchword)
    {
        // Calculate number of characters to display around the result
        $term_length = StringHelper::strlen($searchword);

        $lang = Factory::getLanguage();
        $desc_length = $lang->getSearchDisplayedCharactersNumber();

        $pad_length = $term_length < $desc_length ? (int) floor(($desc_length - $term_length) / 2) : 0;

        // Find the position of the search term
        $pos = $term_length ? StringHelper::strpos(StringHelper::strtolower($text), StringHelper::strtolower($searchword)) : false;

        // Find a potential start point
        $start = ($pos && $pos > $pad_length) ? $pos - $pad_length : 0;

        // Find a space between $start and $pos, start right after it.
        $space = StringHelper::strpos($text, ' ', $start > 0 ? $start - 1 : 0);
        $start = ($space && $space < $pos) ? $space + 1 : $start;

        $text = HTMLHelper::_('string.truncate', StringHelper::substr($text, $start), $desc_length, false);

        return $text;
    }

    /*
     * Prepare search content by clean and truncating
     * This method uses portions of SearchHelper::prepareSearchContent from administrator/components/com_search/helpers/search.php
     * @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
     */
    public function prepareSearchContent($text, $searchword)
    {
        // Replace line breaking tags with whitespace.
        $text = preg_replace("'<(br[^/>]*?/|hr[^/>]*?/|/(div|h[1-6]|li|p|td))>'si", ' ', $text);

        // clean text
        $text = htmlspecialchars(strip_tags($text));

        // remove shortcode
        $text = preg_replace('#{.+?}#', '', $text);

        // truncate text based around searchword
        $text = $this->truncateText($text, $searchword);

        // highlight searchword
        $text = preg_replace('#\b(' . preg_quote($searchword, '#') . ')\b#i', '<mark>$1</mark>', $text);

        return $text;
    }

    /*
     * Render Search fields
     * This method uses portions of SearchViewSearch::display from components/com_search/views/search/view.html.php
     * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
     */

    public function render()
    {
        if (!$this->isEnabled()) {
            return '';
        }

        // built select lists
        $orders = array();
        $orders[] = HTMLHelper::_('select.option', 'newest', Text::_('WF_SEARCH_NEWEST_FIRST'));
        $orders[] = HTMLHelper::_('select.option', 'oldest', Text::_('WF_SEARCH_OLDEST_FIRST'));
        $orders[] = HTMLHelper::_('select.option', 'popular', Text::_('WF_SEARCH_MOST_POPULAR'));
        $orders[] = HTMLHelper::_('select.option', 'alpha', Text::_('WF_SEARCH_ALPHABETICAL'));
        $orders[] = HTMLHelper::_('select.option', 'category', Text::_('WF_CATEGORY'));

        $lists = array();
        $lists['ordering'] = HTMLHelper::_('select.genericlist', $orders, 'ordering', 'class="inputbox"', 'value', 'text');

        $searchphrases = array();
        $searchphrases[] = HTMLHelper::_('select.option', 'all', Text::_('WF_SEARCH_ALL_WORDS'));
        $searchphrases[] = HTMLHelper::_('select.option', 'any', Text::_('WF_SEARCH_ANY_WORDS'));
        $searchphrases[] = HTMLHelper::_('select.option', 'exact', Text::_('WF_SEARCH_EXACT_PHRASE'));
        $lists['searchphrase'] = HTMLHelper::_('select.radiolist', $searchphrases, 'searchphrase', '', 'value', 'text', 'all');

        $view = $this->getView(array('name' => 'search', 'layout' => 'search'));

        $view->searchareas = self::getAreas();
        $view->lists = $lists;

        $view->display();
    }

    private static function getSearchAreaFromUrl($url)
    {
        $query = parse_url($url, PHP_URL_QUERY);

        if (empty($query)) {
            return "";
        }

        parse_str($query, $values);

        if (!array_key_exists('option', $values)) {
            return "";
        }

        $language = Factory::getLanguage();

        $option = $values['option'];

        // load system language file
        $language->load($option . '.sys', JPATH_ADMINISTRATOR);
        $language->load($option, JPATH_ADMINISTRATOR);

        return Text::_($option);
    }

    /**
     * Process search.
     *
     * @param type $query Search query
     * @return array Search Results
     *
     * This method uses portions of SearchController::search from components/com_search/controller.php
     *
     * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved
     */
    public function doSearch($query)
    {
        $wf = WFEditorPlugin::getInstance();

        $results = array();

        if (empty($query)) {
            return $results;
        }

        // search area
        $area = null;

        // available search areas
        $areas = $this->getAreas();

        // query using a specific plugin
        if (strpos($query, ':') !== false) {
            preg_match('#^(' . implode('|', $areas) . ')\:(.+)#', $query, $matches);

            if ($matches) {
                $area = array($matches[1]);
                $query = $matches[2];
            }
        }

        $app = Factory::getApplication('site');
        $filter = InputFilter::getInstance();

        $limit = (int) $wf->getParam('search.link.limit', 50);

        // slashes cause errors, <> get stripped anyway later on. # causes problems.
        $searchword = trim(str_replace(array('#', '>', '<', '\\'), '', $filter->clean($query)));

        $ordering = null;
        $searchphrase = 'all';

        // if searchword enclosed in double quotes, strip quotes and do exact match
        if (substr($searchword, 0, 1) == '"' && substr($searchword, -1) == '"') {
            $searchword = substr($searchword, 1, -1);
            $searchphrase = 'exact';
        }

        $searchphrase = $app->input->post->getWord('searchphrase', $searchphrase);

        // get passed through ordering
        $ordering = $app->input->post->getWord('ordering', $ordering);

        // get passed through area
        $area = $app->input->post->getCmd('areas', (array) $area);

        if (empty($area)) {
            $area = null;
        }

        // trigger search on loaded plugins
        $searches = $app->triggerEvent('onContentSearch', array(
            $searchword,
            $searchphrase,
            $ordering,
            $area,
        ));

        $rows = array();

        foreach ($searches as $search) {
            $rows = array_merge((array) $rows, (array) $search);
        }

        // get first 10
        $rows = array_slice($rows, 0, $limit);

        $areas = array();

        for ($i = 0, $count = count($rows); $i < $count; ++$i) {
            $row = &$rows[$i];

            if (empty($row->href) || empty($row->title)) {
                continue;
            }

            $area = isset($row->section) ? $row->section : self::getSearchAreaFromUrl($row->href);

            if (!isset($areas[$area])) {
                $areas[$area] = array();
            }

            $result = new StdClass;

            if ($searchphrase == 'exact') {
                $searchwords = array($searchword);
                $needle = $searchword;
            } else {
                $searchworda = preg_replace('#\xE3\x80\x80#s', ' ', $searchword);
                $searchwords = preg_split("/\s+/u", $searchworda);
                $needle = $searchwords[0];
            }

            // get anchors if any...
            $row->anchors = self::getAnchors($row->text);

            // prepare and truncate search text
            $row->text = $this->prepareSearchContent($row->text, $needle);

            // remove base url
            if (Uri::base(true) && strpos($row->href, Uri::base(true)) !== false) {
                $row->href = substr_replace($row->href, '', 0, strlen(Uri::base(true)) + 1);
            }

            // remove the alias or ItemId from a link
            $row->href = self::route($row->href);

            $result->title = $row->title;
            $result->text = $row->text;
            $result->link = $row->href;

            if (!empty($row->anchors)) {
                $result->anchors = $row->anchors;
            }

            $areas[$area][] = $result;
        }

        if (!empty($areas)) {
            $results[] = $areas;
        }

        return $results;
    }

    private static function route($url)
    {
        $wf = WFEditorPlugin::getInstance();

        // remove link alias
        if ((bool) $wf->getParam('search.link.remove_alias', 0)) {
            $url = WFLinkHelper::removeAlias($url);
        }

        // remove Itemid if "home"
        $url = WFLinkHelper::removeHomeItemId($url);

        // remove Itemid if set
        if ((bool) $wf->getParam('search.link.itemid', 1) === false) {
            $url = WFLinkHelper::removeItemId($url);
        }

        return $url;
    }

    private static function getAnchors($content)
    {
        preg_match_all('#<a([^>]+)(name|id)="([a-z]+[\w\-\:\.]*)"([^>]*)>#i', $content, $matches, PREG_SET_ORDER);

        $anchors = array();

        if (!empty($matches)) {
            foreach ($matches as $match) {
                if (strpos($match[0], 'href') === false) {
                    $anchors[] = $match[3];
                }
            }
        }

        return $anchors;
    }
}
search/index.html000060400000000054152455706710010015 0ustar00<html><body bgcolor="#FFFFFF"></body></html>search/link.xml000060400000003535152455706710007506 0ustar00<?xml version="1.0" ?>
<extension version="3.4" type="plugin" group="jce" method="upgrade">
    <name>WF_LINK_SEARCH_TITLE</name>
    <version>2.9.99.2</version>
    <creationDate>22-04-2026</creationDate>
    <author>Ryan Demmer</author>
    <authorEmail>info@joomlacontenteditor.net</authorEmail>
    <authorUrl>https://www.joomlacontenteditor.net/</authorUrl>
    <copyright>Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved</copyright>
    <license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
    <description>WF_LINK_SEARCH_DESC</description>
    <files>
        <filename>link.php</filename>
        <folder>link</folder>
    </files>
    <fields name="link">
        <fieldset name="link">
            <field name="enable" type="yesno" default="1" label="WF_LABEL_EXTENSION_ENABLE" description="WF_LABEL_EXTENSION_ENABLE_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="plugins" type="searchplugins" multiple="true" label="WF_PARAM_LINK_SEARCH_PLUGINS" description="WF_PARAM_LINK_SEARCH_PLUGINS_DESC" default="categories,contacts,content,weblinks,tags" layout="joomla.form.field.list-fancy-select" />
            <field name="remove_alias" type="yesno" default="0" label="WF_LINK_SEARCH_REMOVE_ALIAS" description="WF_LINK_SEARCH_REMOVE_ALIAS_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
            <field name="itemid" type="yesno" default="1" label="WF_LINK_SEARCH_ITEMID" description="WF_LINK_SEARCH_ITEMID_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
        </fieldset>
    </fields>
    <plugins>link</plugins>
    <media></media>
    <languages></languages>
</extension>
search/css/link.css000060400000003062152455706710010261 0ustar00#search-browser,#searchbox{position:relative}#search-browser button{padding:0 .5em}#search-browser button .uk-icon{margin:auto}#searchbox{z-index:1}div#search-browser input[type=checkbox],div#search-browser input[type=radio]{vertical-align:middle}.phrases-box input[type=radio]{margin:-3px 5px 0 0}#searchbox input{border-top-right-radius:0;border-bottom-right-radius:0;margin:0}#searchbox+div{margin-left:-1px;padding:0}#search-button{border-top-left-radius:0;border-bottom-left-radius:0}#search-clear{display:none}#search-clear.uk-active{display:block}#search-browser .uk-icon-spinner{display:none;right:0}#search-browser.loading .uk-icon-spinner{display:flex;opacity:1}#search-result{width:100%;height:100%;position:absolute;display:none;overflow:auto;overflow-x:hidden;margin:2px 0}#search-result dl{margin:5px 0;padding:10px}#search-result dl dt{cursor:pointer;font-weight:700;text-overflow:ellipsis;overflow:hidden;white-space:pre;text-decoration:underline}div#search-browser div#search-result dl.odd{background-color:#F5F5F5}div#search-browser div#search-result dl dd.anchor{line-height:32px;cursor:pointer}div#search-browser #search-options{width:100%;padding:5px;margin:2px 0 0}div#search-browser #search-options fieldset{margin:0;padding:0}div#search-browser #search-options fieldset>div{margin:5px 0}div#search-browser #search-options label{min-width:40px}#search-options-button{line-height:1}#search-options .search_only ul{list-style:none;padding:0;margin:0}#search-options .search_only ul li{display:inline-block}@media (max-width:375px){#search-button span{display:none}}search/css/index.html000060400000000054152455706710010605 0ustar00<html><body bgcolor="#FFFFFF"></body></html>search/js/index.html000060400000000054152455706710010431 0ustar00<html><body bgcolor="#FFFFFF"></body></html>search/js/link.js000060400000007553152455706710007742 0ustar00/* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */
WFExtensions.add("LinkSearch", {
    options: {
        element: "#search-input",
        button: "#search-button",
        clear: "#search-clear",
        empty: "No Results",
        onClick: $.noop
    },
    init: function(options) {
        $.extend(this.options, options);
        var self = this, el = this.options.element, options = this.options.button;
        $(options).on("click", function(e) {
            self.search(), e.preventDefault();
        }).button({
            icons: {
                primary: "uk-icon-search"
            }
        }), $("#search-clear").on("click", function(e) {
            $(this).hasClass("uk-active") && ($(this).removeClass("uk-active"), 
            $(el).val(""), $("#search-result").empty().hide());
        }), $("#search-options-button").on("click", function(e) {
            e.preventDefault(), $(this).addClass("uk-active");
            e = $("#search-options").parent();
            $("#search-options").height(e.parent().height() - e.outerHeight() - 15).toggle();
        }).on("close", function() {
            $(this).removeClass("uk-active"), $("#search-options").hide();
        }), $(el).on("change keyup", function() {
            "" === this.value && ($("#search-result").empty().hide(), $("#search-clear").removeClass("uk-active"));
        });
    },
    search: function() {
        var self = this, s = this.options, el = s.element, $p = $("#search-result").parent(), query = $(el).val();
        query && !$(el).hasClass("placeholder") && ($("#search-clear").removeClass("uk-active"), 
        $("#search-browser").addClass("loading"), query = $.trim(query.replace(/[\///<>#]/g, "")), 
        Wf.JSON.request("doSearch", {
            json: [ query ]
        }, function(results) {
            if (results) {
                if (results.error) return void Wf.Dialog.alert(results.error, {
                    title: Wf.translate("link.search_error", "Search Error")
                });
                $("#search-result").empty(), results.length ? ($.each(results, function(i, values) {
                    $.each(values, function(name, items) {
                        $("<h3>" + name + "</h3>").appendTo("#search-result"), $.each(items, function(i, item) {
                            var $dl = $('<dl class="uk-margin-small" />').appendTo("#search-result");
                            $('<dt class="link uk-margin-small" />').text(item.title).on("click", function() {
                                $.isFunction(self.options.onClick) && self.options.onClick.call(this, Wf.String.decode(item.link));
                            }).prepend('<i class="uk-icon uk-icon-file-text-o uk-margin-small-right" />').appendTo($dl), 
                            $('<dd class="text">' + item.text + "</dd>").appendTo($dl), 
                            item.anchors && $.each(item.anchors, function(i, a) {
                                $('<dd class="anchor"><i role="presentation" class="uk-icon uk-icon-anchor uk-margin-small-right"></i>#' + a + "</dd>").on("click", function() {
                                    self.options.onClick.call(this, Wf.String.decode(item.link) + "#" + a);
                                }).appendTo($dl);
                            });
                        });
                    });
                }), $("dl:odd", "#search-result").addClass("odd")) : $("#search-result").append("<p>" + s.empty + "</p>"), 
                $("#search-options-button").trigger("close"), $("#search-result").height($p.parent().height() - $p.outerHeight() - 5).show();
            }
            $("#search-browser").removeClass("loading"), $("#search-clear").addClass("uk-active");
        }, self));
    }
});search/adapter/categories/index.html000060400000000054152455706710013562 0ustar00<html><body bgcolor="#FFFFFF"></body></html>search/adapter/categories/categories.php000060400000010361152455706710014425 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\RouteHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\CMSPlugin;

/**
 * Categories search plugin.
 *
 * @since  1.6
 */
class PlgWfSearchCategories extends CMSPlugin
{
    /**
     * Load the language file on instantiation.
     *
     * @var    boolean
     * @since  3.1
     */
    protected $autoloadLanguage = true;

    /**
     * Determine areas searchable by this plugin.
     *
     * @return  array  An array of search areas.
     *
     * @since   1.6
     */
    public function onContentSearchAreas()
    {
        static $areas = array(
            'categories' => 'PLG_SEARCH_CATEGORIES_CATEGORIES',
        );

        return $areas;
    }

    /**
     * Search content (categories).
     *
     * The SQL must return the following fields that are used in a common display
     * routine: href, title, section, created, text, browsernav.
     *
     * @param   string  $text      Target search string.
     * @param   string  $phrase    Matching option (possible values: exact|any|all).  Default is "any".
     * @param   string  $ordering  Ordering option (possible values: newest|oldest|popular|alpha|category).  Default is "newest".
     * @param   mixed   $areas     An array if the search is to be restricted to areas or null to search all areas.
     *
     * @return  array  Search results.
     *
     * @since   1.6
     */
    public function onContentSearch($text, $phrase = '', $ordering = '', $areas = null)
    {
        $db = Factory::getDbo();
        $user = Factory::getUser();
        $app = Factory::getApplication();
        $groups = implode(',', $user->getAuthorisedViewLevels());
        $searchText = $text;

        if (is_array($areas) && !array_intersect($areas, array_keys($this->onContentSearchAreas()))) {
            return array();
        }

        $limit = $this->params->def('search_limit', 50);
        $text = trim($text);

        if ($text === '') {
            return array();
        }

        switch ($ordering) {
            case 'alpha':
                $order = 'a.title ASC';
                break;

            case 'category':
            case 'popular':
            case 'newest':
            case 'oldest':
            default:
                $order = 'a.title DESC';
        }

        $text = $db->quote('%' . $db->escape($text, true) . '%', false);
        $query = $db->getQuery(true);

        // SQLSRV changes.
        $case_when = ' CASE WHEN ';
        $case_when .= $query->charLength('a.alias', '!=', '0');
        $case_when .= ' THEN ';

        // Joomla 3 compatibility
        if (method_exists($query, 'castAsChar')) {
            $a_id = $query->castAsChar('a.id');
        } else {
            $a_id = $query->castAs('CHAR', 'a.id');
        }
        
        $case_when .= $query->concatenate(array($a_id, 'a.alias'), ':');
        $case_when .= ' ELSE ';
        $case_when .= $a_id . ' END as slug';

        $query->select('a.title, a.description AS text, a.id AS catid, a.created_time, a.language, ' . $case_when);
        $query->from('#__categories AS a');
        $query->where(
            '(a.title LIKE ' . $text . ' OR a.description LIKE ' . $text . ') AND a.published = 1 AND a.extension = '
            . $db->quote('com_content') . 'AND a.access IN (' . $groups . ')'
        );

        $query->group('a.id, a.title, a.description, a.alias, a.created_time');
        $query->order($order);

        $db->setQuery($query, 0, $limit);

        try
        {
            $rows = $db->loadObjectList();
        } catch (RuntimeException $e) {
            Factory::getApplication()->enqueueMessage(Text::_('JERROR_AN_ERROR_HAS_OCCURRED'), 'error');
        }

        if ($rows) {
            foreach ($rows as $i => $row) {
                $rows[$i]->href = RouteHelper::getCategoryRoute($row->slug, $row->language, 'com_content');
                $rows[$i]->section = Text::_('JCATEGORY');
            }
        }

        return $rows;
    }
}
search/adapter/contacts/index.html000060400000000054152455706710013253 0ustar00<html><body bgcolor="#FFFFFF"></body></html>search/adapter/contacts/contacts.php000060400000013007152455706710013607 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\RouteHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\CMSPlugin;

/**
 * Contacts search plugin.
 */
class PlgWfSearchContacts extends CMSPlugin
{
    /**
     * Load the language file on instantiation.
     *
     * @var    boolean
     */
    protected $autoloadLanguage = true;

    /**
     * Determine areas searchable by this plugin.
     *
     * @return  array  An array of search areas.
     */
    public function onContentSearchAreas()
    {
        static $areas = array(
            'contacts' => 'PLG_SEARCH_CONTACTS_CONTACTS',
        );

        return $areas;
    }

    /**
     * Search content (contacts).
     *
     * The SQL must return the following fields that are used in a common display
     * routine: href, title, section, created, text, browsernav.
     *
     * @param   string  $text      Target search string.
     * @param   string  $phrase    Matching option (possible values: exact|any|all).  Default is "any".
     * @param   string  $ordering  Ordering option (possible values: newest|oldest|popular|alpha|category).  Default is "newest".
     * @param   string  $areas     An array if the search is to be restricted to areas or null to search all areas.
     *
     * @return  array  Search results.
     */
    public function onContentSearch($text, $phrase = '', $ordering = '', $areas = null)
    {
        $db = Factory::getDbo();
        $app = Factory::getApplication();
        $user = Factory::getUser();
        $groups = implode(',', $user->getAuthorisedViewLevels());

        // create a new RouteHelper instance
        $router = new RouteHelper();

        if (is_array($areas) && !array_intersect($areas, array_keys($this->onContentSearchAreas()))) {
            return array();
        }

        $limit = $this->params->def('search_limit', 50);

        $text = trim($text);

        if ($text === '') {
            return array();
        }

        $section = Text::_('PLG_SEARCH_CONTACTS_CONTACTS');

        switch ($ordering) {
            case 'alpha':
                $order = 'a.name ASC';
                break;

            case 'category':
                $order = 'c.title ASC, a.name ASC';
                break;

            case 'popular':
            case 'newest':
            case 'oldest':
            default:
                $order = 'a.name DESC';
        }

        $text = $db->quote('%' . $db->escape($text, true) . '%', false);

        $query = $db->getQuery(true);

        // SQLSRV changes.
        $case_when = ' CASE WHEN ';
        $case_when .= $query->charLength('a.alias', '!=', '0');
        $case_when .= ' THEN ';

        if (method_exists($query, 'castAsChar')) {
            $a_id = $query->castAsChar('a.id');
        } else {
            $a_id = $query->castAs('CHAR', 'a.id');
        }

        $case_when .= $query->concatenate(array($a_id, 'a.alias'), ':');
        $case_when .= ' ELSE ';
        $case_when .= $a_id . ' END as slug';

        $case_when1 = ' CASE WHEN ';
        $case_when1 .= $query->charLength('c.alias', '!=', '0');
        $case_when1 .= ' THEN ';

        if (method_exists($query, 'castAsChar')) {
            $c_id = $query->castAsChar('c.id');
        } else {
            $c_id = $query->castAs('CHAR', 'c.id');
        }

        $case_when1 .= $query->concatenate(array($c_id, 'c.alias'), ':');
        $case_when1 .= ' ELSE ';
        $case_when1 .= $c_id . ' END as catslug';

        $query->select(
            'a.name AS title, a.con_position, a.misc, a.language, '
            . $case_when . ',' . $case_when1 . ', '
            . $query->concatenate(array('a.name', 'a.con_position', 'a.misc'), ',') . ' AS text'
        );
        $query->from('#__contact_details AS a')
            ->join('INNER', '#__categories AS c ON c.id = a.catid')
            ->where(
                '(a.name LIKE ' . $text . ' OR a.misc LIKE ' . $text . ' OR a.con_position LIKE ' . $text
                . ' OR a.address LIKE ' . $text . ' OR a.suburb LIKE ' . $text . ' OR a.state LIKE ' . $text
                . ' OR a.country LIKE ' . $text . ' OR a.postcode LIKE ' . $text . ' OR a.telephone LIKE ' . $text
                . ' OR a.fax LIKE ' . $text . ') AND a.published = 1 AND c.published = 1 '
                . ' AND a.access IN (' . $groups . ') AND c.access IN (' . $groups . ')'
            )
            ->order($order);

        $db->setQuery($query, 0, $limit);

        try
        {
            $rows = $db->loadObjectList();
        } catch (RuntimeException $e) {
            $rows = array();
            Factory::getApplication()->enqueueMessage(Text::_('JERROR_AN_ERROR_HAS_OCCURRED'), 'error');
        }

        if ($rows) {
            // create a new RouteHelper instance
            $router = new RouteHelper();

            foreach ($rows as $key => $row) {
                $rows[$key]->href = $router->getRoute($row->slug, 'com_contact.contact', '', $row->language, $row->catslug);
                $rows[$key]->text = $row->title;
                $rows[$key]->text .= $row->con_position ? ', ' . $row->con_position : '';
                $rows[$key]->text .= $row->misc ? ', ' . $row->misc : '';

                $rows[$key]->section = $section;
            }
        }

        return $rows;
    }
}
search/adapter/index.html000060400000000054152455706710011435 0ustar00<html><body bgcolor="#FFFFFF"></body></html>search/adapter/tags/tags.php000060400000011416152455706710012051 0ustar00<?php

/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\RouteHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\CMSPlugin;

/**
 * Tags search plugin.
 *
 */
class PlgWfSearchTags extends CMSPlugin
{
    /**
     * Load the language file on instantiation.
     *
     * @var    boolean
     */
    protected $autoloadLanguage = true;

    /**
     * Determine areas searchable by this plugin.
     *
     * @return  array  An array of search areas.
     *
     */
    public function onContentSearchAreas()
    {
        static $areas = array(
            'tags' => 'PLG_SEARCH_TAGS_TAGS',
        );

        return $areas;
    }

    /**
     * Search content (tags).
     *
     * The SQL must return the following fields that are used in a common display
     * routine: href, title, section, created, text, browsernav.
     *
     * @param   string  $text      Target search string.
     * @param   string  $phrase    Matching option (possible values: exact|any|all).  Default is "any".
     * @param   string  $ordering  Ordering option (possible values: newest|oldest|popular|alpha|category).  Default is "newest".
     * @param   string  $areas     An array if the search is to be restricted to areas or null to search all areas.
     *
     * @return  array  Search results.
     *
     * @since   3.3
     */
    public function onContentSearch($text, $phrase = '', $ordering = '', $areas = null)
    {
        $db = Factory::getDbo();
        $query = $db->getQuery(true);
        $app = Factory::getApplication();
        $user = Factory::getUser();
        $lang = Factory::getLanguage();

        $section = Text::_('PLG_SEARCH_TAGS_TAGS');
        $limit = $this->params->def('search_limit', 50);

        if (is_array($areas) && !array_intersect($areas, array_keys($this->onContentSearchAreas()))) {
            return array();
        }

        $text = trim($text);

        if ($text === '') {
            return array();
        }

        $text = $db->quote('%' . $db->escape($text, true) . '%', false);

        switch ($ordering) {
            case 'alpha':
                $order = 'a.title ASC';
                break;

            case 'newest':
                $order = 'a.created_time DESC';
                break;

            case 'oldest':
                $order = 'a.created_time ASC';
                break;

            case 'popular':
            default:
                $order = 'a.title DESC';
        }

        $query->select('a.id, a.title, a.alias, a.note, a.published, a.access'
            . ', a.checked_out, a.checked_out_time, a.created_user_id'
            . ', a.path, a.parent_id, a.level, a.lft, a.rgt'
            . ', a.language, a.created_time AS created, a.description');

        $case_when_item_alias = ' CASE WHEN ';
        $case_when_item_alias .= $query->charLength('a.alias', '!=', '0');
        $case_when_item_alias .= ' THEN ';

        // Joomla 3 compatibility
        if (method_exists($query, 'castAsChar')) {
            $a_id = $query->castAsChar('a.id');
        } else {
            $a_id = $query->castAs('CHAR', 'a.id');
        }

        $case_when_item_alias .= $query->concatenate(array($a_id, 'a.alias'), ':');
        $case_when_item_alias .= ' ELSE ';
        $case_when_item_alias .= $a_id . ' END as slug';
        $query->select($case_when_item_alias);

        $query->from('#__tags AS a');
        $query->where('a.alias <> ' . $db->quote('root'));

        $query->where('(a.title LIKE ' . $text . ' OR a.alias LIKE ' . $text . ')');

        $query->where($db->qn('a.published') . ' = 1');

        if (!$user->authorise('core.admin')) {
            $groups = implode(',', $user->getAuthorisedViewLevels());
            $query->where('a.access IN (' . $groups . ')');
        }

        $query->order($order);

        $db->setQuery($query, 0, $limit);

        try {
            $rows = $db->loadObjectList();
        } catch (RuntimeException $e) {
            $rows = array();
            Factory::getApplication()->enqueueMessage(Text::_('JERROR_AN_ERROR_HAS_OCCURRED'), 'error');
        }

        if ($rows) {
            // create a new RouteHelper instance
            $router = new RouteHelper();

            foreach ($rows as $key => $row) {
                $rows[$key]->href = $router->getRoute($row->slug, 'com_tags.tag', '', $row->language);
                $rows[$key]->text = ($row->description !== '' ? $row->description : $row->title);
                $rows[$key]->text .= $row->note;
            }
        }

        return $rows;
    }
}
search/adapter/tags/index.html000060400000000054152455706710012373 0ustar00<html><body bgcolor="#FFFFFF"></body></html>search/adapter/content/content.php000060400000015646152455706710013312 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\RouteHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\CMSPlugin;

/**
 * Content search plugin.
 *
 */
class PlgWfSearchContent extends CMSPlugin
{
    /**
     * Determine areas searchable by this plugin.
     *
     * @return  array  An array of search areas.
     *
     */
    public function onContentSearchAreas()
    {
        static $areas = array(
            'content' => 'JGLOBAL_ARTICLES',
        );

        return $areas;
    }

    /**
     * Search content (articles).
     * The SQL must return the following fields that are used in a common display
     * routine: href, title, section, created, text, browsernav.
     *
     * @param   string  $text      Target search string.
     * @param   string  $phrase    Matching option (possible values: exact|any|all).  Default is "any".
     * @param   string  $ordering  Ordering option (possible values: newest|oldest|popular|alpha|category).  Default is "newest".
     * @param   mixed   $areas     An array if the search it to be restricted to areas or null to search all areas.
     *
     * @return  array  Search results.
     *
     */
    public function onContentSearch($text, $phrase = '', $ordering = '', $areas = null)
    {
        $db = Factory::getDbo();
        $serverType = $db->getServerType();
        $app = Factory::getApplication();
        $user = Factory::getUser();
        $groups = implode(',', $user->getAuthorisedViewLevels());
        $tag = Factory::getLanguage()->getTag();

        $searchText = $text;

        if (is_array($areas) && !array_intersect($areas, array_keys($this->onContentSearchAreas()))) {
            return array();
        }

        $limit = $this->params->def('search_limit', 50);

        $nullDate = $db->getNullDate();
        $date = Factory::getDate();
        $now = $date->toSql();

        $text = trim($text);

        if ($text === '') {
            return array();
        }

        $relevance = array();

        switch ($phrase) {
            case 'exact':
                $text = $db->quote('%' . $db->escape($text, true) . '%', false);
                $wheres2 = array();
                $wheres2[] = 'a.title LIKE ' . $text;
                $wheres2[] = 'a.introtext LIKE ' . $text;
                $wheres2[] = 'a.fulltext LIKE ' . $text;

                $relevance[] = ' CASE WHEN ' . $wheres2[0] . ' THEN 5 ELSE 0 END ';

                $where = '(' . implode(') OR (', $wheres2) . ')';
                break;

            case 'all':
            case 'any':
            default:
                $words = explode(' ', $text);
                $wheres = array();

                foreach ($words as $word) {
                    $word = $db->quote('%' . $db->escape($word, true) . '%', false);
                    $wheres2 = array();
                    $wheres2[] = 'LOWER(a.title) LIKE LOWER(' . $word . ')';
                    $wheres2[] = 'LOWER(a.introtext) LIKE LOWER(' . $word . ')';
                    $wheres2[] = 'LOWER(a.fulltext) LIKE LOWER(' . $word . ')';

                    $relevance[] = ' CASE WHEN ' . $wheres2[0] . ' THEN 5 ELSE 0 END ';

                    $wheres[] = implode(' OR ', $wheres2);
                }

                $where = '(' . implode(($phrase === 'all' ? ') AND (' : ') OR ('), $wheres) . ')';
                break;
        }

        switch ($ordering) {
            case 'oldest':
                $order = 'a.created ASC';
                break;

            case 'popular':
                $order = 'a.hits DESC';
                break;

            case 'alpha':
                $order = 'a.title ASC';
                break;

            case 'category':
                $order = 'c.title ASC, a.title ASC';
                break;

            case 'newest':
            default:
                $order = 'a.created DESC';
                break;
        }

        $rows = array();
        $query = $db->getQuery(true);

        // Search articles.
        if ($limit > 0) {
            //sqlsrv changes
            $case_when1 = ' CASE WHEN ';
            $case_when1 .= $query->charLength('a.alias', '!=', '0');
            $case_when1 .= ' THEN ';

            // Joomla 3 compatibility
            if (method_exists($query, 'castAsChar')) {
                $a_id = $query->castAsChar('a.id');
            } else {
                $a_id = $query->castAs('CHAR', 'a.id');
            }

            $case_when1 .= $query->concatenate(array($a_id, 'a.alias'), ':');
            $case_when1 .= ' ELSE ';
            $case_when1 .= $a_id . ' END as slug';

            $case_when2 = ' CASE WHEN ';
            $case_when2 .= $query->charLength('b.alias', '!=', '0');
            $case_when2 .= ' THEN ';
            
            // Joomla 3 compatibility
            if (method_exists($query, 'castAsChar')) {
                $c_id = $query->castAsChar('b.id');
            } else {
                $c_id = $query->castAs('CHAR', 'b.id');
            }

            $case_when2 .= $query->concatenate(array($c_id, 'b.alias'), ':');
            $case_when2 .= ' ELSE ';
            $case_when2 .= $c_id . ' END as catslug';

            $case = ',' . $case_when1 . ',' . $case_when2;

            if (!empty($relevance)) {
                $query->select(implode(' + ', $relevance) . ' AS relevance');
                $order = ' relevance DESC, ' . $order;
            }

            $query->select('a.id AS slug, b.id AS catslug, a.alias, a.state, a.title AS title, a.access, ' . $query->concatenate(array('a.introtext', 'a.fulltext')) . ' AS text, a.language' . $case);
            $query->from('#__content AS a');
            $query->innerJoin('#__categories AS b ON b.id = a.catid');
            $query->where('(' . $where . ') AND a.state = 1 AND b.published = 1');

            if (!$user->authorise('core.admin')) {
                $query->where('a.access IN (' . $groups . ')');
                $query->where('b.access IN (' . $groups . ')');
            }

            $query->order($order);

            $db->setQuery($query, 0, $limit);

            try
            {
                $rows = $db->loadObjectList();
            } catch (RuntimeException $e) {
                $rows = array();
                Factory::getApplication()->enqueueMessage(Text::_('JERROR_AN_ERROR_HAS_OCCURRED'), 'error');
            }

            if ($rows) {
                // create a new RouteHelper instance
                $router = new RouteHelper();

                foreach ($rows as $key => $row) {
                    $rows[$key]->href = $router->getRoute($row->slug, 'com_content.article', '', $row->language, $row->catslug);
                }
            }
        }

        return $rows;
    }
}
search/adapter/content/index.html000060400000000054152455706710013107 0ustar00<html><body bgcolor="#FFFFFF"></body></html>search/adapter/weblinks/weblinks.php000060400000013142152455706710013607 0ustar00<?php

/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\CMSPlugin;

require_once JPATH_SITE . '/components/com_weblinks/helpers/route.php';

/**
 * Weblinks search plugin.
 *
 */
class PlgWfSearchWeblinks extends CMSPlugin
{
    /**
     * Load the language file on instantiation.
     *
     * @var    boolean
     */
    protected $autoloadLanguage = true;

    /**
     * Determine areas searchable by this plugin.
     *
     * @return  array  An array of search areas.
     *
     */
    public function onContentSearchAreas()
    {
        static $areas = array(
            'weblinks' => 'PLG_SEARCH_WEBLINKS_WEBLINKS',
        );

        return $areas;
    }

    /**
     * Search content (weblinks).
     *
     * The SQL must return the following fields that are used in a common display
     * routine: href, title, section, created, text, browsernav
     *
     * @param   string  $text      Target search string.
     * @param   string  $phrase    Matching option (possible values: exact|any|all).  Default is "any".
     * @param   string  $ordering  Ordering option (possible values: newest|oldest|popular|alpha|category).  Default is "newest".
     * @param   mixed   $areas     An array if the search it to be restricted to areas or null to search all areas.
     *
     * @return  array  Search results.
     *
     * @since   1.6
     */
    public function onContentSearch($text, $phrase = '', $ordering = '', $areas = null)
    {
        $db = Factory::getDbo();
        $groups = implode(',', Factory::getUser()->getAuthorisedViewLevels());

        $searchText = $text;

        if (is_array($areas)) {
            if (!array_intersect($areas, array_keys($this->onContentSearchAreas()))) {
                return array();
            }
        }

        $limit = $this->params->def('search_limit', 50);
        $state = array();

        $text = trim($text);

        if ($text == '') {
            return array();
        }

        switch ($phrase) {
            case 'exact':
                $text = $db->quote('%' . $db->escape($text, true) . '%', false);
                $wheres2 = array();
                $wheres2[] = 'a.url LIKE ' . $text;
                $wheres2[] = 'a.description LIKE ' . $text;
                $wheres2[] = 'a.title LIKE ' . $text;
                $where = '(' . implode(') OR (', $wheres2) . ')';
                break;

            case 'all':
            case 'any':
            default:
                $words = explode(' ', $text);
                $wheres = array();

                foreach ($words as $word) {
                    $word = $db->quote('%' . $db->escape($word, true) . '%', false);
                    $wheres2 = array();
                    $wheres2[] = 'a.url LIKE ' . $word;
                    $wheres2[] = 'a.description LIKE ' . $word;
                    $wheres2[] = 'a.title LIKE ' . $word;
                    $wheres[] = implode(' OR ', $wheres2);
                }

                $where = '(' . implode(($phrase == 'all' ? ') AND (' : ') OR ('), $wheres) . ')';
                break;
        }

        switch ($ordering) {
            case 'oldest':
                $order = 'a.created ASC';
                break;

            case 'popular':
                $order = 'a.hits DESC';
                break;

            case 'alpha':
                $order = 'a.title ASC';
                break;

            case 'category':
                $order = 'c.title ASC, a.title ASC';
                break;

            case 'newest':
            default:
                $order = 'a.created DESC';
        }

        $query = $db->getQuery(true);

        // SQLSRV changes.
        $case_when = ' CASE WHEN ';
        $case_when .= $query->charLength('a.alias', '!=', '0');
        $case_when .= ' THEN ';

        // Joomla 3 compatibility
        if (method_exists($query, 'castAsChar')) {
            $a_id = $query->castAsChar('a.id');
        } else {
            $a_id = $query->castAs('CHAR', 'a.id');
        }

        $case_when .= $query->concatenate(array($a_id, 'a.alias'), ':');
        $case_when .= ' ELSE ';
        $case_when .= $a_id . ' END as slug';

        $case_when1 = ' CASE WHEN ';
        $case_when1 .= $query->charLength('c.alias', '!=', '0');
        $case_when1 .= ' THEN ';

        // Joomla 3 compatibility
        if (method_exists($query, 'castAsChar')) {
            $c_id = $query->castAsChar('c.id');
        } else {
            $c_id = $query->castAs('CHAR', 'c.id');
        }

        $case_when1 .= $query->concatenate(array($c_id, 'c.alias'), ':');
        $case_when1 .= ' ELSE ';
        $case_when1 .= $c_id . ' END as catslug';

        $query->select('a.title AS title, a.created AS created, a.url, a.description AS text, a.language, ' . $case_when . "," . $case_when1)
            ->from('#__weblinks AS a')
            ->join('INNER', '#__categories as c ON c.id = a.catid')
            ->where('(' . $where . ') AND a.state = 1 AND c.published = 1 AND c.access IN (' . $groups . ')')
            ->order($order);

        $db->setQuery($query, 0, $limit);
        $rows = $db->loadObjectList();

        if ($rows) {
            foreach ($rows as $key => $row) {
                $rows[$key]->href = WeblinksHelperRoute::getWeblinkRoute($row->slug, $row->catslug, $row->language);
            }
        }

        return $rows;
    }
}
search/adapter/weblinks/index.html000060400000000054152455706710013253 0ustar00<html><body bgcolor="#FFFFFF"></body></html>index.html000060400000000054152455706710006550 0ustar00<html><body bgcolor="#FFFFFF"></body></html>mod_slideshowck/tmpl/index.html000060400000000037152456304320012673 0ustar00<!DOCTYPE html><title></title>
mod_slideshowck/tmpl/default.php000060400000017200152456304320013033 0ustar00<?php
/**
 * @copyright	Copyright (C) 2012-2019 Cedric KEIFLIN alias ced1870
 * https://www.joomlack.fr
 * Module Slideshow CK
 * @license		GNU/GPL
 * */
// no direct access
defined('_JEXEC') or die('Restricted access');

// get the slideshow width
$width = ($params->get('width') AND $params->get('width') != 'auto') ? ' style="width:' . SlideshowckHelper::testUnit($params->get('width')) . ';"' : '';
?>
<div class="slideshowck <?php echo $params->get('moduleclass_sfx'); ?> camera_wrap <?php echo $params->get('skin'); ?>" id="camera_wrap_<?php echo $module->id; ?>"<?php echo $width; ?>>
	<?php
	$i = 0;
	foreach ($items as $item) {
		if ($params->get('limitslides', '') && $i >= $params->get('limitslides', ''))
			break;

		// B/C for V1
		if (isset($item->imgname) && ! isset($item->image)) SlideshowckHelper::legacyUpdateItem($item);

		// automatically create the minified thumb and use it
		$item->thumb = $item->image;
		if ($params->get('thumbnails', '1') == '1' && $params->get('autocreatethumbs','1') && $params->get('usethumbstype', 'mini') == 'mini') {
			$item->thumb = SlideshowckHelper::resizeImage($item->image, $params->get('thumbnailwidth', '182'), $params->get('thumbnailheight', '187'));
		}
		// use the minified thumb but don't create it
		else if ($params->get('thumbnails', '1') == '1' && $params->get('usethumbstype','mini') == 'mini'){
			$thumbext = explode(".", $item->image);
			$thumbext = end($thumbext);
			$thumbfile = str_replace(basename($item->image), "th/" . basename($item->image), $item->image);
			$thumbfile = str_replace("." . $thumbext, "_th." . $thumbext, $thumbfile);
			if (\Joomla\CMS\Uri\Uri::root(true) && substr($thumbfile, 0, (int)strlen(\Joomla\CMS\Uri\Uri::root(true) . '/')) == (\Joomla\CMS\Uri\Uri::root(true) . '/')) {
				$thumbfile = str_replace(\Joomla\CMS\Uri\Uri::root(true) . '/', '', $thumbfile);
			}
			if (file_exists(JPATH_ROOT . '/' . trim($thumbfile, '/'))) {
				$item->thumb = \Joomla\CMS\Uri\Uri::root(true) . '/' . trim($thumbfile, '/');
			}
		}

		// create new images for mobile
		if ($params->get('usemobileimage', '0') && $params->get('autocreatethumbs','1')) { 
			$resolutions = explode(',', $params->get('mobileimageresolution', '640'));
			foreach ($resolutions as $resolution) {
				SlideshowckHelper::resizeImage($item->image, (int)$resolution, '', (int)$resolution, '');
			}
		}

		if ($item->alignment != 'default') {
			$alignment = ' data-alignment="' . $item->alignment . '"';
		} else {
			$alignment = '';
		}
		$datacaptiontitle = str_replace("|dq|", "\"", (string)$item->title);
		$datacaptiontext = str_replace("|dq|", "\"", (string)$item->text);
		$datacaptionforlightbox = $datacaptiontitle . ( $datacaptiontext ? '::' . $datacaptiontext : '');
		$dataalt = htmlspecialchars(str_replace("\"", "&quot;", str_replace(">", "&gt;", str_replace("<", "&lt;", $datacaptiontitle))));
		$datatitle = ($params->get('lightboxcaption', 'caption') != 'caption') ? 'data-title="' . htmlspecialchars(str_replace("\"", "&quot;", str_replace(">", "&gt;", str_replace("<", "&lt;", $datacaptionforlightbox)))) . '" ' : '';
		$album = ($params->get('lightboxgroupalbum', '0')) ? '[albumslideshowck' .$module->id .']' : '';
		$target = ($item->target == 'default') ? $params->get('linktarget') : $item->target;
		$datarel = ($target == 'lightbox') ? 'data-rel="lightbox' . $album . '" ' : '';
		$datarel .= ($target == '_blank') ? 'data-rel="noopener noreferrer" ' : '';
		$datatime = ($item->time) ? ' data-time="' . $item->time . '"' : '';
		$link = $params->get('linkautoimage', '0') == '1' && $item->image && !$item->link ? $item->image : $item->link;

		if ($params->get('lightboxautolinkimages', '0') == '1') {
			$item->link = $item->link ? $item->link : $item->image;
		}

		$linkposition = $params->get('linkposition', 'fullslide');
		$linkClass = ( $linkposition == 'button' ? $params->get('linkbuttonclass', '') . ' camera-button' : ' camera-link' );
		$linkTarget = ( $target == '_blank' ? ' target="_blank" rel="noopener noreferrer"' : '' );
		$startLink = '<a class="' . $linkClass .'" href="' . $link . '"' . $linkTarget . '>';
		?>
		<div <?php echo $datarel . $datatitle; ?>data-alt="<?php echo $dataalt; ?>" data-thumb="<?php echo $item->thumb; ?>" data-src="<?php echo $item->image; ?>" <?php if ($link && $linkposition == 'fullslide') echo 'data-link="' . $link . '" data-target="' . $target . '"'; echo $alignment . $datatime; ?>>
			<?php if ($params->get('imageforseo', '0')) { ?>
				<img src="<?php echo $item->image; ?>" style="display:none" alt="<?php echo htmlspecialchars($item->title) ?>" />
			<?php } ?>
			<?php if ($item->video) { ?>
				<?php if (strpos($item->video, 'http') !== 0) {
				$autoplay = $item->videoautoplay == '1' ? 'data-autoplay="1" muted="muted"' : '';
				$videoloop = $item->videoloop == '1' ? ' loop' : '';
				$videocontrols = $item->videocontrols == '0' ? ($autoplay ? '' : ' onclick="this.play()"') : ' controls';
				?>
				<video src="<?php echo $item->video; ?>" width="100%" height="100%" playsinline <?php echo $autoplay ?><?php echo $videoloop ?><?php echo $videocontrols ?>>
					<source src="<?php echo $item->video ?>" >
				</video>
				<?php } else { ?>
				<iframe src="<?php echo $item->video; ?>" width="100%" height="100%" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
				<?php } ?>
			<?php
			}
			if (($params->get('usecaption', '1') == '1') && ($item->title || $item->text) && (($params->get('lightboxcaption', 'caption') != 'title' || $target != 'lightbox') || !$link)) {
			?>
				<?php if ($params->get('usecaption', '1')) { ?>
				<div class="camera_caption <?php echo $params->get('captioneffect', 'moveFromBottom')?>">
					<?php 
//					$showcaption = $params->get('usecaption', '1') == '1' && ($item->title || $item->desc);
					$showtitle = $params->get('usetitle', '1') == '1' && $item->title;
					$showdescription = $params->get('usecaptiondesc', '1') == '1' && $item->text;
					if ($showtitle) { ?>
					<div class="camera_caption_title">
						<?php 
						$item->title = str_replace("|dq|", "\"", $item->title);
						if ($link && $linkposition == 'title') {
							echo $startLink . $item->title . '</a>';
						} else {
							echo $item->title;
						} ?>
					</div>
					<?php } ?>
					<?php if ($showdescription) { ?>
					<div class="camera_caption_desc">
						<?php 
						$caption = str_replace("|dq|", "\"", $item->text);
						if ($params->get('content_prepare', 0)) $caption = \Joomla\CMS\HTML\HTMLHelper::_('content.prepare', $caption);
						$textlength = (int)$params->get('textlength', '0');
						if ($params->get('fixhtml', '0') == '1' && trim($caption)) {
							// Parse the html code of the text into a fixer to avoid bad rendering issues
							$htmlfixer = new SlideshowCKHtmlFixer();
							$captionFixed = $htmlfixer->getFixedHtml(trim($caption));
							$caption = $captionFixed;
						}
						if ($params->get('striptags', '0') == '1' && $item->texttype != 'pagebuilderck') {
							$caption = strip_tags($caption);
						}
						if ($textlength > 0) {
							$caption = SlideshowckHelper::substring($caption, $textlength, '...', false);
						}
						echo $caption;
						?>
					<?php
					if (isset($item->more) && count($item->more)) {
						foreach ($item->more as $m) {
							echo $m;
						}
					}
					?>
					</div>
					<?php } ?>
					<?php if ($link && $linkposition == 'caption') {
						echo $startLink . '</a>';
					} ?>
					<?php if ($link && $linkposition == 'button') { ?>
						<?php echo $startLink . \Joomla\CMS\Language\Text::_($params->get('linkbuttontext', 'MOD_SLIDESHOWCK_LINK_BUTTON_TEXT')) . '</a>'; ?>
					<?php } ?>
					</div>
				<?php } ?>
			<?php
			}
			?>
		</div>
<?php 
		$i++;
	}
?>
</div>
<div style="clear:both;"></div>
mod_slideshowck/language/index.html000060400000000037152456304320013502 0ustar00<!DOCTYPE html><title></title>
mod_slideshowck/language/fr-FR/index.html000060400000000037152456304320014416 0ustar00<!DOCTYPE html><title></title>
mod_slideshowck/language/fr-FR/fr-FR.mod_slideshowck.ini000060400000067137152456304320017231 0ustar00; @copyright	Copyright (C) 2010 Cédric KEIFLIN alias ced1870
; https://www.joomlack.fr
; @license		GNU/GPL
; Double quotes in the values have to be formatted as "_QQ_"

SLIDESHOWCK_XML_DESCRIPTION = "Slideshow CK affiche un slideshow avec de superbes effets. Il est compatible mobiles et responsive design. Sa largeur s'adapte à la largeur de l'écran et vous pouvez faire défiler les images en glissant le doigt sur l'écran."
SLIDESHOWCK_OPTIONS_SLIDES = "Gestion des slides"
SLIDESHOWCK_OPTIONS_STYLES = "Options de styles"
SLIDESHOWCK_OPTIONS_EFFECTS = "Options des effets"
SLIDESHOWCK_SKIN_LABEL = "Apparence"
SLIDESHOWCK_SKIN_DESC = "Choisir une couleur"
SLIDESHOWCK_ALIGNEMENT_LABEL = "Alignement de l'image"
SLIDESHOWCK_ALIGNEMENT_DESC = "Permet de positionner l'image dans la zone du slideshow"
SLIDESHOWCK_TOP = "haut"
SLIDESHOWCK_BOTTOM = "bas"
SLIDESHOWCK_TOPLEFT = "haut gauche"
SLIDESHOWCK_TOPCENTER = "haut milieu"
SLIDESHOWCK_TOPRIGHT = "haut droite"
SLIDESHOWCK_MIDDLELEFT = "milieu gauche"
SLIDESHOWCK_CENTER = "centre"
SLIDESHOWCK_MIDDLERIGHT = "milieu droite"
SLIDESHOWCK_BOTTOMLEFT = "bas gauche"
SLIDESHOWCK_BOTTOMCENTER = "bas milieu"
SLIDESHOWCK_BOTTOMRIGHT = "bas droite"
SLIDESHOWCK_LOADER_LABEL = "Icône de chargement"
SLIDESHOWCK_LOADER_DESC = "Choisir quel type d'icône afficher"
SLIDESHOWCK_LOADER_PIE = "cercle"
SLIDESHOWCK_LOADER_BAR = "barre"
SLIDESHOWCK_LOADER_NONE = "aucun"
SLIDESHOWCK_WIDTH_LABEL = "Largeur"
SLIDESHOWCK_WIDTH_DESC = "Largeur du slideshow en px, peut aussi prendre la valeur 'auto'"
SLIDESHOWCK_HEIGHT_LABEL = "Hauteur"
SLIDESHOWCK_HEIGHT_DESC = "Hauteur du slideshow, peut aussi prendre une valeur en px ou en %"
SLIDESHOWCK_THUMBNAILS_LABEL = "Miniatures"
SLIDESHOWCK_THUMBNAILS_DESC = "Afficher les miniatures sous le slideshow"
SLIDESHOWCK_PAGINATION_LABEL = "Pagination"
SLIDESHOWCK_PAGINATION_DESC = "Afficher les boutons de navigation"
SLIDESHOWCK_EFFECT_LABEL = "Effet d'animation"
SLIDESHOWCK_EFFECT_DESC = "Choisir un effet à appliquer. On peut sélectionner plusieurs effets en maintenant la touche CTRL"
SLIDESHOWCK_TRANSITION_LABEL = "Transition"
SLIDESHOWCK_TRANSITION_DESC = "Transition de l'effet"
SLIDESHOWCK_TIME_LABEL = "Durée d'affichage"
SLIDESHOWCK_TIME_DESC = "Durée d'affichage de chaque image"
SLIDESHOWCK_TRANSPERIOD_LABEL = "Durée de la transition"
SLIDESHOWCK_TRANSPERIOD_DESC = "Temps nécessaire pour passer d'une image à l'autre"
SLIDESHOWCK_AUTOADVANCE_LABEL = "Lecture automatique"
SLIDESHOWCK_AUTOADVANCE_DESC = "Le slideshow démarre automatiquement au chargement de la page"
SLIDESHOWCK_PORTRAIT_LABEL = "Ajuster les images"
SLIDESHOWCK_PORTRAIT_DESC = "Si non les images conservent leur taille d'origine"
SLIDESHOWCK_ADDSLIDE = "Ajouter un slide"
SLIDESHOWCK_SELECTIMAGE = "Sélectionner l'image"
SLIDESHOWCK_CAPTION = "Légende"
SLIDESHOWCK_USETOSHOW = "Afficher"
SLIDESHOWCK_IMAGE = "Image"
SLIDESHOWCK_VIDEO = "Vidéo"
SLIDESHOWCK_IMAGEOPTIONS = "Options de l'image"
SLIDESHOWCK_LINKOPTIONS = "Options du lien"
SLIDESHOWCK_VIDEOOPTIONS = "Options de la vidéo"
SLIDESHOWCK_ALIGNEMENT_LABEL = "Alignement"
SLIDESHOWCK_LINK = "Url du lien"
SLIDESHOWCK_TARGET = "Cible"
SLIDESHOWCK_SAMEWINDOW = "s'ouvre dans la même fenêtre"
SLIDESHOWCK_NEWWINDOW = "s'ouvre dans une nouvelle fenêtre"
SLIDESHOWCK_VIDEOURL = "Url de la vidéo"
SLIDESHOWCK_REMOVE = "Supprimer ce slide"
SLIDESHOWCK_IMPORTFROMFOLDER = "Importer d'un dossier"
SLIDESHOWCK_LOADJQUERY_LABEL = "Charger JQuery"
SLIDESHOWCK_LOADJQUERY_DESC = "Si vous avez une extension qui charge déjà JQuery vous pouvez choisir de ne pas charger le script de Slideshow CK"
SLIDESHOWCK_LOADJQUERYEASING_LABEL = "Charger JQuery Easing"
SLIDESHOWCK_LOADJQUERYEASING_DESC = "Choisissez si vous voulez charger le script pour les transitions"
SLIDESHOWCK_LOADJQUERYMOBILE_LABEL = "Charger JQuery mobile"
SLIDESHOWCK_LOADJQUERYMOBILE_DESC = "Choisissez de charger le script pour mobiles"
SLIDESHOWCK_THUMBNAILWIDTH_LABEL = "Largeur de la miniature"
SLIDESHOWCK_THUMBNAILWIDTH_DESC = "Donnez la largeur de la miniature en px"
SLIDESHOWCK_THUMBNAILHEIGHT_LABEL = "Hauteur de la miniature"
SLIDESHOWCK_THUMBNAILHEIGHT_DESC = "Donnez la hauteur de la miniature en px"
SLIDESHOWCK_NAVIGATION_HOVER = "au survol"
SLIDESHOWCK_NAVIGATION_ALWAYS = "toujours"
SLIDESHOWCK_NAVIGATION_NONE = "aucune"
SLIDESHOWCK_NAVIGATION_LABEL = "Navigation"
SLIDESHOWCK_NAVIGATION_DESC = "Choisissez si vous voulez afficher les boutons de navigation"
SLIDESHOWCK_DISPLAYORDER_LABEL = "Ordre d'affichage"
SLIDESHOWCK_DISPLAYORDER_DESC = "Choisissez la manière d'afficher les images"
SLIDESHOWCK_DISPLAYORDER_NORMAL = "dans l'ordre"
SLIDESHOWCK_DISPLAYORDER_SHUFFLE = "aléatoire"
SLIDESHOWCK_THEME_LABEL="Thème"
SLIDESHOWCK_THEME_DESC="Choisir un thème pour le slideshow"
SLIDESHOWCK_CAPTIONEFFECT_LABEL="Animation de la légende"
SLIDESHOWCK_CAPTIONEFFECT_DESC="Choisir comment la légende s'anime"
SLIDESHOWCK_HOVER_LABEL="Pause au survol"
SLIDESHOWCK_HOVER_DESC="Met le slideshow en pause lorsque la souris le survol"
SLIDESHOWCK_CAPTIONSTYLES="Styles de la légende"
SLIDESHOWCK_FULLPAGE_LABEL="Utiliser comme fond de page"
SLIDESHOWCK_FULLPAGE_DESC="Charger le slideshow en fond de page en plein écran"
SLIDESHOWCK_SHOWARTICLETITLE_LABEL="Montrer le titre de l'article"
SLIDESHOWCK_SHOWARTICLETITLE_DESC="Choisissez si vous voulez afficher le titre de l'article"
SLIDESHOWCK_OPTIONS_FROMFOLDER="Charger les slides depuis un dossier"
SLIDESHOWCK_CHECKPARAMSPLUGIN="Vous devez télécharger et installer le <a href="_QQ_"https://www.joomlack.fr/slideshowck/plugin-slideshow-params"_QQ_" target="_QQ_"_blank"_QQ_">plugin Slideshow Params</a>"
SLIDESHOWCK_SPACER_SLIDESHOWCKPARAMS_PATCH_INSTALLED="Plugin Slideshow CK installé"
SLIDESHOWCK_FROMFOLDERNAME_LABEL="Charger à partir du dossier"
SLIDESHOWCK_FROMFOLDERNAME_DESC="Choisir le dossier à partir duquel charger les images (entrez le chemin à partir de la base du site puis enregistrez le module, ensuite vous pouvez importer les images)"
SLIDESHOWCK_SLIDESSOURCE_LABEL="Sources des images"
SLIDESHOWCK_SLIDESSOURCE_DESC="Choisir si vous voulez charger les images à partir du gestionnaire de slides ou d'un dossier"
SLIDESHOWCK_SLIDEMANAGER="Gestionnaire de slides"
SLIDESHOWCK_FOLDER="Importer depuis un dossier"
SLIDESHOWCK_IMPORT="Importer"
SLIDESHOWCK_OPTIONS_LIGHTBOX="Options pour la Lightbox"
SLIDESHOWCK_LIGHTBOXTYPE_LABEL="Type de Lightbox"
SLIDESHOWCK_LIGHTBOXTYPE_DESC="Sélectionner la lightbox à utiliser pour afficher les liens dans une popup. Squeezebox est le script natif de Joomla!. Mediabox CK est la lightbox avancée que vous pouvez télécharger sur https://www.joomlack.fr"
SLIDESHOWCK_SQUEEZEBOX="Squeezebox"
SLIDESHOWCK_MEDIABOXCK="Mediabox CK"
SLIDESHOWCK_LIGHTBOXCAPTION_LABEL="Où afficher la légende"
SLIDESHOWCK_LIGHTBOXCAPTION_DESC="La légende qui est définie dans les options du slide peut être affichée soit sur le slideshow, ou dans la lightbox (uniquement si vous utilisez Mediabox CK), ou les deux"
SLIDESHOWCK_LIGHTBOXCAPTION="Dans le slideshow"
SLIDESHOWCK_LIGHTBOXTITLE="Dans la lightbox (Mediabox CK)"
SLIDESHOWCK_LIGHTBOXCAPTIONANDTITLE="Dans les deux"
SLIDESHOWCK_SPACERFOLDERAUTOLOAD_LABEL="Charger automatiquement depuis un dossier"
SLIDESHOWCK_SPACERFOLDERIMPORT_LABEL="Importer les images depuis un dossier"
SLIDESHOWCK_AUTOLOADFOLDERNAME_LABEL="Charger les images automatiquement depuis un dossier"
SLIDESHOWCK_AUTOLOADFOLDERNAME_DESC="Choisir le dossier à partir duquel charger les images automatiquement"
SLIDESHOWCK_AUTOLOADFOLDER="Charger automatiquement depuis un dossier"
SLIDESHOWCK_MOBILEIMAGE_SPACER_LABEL="Options pour images pour Mobile"
SLIDESHOWCK_USEMOBILEIMAGE_LABEL="Utiliser des images pour Mobile"
SLIDESHOWCK_USEMOBILEIMAGE_DESC="Si vous activez cette option le slideshow va détecter la largeur de l'écran et charger une image alternative en dessous de cette valeur. Par exemple pour une résolution de 640px il chargera l'image 'dossier/640/image.jpg' à la place de l'image 'dossier/image.jpg'. ATTENTION à ce que les deux images existent !"
SLIDESHOWCK_MOBILEIMAGERESOLUTION_LABEL="Resolution maxi pour les images pour Mobile"
SLIDESHOWCK_MOBILEIMAGERESOLUTION_DESC="Sous cette largeur d'écran ce seront les images alternatives qui seront chargées"
SLIDESHOWCK_LIMITSLIDES_LABEL="Nombre de slides"
SLIDESHOWCK_LIMITSLIDES_DESC="Cette option n'est active que si vous avez choisi un ordre d'affichage Aléatoire. Alors vous pouvez limiter le nombre de slides à afficher."
SLIDESHOWCK_IMAGETARGET_LABEL="Cible par défaut des liens"
SLIDESHOWCK_IMAGETARGET_DESC="Choisir la cible par défaut des liens pour tous les slides"
SLIDESHOWCK_DEFAULT="defaut"
SLIDESHOWCK_LIGHTBOX="dans une Lightbox"
SLIDESHOWCK_HIKASHOP_FIELDSET_LABEL="Options pour Hikashop"
SLIDESHOWCKHIKASHOP_CHECKPLUGIN="Vous devez télécharger et installer le <a href="_QQ_"https://www.joomlack.fr/slideshowck/plugin-slideshow-hikashop"_QQ_" target="_QQ_"_blank"_QQ_">plugin Slideshow CK Hikashop</a>"

;styles
SLIDESHOWCK_BOLD = "gras"
SLIDESHOWCK_NORMAL = "normal"
SLIDESHOWCK_SPACER_STYLESBACKGROUND="Arrière plan"
SLIDESHOWCK_SPACER_STYLESROUNDEDCORNERS="Coins arrondis"
SLIDESHOWCK_SPACER_STYLESSHADOW="Ombre"
SLIDESHOWCK_SPACER_STYLESBORDERS="Bordures"
SLIDESHOWCK_MARGIN_LABEL="Marges externes"
SLIDESHOWCK_MARGIN_DESC="Valeur en px"
SLIDESHOWCK_PADDING_LABEL="Marges internes"
SLIDESHOWCK_PADDING_DESC="Valeur en px"
SLIDESHOWCK_BGCOLOR1_LABEL="Couleur de fond"
SLIDESHOWCK_BGCOLOR1_DESC="Choisir une couleur"
SLIDESHOWCK_BGCOLOR2_LABEL="Couleur de dégradé"
SLIDESHOWCK_BGCOLOR2_DESC="Choisir une couleur qui sera utilisé pour créer un dégradé à partir de la couleur de fond"
SLIDESHOWCK_ROUNDEDCORNERSTL_LABEL="Haut gauche"
SLIDESHOWCK_ROUNDEDCORNERSTL_DESC="Valeur du rayon en px"
SLIDESHOWCK_ROUNDEDCORNERSTR_LABEL="Haut droite"
SLIDESHOWCK_ROUNDEDCORNERSTR_DESC="Valeur du rayon en px"
SLIDESHOWCK_ROUNDEDCORNERSBR_LABEL="Bas droite"
SLIDESHOWCK_ROUNDEDCORNERSBR_DESC="Valeur du rayon en px"
SLIDESHOWCK_ROUNDEDCORNERSBL_LABEL="Bas gauche"
SLIDESHOWCK_ROUNDEDCORNERSBL_DESC="Valeur du rayon en px"
SLIDESHOWCK_SHADOWCOLOR_LABEL="Couleur de l'ombre"
SLIDESHOWCK_SHADOWCOLOR_DESC="Choisir une couleur"
SLIDESHOWCK_SHADOWBLUR_LABEL="Largeur de l'ombre"
SLIDESHOWCK_SHADOWBLUR_DESC="Valeur en px"
SLIDESHOWCK_SHADOWSPREAD_LABEL="Propagation"
SLIDESHOWCK_SHADOWSPREAD_DESC="Valeur en px"
SLIDESHOWCK_OFFSETX_LABEL="Décalage horizontal"
SLIDESHOWCK_OFFSETX_DESC="Décalage sur l'axe X, peut aussi prendre une valeur négative"
SLIDESHOWCK_OFFSETY_LABEL="Décalage vertical"
SLIDESHOWCK_OFFSETY_DESC="Décalage sur l'axe Y, peut aussi prendre une valeur négative"
SLIDESHOWCK_SHADOWINSET_LABEL="Interne"
SLIDESHOWCK_SHADOWINSET_DESC="Ajoute l'attribut 'inset' pour créer l'ombre vers l'intérieur"
SLIDESHOWCK_BORDERCOLOR_LABEL="Couleur de bordure"
SLIDESHOWCK_BORDERCOLOR_DESC="Choisir une couleur"
SLIDESHOWCK_BORDERWIDTH_LABEL="Largeur de bordure"
SLIDESHOWCK_BORDERWIDTH_DESC="Valeur en px"
SLIDESHOWCK_SPACER_STYLESMARGIN = "Marges"
SLIDESHOWCK_USEMARGIN_LABEL = "Utiliser les marges"
SLIDESHOWCK_USEMARGIN_DESC = ""
SLIDESHOWCK_USEBACKGROUND_LABEL = "Utiliser la couleur de fond"
SLIDESHOWCK_USEBACKGROUND_DESC = ""
SLIDESHOWCK_USEGRADIENT_LABEL = "Utiliser la couleur de dégradé"
SLIDESHOWCK_USEGRADIENT_DESC = ""
SLIDESHOWCK_USEROUNDEDCORNERS_LABEL = "Utiliser les coins arrondis"
SLIDESHOWCK_USEROUNDEDCORNERS_DESC = ""
SLIDESHOWCK_USESHADOW_LABEL = "Utiliser l'ombre"
SLIDESHOWCK_USESHADOW_DESC = ""
SLIDESHOWCK_USEBORDERS_LABEL = "Utiliser les bordures"
SLIDESHOWCK_USEBORDERS_DESC = ""
SLIDESHOWCK_SPACER_STYLESFONT = "Style de police"
SLIDESHOWCK_USEFONT_LABEL = "Utiliser la police"
SLIDESHOWCK_USEFONT_DESC = ""
SLIDESHOWCK_GFONT_LABEL = "Police"
SLIDESHOWCK_GFONT_DESC = "Choisissez la police google à utiliser"
SLIDESHOWCK_FONTSIZE_LABEL = "Taille de police"
SLIDESHOWCK_FONTSIZE_DESC = "Donner la taille que vous voulez en précisant l'unité (px, em, %)"
SLIDESHOWCK_FONTWEIGHT_LABEL = "Style de police"
SLIDESHOWCK_FONTWEIGHT_DESC = "Choisissez si vous voulez la police en normal ou gras"
SLIDESHOWCK_FONTCOLOR_LABEL = "Couleur de police"
SLIDESHOWCK_FONTCOLOR_DESC = "Choisissez la couleur"
SLIDESHOWCK_DESCFONTSIZE_LABEL = "Taille de la description"
SLIDESHOWCK_DESCFONTSIZE_DESC = "Taille de police de la description"
SLIDESHOWCK_DESCFONTCOLOR_LABEL = "Couleur de la description"
SLIDESHOWCK_DESCFONTCOLOR_DESC = "Choisissez la couleur pour la description"
SLIDESHOWCK_MARGINTOP_LABEL="Marge haute"
SLIDESHOWCK_MARGINTOP_DESC="marge en px"
SLIDESHOWCK_MARGINRIGHT_LABEL="Marge droite"
SLIDESHOWCK_MARGINRIGHT_DESC="marge en px"
SLIDESHOWCK_MARGINBOTTOM_LABEL="Marge bas"
SLIDESHOWCK_MARGINBOTTOM_DESC="marge en px"
SLIDESHOWCK_MARGINLEFT_LABEL="Marge gauche"
SLIDESHOWCK_MARGINLEFT_DESC="marge en px"
SLIDESHOWCK_PADDINGTOP_LABEL="Marge interne haut"
SLIDESHOWCK_PADDINGTOP_DESC="marge en px"
SLIDESHOWCK_PADDINGRIGHT_LABEL="Marge interne droite"
SLIDESHOWCK_PADDINGRIGHT_DESC="marge en px"
SLIDESHOWCK_PADDINGBOTTOM_LABEL="Marge interne bas"
SLIDESHOWCK_PADDINGBOTTOM_DESC="marge en px"
SLIDESHOWCK_PADDINGLEFT_LABEL="Marge interne gauche"
SLIDESHOWCK_PADDINGLEFT_DESC="marge en px"
SLIDESHOWCK_BACKGROUNDIMAGE_LABEL="Background image"
SLIDESHOWCK_BACKGROUNDIMAGE_DESC="Select an image to apply as background"
SLIDESHOWCK_BACKGROUNDPOSITIONX_LABEL="Poxition X"
SLIDESHOWCK_BACKGROUNDPOSITIONX_DESC="Choose a value with px (ex: 25px) or left, right, center, etc..."
SLIDESHOWCK_BACKGROUNDPOSITIONY_LABEL="Poxition Y"
SLIDESHOWCK_BACKGROUNDPOSITIONY_DESC="Choose a value with px (ex: 25px) or left, right, center, etc..."
SLIDESHOWCK_ARTICLEOPTIONS="Options de l'article"
SLIDESHOWCK_ARTICLELENGTH_LABEL="Nombre de caractères"
SLIDESHOWCK_ARTICLELENGTH_DESC="L'article sera coupé après le nombre de caractèrese"
SLIDESHOWCK_ARTICLELINK_LABEL="Lien de l'article sur"
SLIDESHOWCK_ARTICLELINK_DESC="Choisir si vous voulez que le lien de l'article soit sur le titre ou sur un lien 'Lire la suite'"
SLIDESHOWCK_READMORE_OPTION="lien lire la suite"
SLIDESHOWCK_TITLE_OPTION="titre de l'article"
SLIDESHOWCK_ARTICLETITLE_LABEL="Tag du titre de l'article"
SLIDESHOWCK_ARTICLETITLE_DESC="Choisir quel tag html utiliser pour écrire le titre de l'article"
SLIDESHOWCK_SLIDETIME="entrez une valeur de durée d'affichage spécifique pour ce slide, sinon la durée par défaut sera utlisée"

; added 1.3.11
SLIDESHOWCK_LIGHTBOXGROUPALBUM_LABEL="Grouper les liens dans un album"
SLIDESHOWCK_LIGHTBOXGROUPALBUM_DESC="SEULEMENT POUR MEDIABOX CK : Groupe les liens dans un album et active la navigation"
SLIDESHOWCK_CLEAR="Effacer"
SLIDESHOWCK_SELECT="Sélectionner"

;added 1.4.0
SLIDESHOWCK_ARTICLEOPTIONS="Options d'article"
SLIDESHOWCK_ARTICLE_ID="Article ID"
SLIDESHOWCK_TITLE_ONLY="titre seulement"
SLIDESHOWCK_DESC_ONLY="description seulement"
SLIDESHOWCK_OPTIONS_SLIDESSOURCE="<img src=../modules/mod_slideshowck/elements/images/pictures.png style=display:inline-block;margin:2px 5px 0 2px; />Source des slides"
SLIDESHOWCK_OPTIONS_FROMARTICLECATEGORY="<img src=../modules/mod_slideshowck/elements/images/picture_add.png style=display:inline-block;margin:2px 5px 0 2px; />Charger automatiquement depuis une catégorie d'articles"
SLIDESHOWCK_OPTIONS_FROMFOLDER="<img src=../modules/mod_slideshowck/elements/images/picture_add.png style=display:inline-block;margin:2px 5px 0 2px; />Charger automatiquement depuis un dossier"
SLIDESHOWCK_OPTIONS_STYLES = "<img src=../modules/mod_slideshowck/elements/images/css.png style=display:inline-block;margin:2px 5px 0 2px; />Options de styles"
SLIDESHOWCK_OPTIONS_EFFECTS = "<img src=../modules/mod_slideshowck/elements/images/chart_curve.png style=display:inline-block;margin:2px 5px 0 2px; />Options des effets"
SLIDESHOWCK_OPTIONS_LIGHTBOX="<img src=../modules/mod_slideshowck/elements/images/magnifier_zoom_in.png style=display:inline-block;margin:2px 5px 0 2px; />Options pour la Lightbox"
SLIDESHOWCK_OPTIONS_ADVANCED="<img src=../modules/mod_slideshowck/elements/images/wrench.png style=display:inline-block;margin:2px 5px 0 2px; />Options avancées"
SLIDESHOWCK_ARTICLEOPTIONS="<img src=../modules/mod_slideshowck/elements/images/text_signature.png style=display:inline-block;margin:2px 5px 0 2px; />Options de l'article"
SLIDESHOWCK_CAPTIONSTYLES="<img src=../modules/mod_slideshowck/elements/images/style.png style=display:inline-block;margin:2px 5px 0 2px; />Styles de la légende"
SLIDESHOWCK_HIKASHOP_FIELDSET_LABEL="<img src=../modules/mod_slideshowck/elements/images/basket.png style=display:inline-block;margin:2px 5px 0 2px; />Options pour Hikashop"
SLIDESHOWCK_SLIDEMANAGER="Gestionnaire de slides"
SLIDESHOWCK_SLIDESSOURCE_LABEL="Sources des images"
SLIDESHOWCK_SLIDESSOURCE_DESC="Choisir si vous voulez charger les images à partir du gestionnaire de slides ou d'un dossier"
SLIDESHOWCK_SPACERFOLDERIMPORT_LABEL="Importer les images depuis un dossier"
SLIDESHOWCK_TITLE="Titre"
SLIDESHOWCK_OPTIONS_SLIDES = "<img src=../modules/mod_slideshowck/elements/images/picture_add.png style=display:inline-block;margin-top:2px;margin-right:5px;margin-left:2px; />Gestionnaire de slides"
SLIDESHOWCK_CAPTION="Description"
SLIDESHOWCK_AUTOCREATETHUMBS_LABEL="Créer les miniatures automatiquement"
SLIDESHOWCK_AUTOCREATETHUMBS_DESC="Le serveur va créer automatiquement les miniatures. Attention cela peut générer une surcharge de votre serveur"
SLIDESHOWCK_BGOPACITY_LABEL="Opacité"
SLIDESHOWCK_BGOPACITY_LABEL="Définir l'opacité de l'arrière plan"

;added 1.4.6
SLIDESHOWCK_IMAGE_OPTION="Image"

;added 1.4.7
SLIDESHOWCK_CONTAINER_LABEL="Charger en fond de conteneur"
SLIDESHOWCK_CONTAINER_DESC="<strong>Pour les utilisateurs avancés :</strong>Renseignez le sélecteur CSS du bloc dans lequel vous voulez charger le slideshow en arrière plan. Par exemple pour charger dans un bloc ayant pour ID 'top', écrivez '#top'. Pour un élément ayant la classe 'top', écrivez '.top'."

;added 1.4.15
SLIDESHOWCK_SPACER_RESPONSIVE="Légende responsive"
SLIDESHOWCK_USERESPONSIVECAPTION_LABEL="Activer la légende responsive"
SLIDESHOWCK_USERESPONSIVECAPTION_DESC="Activez cette option si vous voulez utiliser les paramètres suivants pour la légende responsive"
SLIDESHOWCK_RESPONSIVERESOLUTION_LABEL="Résolution responsive"
SLIDESHOWCK_RESPONSIVERESOLUTION_DESC="Choisir une résolution en dessous de laquelle les paramètres suivants s'appliquent"
SLIDESHOWCK_RESPONSIVEFONTSIZE_LABEL="Taille de police"
SLIDESHOWCK_RESPONSIVEFONTSIZE_DESC="Définir une taille de police à appliquer à la légende en dessous de la résolution définie ci-dessus"
SLIDESHOWCK_RESPONSIVEHIDECAPTION_LABEL="Cacher la légende"
SLIDESHOWCK_RESPONSIVEHIDECAPTION_DESC="Si vous ne voulez pas montrer du tout la légende en dessous de la résolution définie ci-dessus, alors activez cette option"

;added 1.4.21
SLIDESHOWCK_OPTIONS_FROMFLICKR="<img src=../modules/mod_slideshowck/elements/images/picture_add.png style=display:inline-block;margin:2px 5px 0 2px; />Charger automatiquement depuis Flickr"
SLIDESHOWCK_VOTE_JED="Si vous utilisez Slideshow CK, merci de voter dans la JED."
SLIDESHOWCK_CURRENT_VERSION="Vous utilisez la version"
SLIDESHOWCK_NEW_VERSION_AVAILABLE="Mise à jour disponible"
SLIDESHOWCK_DOWNLOAD="Télécharger"
SLIDESHOWCK_DOWNLOAD_DOCUMENTATTION="Télécharger la documentation du module"
SLIDESHOWCK_DOWNLOAD_THEMES="Télécharger un thème graphique pour le module"
SLIDESHOWCK_NEED_UPDATE="Cette extension doit être mise à jour"
SLIDESHOWCK_REQUIRED_VERSION="Vous devez installer au minimum la version"

;added 1.4.22
SLIDESHOWCK_MINHEIGHT_LABEL="Hauteur mini"
SLIDESHOWCK_MINHEIGHT_DESC="Définir une hauteur minimale pour le slideshow afin de limiter sa taille sur petites résolutions. La valeur doit être en px"
SLIDESHOWCK_RESOLUTION_ADAPTATIVE="Adaptatif"
SLIDESHOWCK_RESOLUTION_STEP="Palier de résolution"
SLIDESHOWCK_STARTDATE="Date début"
SLIDESHOWCK_ENDDATE="Date fin"

;added 1.4.37
SLIDESHOWCK_USECAPTION_LABEL="Afficher la légende"
SLIDESHOWCK_USECAPTION_DESC="Selectionner si vous voulez afficher la légende, ou totalement la désactiver"
SLIDESHOWCK_USECAPTIONDESC_LABEL="Afficher la description"
SLIDESHOWCK_USECAPTIONDESC_DESC="Selectionner si vous voulez afficher la description dans la légende, ou uniquement le titre"

;added 1.4.41
SLIDESHOWCK_K2_NOTFOUND="K2 non trouvé"

;added 1.4.42
SLIDESHOWCK_LINK_POSITION_LABEL="Emplacement du lien"
SLIDESHOWCK_LINK_POSITION_DESC="Choisir où ajouter le lien"
SLIDESHOWCK_LINK_FULLSLIDE="Slide complet"
SLIDESHOWCK_LINK_CAPTION="Légende"
SLIDESHOWCK_LINK_TITLE="Titre"
SLIDESHOWCK_LINK_BUTTON="Bouton"

;added 1.4.43
SLIDESHOWCK_FIXHTML_LABEL="Corriger html"
SLIDESHOWCK_FIXHTML_DESC="Corriger le code html dans la légende. Utile lorsque le texte est trunqué."

;added 1.4.52
SLIDESHOWCK_KEYBOARD_CONTROL_LABEL="Activer le contrôle clavier"
SLIDESHOWCK_KEYBOARD_CONTROL_DESC="Vous pouvez utiliser le clavier pour contrôler le slideshow (gauche = précédent, droite = suivant, P = lecture/pause)"

;added 1.4.63
PLG_SLIDESHOWCK_READMORE="Lire la suite"
SLIDESHOWCK_STRIPTAGS_LABEL="Enlever les tags HTML"
SLIDESHOWCK_STRIPTAGS_DESC="Supprime toutes les balises HTML du texte"

;added 2.0.0
SLIDESHOWCK_SOURCE_FIELDSET_LABEL="Source"
SLIDESHOWCK_USE_FREE_VERSION="Vous utilisez la version GRATUITE"
SLIDESHOWCK_USE_PRO_VERSION="Vous utilisez la version PRO"
SLIDESHOWCK_DOCUMENTATION="Consulter la documentation"
SLIDESHOWCK_TEXT="Texte"
SLIDESHOWCK_IMAGE="Image"
SLIDESHOWCK_LINK="Lien"
SLIDESHOWCK_VIDEO="Vidéo"
SLIDESHOWCK_ARTICLE="Article"
SLIDESHOWCK_DATES="Dates"
SLIDESHOWCK_REMOVE2="Supprimer"
SLIDESHOWCK_SELECT_LINK="Sélectionner un lien"
SLIDESHOWCK_SOURCE_SLIDESMANAGER="Gestionnaire de slides"
SLIDESHOWCK_SOURCE_FOLDER="Dossier"
SLIDESHOWCK_SELECT="Sélectionner"
SLIDESHOWCK_USETITLE_LABEL="Afficher le titre"
SLIDESHOWCK_USETITLE_DESC="Selectionner si vous voulez afficher le titre dans la légende"
SLIDESHOWCK_DISPLAY_OPTIONS_LABEL="Affichage"
SLIDESHOWCK_TEXT_OPTIONS_LABEL="Texte"
SLIDESHOWCK_LINK_OPTIONS_LABEL="Lien"
SLIDESHOWCK_NUMBER_SLIDES_LABEL="Nombre de slides"
SLIDESHOWCK_NUMBER_SLIDES_DESC="Déterminer le nombre de slides à afficher. Laissez vide pour afficher tous les slides"
SLIDESHOWCK_NONE="Aucun"
SLIDESHOWCK_LINK_BUTTON_TEXT_LABEL="Texte du bouton"
SLIDESHOWCK_LINK_BUTTON_TEXT_DESC="Texte à afficher dans le bouton du lien. Vous pouvez utiliser une CHAINE à traduire dans vos fichiers de langue"
SLIDESHOWCK_LIGHTBOX_SPACER_LABEL="Lightbox"
SLIDESHOWCK_LIGHTBOX_LABEL="Lightbox à utiliser"
SLIDESHOWCK_LIGHTBOX_DESC="Choisir si vous voulez utiliser Mediabox CK disponible sur JoomlaCK.fr, ou une autre lightbox"
SLIDESHOWCK_LIGHTBOX_MEDIABOX="Mediabox CK"
SLIDESHOWCK_LIGHTBOX_OTHER="Autre"
SLIDESHOWCK_LINK_BUTTON_TEXT="Lire la suite"
SLIDESHOWCK_LIGHTBOX_ATTRIB_LABEL="Attribut Lightbox"
SLIDESHOWCK_LIGHTBOX_ATTRIB_DESC="Définir l'attribut à ajouter en fonction de votre lightbox"
SLIDESHOWCK_LIGHTBOX_ATTRIB_VALUE_LABEL="Valeur de l'attribut Lightbox"
SLIDESHOWCK_LIGHTBOX_ATTRIB_VALUE_DESC="Définir la valeur de l'attribut à ajouter en fonction de votre lightbox"
SLIDESHOWCK_LINK_BUTTON_CLASS_LABEL="Classe CSS du bouton"
SLIDESHOWCK_LINK_BUTTON_CLASS_DESC="Ecrire une classe CSS à appliquer au bouton"
SLIDESHOWCK_LINK_AUTOIMAGE_LABEL="Lien auto sur image"
SLIDESHOWCK_LINK_AUTOIMAGE_DESC="Si activé, cette option génère automatiquement un lien vers l'image du slide"
SLIDESHOWCK_LINK_TARGET_LABEL="Cible du lien"
SLIDESHOWCK_LINK_TARGET_DESC="Choisir si vous voulez ouvrir le lien dans une nouvelle fenêtre ou dans la même"
SLIDESHOWCK_LINK_SAME_WINDOW="Même fenêtre"
SLIDESHOWCK_LINK_NEW_WINDOW="Nouvelle fenêtre"
SLIDESHOWCK_TITLE_TAG_LABEL="Title tag"
SLIDESHOWCK_TITLE_TAG_DESC="Choisir quel tag HTML utiliser pour afficher le titre"
SLIDESHOWCK_OPTIONS_FIELDSET_LABEL="Options"
SLIDESHOWCK_RESPONSIVE="Responsive"
SLIDESHOWCK_EFFECTS_OPTIONS="Effets"
SLIDESHOWCK_VISIT_OTHER_PRODUCTS="Jetez un oeil aux autres produits disponibles sur JoomlaCK"
SLIDESHOWCK_GET_LICENCE_INFOS="Voir comment gérer la clé de licence"
SLIDESHOWCK_GET_PRO_INFOS="Obtenir des infos sur la version Pro"
SLIDESHOWCK_STYLES="Styles"
SLIDESHOWCK_EDIT="Editer"
SLIDESHOWCK_SELECT_STYLE_LABEL="Style"
SLIDESHOWCK_SELECT_STYLE_DESC="Selectionner le style à applliquer à votre slideshow"
SLIDESHOWCK_OTHER="Autre"
SLIDESHOWCK_LIGHTBOX_LABEL="Lightbox"
SLIDESHOWCK_LIGHTBOX_DESC="Selectionner quelle lightbox utiliser pour ouvrir les liens"
SLIDESHOWCK_PORTRAIT_LABEL="Contenir les images"
SLIDESHOWCK_PORTRAIT_DESC="Les images vont être réduites à la zone du slideshow, sans déformation"
SLIDESHOWCK_ONLY_PRO="Seulement disponible dans la version Pro. Cliquez ici pour en savoir plus."
SLIDESHOWCK_SOURCE_ARTICLES="Articles"
SLIDESHOWCK_THUMBSTYPE_LABEL="Miniatures à utiliser"
SLIDESHOWCK_THUMBSTYPE_DESC="Choisir entre l'image de taille normale et l'image de taille réduite"
SLIDESHOWCK_THUMBSTYPE_MINI="Mini"
SLIDESHOWCK_THUMBSTYPE_NORMAL="Normal"
SLIDESHOWCK_MIGRATION_NEEDED="Une migration est nécessaire ! Nous avons détecté que vous éditez un module qui a été créé avec Slideshow CK V1."
SLIDESHOWCK_MIGRATION_ACTION="Veuillez cliquer ici pour mettre à jour automatiquement les options du slideshow. Si vous ne le faites pas vous risquez de perdre certains paramétrages."
SLIDESHOWCK_MIGRATION_SUCCESS="Migration réalisée avec succès !"
SLIDESHOWCK_MIGRATION_ERROR="Erreur lors de la tentative de mivration à la V2. Merci de contacter le développeur."
SLIDESHOWCK_HEIGHT_FIELD_HELP_TITLE="Comment calculer la hauteur"
SLIDESHOWCK_HEIGHT_FIELD_HELP_1="Vous pouvez définir la hauteur en <b>px</b> ou <b>%</b>. Si vous utilisez des %, la hauteur sera responsive et l'image conservera son ratio. Si vous utilisez des px, alors la hauteur restera toujours la même et l'image sera coupée."
SLIDESHOWCK_HEIGHT_FIELD_HELP_2="Comment calculer la hauteur en %"
SLIDESHOWCK_HEIGHT_FIELD_HELP_3="Le pourcentage est le ratio entre la hauteur et la largeur de votre image. Notez que cette valeur sera utilsée pour toutes les images, il est donc conseillé d'utiliser des images qui ont toutes les mêmes dimensions."
SLIDESHOWCK_HEIGHT_FIELD_HELP_4="Prenons comme exemple une image qui a les dimensions suivantes :"
SLIDESHOWCK_HEIGHT_FIELD_HELP_5="Pour calculer le ratio : 800 / 1280 = <b>62%</b>. Donc dans le champ de hauteur, saisissez 62% comme valeur."
SLIDESHOWCK_RATIO_LABEL="Ratio de l'image"
SLIDESHOWCK_CALCULATOR="Calculateur"
SLIDESHOWCK_SAVE="Enregistrer"
SLIDESHOWCK_PARAMS_UNPUBLISHED_INFO="Etes vous en train de migrer de la V1 à la V2 de Slideshow CK ? Le plugin Slideshow CK Params a été détecté et a été automatiquement désactivé car il n'est pas compatible avec la V2."
SLIDESHOWCK_PARAMS_MIGRATION_LINK="Cliquez ici pour suivre les instructions sur la migration de la V1 à la V2"
SLIDESHOWCK_TEXT_CUSTOM="Texte perso"
SLIDESHOWCK_TEXT="Texte"
SLIDESHOWCK_WARNING_PLUGIN_OBSOLETE="Vous avez un plugin obsolète qui fonctionnait avec la version 1 de Slideshow CK. Ce plugin ,n'est plus compatible avec la version 2, veuillez le désactiver."
SLIDESHOWCK_DISABLE_PLUGIN="Cliquez ici pour désactiver le plugin"
;added 2.0.5
SLIDESHOWCK_DEBUG_LABEL="Voir les messages de débogage"
SLIDESHOWCK_DEBUG_DESC="Désactivez cette option si vous ne voulez voir aucun message dans le slideshow"
;added 2.0.16
SLIDESHOWCK_LOAD_INLINE_LABEL="Charger les scripts en direct"
SLIDESHOWCK_LOAD_INLINE_DESC="Si vous rencontrez des soucis de chargement lors de l'appel depuis un article, vous pouvez activer cette option"
;added 2.1.1
SLIDESHOWCK_CONTENT_PREPARE_LABEL="Préparer le contenu"
SLIDESHOWCK_CONTENT_PREPARE_DESC="Charge les plugins de contenu pour qu'ils s'appliquent lors du rendu"
;added 2.2.1
SLIDESHOWCK_VIDEO_AUTOPLAY="Lecture auto"
SLIDESHOWCK_VIDEO_LOOP="Boucler"
SLIDESHOWCK_VIDEO_CONTROLS="Contrôles"
;added 2.3.11
SLIDESHOWCK_TITLE_IN_THUMBNAILS_LABEL="Afficher le titre sur les miniatures"
;added 2.4.1
SLIDESHOWCK_RESPONSIVEHIDEDESCRIPTION_LABEL="Cacher la description"
SLIDESHOWCK_RESPONSIVEHIDEDESCRIPTION_DESC="Cacher la description sur mobile"mod_slideshowck/language/fr-FR/fr-FR.mod_slideshowck.sys.ini000060400000000742152456304320020033 0ustar00; @copyright	Copyright (C) 2010 Cédric KEIFLIN alias ced1870
; https://www.ck-web-creation-alsace.com
; https://www.joomlack.fr
; @license		GNU/GPL
; Double quotes in the values have to be formatted as "_QQ_"_QQ_"_QQ_"

SLIDESHOWCK_XML_DESCRIPTION = "Slideshow CK affiche un slideshow avec de superbes effets. Il est compatible mobiles et responsive design. Sa largeur s'adapte à la largeur de l'écran et vous pouvez faire défiler les images en glissant le doigt sur l'écran."
mod_slideshowck/language/en-GB/en-GB.mod_slideshowck.sys.ini000060400000000563152456304320017764 0ustar00; @copyright	Copyright (C) 2010 Cédric KEIFLIN alias ced1870
; https://www.joomlack.fr
; @license		GNU/GPL
; Double quotes in the values have to be formatted as "_QQ_"

SLIDESHOWCK_XML_DESCRIPTION = "Slideshow CK displays a slideshow with some nice effects. It is mobile compatible and responsive design. Its width adapts itself and you can slide it with your fingers."
mod_slideshowck/language/en-GB/index.html000060400000000037152456304320014372 0ustar00<!DOCTYPE html><title></title>
mod_slideshowck/language/en-GB/en-GB.mod_slideshowck.ini000060400000063447152456304320017161 0ustar00; @copyright	Copyright (C) 2010 Cédric KEIFLIN alias ced1870
; https://www.joomlack.fr
; @license		GNU/GPL
; Double quotes in the values have to be formatted as "_QQ_"

SLIDESHOWCK_XML_DESCRIPTION = "Slideshow CK displays a slideshow with some nice effects. It is mobile compatible and responsive design. Its width adapts itself and you can slide it with your fingers."
SLIDESHOWCK_OPTIONS_SLIDES = "Slides manager"
SLIDESHOWCK_OPTIONS_STYLES = "Styles options"
SLIDESHOWCK_OPTIONS_EFFECTS = "Effects options"
SLIDESHOWCK_SKIN_LABEL = "Skin"
SLIDESHOWCK_SKIN_DESC = "Choose a color"
SLIDESHOWCK_ALIGNEMENT_LABEL = "Image alignment"
SLIDESHOWCK_ALIGNEMENT_DESC = "Choose where you want to place the image"
SLIDESHOWCK_TOP = "top"
SLIDESHOWCK_BOTTOM = "bottom"
SLIDESHOWCK_TOPLEFT = "top left"
SLIDESHOWCK_TOPCENTER = "top center"
SLIDESHOWCK_TOPRIGHT = "top right"
SLIDESHOWCK_MIDDLELEFT = "center left"
SLIDESHOWCK_CENTER = "center"
SLIDESHOWCK_MIDDLERIGHT = "center right"
SLIDESHOWCK_BOTTOMLEFT = "bottom left"
SLIDESHOWCK_BOTTOMCENTER = "bottom center"
SLIDESHOWCK_BOTTOMRIGHT = "bottom right"
SLIDESHOWCK_LOADER_LABEL = "Loader icon"
SLIDESHOWCK_LOADER_DESC = "Choose what sort of icon you want to display"
SLIDESHOWCK_LOADER_PIE = "pie"
SLIDESHOWCK_LOADER_BAR = "bar"
SLIDESHOWCK_LOADER_NONE = "none"
SLIDESHOWCK_WIDTH_LABEL = "Width"
SLIDESHOWCK_WIDTH_DESC = "Width of the slideshow in px, you can also use the value'auto' to let it as responsive design for mobiles"
SLIDESHOWCK_HEIGHT_LABEL = "Height"
SLIDESHOWCK_HEIGHT_DESC = "Height of the slideshow, you can set it in px or %"
SLIDESHOWCK_THUMBNAILS_LABEL = "Thumbnails"
SLIDESHOWCK_THUMBNAILS_DESC = "Show the thumbnails under the slideshow"
SLIDESHOWCK_PAGINATION_LABEL = "Pagination"
SLIDESHOWCK_PAGINATION_DESC = "Show the buttons for pagination"
SLIDESHOWCK_EFFECT_LABEL = "Animation effect"
SLIDESHOWCK_EFFECT_DESC = "Choose which effect to apply. You can make a multiselection with the CTRL keyboard key"
SLIDESHOWCK_TRANSITION_LABEL = "Transition"
SLIDESHOWCK_TRANSITION_DESC = "Effect transition"
SLIDESHOWCK_TIME_LABEL = "Display time"
SLIDESHOWCK_TIME_DESC = "Time to show each image"
SLIDESHOWCK_TRANSPERIOD_LABEL = "Transition duration"
SLIDESHOWCK_TRANSPERIOD_DESC = "Time between two images"
SLIDESHOWCK_AUTOADVANCE_LABEL = "Autoplay"
SLIDESHOWCK_AUTOADVANCE_DESC = "The slideshow starts automatically"
SLIDESHOWCK_PORTRAIT_LABEL = "Adjust the images"
SLIDESHOWCK_PORTRAIT_DESC = "if no, the images will keep their original size"
SLIDESHOWCK_ADDSLIDE = "Add a slide"
SLIDESHOWCK_SELECTIMAGE = "Select an image"
SLIDESHOWCK_CAPTION = "Caption"
SLIDESHOWCK_USETOSHOW = "Display"
SLIDESHOWCK_IMAGE = "Image"
SLIDESHOWCK_VIDEO = "Video"
SLIDESHOWCK_IMAGEOPTIONS = "Image options"
SLIDESHOWCK_LINKOPTIONS = "Link options"
SLIDESHOWCK_VIDEOOPTIONS = "Video options"
SLIDESHOWCK_ALIGNEMENT_LABEL = "Alignment"
SLIDESHOWCK_LINK = "Link url"
SLIDESHOWCK_TARGET = "Target"
SLIDESHOWCK_SAMEWINDOW = "open in the same window"
SLIDESHOWCK_NEWWINDOW = "open in a new window"
SLIDESHOWCK_VIDEOURL = "Video url"
SLIDESHOWCK_REMOVE = "Remove this slide"
SLIDESHOWCK_IMPORTFROMFOLDER = "Import from a folder"
SLIDESHOWCK_LOADJQUERY_LABEL = "Load JQuery"
SLIDESHOWCK_LOADJQUERY_DESC = "If you already have an extension that load Jquery you can choose to not load it in Slideshow CK"
SLIDESHOWCK_LOADJQUERYEASING_LABEL = "Load JQuery Easing"
SLIDESHOWCK_LOADJQUERYEASING_DESC = "Choose to load the script for the transitions"
SLIDESHOWCK_LOADJQUERYMOBILE_LABEL = "Load JQuery mobile"
SLIDESHOWCK_LOADJQUERYMOBILE_DESC = "Choose to load the script for mobiles"
SLIDESHOWCK_THUMBNAILWIDTH_LABEL = "Thumbnail width"
SLIDESHOWCK_THUMBNAILWIDTH_DESC = "Give the thumbnail width in px"
SLIDESHOWCK_THUMBNAILHEIGHT_LABEL = "Thumbnail height"
SLIDESHOWCK_THUMBNAILHEIGHT_DESC = "Give the thumbnail height in px"
SLIDESHOWCK_NAVIGATION_HOVER = "mouseover"
SLIDESHOWCK_NAVIGATION_ALWAYS = "always"
SLIDESHOWCK_NAVIGATION_NONE = "none"
SLIDESHOWCK_NAVIGATION_LABEL = "Navigation"
SLIDESHOWCK_NAVIGATION_DESC = "Choose if you want to show the navigation buttons"
SLIDESHOWCK_DISPLAYORDER_LABEL = "Display order"
SLIDESHOWCK_DISPLAYORDER_DESC = "Choose the way to display the images"
SLIDESHOWCK_DISPLAYORDER_NORMAL = "in order"
SLIDESHOWCK_DISPLAYORDER_SHUFFLE = "shuffle"
SLIDESHOWCK_THEME_LABEL="Theme"
SLIDESHOWCK_THEME_DESC="Choose a theme for the slideshow"
SLIDESHOWCK_CAPTIONEFFECT_LABEL="Caption effect"
SLIDESHOWCK_CAPTIONEFFECT_DESC="Choose how the caption will appear"
SLIDESHOWCK_HOVER_LABEL="Pause on mouseover"
SLIDESHOWCK_HOVER_DESC="Pause the slideshow on mouseover"
SLIDESHOWCK_CAPTIONSTYLES="Caption styles"
SLIDESHOWCK_FULLPAGE_LABEL="Use it as full page background"
SLIDESHOWCK_FULLPAGE_DESC="Load the slideshow as background of the page"
SLIDESHOWCK_SHOWARTICLETITLE_LABEL="Show the article title"
SLIDESHOWCK_SHOWARTICLETITLE_DESC="Choose if you want to show the article title"
SLIDESHOWCK_OPTIONS_FROMFOLDER="Load the slides from a folder"
SLIDESHOWCK_CHECKPARAMSPLUGIN="You must download and install the <a href="_QQ_"https://www.joomlack.fr/en/slideshowck/slideshow-params-plugin"_QQ_" target="_QQ_"_blank"_QQ_">plugin Slideshow Params</a>"
SLIDESHOWCK_SPACER_SLIDESHOWCKPARAMS_PATCH_INSTALLED="Plugin Slideshow CK installed"
SLIDESHOWCK_FROMFOLDERNAME_LABEL="Load from the folder"
SLIDESHOWCK_FROMFOLDERNAME_DESC="Choose the folder from which to load the images (type the folder path, then save the module, then click on the import button)"
SLIDESHOWCK_SLIDESSOURCE_LABEL="Images source"
SLIDESHOWCK_SLIDESSOURCE_DESC="Choose if you want to load the images from the slides manager or a folder"
SLIDESHOWCK_SLIDEMANAGER="Slides manager"
SLIDESHOWCK_FOLDER="Import from a folder"
SLIDESHOWCK_IMPORT="Import"
SLIDESHOWCK_OPTIONS_LIGHTBOX="Lightbox Options"
SLIDESHOWCK_LIGHTBOXTYPE_LABEL="Lightbox type"
SLIDESHOWCK_LIGHTBOXTYPE_DESC="Choose the lightbox to use to open the links in a popup. Squeezebox is the natve script in Joomla!. Mediabox CK is the advanced Lightbox that you can download on https://www.joomlack.fr"
SLIDESHOWCK_SQUEEZEBOX="Squeezebox"
SLIDESHOWCK_MEDIABOXCK="Mediabox CK"
SLIDESHOWCK_LIGHTBOXCAPTION_LABEL="Show the caption"
SLIDESHOWCK_LIGHTBOXCAPTION_DESC="The caption is defined in the slide options, it can be shown in the slideshow, or in the lightbox (only if you use Mediabox CK), or both"
SLIDESHOWCK_LIGHTBOXCAPTION="In the slideshow"
SLIDESHOWCK_LIGHTBOXTITLE="In the lightbox (Mediabox CK)"
SLIDESHOWCK_LIGHTBOXCAPTIONANDTITLE="In both"
SLIDESHOWCK_SPACERFOLDERAUTOLOAD_LABEL="Autoload images from a folder"
SLIDESHOWCK_SPACERFOLDERIMPORT_LABEL="Import images from a folder"
SLIDESHOWCK_AUTOLOADFOLDERNAME_LABEL="Autoload from the folder"
SLIDESHOWCK_AUTOLOADFOLDERNAME_DESC="Choose the folder from which to load the images automatically"
SLIDESHOWCK_AUTOLOADFOLDER="Autoload from a folder"
SLIDESHOWCK_MOBILEIMAGE_SPACER_LABEL="Specific images for Mobile Options"
SLIDESHOWCK_USEMOBILEIMAGE_LABEL="Use specific images for Mobile"
SLIDESHOWCK_USEMOBILEIMAGE_DESC="If you use this option the slideshow will detect the resolution and load an image with a prefix. For example if you set the resolution of 640px under this resolution the image 'folder/640/image.jpg' will be loaded instead of 'folder/image.jpg'. BE CAREFUL that both images exists !"
SLIDESHOWCK_MOBILEIMAGERESOLUTION_LABEL="Max resolution for images for Mobile"
SLIDESHOWCK_MOBILEIMAGERESOLUTION_DESC="Under this value the alternative image will be used"
SLIDESHOWCK_LIMITSLIDES_LABEL="Number of slides"
SLIDESHOWCK_LIMITSLIDES_DESC="This option will only be used if you set the display order on Shuffle. Then you can limit the number of slides to show."
SLIDESHOWCK_IMAGETARGET_LABEL="Default image target"
SLIDESHOWCK_IMAGETARGET_DESC="Choose how you want to set the link target by default for all slides"
SLIDESHOWCK_DEFAULT="default"
SLIDESHOWCK_LIGHTBOX="in a Lightbox"
SLIDESHOWCK_HIKASHOP_FIELDSET_LABEL="Hikashop Options"
SLIDESHOWCKHIKASHOP_CHECKPLUGIN="You must download and install the <a href="_QQ_"https://www.joomlack.fr/en/slideshowck/slideshow-hikashop-plugin"_QQ_" target="_QQ_"_blank"_QQ_">plugin Slideshow CK Hikashop</a>"

;styles
SLIDESHOWCK_BOLD = "bold"
SLIDESHOWCK_NORMAL = "normal"
SLIDESHOWCK_SPACER_STYLESBACKGROUND="Background"
SLIDESHOWCK_SPACER_STYLESROUNDEDCORNERS="Rounded corners"
SLIDESHOWCK_SPACER_STYLESSHADOW="Shadow"
SLIDESHOWCK_SPACER_STYLESBORDERS="Borders"
SLIDESHOWCK_MARGIN_LABEL="External margins"
SLIDESHOWCK_MARGIN_DESC="Margin value in px"
SLIDESHOWCK_PADDING_LABEL="Internal margins"
SLIDESHOWCK_PADDING_DESC="Padding value in px"
SLIDESHOWCK_BGCOLOR1_LABEL="Background color"
SLIDESHOWCK_BGCOLOR1_DESC="Choose the background color"
SLIDESHOWCK_BGCOLOR2_LABEL="Gradient color"
SLIDESHOWCK_BGCOLOR2_DESC="Choose the gradient color that will be used starting from the background color"
SLIDESHOWCK_ROUNDEDCORNERSTL_LABEL="Top left corner"
SLIDESHOWCK_ROUNDEDCORNERSTL_DESC="Radius value for the corner in px"
SLIDESHOWCK_ROUNDEDCORNERSTR_LABEL="Top right corner"
SLIDESHOWCK_ROUNDEDCORNERSTR_DESC="Radius value for the corner in px"
SLIDESHOWCK_ROUNDEDCORNERSBR_LABEL="Bottom right corner"
SLIDESHOWCK_ROUNDEDCORNERSBR_DESC="Radius value for the corner in px"
SLIDESHOWCK_ROUNDEDCORNERSBL_LABEL="bottom left corner"
SLIDESHOWCK_ROUNDEDCORNERSBL_DESC="Radius value for the corner in px"
SLIDESHOWCK_SHADOWCOLOR_LABEL="Shadow color"
SLIDESHOWCK_SHADOWCOLOR_DESC="Choose the color for the shadow"
SLIDESHOWCK_SHADOWBLUR_LABEL="Shadow width"
SLIDESHOWCK_SHADOWBLUR_DESC="Shadow width in px"
SLIDESHOWCK_SHADOWSPREAD_LABEL="Blur"
SLIDESHOWCK_SHADOWSPREAD_DESC="Blur value for the shadow"
SLIDESHOWCK_OFFSETX_LABEL="Horizontal offset"
SLIDESHOWCK_OFFSETX_DESC="Offset on the X axis, can take a negative value"
SLIDESHOWCK_OFFSETY_LABEL="Vertical offset"
SLIDESHOWCK_OFFSETY_DESC="Offset on the Y axis, can take a negative value"
SLIDESHOWCK_SHADOWINSET_LABEL="Inset"
SLIDESHOWCK_SHADOWINSET_DESC="Use the inset attribtue to create the shadow inside"
SLIDESHOWCK_BORDERCOLOR_LABEL="Border color"
SLIDESHOWCK_BORDERCOLOR_DESC="Choose the color for the border"
SLIDESHOWCK_BORDERWIDTH_LABEL="Border width"
SLIDESHOWCK_BORDERWIDTH_DESC="Width in px for the border"
SLIDESHOWCK_SPACER_STYLESMARGIN = "Margins"
SLIDESHOWCK_USEMARGIN_LABEL = "Use margins"
SLIDESHOWCK_USEMARGIN_DESC = ""
SLIDESHOWCK_USEBACKGROUND_LABEL = "Use background color"
SLIDESHOWCK_USEBACKGROUND_DESC = ""
SLIDESHOWCK_USEGRADIENT_LABEL = "Use gradient color"
SLIDESHOWCK_USEGRADIENT_DESC = ""
SLIDESHOWCK_USEROUNDEDCORNERS_LABEL = "Use rounded corners"
SLIDESHOWCK_USEROUNDEDCORNERS_DESC = ""
SLIDESHOWCK_USESHADOW_LABEL = "Use shadow"
SLIDESHOWCK_USESHADOW_DESC = ""
SLIDESHOWCK_USEBORDERS_LABEL = "Use borders"
SLIDESHOWCK_USEBORDERS_DESC = ""
SLIDESHOWCK_SPACER_STYLESFONT = "Font style"
SLIDESHOWCK_USEFONT_LABEL = "Use font"
SLIDESHOWCK_USEFONT_DESC = ""
SLIDESHOWCK_GFONT_LABEL = "Font"
SLIDESHOWCK_GFONT_DESC = "Choose the google font to use"
SLIDESHOWCK_FONTWEIGHT_LABEL = "Font weight"
SLIDESHOWCK_FONTWEIGHT_DESC = "Choose if you want the text to be bold or normal"
SLIDESHOWCK_FONTSIZE_LABEL = "Font size"
SLIDESHOWCK_FONTSIZE_DESC = "Give the size you want with unit (px, em, %)"
SLIDESHOWCK_FONTCOLOR_LABEL = "Font color"
SLIDESHOWCK_FONTCOLOR_DESC = "Choose the color for the font"
SLIDESHOWCK_DESCFONTSIZE_LABEL = "Description font size"
SLIDESHOWCK_DESCFONTSIZE_DESC = "Size of the description added to the link"
SLIDESHOWCK_DESCFONTCOLOR_LABEL = "Description color"
SLIDESHOWCK_DESCFONTCOLOR_DESC = "Color of the description added to the link"
SLIDESHOWCK_MARGINTOP_LABEL="Margin top"
SLIDESHOWCK_MARGINTOP_DESC="margin in px"
SLIDESHOWCK_MARGINRIGHT_LABEL="Margin right"
SLIDESHOWCK_MARGINRIGHT_DESC="margin in px"
SLIDESHOWCK_MARGINBOTTOM_LABEL="Margin bottom"
SLIDESHOWCK_MARGINBOTTOM_DESC="margin in px"
SLIDESHOWCK_MARGINLEFT_LABEL="Margin left"
SLIDESHOWCK_MARGINLEFT_DESC="margin in px"
SLIDESHOWCK_PADDINGTOP_LABEL="Padding top"
SLIDESHOWCK_PADDINGTOP_DESC="margin in px"
SLIDESHOWCK_PADDINGRIGHT_LABEL="Padding right"
SLIDESHOWCK_PADDINGRIGHT_DESC="margin in px"
SLIDESHOWCK_PADDINGBOTTOM_LABEL="Padding bottom"
SLIDESHOWCK_PADDINGBOTTOM_DESC="margin in px"
SLIDESHOWCK_PADDINGLEFT_LABEL="Padding left"
SLIDESHOWCK_PADDINGLEFT_DESC="margin in px"
SLIDESHOWCK_BACKGROUNDIMAGE_LABEL="Background image"
SLIDESHOWCK_BACKGROUNDIMAGE_DESC="Select an image to apply as background"
SLIDESHOWCK_BACKGROUNDPOSITIONX_LABEL="Poxition X"
SLIDESHOWCK_BACKGROUNDPOSITIONX_DESC="Choose a value with px (ex: 25px) or left, right, center, etc..."
SLIDESHOWCK_BACKGROUNDPOSITIONY_LABEL="Poxition Y"
SLIDESHOWCK_BACKGROUNDPOSITIONY_DESC="Choose a value with px (ex: 25px) or left, right, center, etc..."
SLIDESHOWCK_ARTICLEOPTIONS="Article options"
SLIDESHOWCK_ARTICLELENGTH_LABEL="Character length"
SLIDESHOWCK_ARTICLELENGTH_DESC="The article text will be truncated after the number of characters"
SLIDESHOWCK_ARTICLELINK_LABEL="Article link on"
SLIDESHOWCK_ARTICLELINK_DESC="Choose if you want the link of the article to be added to the title or with a readmore link"
SLIDESHOWCK_READMORE_OPTION="readmore link"
SLIDESHOWCK_TITLE_OPTION="article title"
SLIDESHOWCK_ARTICLETITLE_LABEL="Article title tag"
SLIDESHOWCK_ARTICLETITLE_DESC="Choose which tag to use to render the title"
SLIDESHOWCK_SLIDETIME="enter a specific time value for this slide, else it will be the default time"

; added 1.3.11
SLIDESHOWCK_LIGHTBOXGROUPALBUM_LABEL="Group links into an album"
SLIDESHOWCK_LIGHTBOXGROUPALBUM_DESC="ONLY FOR MEDIABOX CK : This will group all links into an album and enable the navigation"
SLIDESHOWCK_CLEAR="Clear"
SLIDESHOWCK_SELECT="Select"

;added 1.4.0
SLIDESHOWCK_ARTICLEOPTIONS="Article Options"
SLIDESHOWCK_ARTICLE_ID="Article ID"
SLIDESHOWCK_TITLE_ONLY="title only"
SLIDESHOWCK_DESC_ONLY="description only"
SLIDESHOWCK_OPTIONS_SLIDESSOURCE="<img src=../modules/mod_slideshowck/elements/images/pictures.png />Slides source"
SLIDESHOWCK_OPTIONS_FROMARTICLECATEGORY="<img src=../modules/mod_slideshowck/elements/images/picture_add.png style=display:inline-block;margin:2px 5px 0 2px; />Autoload from a category of articles"
SLIDESHOWCK_OPTIONS_FROMFOLDER="<img src=../modules/mod_slideshowck/elements/images/picture_add.png style=display:inline-block;margin:2px 5px 0 2px; />Autoload from a folder"
SLIDESHOWCK_OPTIONS_STYLES = "<img src=../modules/mod_slideshowck/elements/images/css.png style=display:inline-block;margin:2px 5px 0 2px; />Styles options"
SLIDESHOWCK_OPTIONS_EFFECTS = "<img src=../modules/mod_slideshowck/elements/images/chart_curve.png style=display:inline-block;margin:2px 5px 0 2px; />Effects options"
SLIDESHOWCK_OPTIONS_LIGHTBOX="<img src=../modules/mod_slideshowck/elements/images/magnifier_zoom_in.png style=display:inline-block;margin:2px 5px 0 2px; />Lightbox Options"
SLIDESHOWCK_OPTIONS_ADVANCED="<img src=../modules/mod_slideshowck/elements/images/wrench.png style=display:inline-block;margin:2px 5px 0 2px; />Avanced Options"
SLIDESHOWCK_ARTICLEOPTIONS="<img src=../modules/mod_slideshowck/elements/images/text_signature.png style=display:inline-block;margin:2px 5px 0 2px; />Article options"
SLIDESHOWCK_CAPTIONSTYLES="<img src=../modules/mod_slideshowck/elements/images/style.png style=display:inline-block;margin:2px 5px 0 2px; />Caption styles"
SLIDESHOWCK_HIKASHOP_FIELDSET_LABEL="<img src=../modules/mod_slideshowck/elements/images/basket.png style=display:inline-block;margin:2px 5px 0 2px; />Hikashop Options"
SLIDESHOWCK_SLIDEMANAGER="Slides manager"
SLIDESHOWCK_SLIDESSOURCE_LABEL="Images source"
SLIDESHOWCK_SLIDESSOURCE_DESC="Choose if you want to load the images from the slides manager or a folder"
SLIDESHOWCK_SPACERFOLDERIMPORT_LABEL="Import images from a folder"
SLIDESHOWCK_TITLE="Title"
SLIDESHOWCK_OPTIONS_SLIDES = "<img src=../modules/mod_slideshowck/elements/images/picture_add.png style=display:inline-block;margin-top:2px;margin-right:5px;margin-left:2px; />Slides manager"
SLIDESHOWCK_CAPTION="Description"
SLIDESHOWCK_AUTOCREATETHUMBS_LABEL="Create the thumbnails automatically"
SLIDESHOWCK_AUTOCREATETHUMBS_DESC="The server will automatically create the thumbnail images if needed. This can cause some server overload"
SLIDESHOWCK_BGOPACITY_LABEL="Opacity"
SLIDESHOWCK_BGOPACITY_LABEL="Set the opacity for the background"

;added 1.4.6
SLIDESHOWCK_IMAGE_OPTION="Image"

;added 1.4.7
SLIDESHOWCK_CONTAINER_LABEL="Load as block background"
SLIDESHOWCK_CONTAINER_DESC="<strong>For advanced users :</strong>Give the CSS selector for the block where you want to load the slideshow as background. For example if you want to load into a block that has an ID 'top', write '#top'. If you want to load into a block that has as css class 'top', write '.top'."

;added 1.4.15
SLIDESHOWCK_SPACER_RESPONSIVE="Responsive caption"
SLIDESHOWCK_USERESPONSIVECAPTION_LABEL="Activate the responsive caption"
SLIDESHOWCK_USERESPONSIVECAPTION_DESC="Activate this option if you want to use the following settings for the responsive caption"
SLIDESHOWCK_RESPONSIVERESOLUTION_LABEL="Responsive resolution"
SLIDESHOWCK_RESPONSIVERESOLUTION_DESC="Choose a resolution value under which the following settings will apply."
SLIDESHOWCK_RESPONSIVEFONTSIZE_LABEL="Font size"
SLIDESHOWCK_RESPONSIVEFONTSIZE_DESC="Set the font-size to apply to the caption under the resolution that you have defined above"
SLIDESHOWCK_RESPONSIVEHIDECAPTION_LABEL="Hide caption"
SLIDESHOWCK_RESPONSIVEHIDECAPTION_DESC="If you don't want to show the caption at all under the resolution you have set above, then activate this option"

;added 1.4.21
SLIDESHOWCK_OPTIONS_FROMFLICKR="<img src=../modules/mod_slideshowck/elements/images/picture_add.png style=display:inline-block;margin:2px 5px 0 2px; />Autoload from Flickr"
SLIDESHOWCK_VOTE_JED="If you are using Slideshow CK, please vote on the JED."
SLIDESHOWCK_CURRENT_VERSION="You are using the version"
SLIDESHOWCK_NEW_VERSION_AVAILABLE="Update available"
SLIDESHOWCK_DOWNLOAD="Download"
SLIDESHOWCK_DOWNLOAD_DOCUMENTATTION="Download the documentation of the module"
SLIDESHOWCK_DOWNLOAD_THEMES="Download a graphic theme for the module"
SLIDESHOWCK_NEED_UPDATE="This extension must be updated"
SLIDESHOWCK_REQUIRED_VERSION="You must at least install the version"

;added 1.4.22
SLIDESHOWCK_MINHEIGHT_LABEL="Min-height"
SLIDESHOWCK_MINHEIGHT_DESC="Set a min-height value to limit the size of the slideshow on small devices. This must be in px"
SLIDESHOWCK_RESOLUTION_ADAPTATIVE="Adaptative"
SLIDESHOWCK_RESOLUTION_STEP="Resolution step"
SLIDESHOWCK_STARTDATE="Start date"
SLIDESHOWCK_ENDDATE="End date"

;added 1.4.37
SLIDESHOWCK_USECAPTION_LABEL="Show the caption"
SLIDESHOWCK_USECAPTION_DESC="Select if you want to show the caption, or totally disable it"
SLIDESHOWCK_USECAPTIONDESC_LABEL="Show description"
SLIDESHOWCK_USECAPTIONDESC_DESC="Select if you want to show the caption description, or only the title"

;added 1.4.41
SLIDESHOWCK_K2_NOTFOUND="K2 not found"

;added 1.4.42
SLIDESHOWCK_LINK_POSITION_LABEL="Link position"
SLIDESHOWCK_LINK_POSITION_DESC="Set where you want the slide link to take place"
SLIDESHOWCK_LINK_FULLSLIDE="Full slide"
SLIDESHOWCK_LINK_CAPTION="Caption"
SLIDESHOWCK_LINK_TITLE="Title"
SLIDESHOWCK_LINK_BUTTON="Button"

;added 1.4.43
SLIDESHOWCK_FIXHTML_LABEL="Fix html"
SLIDESHOWCK_FIXHTML_DESC="Fix the html code in the caption. Usefull when the text is truncated."

;added 1.4.52
SLIDESHOWCK_KEYBOARD_CONTROL_LABEL="Enable keyboard control"
SLIDESHOWCK_KEYBOARD_CONTROL_DESC="You can use the keyboard to control the slideshow (left = previous, right = next, P = play/pause)"

;added 1.4.63
PLG_SLIDESHOWCK_READMORE="Read more"
SLIDESHOWCK_STRIPTAGS_LABEL="Strip HTML tags"
SLIDESHOWCK_STRIPTAGS_DESC="Remove all HTML formatting in the text"

;added 2.0.0
SLIDESHOWCK_SOURCE_FIELDSET_LABEL="Source"
SLIDESHOWCK_USE_FREE_VERSION="You are using the FREE version"
SLIDESHOWCK_USE_PRO_VERSION="You are using the PRO version"
SLIDESHOWCK_DOCUMENTATION="Read the documentation"
SLIDESHOWCK_TEXT="Text"
SLIDESHOWCK_IMAGE="Image"
SLIDESHOWCK_LINK="Link"
SLIDESHOWCK_VIDEO="Video"
SLIDESHOWCK_ARTICLE="Article"
SLIDESHOWCK_DATES="Dates"
SLIDESHOWCK_REMOVE2="Remove"
SLIDESHOWCK_SELECT_LINK="Select a link"
SLIDESHOWCK_SOURCE_SLIDESMANAGER="Slides manager"
SLIDESHOWCK_SOURCE_FOLDER="Folder"
SLIDESHOWCK_SELECT="Select"
SLIDESHOWCK_USETITLE_LABEL="Show the title"
SLIDESHOWCK_USETITLE_DESC="Select if you want to show the title in the caption"
SLIDESHOWCK_DISPLAY_OPTIONS_LABEL="Display"
SLIDESHOWCK_TEXT_OPTIONS_LABEL="Text"
SLIDESHOWCK_LINK_OPTIONS_LABEL="Link"
SLIDESHOWCK_NUMBER_SLIDES_LABEL="Number of slides"
SLIDESHOWCK_NUMBER_SLIDES_DESC="Give the number of slides to be shown. Leave the field empty to show all slides"
SLIDESHOWCK_NONE="None"
SLIDESHOWCK_LINK_BUTTON_TEXT_LABEL="Button text"
SLIDESHOWCK_LINK_BUTTON_TEXT_DESC="Write the text to be shown in the button. You can write a STRING that will be translated using the language files with your own values"
SLIDESHOWCK_LIGHTBOX_SPACER_LABEL="Lightbox"
SLIDESHOWCK_LIGHTBOX_LABEL="Lightbox to use"
SLIDESHOWCK_LIGHTBOX_DESC="Choose if you want to use the Mediabox CK lightbox available on JoomlaCK.fr, or if you want to use another one"
SLIDESHOWCK_LIGHTBOX_MEDIABOX="Mediabox CK"
SLIDESHOWCK_LIGHTBOX_OTHER="Other"
SLIDESHOWCK_LINK_BUTTON_TEXT="Read more"
SLIDESHOWCK_LIGHTBOX_ATTRIB_LABEL="Lightbox attribute"
SLIDESHOWCK_LIGHTBOX_ATTRIB_DESC="Set the attibute to use according to your lightbox setttings"
SLIDESHOWCK_LIGHTBOX_ATTRIB_VALUE_LABEL="Lightbox attribute value"
SLIDESHOWCK_LIGHTBOX_ATTRIB_VALUE_DESC="Set the attibute value to use according to your lightbox setttings"
SLIDESHOWCK_LINK_BUTTON_CLASS_LABEL="Button CSS class"
SLIDESHOWCK_LINK_BUTTON_CLASS_DESC="Write a CSS class to add to the button"
SLIDESHOWCK_LINK_AUTOIMAGE_LABEL="Link auto to image"
SLIDESHOWCK_LINK_AUTOIMAGE_DESC="If set to yes, it will automatically create a link to the slide image itself"
SLIDESHOWCK_LINK_TARGET_LABEL="Link target"
SLIDESHOWCK_LINK_TARGET_DESC="Choose if you want to open the link in the same window or in a new window"
SLIDESHOWCK_LINK_SAME_WINDOW="Same window"
SLIDESHOWCK_LINK_NEW_WINDOW="New window"
SLIDESHOWCK_TITLE_TAG_LABEL="Title tag"
SLIDESHOWCK_TITLE_TAG_DESC="Choose which tag to use to render the title"
SLIDESHOWCK_OPTIONS_FIELDSET_LABEL="Options"
SLIDESHOWCK_RESPONSIVE="Responsive"
SLIDESHOWCK_EFFECTS_OPTIONS="Effects"
SLIDESHOWCK_VISIT_OTHER_PRODUCTS="Visit the other products available on JoomlaCK"
SLIDESHOWCK_GET_LICENCE_INFOS="See how to manage your licence key"
SLIDESHOWCK_GET_PRO_INFOS="Get infos on the Pro version"
SLIDESHOWCK_STYLES="Styles"
SLIDESHOWCK_EDIT="Edit"
SLIDESHOWCK_SELECT_STYLE_LABEL="Style"
SLIDESHOWCK_SELECT_STYLE_DESC="Select the style to apply to your slideshow and edit it directly here"
SLIDESHOWCK_OTHER="Other"
SLIDESHOWCK_LIGHTBOX_LABEL="Lightbox"
SLIDESHOWCK_LIGHTBOX_DESC="Select which lightbox to use to open your links"
SLIDESHOWCK_PORTRAIT_LABEL="Contain the images"
SLIDESHOWCK_PORTRAIT_DESC="The images will be contained into the slideshow area without resizing"
SLIDESHOWCK_ONLY_PRO="Only available in the Pro version. Click here to read more infos"
SLIDESHOWCK_SOURCE_ARTICLES="Articles"
SLIDESHOWCK_THUMBSTYPE_LABEL="Thumbnails to use"
SLIDESHOWCK_THUMBSTYPE_DESC="Choose between reduced size image or normal size image"
SLIDESHOWCK_THUMBSTYPE_MINI="Mini"
SLIDESHOWCK_THUMBSTYPE_NORMAL="Normal"
SLIDESHOWCK_MIGRATION_NEEDED="A migration is needed ! We have detected that you are editing a module that has been created with Slideshow CK V1."
SLIDESHOWCK_MIGRATION_ACTION="Please click here to automatically update the module. If you don't do it, you may loose some configuration."
SLIDESHOWCK_MIGRATION_SUCCESS="Migration done with success !"
SLIDESHOWCK_MIGRATION_ERROR="Error when trying to migrate the module to the V2. Please contact the developper."
SLIDESHOWCK_HEIGHT_FIELD_HELP_TITLE="How to calculate the height"
SLIDESHOWCK_HEIGHT_FIELD_HELP_1="You can set up the height in <b>px</b> or <b>%</b>. If you use %, the height will be responsive and it will keep the image ratio. If you use px, then the height will always stay the same and it will crop the image."
SLIDESHOWCK_HEIGHT_FIELD_HELP_2="How to calculate the height in %"
SLIDESHOWCK_HEIGHT_FIELD_HELP_3="The percentage is the ratio between the height and width of your image. Note that this value is used for all images in the slideshow, so it is recommended to have all images with the same dimensions."
SLIDESHOWCK_HEIGHT_FIELD_HELP_4="Take an example with an image that has the following dimensions :"
SLIDESHOWCK_HEIGHT_FIELD_HELP_5="To calculate the ratio : 800 / 1280 = <b>62%</b>. Then in the height option, set the value to 62%."
SLIDESHOWCK_RATIO_LABEL="Image ratio"
SLIDESHOWCK_CALCULATOR="Calculator"
SLIDESHOWCK_SAVE="Save"
SLIDESHOWCK_PARAMS_UNPUBLISHED_INFO="Are you updating this module from the V1 to V2 of Slideshow CK ? The plugin Slideshow CK Params has been detected and it has automatically been deactivated because not compatible with the V2."
SLIDESHOWCK_PARAMS_MIGRATION_LINK="Click here to read the instructions on how to migrate"
SLIDESHOWCK_TEXT_CUSTOM="Custom text"
SLIDESHOWCK_TEXT="Text"
SLIDESHOWCK_WARNING_PLUGIN_OBSOLETE="You have a plugin that is obsolete that was working the Version 1 of Slideshow CK. This plugin is no more compatible with the Version 2 of Slideshow CK, please unpublish it."
SLIDESHOWCK_DISABLE_PLUGIN="Click here to unpublish the plugin"
;added 2.0.5
SLIDESHOWCK_DEBUG_LABEL="Show debug messages"
SLIDESHOWCK_DEBUG_DESC="Disable it if you don't want any message from the slideshow"
;added 2.0.16
SLIDESHOWCK_LOAD_INLINE_LABEL="Load script inline"
SLIDESHOWCK_LOAD_INLINE_DESC="If you have some problems to render the slidehow when loaded into an article, you can use this option"
;added 2.1.1
SLIDESHOWCK_CONTENT_PREPARE_LABEL="Prepare content"
SLIDESHOWCK_CONTENT_PREPARE_DESC="Call the content plugins to be triggered on the rendered content"
;added 2.2.1
SLIDESHOWCK_VIDEO_AUTOPLAY="Autoplay"
SLIDESHOWCK_VIDEO_LOOP="Loop"
SLIDESHOWCK_VIDEO_CONTROLS="Controls"
;added 2.3.11
SLIDESHOWCK_TITLE_IN_THUMBNAILS_LABEL="Show title in thumbs"
;added 2.4.1
SLIDESHOWCK_RESPONSIVEHIDEDESCRIPTION_LABEL="Hide description"
SLIDESHOWCK_RESPONSIVEHIDEDESCRIPTION_DESC="Hide description on mobile"mod_slideshowck/themes/index.html000060400000000037152456304320013204 0ustar00<!DOCTYPE html><title></title>
mod_slideshowck/themes/default/images/blank.gif000060400000002105152456304320015654 0ustar00GIF89a����!�XMP DataXMP<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:0D980D8206C011E0985695BBDE1B5A90" xmpMM:DocumentID="xmp.did:0D980D8306C011E0985695BBDE1B5A90"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:0D980D8006C011E0985695BBDE1B5A90" stRef:documentID="xmp.did:0D980D8106C011E0985695BBDE1B5A90"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>�������������������������������������������������������������������������������������������������������������������������������~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! 

	!�,D;mod_slideshowck/themes/default/images/index.html000060400000000037152456304320016075 0ustar00<!DOCTYPE html><title></title>
mod_slideshowck/themes/default/images/camera_skins.png000060400000057206152456304320017257 0ustar00�PNG


IHDR�,�<rtEXtSoftwareAdobe ImageReadyq�e<fiTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:OriginalDocumentID="xmp.did:0A80117407206811BBABD7A72E8A3CEB" xmpMM:DocumentID="xmp.did:9CE331D8475D11E1BFD3D381F831A47D" xmpMM:InstanceID="xmp.iid:9CE331D7475D11E1BFD3D381F831A47D" xmp:CreatorTool="Adobe Photoshop CS5 Macintosh"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:21A56ECB01236811BBABD7A72E8A3CEB" stRef:documentID="xmp.did:0A80117407206811BBABD7A72E8A3CEB"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>���Z�IDATx��Ak,O���#������	��l<J����w0Z&��B�Z$dF�,5z���<���'��7�ƨ�
� ��N��Q�y�����S�|���{�w�t�֩s��j��l2�^�@p�� 8�� 8ߺ�G����כ�\�����b>��e��g�l����"�s�K�5q�Ql�	j�HlR��CpM��kC�Y�2W�"��4�,\dYYyH�e�����
�k���؞̔���g�����`�\�m7j+�/�\Ѣ�f����5�=����\�v���3�>�u�m��v���G�K���}�]�=���u/m�3p�z��P�����<j�Kf��"��:0����{s}�G�\gK��g�P��Բ�0#N>ԩ8��ȣܗ�W͐�/}���d���Il\d�
(�/}Y��7m{雞$�
%)P�ׅ���>�C#��BIJ������JBPܹ~/���3XE����؆1
%�����?���(�*:�OD&{Q��g��J5ҙɽ�<v.8�e��/��2B������4��z���u�,�}���1�߬jn����,�`�%�O��2B��">�s�oni{*��Cm�Jb���e�a�мE'�k9�I�+߾�:yY��ڈ��{�����4h՗R]^��ˆ����n��������4�AR(y�B��=
��uZw��:��^5%�%��=��J��=�u���\n�[(�,©s?�ske�Rwj��t��B,�8��Y@��V��~O8B]\W��R�Pv�`��啀� �)% 8��� 8@p��@p�� 8�� 	�
�g�yr��G,�
j�3�
G'8������f�
+�a$6�m�@�#4���/ܿ�2񐃁�
�[���VĦQNlYd���ӵ��
��f��g�i%z�Y�"}ž��W�ɋ-Ϫ��}�����޵�njp�-N��&SH�ΛY(,}a���kGo�}$�F*��>Om��fXm�_p�Bɋ3��%j[y�������l�n=cȻ{�'��\gr�����ҹ���8y}24��ȣܗ�1����/}���d�$�
��K_�1�M�^��'	N�)�ۿ��`�y8‹^(fv.�ֹm�t�$��W�Cj�
%�����U@9Tp��%˝g��r+�
cJ>]q�!8�Q�Ut6j����u��.�ZɣF:3�wÖ��g���%Y^�@h���ڝ��&6��Nm�<�e��2{��dq��ͪ�l��Β\���-c 4?�+��>�P�f��b�O�0�^�T�)Z����
���-�F�Z5�i�`��g-��#��O);].|G� ��?�C���?Y��3�6�iݗ�����m��í�E|w����H-��'-��3Hקs��6[i��df�]�{8���{�_��\n�[(�Lp�(I���9�s6%mi�{EԠS��PN
&Ď������o]�:�����C��=���DOoBG8�)��� 8��@p���$&89!��%�j@T���/g�d�Y"1��L�.(su�[#�]��<*�(7ɪ�9�����
wj�4�C�˔�-��a���n�+��rǃ��O:���T�ܫF2���3����h=k��6�-�7��J?���B�?�����.8�[L~n*F�/���?�����[>�4��򝿏a�T�>����=��oCM)�����h]+��7h�j�P[����R^"�_��:����Z(I����曆y?��-�	�j�$�
�kW(��ڏf>�CW7&��2�N[��u�e/���€-�eޗ��pz�`�]�3%�$�gtVR���n�U��NXSܧx��)t`��֊Qc:g)Ei�֩�Q"�i��xt��vfd�d�\�̓!�Ԧ��IC)�S������
�#��K�����J��>�z�]dv�1Z{�H��X�`�4��p�	.�}���1�w����1+�3�������Z�5����e����v'�d>#z�3�{��҂��흒�ܼ,F�fv��a�Yf{��U�1����!�Sd�(����(�xJ��puY��/L=j&:*����,3�V�է���}Ӧ.�4�@~����Y�]k�=Kk�:�7�ʛ�*��Q�"��p,�@p�� 8��� 8@p��@p������w���\�Ϲ��[�&�b��α��ѝ�����E���3��b�D��l�����jC����2�L2��o�?P�H��*�f��=����MmI�h����'�=�ͩ��W�"X���3���_� 9v��.���?J߮t�0ihy����C���f
ۤ�s�l^(�H1G.��3\�ٽ�y�bk�}��MՎ�
�li-6�~[ĘR6%�U��m�
(�@�*�D.h7��u�z��G/Z����I���Z(I�����m��`�y�3Y(I�����Jf����G3��Ɂ�����̹�j��"��K��0�0�G��y/�K�P�Y�{JIx���Bɵ!�ĖIۥ�CW'�)�S��y�H�y�F�1r+鷥��mǶN��)M{Xƨ�vfa�d(��<2Kl)ڮE����Sܧhu���'~��6L|�Uʤ�)]�@h�y)RH�ksV�X\�M�.�}���1����_���Ya��
^� [������P?��O��2���4�n..�v�c����}��E��ُFZ�NIBn^#^3�?��a��-hкO_�`c��Hf&��m���$P@Ib�'�.��S(�Dp�(	�v��Js�>��+ͻ�j��3Mdxr�+�Φ��n�Sڂ�G�3M���j�D�b���p�c��� 8��@p���t��N���@N5�S����&��]����[��:[.�r8��ԧ���M�l�6U���h�=���s��]�pn��d�"���SV�,Զ�~D�k����ޤl3��Vq��ݮ
v͵�v��B�b�u-zl�(۬ڎ��;�nM�n���nwl��03�S��`��[Go�}�Dh?���mѣe���I���%/� �'W��dv
(�ᆰ�[���7קy?�u�4�_pv%�M-����m��'�����y{�Ui�g�"��,�|<:�2��痾,��[��7=9Lp�%�E9���u�dh�ߪ�!=
(�F8ۅ��
(_	�J>��"�,�*�s�N���3XE����Ȫ-zv�ʖ��ֹ�G�v��&EV�E=s�Z+y�Hg'�~��{��+��}I��1��&�v���Ѐ��;����e��S�����fU����Β\z��-c 4?�+��^�P���=ɪk��}
���v��O����2��0Fhޢ������
�}��*y���0*�g�ݮMoA�6})��u��|��q��-��*C���;C��:H
%OZ(�G!��N��z[�j���xϒB��f%���Ў�X�g.7�iۋ��r�un�,PV;5ntT��O!]���}j���YU(9Kj 8�|��M(;N�G��J@p��� 8� 8@p�@p�� 8����?��=��r�ep�_^�Q�4p��r����rA��QE8�����bԆ�ؤ���4�X<�n{|��pn{n��,++��,�t�?�����}&=�'3�ut�9#ę-_?���@m��Ŗ� Z�ج�5Ҷ�F���r�r9SH�N�Y��:�6�O^;z��#�%B+�v}[��G�Vy��>�I���^p�2{I��V^ i��"��:0����{s}�G�\gK��g�P��Բ�0#N^ߢ��<�(�%f�c��K�1D�3Y(�dt��
��K_�1�M�^��'	.�BI���u�d�ٹPs�S@94™.��T@�JxH-^�$d�P���w��d,w��*28ȭD�6�Q(�Dtu�ч�G�V�٨}"2ًz�>�V��L�ݰ�s�,��}I��1��&�v���Ѐ��;����e��S4����fUs��}gI.�}�֖1�����i�{(3pK�S�ŧ`jkW�
.c�
c��-:y_��QN�^��]�P5y���0*�g�ݮ-oA�V})��u��l���m�\pj��yߝ!Kc$��'-��q٣�\�ug}�k
�US�YR��Ù,�$���Q+���&����"�:���:�V(u�ƍ�JW�)Ģ�S��Kk%��#$x�k�K�oB�q�=��W��Ħ������� 8��@p����$7ȳK�1sI��"6���C���9v}��|�n��-��Ď�Yu��Yl{�����ւs�
�jӜ.����&��:"�Ȫ[N�p�6M�F8�)Z�T�6CG��a���nj�����ؤN�侧=�9�6��Q��ۻ��_����F�h�����oW:K�4�<bf}��!�~X���?Z>�Xl��΍�ya��#��#��p1�f��+[����n�vĸ'BfKk����"Ɣ�Y()��Mm�T@��W�$:pA�~��K?�ob����I���Z(I����1�g��`�y�3Y(I�����Jf����G3��Ɂ/~��t2������3d/���€-2ϛX�p)J>+�xO	"	���R(�t��2i�4q���5�}��;�`�5��Hʍ�#�������֩�Q"�iO����,L�����Cf�-E۵ȓ_�<|���.c �v���¯?Ԇ�Ϡ�J��>E���� /E
)z�cΪk�K���%�O��2ƛځ���1+�3����dk�����%�Ϭ�S����l8M����˫��X�p}y��o�+z�����S����ň���=w~{fy���W-X�ؼ<������9	P���	�(�J:��J��=�� ����)�J�����L����ʂ��i���������L��>���b�� �m�� �?��p�c��� 8��@p����"�� �t�s+)��Mt7D���g�~9����o��&v�վ��}�w�·���8�ڐ��ྌ&���qt��
��~�KJm��p�����-)�-ss��侧=�9�6��Q�;�|P��_]���i�����?J߮t�0ihy��������q��ˏ6?K��(Ŀ��GlS�֡{~�'y��7�O��7�>�]Sm�<B�����
5�lJ
����f��R��*�D+��u������K?zѺ�ܷ�N<��BIJ��G}]�mDnwl�hb�P�h�+��b�[Ïf>������M:��+�]�!Cx�P��h�~4�Ep�pz�`�]�3%�$�gt�-�O2�k~;Fl��]�8Tpuš�>�˝g���Wn$#���~[J]�vl�Tp�(�ҴGm��k��Y�:Jr}7��[��k�'�y��)Z]�@h����_�
�A;D�2�}�F�1Z�A^�R�ǜU5��jS?�Kp���e�7���*��cV�gj�W�[�Qg���P?��O��2���4�n..�v�c�����}��͑��S����ň���=w~{fy���W-X�ؼ<������9	P���	�(�J:�p�(�Ϊ5��d��Bɳ'��pTQN҄E_}�>>�7m��L����ʂ��i���������-�?�(���h`�!�lo�
���#|� 8��@p��� 8 �u��p ��/��������og���[��:[.�r8���>�h[l��0��6���F���Ɔ�s{2��pn��d�"���C�-�mF�n]�Ϥ�d���.8g�8��n���Zm�Q[!}��:�=6+m��������B�A.w�ckl��Y��:�6�O^;z��#�%B��>��o��Hڒ{
~�3p�z��P�����<j��xj��"��:0����{s}�G�\gK��g�P��Բ�0#N^�Ɗ�<򨬺2:����o�"™,�|2:����^�/˘��m/}ӓ��@�$�
��P24�o�Ő>�C#��BIJ������J>�#����r���;�K2�;�`
�V"b�(�|"�:��Cp֣D��l�>��E=s�Z+y�Hg&�n��ع���۾$���c_���{h���i����y�˲�)^�@h~�*�Z�}gI.�}�֖1�����i�{(3pK�S�ŧ`jkW�
.c�
c��-:y_��QN�^��]�P5y���0*�g�ݮ-oA�V})��u��l���m�\pj��zg��XI��I%c\�(D7�i�Y_�ZxՔ�{���p&(	�v�Ŋ>s��N�^�p��:��ZY�ԝ7:*]��.N�jP,����������/�	e�	��Z^	�R�@p��� 8��@pB��vp&��ɑW7�ר��8[�9ge�l����"�s��Ql�	j�HlR��CpM,G�=�Om8��=��E����T[Y:�@�A~�>�ۓ��:���̖���ߧ�B�b�u-zlV�i�Q#��C�����$]�ͬOq�}��'�����������-z�#i��fx���$��o/8t��$Cm+/�4R@�|�U���ݽ�>�#�Q���y�3\(�ljYv�'�O�Fxy���3���o�"™,�|2:����^�/˘��m/}ӓ��@�$�
��P2��\�9�)��LJR*�|%<��P��
^�Cw��)^���y���P ��0F�����G��%ZEg����d/�,�ZɣF:3�wÖ��g���%Y^�@h���ڝ��C~TO��Զ�#\�%�O��2B�U�
�2��%,��)Z[�@h~�VWħ}��-mO���a��]I�S4��!6�����}�"G9i{��w�n@��6�¨�5w���
Z��T��1����㶹[p��!��E|w�,�u�J��P2�e�Bts�֝���5�WMI�gI�g����~Ohٵ��g.7�iۋ�N��AG�[+��S�FG�+�bх��+ߧF��U��������ɗ
߄��{d-��A���@p������ 8����
���K�1sI��"6����v��˙&�׿X�E�/g�Ķ�p����n-8��p�6��r8��h2ɪ#򊬺��
wj�Tm�#!F�pH��#��UKS7��z�FH_lR'xr��ۜj�{�(��p΀���/�v�ng#w�{gy�ҷ+�%LZ�?����vOP_L'X>ٸ��Fm���?š-��	7�O-�����xw�z�м�9�'���R6%�U�Q�,P��5�Y��u�ݹ>}��G�M�s�>;	��V%)P��Ͳ�������[�3Y(I�����Jf����G3��Ɂ/~��t2��+�]�!Cx�P��h�y��zh�K�P�eŰ����Y�B�GxP\����O�r�,"��I���b�ߖR���:��2��Hi}�ڙ����T �w�`�,��h�yr���Oq���e��n��X����0��CT)�ڧht���H!E�y�YUc-p�6�#��)ZZ�xS;��B>f�y�6xp��4I��^�J��1�
�	��m|�|��}�7��k�`��FZ��MIBn^#^3�?��a��-hкO_�`c��Hf&��m���$P@Ib�'�.��S(�Dp�(	�����T�V�w��fg����>/Vl�Mk�ݾ��
���g�4
(��ߜ
5���&x��# 8��� 8@p�@p�� 8�� ����o_�Ϲ��[�&�b��α��ѝ��˿}�,6��g��Ŷ�p��Gg��Ն�?�e4�d6���ߧ6‘#U8���n{n����ڒ��27w_O�{�c�Sms�E��0Sg^9�0�ArD�D�m�����oW:K�4�<bf}��!�2���َm7jslg�)m��O�i|j�Mv�>ƻ�f�.��'���R6%�U�Q�,P��5�Y��u�ݹ>}��G/Z����I���Z(I����n�E�*���-�E8���D(�]�d��~4�)������ɜۯ���v}��%C]�[�Ѽ�%R(���b��Zx��,z��#�
(�
�NXSܧx���\�ʍ�c�V2�oK��ێm�
�T��c����Q�����P*��y0d��R�]�<9��ç�O��2Bk7�O,��Cm���!��I�S4������R����<欪��T��\��--c��ͿP!��<S�
8!�R�ߧ��~O�﬙���K�vI~�wZ�ږɫ�$y,��F�����c�,oA��}�����G23�o��<'�J�=�ve�BI'��\@Ip�'��W�C�zlv�i�^mvq���O��be��ٴΪ-h�Sڂ�G�3M�#�9jd[!6�M�=F8@p��@p�� 8��� 8@p��H�o]�����?�c�䘼���F=.��"G,��CggQ�qE8��1b��bԆ�ؤ���4�l�7�ۣ��F���p3�&YVVRmY�m3��xp��}&=�'3�ut�9#ęo4w�6�7�jۍ�
�-�A��Yik�mG�p�%y�r�r��[c;���ٷi|��ћ�.���w}[��G�ֽ���}���Bɋ3��Q�j�\1l��"��:0����{s}�G�\gK��g�P��Բ�0#N^_��<򨬺�=�u���o�"™,�|2:����^�/˘��m/}ӓ��@�$�
��P24�o�M�>�C#��BIJ������JBPܹ~�x+�r��"�C��JDl���ODWG�}�z�h���'"���g�@k%�����
[;��2{ۗdy�}�o�kw�{
�Q=�S�:�pY��>E���oVe����,�`�%�O��2B��">�s�oni{*��Cm�Jb���e�a�мE'�k9�I�+߾v�&��F���۵�-hЪ/����ї
_��݂N
� /�3di���P򤅒1.{���u`��jJ�=K
�{8���{B;�bE���ķP�Y�S�~�Q�����Ը�Q�
?�XtqjW��bi�$���p��p�|��M(;N�G��J@p�ؔ�@p�� 8��� 8@p�@p���Y��>O�ꒃ��
j�3�
G'�Au3��}F�����
#�Im�B��m�~��NǍ��� �p�����p!؞�oEl�ĖE���~0]z<�rP͔��#ܠrf9�V�Ǚ�(��W��}��q�W�����7U��"��C�S6������f
K_ظi|��ћɮ����S�*�V�\�P�.�3��V^ i��"ǯ����[�����2�(יܼw����tn���#N^���<�0c[/m_��!"��BI��痾,c�����MO��aS<�{��>�p��P2��\�9xLk�p�%)P�R�W(	Y@9Tp��%˝g��r+�
7���{�ч�G�V�٨}"��M�f�@k%�����
[;��2{ۗdy�}�o�kw�{����;����e���m^��e��7���e�;K:Xp	�S���������O���;pK�S�ŧ`d/e*������r�wg�T�s���4D0�`׳PƑދ짔�.~#�\���3��s�3�Gl�?̬�ȧu_���ˆ������'��2�����-�<i�d�A��j��l�1����w
 ���LP��	~�>s��o��3�.�$���P����Ԧ��y�oD
:��M��@aB��a,����Ũ3�~�PX9DhP�l#��ӛ�z��� 8��@p������ 8w8���}��/��9���?@�z�B���+�G,D��p����nM8�f{5U��.�#�`{�s�ٺ$�Nm���p4s���m��p�g?Z��m~���(w<b�:�������T�ܫF.��g?�3���_� 9�~�����?I߮t�0ihy��z��C�
r�z���O�����b[��~�6ǷG��M���?�w�/Ǯ����m���������BIav��l�T@���]F������Dݺ��\��D�bȹo��xx����
(Ϗ�����E����[��f�$�
�kW(�E��w?��PN|xy�sM���tZe몴}`��V���/��0�G��y?�{�W	v��>S�H�{FgY]��d���.mj�4q���5�}��;�`��6\ ����R��c[��{�)M{��a5:�B;31u��
�nY�P��r-�� ��>E���� ?1��ʆ�Ϡ�J��>E���� /E�e��X��yi˦���'^@j�--c��ͿP!��<S�
8an@�2��T��,�[ݧhmc��&�������w��V��������`PHn�IIBn^#^3�?��g���A�>}ՂE��ˣrf�I����/����|迀�G����E�Y�&q�L�P(y��Ęc�*�I���O+��6uq���O�,([Y�����nߓڂGǷ��{�
l"T�� 6�=��p�!�� 8� 8@p�@p�� 8�?��2�t�s3O)��M�	�����ѝf�y�,6��gV�� ��8:�]ِ��ྌ&�����T6±#U8�����~KS�ʖ��?���������6���^5�p9�_����o6F;H���p�Ƕzgy�Oҷ+�%LZ�?���v���B�&
��3ʚ��/�H1羜�Z-�e�t��R\�o�D�K"�\�8v��ܶD79\�ʵ��1�lJl��r�"�U@�ob}-�����?ׁ�%��h]`��g'�j�$�
���fq�q�cKo�f�$�
�k7��E��w?��PN|���f�ι������2��uana���G�~�N�츫}�����ζ��I�y�o�\�6�\�8Tpuš�>�˝g�H�U��1j+鷥��mǶN�%R��T�Z�ε��LL�����CV=�6�\�<9��ç�O��2Bk7�OL����a�3h��R��O��2Bk?�K�b���,i^�R�ԓ��ۧhi�M�@h��
q�����U�	s尔�2Xi���ݧhm�o6�	8wsqy����/�v��=-���쓒�ܼ,F�٧��)�����ӧ�Z���yyT�L<	����4�{��P�(�t�ޣ�:��$.|��
%�Z�s��QE9I��i���}Ӧ.�4��)�e+��5w���48:Ÿi�O�0�^�Pd���$|��# 8��� 8@p�@p�� 8��� �]���}��'�b���
4p|�s�]#6�d�O�RFb��/�<�D#��<��+��zL����p!���VĦQNlY�m3���"F6X����-mF�p�q��Q�֢�F��Q�ξwM^l��������6G:��wm�1#\}Iޭ�)��t�ckl��Y(,}a���kGo�}$�F*��>OmK.��6�/�F���tg�y�6�b�JE�;xUN�YȻ{�'��\gr�����~�}�w�q�c��Ge��1����/}���d�$�
��K_�1�M�^��'	N�7Y}�g:\��7���^�B�Ј��7�ֹm�t�$��W�Cj�
%�����U@9Tp��4˝g��r+�
cJ>]q�!8�Q�Ut6j����u��.�ZɣF:3�wÖ��g���%Y^�@h���ڝ��&6��Nm�<�e��2{��dq��ͪ,�#?��%,��)Z[�@h~�VWħ}��-mO���a�����S���S��ޝ�[R�εjz�� �]�Z@Gz/��Rv�\��Np!>���ͻ�{�o���mj�̪�|Z��y��l������p�z)�w����H-��'-��3Hקs��6[i��df�]�{8���{�_��\n�[(�Lp�(I���9�s6%mi�{EԠS��PN
&Ď������o]�:�����C��=���DOoBG8�)��� 8��@p���tķ.����[93P~]}uss�W��9bA�:[.�r8���>�[l��0��6���F���m��S�"�m��s�ee�!ՖE���~�_�Ϥ�d���.8g�8��뇷������rD����Fڶ7�N��B��4�.���NyW
(j��B�����\��l���n3�A�Dhi�ŦB�OǮm/��2`{��U��cl/�4R@�J�[�����Q��%�;�N�-�s��P�[4�G�d���h��}�?��p&%	P^{d]u�ߴ�e�y��A�K�P�b�}�?
����0�)���t2���;ϐYR��?�PR�#��^lj;p*�s�^&�˝g��r+�
cJ>]q�!8�Q�Ut6j��L�������<j�3�{7ly�\p��m_��e�������i�=4�G���Nm�<�eYb�
/c 4�Y�܀-s�Y��Kp���e���ouE|������4�vV��&�F�0�O��2��0Fhޢ������-�^}r/��}��h~�'��K�.�c�e���ms��SC�ȋ��Y� )�<i�d�����:�;�kXk���xϒB��d%���вk���\n�ӶA#�:���:�V(?'�Q�
?�XtqjW��bi�$���p��p�|��M(;N�G��J@p�ؔ�@p�� 8��� 8@p������9K~a}��6�}�K>�-�o9�a�l����"�s��Ql�	j�HlR��CpM,���=MLm8��=F�E����T[Y:DZC�A~�>�ۓ��:���̖O�ڞ&��B�b�u-zlV�i�Q#��5�������\�ͬOq�}��'������������-z�#i���t���$��o�[s�=�_m+�3R@�|�U���ݽ�>�#�Q���y�3\(�ljYv�'������Q�K̘�hKۗ��c�g�P���$6.2{�痾,c�����MO\��(��B�0�s��Ч�rh�3](I����Z�BI�ʡ�;����_�<�Udp(�[��m�P�����Y����Q�Dd���}h��Q#��ܻa�c�3Xfo��,/c ���M|�Ns�?���wj[�.�ۧhx��ͪ�l��Β\���-c 4?�+��>�P�f��b�O�0�֮$�)\���[t�V�������`2j�XqaTpϚ�][ނ��R���}��q��-���y�"�;C��:H
%OZ(�G!��N��Z����$޳�п�3Y@Ip�'��.V��M|%�E8u�un�,P�N����S�E�v5(��JR��	GH��ȗ
߄��{d-��M)� 8��@p���� 8����?����?����H���������8[�9ge�l����"�s��Ql�	j�HlR��CpM,G�=�Om8��=��E����T[Y:�@�A~�>�ۓ��:���̖���ߧ�B�b�u-zlV�i�Q#��C�����$]�ͬOq�}��'�����������-z�#i��fx���$��o/8t��$Cm+/�4R@�|�U���ݽ�>�#�Q���y�3\(�ljYv�'�O�Fxy���3���o�"™,�|2:����^�/˘��m/}ӓ��@�$�
��P2��\�9�)��LJR*�|%<��P��r���;�K2�;�`
�V"b�(�|"�:��Cp֣D��l�>��E=s�Z+y�Hg&�n��ع���۾$���c_���{h���i����y�˲�)^�@h~���[澳����>Ek�������=�������S0��+�}��1Ć1B����U�('m�|�.�
��<�F\ܳ�nז��A�����:F_6|}�6w.85D^����ΐ���BɓJƸ�Q�n�Ӻ��ց��)��,)���LP��	�}�r�BIgN��AG�[+��S�FG�+�b�ũ]������{�<�5��7��8�Y�+�@bSJ@p��@p������ 8@p�@h�u�?�@���#
���l�Vg�� ��-t9U�s^��?�-6Am�Mj�qN��������G��Ȳ��j�"K�h?ȯ�g�c{2SZG�3B���qt���VH_l��E��J[#m;j��^ph!w� �3u��봙�)��o�䵣7�>�]"��a׷E�~$m���3p�z���� ��d�m��F
(�ᆰ�[���7קy?�u�4�]p�%�M-�3�����#�r_2`�<�^ھ��CD8���OF'�q��+� <��e�ߴ�ozr��(��X@Ax_J���5�>�C#��BIJ������J>�#����r���;�K2�;�`
�V"b�(�|"�:��Cp֣D��l�>��E=s�Z+y�Hg&�n��ع���۾$���c_���{h���i����y�˲�)^�@h~���[澳����>Ek�������=�������S0��+�}��1Ć1B����U�('m�|�.�
��<�F\ܳ�nז��A�����:F_6|}�6w.85D^����ΐ���BɓJƸ�Q�n�Ӻ��ց��)��,)���LP��	�}�r�����ԹtԹ��@�;5ntT��O!]���}j���YU(9Ki 8�|��M(;N�G��J@p�!�� 8� 8@p�@p�� 8����?���;9�N�2�����1��9bA�Y:[.�r8���>�[l��0��6���F���m��S�"�m��w�ee�!ՖE���~�_�Ϥ�d���.8g�8��뇷������rD����F�v�����B�A.g�I�i3�S\gߦ��kGo�}$�Dh�îo��H�*��g�>	����Af/�P��$�P$�}U&��wo�O�~��li޻�J>�Z�f���[4�G�d��yl��}�?��p&%��Nb�"�W@Ax~��2��i�K��� �%P(I����.�3;j}
(�F8Ӆ��
(_	��+��,�*�s�N���3XE����؆1
%�����?���(�*:�OD&{Q��g��J5ҙɽ�<v.8�e��/��2B������4��z���u�,�}���1�߬jn����,�`�%�O��2B��">�s�oni{*��Cm�Jb���e�a�мE'�k9�I�+߾v�&��F���۵�-hЪ/����ї
_��݂N
� /�3di���P򤅒1.{���u`��jJ�=K
�{8���{B;�bE���ķP�Y�S�~�Q�����Ը�Q�
?�XtqjW��bi�$���p��p�|��M(;N�G��J@p�ؔ�@p�� 8��� 8@p�@p���n�K�1sI��"6����v�]#&ߧ7��[d��?��L���.4sۭ�Vnզ9]G#8M&YuD^�U��X�Nm���p$�Hi3t���jiꦶ\���M�O�{�c�Sms�E����[�9�����-�l�n�v�,o�Q�v���Ic@�#�gַ������响�6)��8�
:Ȓ;��snv��R�5�>���jG�{"d��\�-bL)���ª��6K�z�z�H����:P�D�&ֹo��xx����
(o���~��f�G8���D(�]�d��~4�)�������L'sn��*�ȹ>C��.�-��"���B����� ����/�K� �-��K�
�NXSܧx���\�ʍ���Z1�oK��ێm�
n%R��$��Q�����P*��y0d��R�]�<9��ç�O��2Bk7�O,��Cm���!��I�S4������R����<欪��T��\��--c��ͿP!��<S�
8A�vI��)~��~fu���eg�i
)o��v�c����}��E��ُFZ�NIBn^#^3�?��a��-hкO_�`c��Hf&��m���$P@Ib�'�.��S(�Dp�(	�v��Js�>��+ͻ�j��3Mdxr�+�Φ��n�Sڂ�G�3M���j�D�b���p�c��� 8��@p���$#�|p�>�f�Rl��t7�&�/��_��;�����U��վ��}��"\`��љp�ʆ�?�e4�d6���ߧ6±#U8���n{n���[���67�#�v�!js�m�U������u��/�v�Q=��a۽���'�ە�&�-�؟Y�v@��`��ìa�kik>X(�H1羜��-��^ɼR�5�>���jG�Æe��.m�n=
5�lJ
������굌$y:��F����%��h]`��g'�j��#,P�~Q�6�
��:�p6%iP^�B�,�����̧�rr��o/8t�sn����\�!Cx�P��h�~4�GpiJ>+�xO	"	���R(�6d�uiS˥�CW'�)�S��y��۸��#�������֩�ޣDJ������LL�����CV=�6�\�<0�3��gy��e��n�����G��p�*eZ�m.c ����)��k`̒�-y����%�O��2ƛځ���1+�3����hk�Ʃ|��P?3�O��2F�9M����˫��X���L���}�^ѳ����ܼ,F�fV��c�LoA��}�����G��ēp?ϱ_@Ic�'��e�BI7���Y@Io�'��W�C�9�]i޽W�]�i"#�S&�Vl�Zs��ImA��#��&���
E��~O8J�G8�1��@p���� 8��@p���O�S��Ԯ�����w����o9�z�l����"ܟ�\�j4�.6��aT�T�p$������vx?���("�L���E�����lY�m3����ӟ��3鱽I�ft������7Y}^�=�ն��[��h�c�E�f�v�W��uk"w�}.w�ckl������ϛ�'�:z����%B��>��o���(۔���O=|](yq�=ٸ��%�S@�|�U���ݽ�>�#�Q���y���[(�ljYu�
'�ocEx>yTuet��k�J<���f����i��,� <��e�ߪ�����a��_(I����.���[u1�G��g�P�R�+�A�B��~Td��Cw��)^���y���P���Y�E��T�2T�:��(�.:ۤȪ��g�@k%������<v/8{e��/��2B������4��z���u�,�}�v�1�߬�µ�s�Y��Ko���e���ouE|��ʿ�'Yu���O�0�֮4�)�[���[t�V��ܼ�����݀Z%��F���۵�-hЦ/����җ�>n���\e����,�u�J��P2�c�Bts�֝��\�^5%�%��=��Jz�=�u���\n�Ӷa#\��:�ܚY��vj��t��B,�\r���!B?��Pr��4@p�R�Pv�`��啀��;8� 8@p�@p�� 8��� 8@p\�
����>�*[��n8>�
����l��~He��
 ��*���/���l<�@�pE&�wZ���s�����r�,����`�����[ڌ�qf9�:��Z��o}|��W�ɋ-Ϫ�ǽ�g��"�{�f3½_phq�V�d��`f����'�:z����5���<���k�+"�P���{IFe[u���ʼ���ۿ[��r6�G�	�G�����r���������׷h"<�<*�d��yl�Ui�g�"��,��W@Ax~��2��Um/}ӓ�W�a-]p��$���#�腒af�B��6��!��.��T@�Jx�P��g�P���w��d,w��*28���G9�(�|,�:��Cp֣D��l��L�7Y3\���G�tvr�w[���2{ۗdy�}�o�kw�{��_M��Զ�#\��+��yI�1�߬jn����,�p���O��2B��">�u�_ܓ��Z�ڧ`f/e*������_�nݖE��jz�� �]�Z@Gz/���r�9`l�|\���?�e�������qf�F>m��<Z_�������p�z)�w����H-��'-��3H��`�Ӻ�f+�9��x�B��f%����W@�3���J���JZ�=�}e�9�u6%mUm�Q�N)���rj�0!v�̬�0�P|�d����C��qf�P#�c���#���@p���� 8��@p��[��?�?���(����G���W��9bA�:[.�r8���>�[l��0��6���F���m��S�"�m��s�ee�!ՖE���~�_�Ϥ�d���.8g�8��뇷������rD����F�v�����B�A.g�I�i3�S\gߦ��kGo�}$�Dh�îo��H�*��g�>	����AwV�Gm+/�4R@�|�U���ݽ�>�#�Q���y�3\(�ljYv�'�o�Dxy����*���o�"™,�|2:����^�/˘��m/}ӓ��@�$�
��P24�ob�Ч�rh�3](I����Z�BI�ʡ�;��e����y���P ��0F�����G��%ZEg����d/�,�ZɣF:3�wÖ��g���%Y^�@h���ڝ��C~TO��Զ�#\�%�O��2B�U�
�2��%,��)Z[�@h~�VWħ}��-mO���a��]I�S4��!6�����}�"G9i{��w�n@��6�¨�5w���
Z��T��1����㶹[p��!��E|w�,�u�J��P2�e�Bts�֝���5�WMI�gI�g����~OhG]��3���J:�p��:��ZY�ԝ7:*]��.N�jP,����������/�	e�	��Z^	�R�@p��� 8��@p������}�\�!��Mt7�&�/��c�Lj�����-��Ď�Yu��Yl{�����ւs�
�jӜ.����&��:"�Ȫ[N�p�6M�F8b�
��:�m[�4uS[�wl���&u�'�=�ͩ��W�"X���-���hm�p6r�@�w�7�(}��Y¤1���3���i�$��a��响k�n����Sڂ-�M�Zd��������yis�Od
5�lJ
��S�f��RT�	�Rԭ����K?�ob����I���Z(I����n�Ž��vǖ�"��BI��׮P2��o
?��PN|xy�sM��9�_m]���K��0�0�G���&�C#\
��/(�m����΢J>«�r���5�}��;�`�5��Hʍ�#�������֩�L��=FJ�����,L�����Cf�-E۵ȓ_�<|���.c �v���¯?Ԇ�Ϡ�J��>E���� /E
)z�cΪk�K���%�O��2ƛځ���1+�3����d�Ie�zT2���l8M`O�m�S�䫝��Ɍ�^k�~4���oJr������c�,oA��}�����G23�o��<'�J�=�ve�BI'��\@Ip�'�/�\7��}�Ҽ{�6�8�DF�'�y��`�lZk�=�-hp|?ӤQ@)���l��m�� 6�#��� 8��@p������ 8�����sn�!������ŷs��qt�����<��g��Ŷ�p��Gg��Ն�?�e4�d6���ߧ6‘#U8���n{n����ڒ��27w_O�{�c�Sms�E��0Sg^9�0�ArD�D�m�����oW:K�4�<bf}��!�~X�H�a�M
:7�慁��s�R�;�Ŝ�+�W*������T�qذ̖�b��E�)e�PRXU��f��RT�It�v�\��~�u��o��xx����
(o��{ц�f�G8���D(�]�d��~4�)������ɜۯ�J.r�ϐ!�d�s~�P?��"�D
%�P�������~)�\2Kl��]�8Tpuš�>�˝g���Wn$#���~[J]�vl�Tp�(�Ҵ'�e�Zhg�N�R�\�̓!�Ė��Z�Ɂ/@>�}�V�1Z�A~b��j��g�Q�Lj���e��~��"���1gU�����ԏ�ܧhi�M�@h��
q�����U�	��K��N�+
�3���-c8Np����j�;�{+\_�g�[�h�5�$��e1�53�CϝƞYނ���U16/�df���yN�$�{���>��Ng����~Oh7ȯ4��s��Ҽ{�6�8�DF�'�y��`�lZk�=�-hp|?Ӥ�O����6Hd[!6�M�=F8@p��@p�� 8��� 8@p�@|��������j$�v]=��0��]��ŷG=t�\��pT�9x}��(���a$6�m�!8�&ۓ�
=�dh��("�L���E����T[jیn?��v�I���Li]p�q��ݮ
�͵�v��B�b�u-zlV�i�Q#\}g׭���\�v���3�>�u�m��v���G�K���}�]�=���%���g�>	��u���d�dc�Mn<�R@�|�U���ݽ�>�#�Q���y�3\(�ljYv�'�ocExyTV]�Zi��7�LJ>���Ef����җeLӶ����A�K�P�b�}](��bH�ʡ�t�$��W�Cj�
%!(�
�\�S�$c��V���@n%"�a�B�'��#�>g=J���F���^�3�Y���G�tfr�-���`���K�����>�7�;ͽ�����ߩm�G�,Kl���e��7��p���w�t��ܧhm���[]�����7��=[|
���v%�O��2��0Fhޢ������o��U��ڈ��{�����4h՗R]^��ˆ����n���l/�w�,�u�J��P2�e�Bts�֝���5�WMI�gI�g����~OhG]��3���J:�p��:��ZY�ԝ7:*]��.W�\�>5r��Ϭ*����
�O�T�&�'�#ky% 8��@p��� 8� 8@p@
|����G'G\�,��9bA�Y:[.�r8���>�[l�=�
#�Im8�i4�x��>��("��~YVVRmYd������LzlOfJ��sF�3[�~x{���
�-�A��٢L����F���r�r9SH�N�Y��:�6�O^;z��#�%B+�v}[��G�Vy��>�I���^p�2{I��V^ i��"��:0����{s}�G�\gK��g�P��Բ�0#N^ߢ��<�(�%f�c��K�1D�3Y(�dt��
��K_�1�M�^��'	.�BI���u�d�ٹPs�S@94™.��T@�JxH-^�$d�P���w��d,w��*28ȭ�GVm�33�-C��s�Y����Q�Dd���}h��Q#��ܻa�c�9��2{ۗdy�}�o�kw�{
�Q=�S�:�pY��>E���oV57`��w�t�:\z��-c 4?�+��>�P�f��b�O�0�֮$�)\���[t�V�������`7�j�XqaTpϚ�][ނ��R���}��q��-���y�"�;C��:H
%OZ(�G!��N��Z����$޳�п�3Y@Ip�'��.V��M|%�E8u�un�,P�N����S�E��C�|�9D�gVJ�Rڂ�'_*|ʎ쑵�t� 8��@p��� 8�,����<�����ĆҖg��Pp���Q�m�R�0�l\��u�{�B������WFS�p���m@�;��v�VF�U���~0]����-mF�pqf9�<��^4���
�5y��Yu⸿�,�\w���cF����l��f6
K��ɍO���Ϳ�b�H�v���Y�u_�]�Cp�Bɋ3��%���F
(�*�l�n=c̫ٔ�	�G����7H���3��-��+�*�yl�Ue�_�"�-�|8:�2��痾,�[��7=9Pp����>Q���J���5��m��x�����`�+�A�Bɇ~Td��Cw��)^���y���P ���@�P�����Y�-��I�*1�Ț���<j�3�{omy�Ap���m_��e�������i�mdc|9�S�:�pYf����%Y\�@h~���[澳��Kn���e���ouE|��ʿ�'�
bK��a�����S�2S�=���v����[�U�����4D0�`�s�o�q�����hs�7^8���d3����������3�6�iٗ��r���m��É���I��RAY(y�B�8�#`0�i]����lNf&�5�п�3Z@In�'�P���&���g����~Oh_@ٜ�;����6������U@95P�;~ff$�u3����C���̡F��:�G8�)��� 8�.����3���2�IEND�B`�mod_slideshowck/themes/default/images/camera-loader.gif000060400000022111152456304320017260 0ustar00GIF89a�dfd�����܌��|z|�����trt�����쬮�������lnl�����䔖����ljl�����䔒���������tvt�����촲�������!�NETSCAPE2.0!�,��'�#�%��lX�X4H�H�վi2��k�t(<��H��TX��`�'�S��"*�+*h%Cҳ<P�Gp@�G��ή�w*zjEp�)Tl?d�~�Z�/Z	��������������	���	E��N��k�@�O��O�a
��	z��ځ	N)T]�z.�Z��O
�0 �7o�0'�y`�JS��d�@��#�X(�M���DPx�1E!�,�dfd�����܌�����|z|������trt��������Ԅ��lnl�����䔖���Ԭ��ljl�����䔒���̄��������tvt��������܌������@�p8�d��H�sD:��� �&�K�I|&�3(>�0Ch�gq-O8[(���<�fyB�	j l
fT]n�D`�kv��C�g� ��N�e�e��E��o�Ne��O�����������el�u���`Go�̨e�`
i�
tfUд�_(ۮ�!BfuP昡�$�3<@|`����)S@	v&t[T���P(�a�%��AB�b�<�����B�!�,�dfd��������ܤ��|z|�����trt��Ĝ����쬮�������lnl��������䬪����ljl��������䤦���������tvt��Ĝ����촲����������pH,���cl9��qT��(,Ƅ�Za�#��Q��J�h�q�qBEt!wC�	�FjsU	ElghC��id��B�U"Bt��E�Ui^��x
R {��U��[U
�h��x����M!�D���iU`�cg	���Lt�Ʀm��˕U�F`�S@���*TpP��/�@a�EQ�=.8�8�
�`P���"�*X�J�*´c�I
>7F0x��
&!�,�dfd���������|z|��̤�����trt��Ĝ����섆���ܬ�����lnl������������ljl��������䄂���̤����tvt��Ĝ����쌊�����������@�pH,hTlG�����8x�j��l����iD
����>#V�����"|By	�ErT	\TfgD��$#T��M�!Q$���`
Q#T��#| y�����ET
���"Š

	 ���$��MU�R��D#T�Cc�ݜ�L�y����H`�R��]�UiP$�~���@�'"�\h Q!2Z#�B�@�M�U� Q`�9��d�kQ�o�֜`AA�ł!�,�dfd���������|z|��̤�����trt��Ĝ����섆���ܬ�����lnl��������䄂����ljl���������|~|��̤����tvt��Ĝ����쌊�������������pH�0� �Т`PEg���<�jX�ٖH�H�j��-�"UB�]Y�{Bb!fgia	EVe�Ba�g��D���E!D$V���b�f���QV
�[�#�P~��B""	�BV��BV"�DU��g��%��GU����V�%^�q�2<@`ߤ�(�����HhŜ�b`hQ	KD$� #A6\�…�BP�C�Ó'=(P��n&\P ���[�!�,�dfd���������|z|��̤�����trt��Ĝ����섆���Ԭ�����lnl��������䄂����ljl���������|~|��̤����tvt��Ĝ����쌊���ܴ���������@�pHv0�������$X-�h�z���uM��B��$H
�8��K	��-U�X|`b#_B�kDV�Cv%W���EW��^%V��E!��_���CV
�}�$�D"U��C�X��V	�BV"��BX��B%V�Bb�䝭����wg�r�Ɓa�@�J�e9D$�������NFFD4Q�°\x4a��C>���#�S��,##b#�.(A�����!�,�dfd���������|z|��̤����trt��Ĝ����섆���ܬ��lnl��������䄂������ljl���������|~|��̤�����tvt��Ĝ����쌊��������@�pH$�8C�I�*ŨT�!,V��N���u<��2�J'�	$#�l�x�H�>�PDe|B`CsEW
�D
kDWh���	��W��E!Y�`W��$��E �#�Db"���B�Y�х��BW"�����W��C��񝫹��W���6)�`@�+X,4����dx�B�X�DRA��\`@��
r`c�	d���l���V�� �
�P`L!�,�dfd���������|z|���������trt��Ĝ����섆���������lnl��������䄂�������ljl���������|~|��������tvt��Ĝ����쌊�����������@�pH<�8�C��JĨ�8��׬��z�$�x,��&_��@J$H
��FK��de!S"z{yR
v��{b��e	�z%b��Q"X�^" b��$b
�R��$�Qb#~��CWV��&���&�#V�&W
	��%b��c��%W��BX��rPx0��O%B\q0�@�d5D�aʂ�28�E����!P B�*4���1X{`���+hfN��`k
0,�!�,�dfd�����܌��|z|������trt�����윚���������lnl�����䔖������Դ��ljl�����䔒�|~|�����tvt�����윞�������������p8$�>���1�|$�t:�XW,@;�D�`RfK&_-"l�,*�De�([�<�Da+`_zBx`��%bX�zd	�k$["��{FY�D
[��$~[�D���C����%[WĿ����	�W�ź��[
" �Z$��cބŖ��DW�#k0x��'L�+F��Pψ,[��a��2	`P��
��ՑLS"\X ��ح	!�,�dfd�����܌��|z|������trt�����윚���������lnl�����䔖������Դ��ljl�����䔒�|~|�����tvt�����윞���������������p8$�>���1�$@$�t*d,lvkm�T�(��eQ$LX�J"QY��[&:(" {�S${k��%$��i��R #�e}�%� X�C e
e��$ee�De!��Ci"e	�BeX��X���iX�˾	e����
�
�#[$"
�$�Q#z����C�0����0�C�
��4I��2��a�lj���3Z�kD��ɓf&�;����Xp� !�,�dfd���������|z|��̤�������Ą��trt�����ܴ�������������Ԭ��ljl������|~|��̤�������Č��tvt��윞������'�c�i��%�t)�_	��]1��(��	B8�4t�G�h<EI�I�P"�f����0T�����u�(�BMPt�GE&9"FE
unEE�#�|s�"xEK��	9��9�
��9���E�j�<�;�ƙ��a�Z�N�e�ݴ����L^E�tiDH<E;�fV�3A�74*Px���
(T8(#!�,�dfd�����܌��|z|������trt�����윚���������lnl�����䔖������Դ��ljl�����䔒�|~|�����tvt�����윞���������������p8$�>���1�|@$�tZ"Q2@V˵�FTjd(��eD$<���E%��,��j`�
S$
{a����l
��"���R$eU�D$d"FY��%#fiQ�Uoe�C���Be""e	�%eY�����ĸ��Y	Z��$�
[�[$�^�#Q���
zU"<�H&�#��H�[d`a����6l�p�Mk��ef@)�
�		�)ta��\� SJ!�,�dfd�����܌��|z|������trt�����윚���������lnl�����䔖������Դ��ljl�����䔒�|~|�����tvt�����윞���������������p8$�>���1�|$�tZ"Q@V��`ŀ�-�E�t�0#�D�����S�%+*��C#	�U#��%	��YQ�`e_V��B$Xh �C
e]��$]]�C�c�B]""Z	�%�]ž�"Y������Y	Z��$�
e� �|�~�]�C�
�C���ҠP +���…xj8�8a�bm闈�3[�LH��������pa��\p�&!�,�dfd���������|z|���������trt��Ĝ����섆���������lnl��������䄂����ljl���������|~|��������tvt��Ĝ����쌊�������������@�p8,�>��!�$ĨTXr`,lv��zM`L.W�Ғ��"�DbT蠣Ydx܅%^!
	~&_%P�&%Y]�hz��_c��c"�R$Z#v�Tcc�C� b#�B�"Y	�&�c��cX��Y"�
�c
	c��m�&!%�"��m��&�!�$/��tHH$���xA0J	KwJ05��HD�!†[[,\`�%-[�
��L
�H���@
"\�RH!�,�dfd���������|z|��̤����trt��Ĝ����섆���ܬ��lnl��������䄂������ljl���������|~|��̤�����tvt��Ĝ����쌊��������@�p8��>��!�,��h�"��W��#�
%�,`L�x���@(F�Ĉ=T�	��B�V@wPc	}gV	h
gP W���$c��gd���"��R
d!��Ec��Pc
a�Dc""c��Bc����#�$yV
�
���Y�Eȩ��V�B��$�WJ-�!�1
2U���B�Q*� +�TcF�qP�
 �2t�A/H����U
dbN�5k��Pp!C�!A!�,�dfd���������|z|������trt�����섆������������lnl�����䄂�ljl���������|~|�����tvt�����쌊����������������@�p8y:�g!0�P��!��׉(�J��k8��rE�`�	
���BE����0�vDX	}f$ceO	l�^V�O"!��Ba��]c��"`��\!c�]"a��Ca��$aa�C����
a�#�B	�W�C	a��
X
�E�����B"�������-O
pMh�h�U
B��{EX�͞��8h�!�\b(T��G,�b�&�D�|���A�Ş!�,�dfd���������|z|��̤�����trt��Ĝ����섆���ܬ�����lnl��������䄂����ljl���������|~|��̤����tvt��Ĝ����쌊�������������p8$�>�H� :�NRE`T�ֹX`k⹘lK�$@(F���a������"*4�$V#wN{	[acDkmgDV�C��N��C!�Oa��$`"��ZWf�[$`�g`
��N�
�ȭ`��B	T#�O�
�O	V��a�D$�"��`u��"`�`-�A��X�p�̂_V8A��3RHeDu��
3�	,�!��_
-\�Gd�&"������+`(|0	��\�@SH!�,�dfd���������|z|��̤�����trt��Ĝ����섆���Ԭ�����lnl���������ljl��������䄂���̤����tvt��Ĝ����쌊���Դ���������@�p8}:���l:G
0]2#gs"x��f4�
G�t�P�>M
��m�T/��0c�uD_	}f$`Lj�D��g���C�^u	
a�L�^L#���z��N!S��#^��^V�Nz�Z��N]�q��L	S���
�E� ⠱Lk�
҉ ^e���H\X�a����A�uE� V�/ ��鋈uw�4��@�5:��@!C^0,�@�9�0 ꦀ��
 �!�,�dfd��������ܤ��|z|�����trt��Ĝ����쬮�������lnl��������䬪����ljl��������䤦���������tvt��Ĝ����촲����������p8�<��l:9AP!4%���)P`H3I�B��1#�f\�h�r[D9l3m!wC`T	~hm	\lqhDT�#t��C`
Z���M�`B

��i�e�i�N���`¢`
Ȗ���M��Ls��Dz����ERe�	�t�m�#"`g���a�):d��Lȸ1Ю����	p@�-�2�]�6߈,�Pa�`� ��:`4@d�h@�	�4$JB���!�,�dfd�����܌�����|z|������trt��������Ԅ��lnl�����䔖���Ԭ��ljl�����䔒���̄��������tvt��������܌������@�p8�t8�0�Q:���e�8	�K�|`�I�%�A�".NMx��BT3�N�|y|By	i �`�]
`�D��K��J`[�	�WaI_���	�Oy
���b���������\�D	���
a�{�T�³� �ͥ`� 
h�
��B*�٠ϓbva�`��(���� �d0�n��Tq�S�	��@E�1(�d��eD*�Bd�@"(TP;mod_slideshowck/themes/default/images/patterns/index.html000060400000000037152456304320017735 0ustar00<!DOCTYPE html><title></title>
mod_slideshowck/themes/default/images/patterns/overlay8.png000060400000001664152456304320020226 0ustar00�PNG


IHDR�o&�tEXtSoftwareAdobe ImageReadyq�e< iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:7C4BE2E162AF11E090CDA44F81491F78" xmpMM:DocumentID="xmp.did:7C4BE2E262AF11E090CDA44F81491F78"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:7C4BE2DF62AF11E090CDA44F81491F78" stRef:documentID="xmp.did:7C4BE2E062AF11E090CDA44F81491F78"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>a��*IDATx�b���?2`dd�τ.�L�`T�d��`D�`�O����-IEND�B`�mod_slideshowck/themes/default/images/patterns/overlay1.png000060400000001651152456304320020213 0ustar00�PNG


IHDRV(��tEXtSoftwareAdobe ImageReadyq�e< iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:6781A6AC62A711E09891BFF925EF25D9" xmpMM:DocumentID="xmp.did:6781A6AD62A711E09891BFF925EF25D9"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:6781A6AA62A711E09891BFF925EF25D9" stRef:documentID="xmp.did:6781A6AB62A711E09891BFF925EF25D9"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>F�{�IDATx�bb``� ��	H0���ĀE�Ǝ�IEND�B`�mod_slideshowck/themes/default/images/patterns/overlay6.png000060400000001677152456304320020230 0ustar00�PNG


IHDR���HtEXtSoftwareAdobe ImageReadyq�e< iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:CFC55F8662AB11E0BAB9B38802E1DA96" xmpMM:DocumentID="xmp.did:CFC55F8762AB11E0BAB9B38802E1DA96"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:CFC55F8462AB11E0BAB9B38802E1DA96" stRef:documentID="xmp.did:CFC55F8562AB11E0BAB9B38802E1DA96"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>�)5IDATx�bd``��h�	$���|�Cu�iF(�f,� �Xd�����0�(��IEND�B`�mod_slideshowck/themes/default/images/patterns/overlay10.png000060400000001633152456304320020273 0ustar00�PNG


IHDR��~tEXtSoftwareAdobe ImageReadyq�e< iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:A3D9965462AF11E0B0B1CD11AC9ABB59" xmpMM:DocumentID="xmp.did:A3D9965562AF11E0B0B1CD11AC9ABB59"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:A3D9965262AF11E0B0B1CD11AC9ABB59" stRef:documentID="xmp.did:A3D9965362AF11E0B0B1CD11AC9ABB59"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>FୢIDATx�b`@������@΀�IEND�B`�mod_slideshowck/themes/default/images/patterns/overlay7.png000060400000000141152456304320020212 0ustar00�PNG


IHDR
��(IDAT�cd``���?0���������#� ��$#�~FFF���N�ZIEND�B`�mod_slideshowck/themes/default/images/patterns/overlay9.png000060400000001636152456304320020226 0ustar00�PNG


IHDR��~tEXtSoftwareAdobe ImageReadyq�e< iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:9C7C8FAA62AF11E0A442A91720A37A42" xmpMM:DocumentID="xmp.did:9C7C8FAB62AF11E0A442A91720A37A42"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:9C7C8FA862AF11E0A442A91720A37A42" stRef:documentID="xmp.did:9C7C8FA962AF11E0A442A91720A37A42"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>�uIDATx�b```�π� `����D�IEND�B`�mod_slideshowck/themes/default/images/patterns/overlay3.png000060400000001652152456304320020216 0ustar00�PNG


IHDR��~tEXtSoftwareAdobe ImageReadyq�e< iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:06045F6762A811E0AC81AFB0068E41D1" xmpMM:DocumentID="xmp.did:06045F6862A811E0AC81AFB0068E41D1"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:06045F6562A811E0AC81AFB0068E41D1" stRef:documentID="xmp.did:06045F6662A811E0AC81AFB0068E41D1"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>�F IDATx�bd``�πX@���a�>�g}�M���IEND�B`�mod_slideshowck/themes/default/images/patterns/overlay4.png000060400000001634152456304320020217 0ustar00�PNG


IHDR�"�tEXtSoftwareAdobe ImageReadyq�e< iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:2D63D63C62A811E0B19D94A0A3B33548" xmpMM:DocumentID="xmp.did:2D63D63D62A811E0B19D94A0A3B33548"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:2D63D63A62A811E0B19D94A0A3B33548" stRef:documentID="xmp.did:2D63D63B62A811E0B19D94A0A3B33548"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>`�l�IDATx�b```�
��B��TIEND�B`�mod_slideshowck/themes/default/images/patterns/overlay5.png000060400000001634152456304320020220 0ustar00�PNG


IHDR���'tEXtSoftwareAdobe ImageReadyq�e< iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:449474A662A811E0A6F2A19E4202FC36" xmpMM:DocumentID="xmp.did:449474A762A811E0A6F2A19E4202FC36"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:449474A462A811E0A6F2A19E4202FC36" stRef:documentID="xmp.did:449474A562A811E0A6F2A19E4202FC36"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>Z�2IDATx�b���?�0���bd�IEND�B`�mod_slideshowck/themes/default/images/patterns/overlay2.png000060400000001647152456304320020221 0ustar00�PNG


IHDRV(��tEXtSoftwareAdobe ImageReadyq�e< iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:9168200662A711E0B655C8AD65EBB9E8" xmpMM:DocumentID="xmp.did:9168200762A711E0B655C8AD65EBB9E8"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:9168200462A711E0B655C8AD65EBB9E8" stRef:documentID="xmp.did:9168200562A711E0B655C8AD65EBB9E8"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>�Y��IDATx�bb``� ��	H02@0$�	��;��IEND�B`�mod_slideshowck/themes/default/css/camera.css000060400000063302152456304320015371 0ustar00/*** compatibilite beez en position-12 ***/
#top {overflow: visible !important; }


/**************************
*
*	GENERAL
*
**************************/
.camera_wrap a.camera-link,.camera_wrap a.camera-link:hover {
	background: url(../images/blank.gif) !important;
}

.camera_wrap a.camera-button {
	display: inline-block;
}

.camera_wrap a,.camera_wrap a:hover, .camera_wrap img,
.camera_wrap ol, .camera_wrap ul, .camera_wrap li,
.camera_wrap table, .camera_wrap tbody, .camera_wrap tfoot, .camera_wrap thead, .camera_wrap tr, .camera_wrap th, .camera_wrap td
.camera_thumbs_wrap a, .camera_thumbs_wrap img,
.camera_thumbs_wrap ol, .camera_thumbs_wrap ul, .camera_thumbs_wrap li,
.camera_thumbs_wrap table, .camera_thumbs_wrap tbody, .camera_thumbs_wrap tfoot, .camera_thumbs_wrap thead, .camera_thumbs_wrap tr, .camera_thumbs_wrap th, .camera_thumbs_wrap td {
	background: none;
	border: 0;
	font: inherit;
	font-size: 100%;
	margin: 0;
	padding: 0;
	vertical-align: baseline;
	list-style: none
}
.camera_wrap {
	display: none;
	/*float: left;*/
	position: relative;
	z-index: 0;
	max-width: 100%;
	box-sizing: content-box;
}
.camera_wrap img {
	max-width: none!important;
}
.camera_fakehover {
	height: 100%;
	min-height: 60px;
	position: relative;
	width: 100%;
	z-index: 1;
}
.camera_wrap {
	/*width: 100%;*/
}
.camera_src {
	display: none;
}
.cameraCont, .cameraContents {
	height: 100%;
	position: relative;
	width: 100%;
	z-index: 1;
}
.cameraSlide {
	bottom: 0;
	left: 0;
	position: absolute;
	right: 0;
	top: 0;
	width: 100%;
}
.cameraContent {
	bottom: 0;
	display: none;
	left: 0;
	position: absolute;
	right: 0;
	top: 0;
	width: 100%;
}
.cameraContent video {
	background: #000;
	height:100%;
}
.camera_target {
	bottom: 0;
	height: 100%;
	left: 0;
	overflow: hidden;
	position: absolute;
	right: 0;
	text-align: left;
	top: 0;
	width: 100%;
	z-index: 0;
}
.camera_overlayer {
	bottom: 0;
	height: 100%;
	left: 0;
	overflow: hidden;
	position: absolute;
	right: 0;
	top: 0;
	width: 100%;
	z-index: 0;
}
.camera_target_content {
	bottom: 0;
	left: 0;
	overflow: hidden;
	position: absolute;
	right: 0;
	top: 0;
	z-index: 2;
}
.camera_target_content .camera_link {
	display: block;
	height: 100%;
	text-decoration: none;
        background: url(../images/blank.gif) !important;
}
.camera_loader {
    background: #fff url(../images/camera-loader.gif) no-repeat center;
	background: rgba(255, 255, 255, 0.9) url(../images/camera-loader.gif) no-repeat center;
	border: 1px solid #ffffff;
	-webkit-border-radius: 18px;
	-moz-border-radius: 18px;
	border-radius: 18px;
	height: 36px;
	left: 50%;
	overflow: hidden;
	position: absolute;
	margin: -18px 0 0 -18px;
	top: 50%;
	width: 36px;
	z-index: 3;
}
.camera_bar {
	bottom: 0;
	left: 0;
	overflow: hidden;
	position: absolute;
	right: 0;
	top: 0;
	z-index: 3;
}
.camera_thumbs_wrap.camera_left .camera_bar, .camera_thumbs_wrap.camera_right .camera_bar {
	height: 100%;
	position: absolute;
	width: auto;
}
.camera_thumbs_wrap.camera_bottom .camera_bar, .camera_thumbs_wrap.camera_top .camera_bar {
	height: auto;
	position: absolute;
	width: 100%;
}
.camera_nav_cont {
	height: 65px;
	overflow: hidden;
	position: absolute;
	right: 9px;
	top: 15px;
	width: 120px;
	z-index: 4;
}
.camera_caption {
	bottom: 0;
	display: block;
	position: absolute;
	width: 100%;
	z-index: 1000;
}
.camera_caption > div {
	padding: 10px 20px;
	height:100%;
}
.camera_caption_title {
	font-size: 1.3em;
	font-weight: bold;
	line-height: 1em;
}
.camerarelative {
	overflow: hidden;
	position: relative;
}
.imgFake {
	cursor: pointer;
}
.camera_prevThumbs {
	bottom: 4px;
	cursor: pointer;
	left: 0;
	position: absolute;
	top: 4px;
	/*visibility: hidden;*/
	width: 30px;
	z-index: 10;
}
.camera_prevThumbs div {
	background: url(../images/camera_skins.png) no-repeat -160px 0;
	display: block;
	height: 40px;
	margin-top: -20px;
	position: absolute;
	top: 50%;
	width: 30px;
}
.camera_nextThumbs {
	bottom: 4px;
	cursor: pointer;
	position: absolute;
	right: 0;
	top: 4px;
	visibility: hidden;
	width: 30px;
	z-index: 10;
}
.camera_nextThumbs div {
	background: url(../images/camera_skins.png) no-repeat -190px 0;
	display: block;
	height: 40px;
	margin-top: -20px;
	position: absolute;
	top: 50%;
	width: 30px;
}
.camera_command_wrap .hideNav {
	display: none;
}
.camera_command_wrap {
	left: 0;
	position: relative;
	right:0;
	z-index: 4;
}
.camera_wrap .camera_pag .camera_pag_ul {
	list-style: none;
	margin: 0;
	padding: 0;
	text-align: right;
	height: auto !important;
	height: 28px;
}
.camera_wrap .camera_pag .camera_pag_ul li {
	-webkit-border-radius: 8px;
	-moz-border-radius: 8px;
	border-radius: 8px;
	cursor: pointer;
	display: inline-block;
        float: none !important;
        float:left;/*overflow:hidden;*/
	height: 16px;
	margin: 20px 5px;
	position: relative;
	/*text-align: left;*/
	text-indent: 9999px;
	width: 16px;
	overflow: visible !important;
	padding: 0;
}

.camera_commands_emboss .camera_pag .camera_pag_ul li {
	-moz-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	-webkit-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
}
.camera_wrap .camera_pag .camera_pag_ul li > span {
	-webkit-border-radius: 5px;
	-moz-border-radius: 5px;
	border-radius: 5px;
	height: 8px;
	left: 4px;
	overflow: hidden;
	position: absolute;
	top: 4px;
	width: 8px;
}
.camera_commands_emboss .camera_pag .camera_pag_ul li:hover > span {
	-moz-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	-webkit-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
}
.camera_wrap .camera_pag .camera_pag_ul li.cameracurrent > span {
	-moz-box-shadow: none;
	-webkit-box-shadow: none;
	box-shadow: none;
}
.camera_pag_ul li img {
	display: none;
	position: absolute;
	box-sizing: border-box;
}
.camera_pag_ul .thumb_arrow {
	border-left: 4px solid transparent;
	border-right: 4px solid transparent;
	border-top: 4px solid;
	top: 0;
	left: 50%;
	margin-left: -4px;
	position: absolute;
}
.camera_prev, .camera_next, .camera_commands {
	cursor: pointer;
	height: 40px;
	margin-top: -20px;
	position: absolute;
	top: 50%;
	width: 40px;
	z-index: 2;
}
.camera_prev {
	left: 0;
}
.camera_prev > span {
	background: url(../images/camera_skins.png) no-repeat 0 0;
	display: block;
	height: 40px;
	width: 40px;
}
.camera_next {
	right: 0;
}
.camera_next > span {
	background: url(../images/camera_skins.png) no-repeat -40px 0;
	display: block;
	height: 40px;
	width: 40px;
}
.camera_commands {
	right: 41px;
}
.camera_commands > .camera_play {
	background: url(../images/camera_skins.png) no-repeat -80px 0;
	height: 40px;
	width: 40px;
}
.camera_commands > .camera_stop {
	background: url(../images/camera_skins.png) no-repeat -120px 0;
	display: block;
	height: 40px;
	width: 40px;
}

.camera_thumbs_cont {
	-webkit-border-bottom-right-radius: 4px;
	-webkit-border-bottom-left-radius: 4px;
	-moz-border-radius-bottomright: 4px;
	-moz-border-radius-bottomleft: 4px;
	border-bottom-right-radius: 4px;
	border-bottom-left-radius: 4px;
	overflow: hidden;
	position: relative;
	width: 100%;
}
.camera_commands_emboss .camera_thumbs_cont {
	-moz-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	-webkit-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
}
.camera_thumbs_cont > div {
	float: left;
	width: 100%;
}
.camera_thumbs_cont ul {
	overflow: hidden;
	padding: 3px 4px 8px;
	position: relative;
	text-align: center;
}
.camera_thumbs_cont ul li {
	display: inline-block;
	margin: 0 4px;
}
.camera_thumbs_cont ul li > img {
	border: 1px solid #000;
	cursor: pointer;
	margin-top: 5px;
	vertical-align:bottom;
}
.camera_clear {
	display: block;
	clear: both;
}
.showIt {
	display: none;
}
.camera_clear {
	clear: both;
	display: block;
	height: 1px;
	margin: -1px 0 25px;
	position: relative;
}

.camera_caption {
	color: #fff;
}
.camera_caption > div {
	background: #000;
	background: rgba(0, 0, 0, 0.8);
}
.camera_wrap .camera_pag .camera_pag_ul li {
	background: #b7b7b7;
}
.camera_wrap .camera_pag .camera_pag_ul li:hover > span {
	background: #b7b7b7;
}
.camera_wrap .camera_pag .camera_pag_ul li.cameracurrent > span {
	background: #434648;
}
.camera_pag_ul li img {
	border: 4px solid #e6e6e6;
	-moz-box-shadow: 0px 3px 6px rgba(0,0,0,.5);
	-webkit-box-shadow: 0px 3px 6px rgba(0,0,0,.5);
	box-shadow: 0px 3px 6px rgba(0,0,0,.5);
}
.camera_pag_ul .thumb_arrow {
    border-top-color: #e6e6e6;
}
.camera_prevThumbs, .camera_nextThumbs, .camera_prev, .camera_next, .camera_commands, .camera_thumbs_cont {
	background: #d8d8d8;
	background: rgba(216, 216, 216, 0.85);
}
.camera_wrap .camera_pag .camera_pag_ul li {
	background: #b7b7b7;
}
.camera_thumbs_cont ul li > img {
	border-color: 1px solid #000;
}
/*AMBER SKIN*/
.camera_amber_skin .camera_prevThumbs div {
	background-position: -160px -160px;
}
.camera_amber_skin .camera_nextThumbs div {
	background-position: -190px -160px;
}
.camera_amber_skin .camera_prev > span {
	background-position: 0 -160px;
}
.camera_amber_skin .camera_next > span {
	background-position: -40px -160px;
}
.camera_amber_skin .camera_commands > .camera_play {
	background-position: -80px -160px;
}
.camera_amber_skin .camera_commands > .camera_stop {
	background-position: -120px -160px;
}
/*ASH SKIN*/
.camera_ash_skin .camera_prevThumbs div {
	background-position: -160px -200px;
}
.camera_ash_skin .camera_nextThumbs div {
	background-position: -190px -200px;
}
.camera_ash_skin .camera_prev > span {
	background-position: 0 -200px;
}
.camera_ash_skin .camera_next > span {
	background-position: -40px -200px;
}
.camera_ash_skin .camera_commands > .camera_play {
	background-position: -80px -200px;
}
.camera_ash_skin .camera_commands > .camera_stop {
	background-position: -120px -200px;
}
/*AZURE SKIN*/
.camera_azure_skin .camera_prevThumbs div {
	background-position: -160px -240px;
}
.camera_azure_skin .camera_nextThumbs div {
	background-position: -190px -240px;
}
.camera_azure_skin .camera_prev > span {
	background-position: 0 -240px;
}
.camera_azure_skin .camera_next > span {
	background-position: -40px -240px;
}
.camera_azure_skin .camera_commands > .camera_play {
	background-position: -80px -240px;
}
.camera_azure_skin .camera_commands > .camera_stop {
	background-position: -120px -240px;
}
/*BEIGE SKIN*/
.camera_beige_skin .camera_prevThumbs div {
	background-position: -160px -120px;
}
.camera_beige_skin .camera_nextThumbs div {
	background-position: -190px -120px;
}
.camera_beige_skin .camera_prev > span {
	background-position: 0 -120px;
}
.camera_beige_skin .camera_next > span {
	background-position: -40px -120px;
}
.camera_beige_skin .camera_commands > .camera_play {
	background-position: -80px -120px;
}
.camera_beige_skin .camera_commands > .camera_stop {
	background-position: -120px -120px;
}
/*BLACK SKIN*/
.camera_black_skin .camera_prevThumbs div {
	background-position: -160px -40px;
}
.camera_black_skin .camera_nextThumbs div {
	background-position: -190px -40px;
}
.camera_black_skin .camera_prev > span {
	background-position: 0 -40px;
}
.camera_black_skin .camera_next > span {
	background-position: -40px -40px;
}
.camera_black_skin .camera_commands > .camera_play {
	background-position: -80px -40px;
}
.camera_black_skin .camera_commands > .camera_stop {
	background-position: -120px -40px;
}
/*BLUE SKIN*/
.camera_blue_skin .camera_prevThumbs div {
	background-position: -160px -280px;
}
.camera_blue_skin .camera_nextThumbs div {
	background-position: -190px -280px;
}
.camera_blue_skin .camera_prev > span {
	background-position: 0 -280px;
}
.camera_blue_skin .camera_next > span {
	background-position: -40px -280px;
}
.camera_blue_skin .camera_commands > .camera_play {
	background-position: -80px -280px;
}
.camera_blue_skin .camera_commands > .camera_stop {
	background-position: -120px -280px;
}
/*BROWN SKIN*/
.camera_brown_skin .camera_prevThumbs div {
	background-position: -160px -320px;
}
.camera_brown_skin .camera_nextThumbs div {
	background-position: -190px -320px;
}
.camera_brown_skin .camera_prev > span {
	background-position: 0 -320px;
}
.camera_brown_skin .camera_next > span {
	background-position: -40px -320px;
}
.camera_brown_skin .camera_commands > .camera_play {
	background-position: -80px -320px;
}
.camera_brown_skin .camera_commands > .camera_stop {
	background-position: -120px -320px;
}
/*BURGUNDY SKIN*/
.camera_burgundy_skin .camera_prevThumbs div {
	background-position: -160px -360px;
}
.camera_burgundy_skin .camera_nextThumbs div {
	background-position: -190px -360px;
}
.camera_burgundy_skin .camera_prev > span {
	background-position: 0 -360px;
}
.camera_burgundy_skin .camera_next > span {
	background-position: -40px -360px;
}
.camera_burgundy_skin .camera_commands > .camera_play {
	background-position: -80px -360px;
}
.camera_burgundy_skin .camera_commands > .camera_stop {
	background-position: -120px -360px;
}
/*CHARCOAL SKIN*/
.camera_charcoal_skin .camera_prevThumbs div {
	background-position: -160px -400px;
}
.camera_charcoal_skin .camera_nextThumbs div {
	background-position: -190px -400px;
}
.camera_charcoal_skin .camera_prev > span {
	background-position: 0 -400px;
}
.camera_charcoal_skin .camera_next > span {
	background-position: -40px -400px;
}
.camera_charcoal_skin .camera_commands > .camera_play {
	background-position: -80px -400px;
}
.camera_charcoal_skin .camera_commands > .camera_stop {
	background-position: -120px -400px;
}
/*CHOCOLATE SKIN*/
.camera_chocolate_skin .camera_prevThumbs div {
	background-position: -160px -440px;
}
.camera_chocolate_skin .camera_nextThumbs div {
	background-position: -190px -440px;
}
.camera_chocolate_skin .camera_prev > span {
	background-position: 0 -440px;
}
.camera_chocolate_skin .camera_next > span {
	background-position: -40px -440px;
}
.camera_chocolate_skin .camera_commands > .camera_play {
	background-position: -80px -440px;
}
.camera_chocolate_skin .camera_commands > .camera_stop {
	background-position: -120px -440px	;
}
/*COFFEE SKIN*/
.camera_coffee_skin .camera_prevThumbs div {
	background-position: -160px -480px;
}
.camera_coffee_skin .camera_nextThumbs div {
	background-position: -190px -480px;
}
.camera_coffee_skin .camera_prev > span {
	background-position: 0 -480px;
}
.camera_coffee_skin .camera_next > span {
	background-position: -40px -480px;
}
.camera_coffee_skin .camera_commands > .camera_play {
	background-position: -80px -480px;
}
.camera_coffee_skin .camera_commands > .camera_stop {
	background-position: -120px -480px	;
}
/*CYAN SKIN*/
.camera_cyan_skin .camera_prevThumbs div {
	background-position: -160px -520px;
}
.camera_cyan_skin .camera_nextThumbs div {
	background-position: -190px -520px;
}
.camera_cyan_skin .camera_prev > span {
	background-position: 0 -520px;
}
.camera_cyan_skin .camera_next > span {
	background-position: -40px -520px;
}
.camera_cyan_skin .camera_commands > .camera_play {
	background-position: -80px -520px;
}
.camera_cyan_skin .camera_commands > .camera_stop {
	background-position: -120px -520px	;
}
/*FUCHSIA SKIN*/
.camera_fuchsia_skin .camera_prevThumbs div {
	background-position: -160px -560px;
}
.camera_fuchsia_skin .camera_nextThumbs div {
	background-position: -190px -560px;
}
.camera_fuchsia_skin .camera_prev > span {
	background-position: 0 -560px;
}
.camera_fuchsia_skin .camera_next > span {
	background-position: -40px -560px;
}
.camera_fuchsia_skin .camera_commands > .camera_play {
	background-position: -80px -560px;
}
.camera_fuchsia_skin .camera_commands > .camera_stop {
	background-position: -120px -560px	;
}
/*GOLD SKIN*/
.camera_gold_skin .camera_prevThumbs div {
	background-position: -160px -600px;
}
.camera_gold_skin .camera_nextThumbs div {
	background-position: -190px -600px;
}
.camera_gold_skin .camera_prev > span {
	background-position: 0 -600px;
}
.camera_gold_skin .camera_next > span {
	background-position: -40px -600px;
}
.camera_gold_skin .camera_commands > .camera_play {
	background-position: -80px -600px;
}
.camera_gold_skin .camera_commands > .camera_stop {
	background-position: -120px -600px	;
}
/*GREEN SKIN*/
.camera_green_skin .camera_prevThumbs div {
	background-position: -160px -640px;
}
.camera_green_skin .camera_nextThumbs div {
	background-position: -190px -640px;
}
.camera_green_skin .camera_prev > span {
	background-position: 0 -640px;
}
.camera_green_skin .camera_next > span {
	background-position: -40px -640px;
}
.camera_green_skin .camera_commands > .camera_play {
	background-position: -80px -640px;
}
.camera_green_skin .camera_commands > .camera_stop {
	background-position: -120px -640px	;
}
/*GREY SKIN*/
.camera_grey_skin .camera_prevThumbs div {
	background-position: -160px -680px;
}
.camera_grey_skin .camera_nextThumbs div {
	background-position: -190px -680px;
}
.camera_grey_skin .camera_prev > span {
	background-position: 0 -680px;
}
.camera_grey_skin .camera_next > span {
	background-position: -40px -680px;
}
.camera_grey_skin .camera_commands > .camera_play {
	background-position: -80px -680px;
}
.camera_grey_skin .camera_commands > .camera_stop {
	background-position: -120px -680px	;
}
/*INDIGO SKIN*/
.camera_indigo_skin .camera_prevThumbs div {
	background-position: -160px -720px;
}
.camera_indigo_skin .camera_nextThumbs div {
	background-position: -190px -720px;
}
.camera_indigo_skin .camera_prev > span {
	background-position: 0 -720px;
}
.camera_indigo_skin .camera_next > span {
	background-position: -40px -720px;
}
.camera_indigo_skin .camera_commands > .camera_play {
	background-position: -80px -720px;
}
.camera_indigo_skin .camera_commands > .camera_stop {
	background-position: -120px -720px	;
}
/*KHAKI SKIN*/
.camera_khaki_skin .camera_prevThumbs div {
	background-position: -160px -760px;
}
.camera_khaki_skin .camera_nextThumbs div {
	background-position: -190px -760px;
}
.camera_khaki_skin .camera_prev > span {
	background-position: 0 -760px;
}
.camera_khaki_skin .camera_next > span {
	background-position: -40px -760px;
}
.camera_khaki_skin .camera_commands > .camera_play {
	background-position: -80px -760px;
}
.camera_khaki_skin .camera_commands > .camera_stop {
	background-position: -120px -760px	;
}
/*LIME SKIN*/
.camera_lime_skin .camera_prevThumbs div {
	background-position: -160px -800px;
}
.camera_lime_skin .camera_nextThumbs div {
	background-position: -190px -800px;
}
.camera_lime_skin .camera_prev > span {
	background-position: 0 -800px;
}
.camera_lime_skin .camera_next > span {
	background-position: -40px -800px;
}
.camera_lime_skin .camera_commands > .camera_play {
	background-position: -80px -800px;
}
.camera_lime_skin .camera_commands > .camera_stop {
	background-position: -120px -800px	;
}
/*MAGENTA SKIN*/
.camera_magenta_skin .camera_prevThumbs div {
	background-position: -160px -840px;
}
.camera_magenta_skin .camera_nextThumbs div {
	background-position: -190px -840px;
}
.camera_magenta_skin .camera_prev > span {
	background-position: 0 -840px;
}
.camera_magenta_skin .camera_next > span {
	background-position: -40px -840px;
}
.camera_magenta_skin .camera_commands > .camera_play {
	background-position: -80px -840px;
}
.camera_magenta_skin .camera_commands > .camera_stop {
	background-position: -120px -840px	;
}
/*MAROON SKIN*/
.camera_maroon_skin .camera_prevThumbs div {
	background-position: -160px -880px;
}
.camera_maroon_skin .camera_nextThumbs div {
	background-position: -190px -880px;
}
.camera_maroon_skin .camera_prev > span {
	background-position: 0 -880px;
}
.camera_maroon_skin .camera_next > span {
	background-position: -40px -880px;
}
.camera_maroon_skin .camera_commands > .camera_play {
	background-position: -80px -880px;
}
.camera_maroon_skin .camera_commands > .camera_stop {
	background-position: -120px -880px	;
}
/*ORANGE SKIN*/
.camera_orange_skin .camera_prevThumbs div {
	background-position: -160px -920px;
}
.camera_orange_skin .camera_nextThumbs div {
	background-position: -190px -920px;
}
.camera_orange_skin .camera_prev > span {
	background-position: 0 -920px;
}
.camera_orange_skin .camera_next > span {
	background-position: -40px -920px;
}
.camera_orange_skin .camera_commands > .camera_play {
	background-position: -80px -920px;
}
.camera_orange_skin .camera_commands > .camera_stop {
	background-position: -120px -920px	;
}
/*OLIVE SKIN*/
.camera_olive_skin .camera_prevThumbs div {
	background-position: -160px -1080px;
}
.camera_olive_skin .camera_nextThumbs div {
	background-position: -190px -1080px;
}
.camera_olive_skin .camera_prev > span {
	background-position: 0 -1080px;
}
.camera_olive_skin .camera_next > span {
	background-position: -40px -1080px;
}
.camera_olive_skin .camera_commands > .camera_play {
	background-position: -80px -1080px;
}
.camera_olive_skin .camera_commands > .camera_stop {
	background-position: -120px -1080px	;
}
/*PINK SKIN*/
.camera_pink_skin .camera_prevThumbs div {
	background-position: -160px -960px;
}
.camera_pink_skin .camera_nextThumbs div {
	background-position: -190px -960px;
}
.camera_pink_skin .camera_prev > span {
	background-position: 0 -960px;
}
.camera_pink_skin .camera_next > span {
	background-position: -40px -960px;
}
.camera_pink_skin .camera_commands > .camera_play {
	background-position: -80px -960px;
}
.camera_pink_skin .camera_commands > .camera_stop {
	background-position: -120px -960px	;
}
/*PISTACHIO SKIN*/
.camera_pistachio_skin .camera_prevThumbs div {
	background-position: -160px -1040px;
}
.camera_pistachio_skin .camera_nextThumbs div {
	background-position: -190px -1040px;
}
.camera_pistachio_skin .camera_prev > span {
	background-position: 0 -1040px;
}
.camera_pistachio_skin .camera_next > span {
	background-position: -40px -1040px;
}
.camera_pistachio_skin .camera_commands > .camera_play {
	background-position: -80px -1040px;
}
.camera_pistachio_skin .camera_commands > .camera_stop {
	background-position: -120px -1040px	;
}
/*PINK SKIN*/
.camera_pink_skin .camera_prevThumbs div {
	background-position: -160px -80px;
}
.camera_pink_skin .camera_nextThumbs div {
	background-position: -190px -80px;
}
.camera_pink_skin .camera_prev > span {
	background-position: 0 -80px;
}
.camera_pink_skin .camera_next > span {
	background-position: -40px -80px;
}
.camera_pink_skin .camera_commands > .camera_play {
	background-position: -80px -80px;
}
.camera_pink_skin .camera_commands > .camera_stop {
	background-position: -120px -80px;
}
/*RED SKIN*/
.camera_red_skin .camera_prevThumbs div {
	background-position: -160px -1000px;
}
.camera_red_skin .camera_nextThumbs div {
	background-position: -190px -1000px;
}
.camera_red_skin .camera_prev > span {
	background-position: 0 -1000px;
}
.camera_red_skin .camera_next > span {
	background-position: -40px -1000px;
}
.camera_red_skin .camera_commands > .camera_play {
	background-position: -80px -1000px;
}
.camera_red_skin .camera_commands > .camera_stop {
	background-position: -120px -1000px	;
}
/*TANGERINE SKIN*/
.camera_tangerine_skin .camera_prevThumbs div {
	background-position: -160px -1120px;
}
.camera_tangerine_skin .camera_nextThumbs div {
	background-position: -190px -1120px;
}
.camera_tangerine_skin .camera_prev > span {
	background-position: 0 -1120px;
}
.camera_tangerine_skin .camera_next > span {
	background-position: -40px -1120px;
}
.camera_tangerine_skin .camera_commands > .camera_play {
	background-position: -80px -1120px;
}
.camera_tangerine_skin .camera_commands > .camera_stop {
	background-position: -120px -1120px	;
}
/*TURQUOISE SKIN*/
.camera_turquoise_skin .camera_prevThumbs div {
	background-position: -160px -1160px;
}
.camera_turquoise_skin .camera_nextThumbs div {
	background-position: -190px -1160px;
}
.camera_turquoise_skin .camera_prev > span {
	background-position: 0 -1160px;
}
.camera_turquoise_skin .camera_next > span {
	background-position: -40px -1160px;
}
.camera_turquoise_skin .camera_commands > .camera_play {
	background-position: -80px -1160px;
}
.camera_turquoise_skin .camera_commands > .camera_stop {
	background-position: -120px -1160px	;
}
/*VIOLET SKIN*/
.camera_violet_skin .camera_prevThumbs div {
	background-position: -160px -1200px;
}
.camera_violet_skin .camera_nextThumbs div {
	background-position: -190px -1200px;
}
.camera_violet_skin .camera_prev > span {
	background-position: 0 -1200px;
}
.camera_violet_skin .camera_next > span {
	background-position: -40px -1200px;
}
.camera_violet_skin .camera_commands > .camera_play {
	background-position: -80px -1200px;
}
.camera_violet_skin .camera_commands > .camera_stop {
	background-position: -120px -1200px	;
}
/*WHITE SKIN*/
.camera_white_skin .camera_prevThumbs div {
	background-position: -160px -80px;
}
.camera_white_skin .camera_nextThumbs div {
	background-position: -190px -80px;
}
.camera_white_skin .camera_prev > span {
	background-position: 0 -80px;
}
.camera_white_skin .camera_next > span {
	background-position: -40px -80px;
}
.camera_white_skin .camera_commands > .camera_play {
	background-position: -80px -80px;
}
.camera_white_skin .camera_commands > .camera_stop {
	background-position: -120px -80px;
}
/*YELLOW SKIN*/
.camera_yellow_skin .camera_prevThumbs div {
	background-position: -160px -1240px;
}
.camera_yellow_skin .camera_nextThumbs div {
	background-position: -190px -1240px;
}
.camera_yellow_skin .camera_prev > span {
	background-position: 0 -1240px;
}
.camera_yellow_skin .camera_next > span {
	background-position: -40px -1240px;
}
.camera_yellow_skin .camera_commands > .camera_play {
	background-position: -80px -1240px;
}
.camera_yellow_skin .camera_commands > .camera_stop {
	background-position: -120px -1240px	;
}


.camera_thumbs_cont .cameraContent {
	display: block;
	pointer-events: none;
	opacity: 1;
	transition: 0.2s;
}

.camera_thumbs_cont .camera_caption_title {
	font-weight: normal;
	font-size: 0.8em;
}

.camera_thumbs_cont ul li {
	position: relative;
}

.camera_thumbs_cont ul li:hover .cameraContent {
	opacity: 0;
}

.camera_thumbs_cont .camera_caption > div {
	background: rgba(0, 0, 0, 0.5);
}

ul.camera_pag_ul {
	overflow: visible;
}mod_slideshowck/themes/default/css/camera_ie.css000060400000001054152456304320016042 0ustar00/* IE specific css for Slideshow CK */
.camera_wrap:after {
	background: none;
}

.camera_wrap .camera_pag .camera_pag_ul li {
    float:left !important;
}

div.camera_thumbs_cont {
	background: transparent;
}


.camera_caption {
	bottom: 10px;
	display: block;
	position: relative !important;
	/*width: 100%;*/
}
.camera_caption > div {
	padding: 10px 20px;
}

.camera_caption {
	color: #fff;
	margin-bottom: 35px;
}
.camera_caption > div {
	background: #000;
	background: rgba(0,0,0, 0.7);
	border-radius: 0 5px 5px 0;
	-moz-border-radius: 0 5px 5px 0;
}mod_slideshowck/themes/default/css/camera_rtl.css000060400000062372152456304320016260 0ustar00/*** compatibilite beez en position-12 ***/
#top {overflow: visible !important; }


/**************************
*
*	GENERAL
*
**************************/
.camera_wrap a.camera-link,.camera_wrap a.camera-link:hover {
	background: url(../images/blank.gif) !important;
}

.camera_wrap a.camera-button {
	display: inline-block;
}

.camera_wrap a,.camera_wrap a:hover, .camera_wrap img,
.camera_wrap ol, .camera_wrap ul, .camera_wrap li,
.camera_wrap table, .camera_wrap tbody, .camera_wrap tfoot, .camera_wrap thead, .camera_wrap tr, .camera_wrap th, .camera_wrap td
.camera_thumbs_wrap a, .camera_thumbs_wrap img,
.camera_thumbs_wrap ol, .camera_thumbs_wrap ul, .camera_thumbs_wrap li,
.camera_thumbs_wrap table, .camera_thumbs_wrap tbody, .camera_thumbs_wrap tfoot, .camera_thumbs_wrap thead, .camera_thumbs_wrap tr, .camera_thumbs_wrap th, .camera_thumbs_wrap td {
	background: none;
	border: 0;
	font: inherit;
	font-size: 100%;
	margin: 0;
	padding: 0;
	vertical-align: baseline;
	list-style: none
}
.camera_wrap {
	display: none;
	/*float: left;*/
	position: relative;
	z-index: 0;
	max-width: 100%;
}
.camera_wrap img {
	max-width: none!important;
}
.camera_fakehover {
	height: 100%;
	min-height: 60px;
	position: relative;
	width: 100%;
	z-index: 1;
}
.camera_wrap {
	/*width: 100%;*/
}
.camera_src {
	display: none;
}
.cameraCont, .cameraContents {
	height: 100%;
	position: relative;
	width: 100%;
	z-index: 1;
}
.cameraSlide {
	bottom: 0;
	left: 0;
	position: absolute;
	right: 0;
	top: 0;
	width: 100%;
}
.cameraContent {
	bottom: 0;
	display: none;
	left: 0;
	position: absolute;
	right: 0;
	top: 0;
	width: 100%;
}
.camera_target {
	bottom: 0;
	height: 100%;
	left: 0;
	overflow: hidden;
	position: absolute;
	right: 0;
	text-align: right;
	top: 0;
	width: 100%;
	z-index: 0;
}
.camera_overlayer {
	bottom: 0;
	height: 100%;
	left: 0;
	overflow: hidden;
	position: absolute;
	right: 0;
	top: 0;
	width: 100%;
	z-index: 0;
}
.camera_target_content {
	bottom: 0;
	left: 0;
	overflow: hidden;
	position: absolute;
	right: 0;
	top: 0;
	z-index: 2;
}
.camera_target_content .camera_link {
	display: block;
	height: 100%;
	text-decoration: none;
        background: url(../images/blank.gif) !important;
}
.camera_loader {
    background: #fff url(../images/camera-loader.gif) no-repeat center;
	background: rgba(255, 255, 255, 0.9) url(../images/camera-loader.gif) no-repeat center;
	border: 1px solid #ffffff;
	-webkit-border-radius: 18px;
	-moz-border-radius: 18px;
	border-radius: 18px;
	height: 36px;
	left: 50%;
	overflow: hidden;
	position: absolute;
	margin: -18px 0 0 -18px;
	top: 50%;
	width: 36px;
	z-index: 3;
}
.camera_bar {
	bottom: 0;
	left: 0;
	overflow: hidden;
	position: absolute;
	right: 0;
	top: 0;
	z-index: 3;
}
.camera_thumbs_wrap.camera_left .camera_bar, .camera_thumbs_wrap.camera_right .camera_bar {
	height: 100%;
	position: absolute;
	width: auto;
}
.camera_thumbs_wrap.camera_bottom .camera_bar, .camera_thumbs_wrap.camera_top .camera_bar {
	height: auto;
	position: absolute;
	width: 100%;
}
.camera_nav_cont {
	height: 65px;
	overflow: hidden;
	position: absolute;
	right: 9px;
	top: 15px;
	width: 120px;
	z-index: 4;
}
.camera_caption {
	bottom: 0;
	display: block;
	position: absolute;
	width: 100%;
        z-index: 1000;
}
.camera_caption > div {
	padding: 10px 20px;
	height:100%;
}
.camera_caption_title {
	font-size: 1.3em;
	font-weight: bold;
	line-height: 1em;
}
.camerarelative {
	overflow: hidden;
	position: relative;
}
.imgFake {
	cursor: pointer;
}
.camera_prevThumbs {
	bottom: 4px;
	cursor: pointer;
	left: 0;
	position: absolute;
	top: 4px;
	/*visibility: hidden;*/
	width: 30px;
	z-index: 10;
}
.camera_prevThumbs div {
	background: url(../images/camera_skins.png) no-repeat -160px 0;
	display: block;
	height: 40px;
	margin-top: -20px;
	position: absolute;
	top: 50%;
	width: 30px;
}
.camera_nextThumbs {
	bottom: 4px;
	cursor: pointer;
	position: absolute;
	right: 0;
	top: 4px;
	visibility: hidden;
	width: 30px;
	z-index: 10;
}
.camera_nextThumbs div {
	background: url(../images/camera_skins.png) no-repeat -190px 0;
	display: block;
	height: 40px;
	margin-top: -20px;
	position: absolute;
	top: 50%;
	width: 30px;
}
.camera_command_wrap .hideNav {
	display: none;
}
.camera_command_wrap {
	left: 0;
	position: relative;
	right:0;
	z-index: 4;
}
.camera_wrap .camera_pag .camera_pag_ul {
	list-style: none;
	margin: 0;
	padding: 0;
	text-align: right;
        height: auto !important;
        height: 28px;
}
.camera_wrap .camera_pag .camera_pag_ul li {
	-webkit-border-radius: 8px;
	-moz-border-radius: 8px;
	border-radius: 8px;
	cursor: pointer;
	display: inline-block;
        float: none !important;
        float:left;/*overflow:hidden;*/
	height: 16px;
	margin: 20px 5px;
	position: relative;
	/*text-align: left;*/
	text-indent: 9999px;
	width: 16px;
	overflow: visible !important;
	padding: 0;
}

.camera_commands_emboss .camera_pag .camera_pag_ul li {
	-moz-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	-webkit-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
}
.camera_wrap .camera_pag .camera_pag_ul li > span {
	-webkit-border-radius: 5px;
	-moz-border-radius: 5px;
	border-radius: 5px;
	height: 8px;
	left: 4px;
	overflow: hidden;
	position: absolute;
	top: 4px;
	width: 8px;
}
.camera_commands_emboss .camera_pag .camera_pag_ul li:hover > span {
	-moz-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	-webkit-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
}
.camera_wrap .camera_pag .camera_pag_ul li.cameracurrent > span {
	-moz-box-shadow: none;
	-webkit-box-shadow: none;
	box-shadow: none;
}
.camera_pag_ul li img {
	display: none;
	position: absolute;
	box-sizing: border-box;
}
.camera_pag_ul .thumb_arrow {
    border-left: 4px solid transparent;
    border-right: 4px solid transparent;
    border-top: 4px solid;
	top: 0;
	left: 50%;
	margin-left: -4px;
	position: absolute;
}
.camera_prev, .camera_next, .camera_commands {
	cursor: pointer;
	height: 40px;
	margin-top: -20px;
	position: absolute;
	top: 50%;
	width: 40px;
	z-index: 2;
}
.camera_prev {
	left: 0;
}
.camera_prev > span {
	background: url(../images/camera_skins.png) no-repeat 0 0;
	display: block;
	height: 40px;
	width: 40px;
}
.camera_next {
	right: 0;
}
.camera_next > span {
	background: url(../images/camera_skins.png) no-repeat -40px 0;
	display: block;
	height: 40px;
	width: 40px;
}
.camera_commands {
	right: 41px;
}
.camera_commands > .camera_play {
	background: url(../images/camera_skins.png) no-repeat -80px 0;
	height: 40px;
	width: 40px;
}
.camera_commands > .camera_stop {
	background: url(../images/camera_skins.png) no-repeat -120px 0;
	display: block;
	height: 40px;
	width: 40px;
}

.camera_thumbs_cont {
	-webkit-border-bottom-right-radius: 4px;
	-webkit-border-bottom-left-radius: 4px;
	-moz-border-radius-bottomright: 4px;
	-moz-border-radius-bottomleft: 4px;
	border-bottom-right-radius: 4px;
	border-bottom-left-radius: 4px;
	overflow: hidden;
	position: relative;
	width: 100%;
}
.camera_commands_emboss .camera_thumbs_cont {
	-moz-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	-webkit-box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
	box-shadow:
		0px 1px 0px rgba(255,255,255,1),
		inset 0px 1px 1px rgba(0,0,0,0.2);
}
.camera_thumbs_cont > div {
	float: left;
	width: 100%;
}
.camera_thumbs_cont ul {
	overflow: hidden;
	padding: 3px 4px 8px;
	position: relative;
	text-align: center;
}
.camera_thumbs_cont ul li {
	display: inline;
	padding: 0 4px;
}
.camera_thumbs_cont ul li > img {
	border: 1px solid #000;
	cursor: pointer;
	margin-top: 5px;
	vertical-align:bottom;
}
.camera_clear {
	display: block;
	clear: both;
}
.showIt {
	display: none;
}
.camera_clear {
	clear: both;
	display: block;
	height: 1px;
	margin: -1px 0 25px;
	position: relative;
}

.camera_caption {
	color: #fff;
}
.camera_caption > div {
	background: #000;
	background: rgba(0, 0, 0, 0.8);
}
.camera_wrap .camera_pag .camera_pag_ul li {
	background: #b7b7b7;
}
.camera_wrap .camera_pag .camera_pag_ul li:hover > span {
	background: #b7b7b7;
}
.camera_wrap .camera_pag .camera_pag_ul li.cameracurrent > span {
	background: #434648;
}
.camera_pag_ul li img {
	border: 4px solid #e6e6e6;
	-moz-box-shadow: 0px 3px 6px rgba(0,0,0,.5);
	-webkit-box-shadow: 0px 3px 6px rgba(0,0,0,.5);
	box-shadow: 0px 3px 6px rgba(0,0,0,.5);
}
.camera_pag_ul .thumb_arrow {
    border-top-color: #e6e6e6;
}
.camera_prevThumbs, .camera_nextThumbs, .camera_prev, .camera_next, .camera_commands, .camera_thumbs_cont {
	background: #d8d8d8;
	background: rgba(216, 216, 216, 0.85);
}
.camera_wrap .camera_pag .camera_pag_ul li {
	background: #b7b7b7;
}
.camera_thumbs_cont ul li > img {
	border-color: 1px solid #000;
}
/*AMBER SKIN*/
.camera_amber_skin .camera_prevThumbs div {
	background-position: -160px -160px;
}
.camera_amber_skin .camera_nextThumbs div {
	background-position: -190px -160px;
}
.camera_amber_skin .camera_prev > span {
	background-position: 0 -160px;
}
.camera_amber_skin .camera_next > span {
	background-position: -40px -160px;
}
.camera_amber_skin .camera_commands > .camera_play {
	background-position: -80px -160px;
}
.camera_amber_skin .camera_commands > .camera_stop {
	background-position: -120px -160px;
}
/*ASH SKIN*/
.camera_ash_skin .camera_prevThumbs div {
	background-position: -160px -200px;
}
.camera_ash_skin .camera_nextThumbs div {
	background-position: -190px -200px;
}
.camera_ash_skin .camera_prev > span {
	background-position: 0 -200px;
}
.camera_ash_skin .camera_next > span {
	background-position: -40px -200px;
}
.camera_ash_skin .camera_commands > .camera_play {
	background-position: -80px -200px;
}
.camera_ash_skin .camera_commands > .camera_stop {
	background-position: -120px -200px;
}
/*AZURE SKIN*/
.camera_azure_skin .camera_prevThumbs div {
	background-position: -160px -240px;
}
.camera_azure_skin .camera_nextThumbs div {
	background-position: -190px -240px;
}
.camera_azure_skin .camera_prev > span {
	background-position: 0 -240px;
}
.camera_azure_skin .camera_next > span {
	background-position: -40px -240px;
}
.camera_azure_skin .camera_commands > .camera_play {
	background-position: -80px -240px;
}
.camera_azure_skin .camera_commands > .camera_stop {
	background-position: -120px -240px;
}
/*BEIGE SKIN*/
.camera_beige_skin .camera_prevThumbs div {
	background-position: -160px -120px;
}
.camera_beige_skin .camera_nextThumbs div {
	background-position: -190px -120px;
}
.camera_beige_skin .camera_prev > span {
	background-position: 0 -120px;
}
.camera_beige_skin .camera_next > span {
	background-position: -40px -120px;
}
.camera_beige_skin .camera_commands > .camera_play {
	background-position: -80px -120px;
}
.camera_beige_skin .camera_commands > .camera_stop {
	background-position: -120px -120px;
}
/*BLACK SKIN*/
.camera_black_skin .camera_prevThumbs div {
	background-position: -160px -40px;
}
.camera_black_skin .camera_nextThumbs div {
	background-position: -190px -40px;
}
.camera_black_skin .camera_prev > span {
	background-position: 0 -40px;
}
.camera_black_skin .camera_next > span {
	background-position: -40px -40px;
}
.camera_black_skin .camera_commands > .camera_play {
	background-position: -80px -40px;
}
.camera_black_skin .camera_commands > .camera_stop {
	background-position: -120px -40px;
}
/*BLUE SKIN*/
.camera_blue_skin .camera_prevThumbs div {
	background-position: -160px -280px;
}
.camera_blue_skin .camera_nextThumbs div {
	background-position: -190px -280px;
}
.camera_blue_skin .camera_prev > span {
	background-position: 0 -280px;
}
.camera_blue_skin .camera_next > span {
	background-position: -40px -280px;
}
.camera_blue_skin .camera_commands > .camera_play {
	background-position: -80px -280px;
}
.camera_blue_skin .camera_commands > .camera_stop {
	background-position: -120px -280px;
}
/*BROWN SKIN*/
.camera_brown_skin .camera_prevThumbs div {
	background-position: -160px -320px;
}
.camera_brown_skin .camera_nextThumbs div {
	background-position: -190px -320px;
}
.camera_brown_skin .camera_prev > span {
	background-position: 0 -320px;
}
.camera_brown_skin .camera_next > span {
	background-position: -40px -320px;
}
.camera_brown_skin .camera_commands > .camera_play {
	background-position: -80px -320px;
}
.camera_brown_skin .camera_commands > .camera_stop {
	background-position: -120px -320px;
}
/*BURGUNDY SKIN*/
.camera_burgundy_skin .camera_prevThumbs div {
	background-position: -160px -360px;
}
.camera_burgundy_skin .camera_nextThumbs div {
	background-position: -190px -360px;
}
.camera_burgundy_skin .camera_prev > span {
	background-position: 0 -360px;
}
.camera_burgundy_skin .camera_next > span {
	background-position: -40px -360px;
}
.camera_burgundy_skin .camera_commands > .camera_play {
	background-position: -80px -360px;
}
.camera_burgundy_skin .camera_commands > .camera_stop {
	background-position: -120px -360px;
}
/*CHARCOAL SKIN*/
.camera_charcoal_skin .camera_prevThumbs div {
	background-position: -160px -400px;
}
.camera_charcoal_skin .camera_nextThumbs div {
	background-position: -190px -400px;
}
.camera_charcoal_skin .camera_prev > span {
	background-position: 0 -400px;
}
.camera_charcoal_skin .camera_next > span {
	background-position: -40px -400px;
}
.camera_charcoal_skin .camera_commands > .camera_play {
	background-position: -80px -400px;
}
.camera_charcoal_skin .camera_commands > .camera_stop {
	background-position: -120px -400px;
}
/*CHOCOLATE SKIN*/
.camera_chocolate_skin .camera_prevThumbs div {
	background-position: -160px -440px;
}
.camera_chocolate_skin .camera_nextThumbs div {
	background-position: -190px -440px;
}
.camera_chocolate_skin .camera_prev > span {
	background-position: 0 -440px;
}
.camera_chocolate_skin .camera_next > span {
	background-position: -40px -440px;
}
.camera_chocolate_skin .camera_commands > .camera_play {
	background-position: -80px -440px;
}
.camera_chocolate_skin .camera_commands > .camera_stop {
	background-position: -120px -440px	;
}
/*COFFEE SKIN*/
.camera_coffee_skin .camera_prevThumbs div {
	background-position: -160px -480px;
}
.camera_coffee_skin .camera_nextThumbs div {
	background-position: -190px -480px;
}
.camera_coffee_skin .camera_prev > span {
	background-position: 0 -480px;
}
.camera_coffee_skin .camera_next > span {
	background-position: -40px -480px;
}
.camera_coffee_skin .camera_commands > .camera_play {
	background-position: -80px -480px;
}
.camera_coffee_skin .camera_commands > .camera_stop {
	background-position: -120px -480px	;
}
/*CYAN SKIN*/
.camera_cyan_skin .camera_prevThumbs div {
	background-position: -160px -520px;
}
.camera_cyan_skin .camera_nextThumbs div {
	background-position: -190px -520px;
}
.camera_cyan_skin .camera_prev > span {
	background-position: 0 -520px;
}
.camera_cyan_skin .camera_next > span {
	background-position: -40px -520px;
}
.camera_cyan_skin .camera_commands > .camera_play {
	background-position: -80px -520px;
}
.camera_cyan_skin .camera_commands > .camera_stop {
	background-position: -120px -520px	;
}
/*FUCHSIA SKIN*/
.camera_fuchsia_skin .camera_prevThumbs div {
	background-position: -160px -560px;
}
.camera_fuchsia_skin .camera_nextThumbs div {
	background-position: -190px -560px;
}
.camera_fuchsia_skin .camera_prev > span {
	background-position: 0 -560px;
}
.camera_fuchsia_skin .camera_next > span {
	background-position: -40px -560px;
}
.camera_fuchsia_skin .camera_commands > .camera_play {
	background-position: -80px -560px;
}
.camera_fuchsia_skin .camera_commands > .camera_stop {
	background-position: -120px -560px	;
}
/*GOLD SKIN*/
.camera_gold_skin .camera_prevThumbs div {
	background-position: -160px -600px;
}
.camera_gold_skin .camera_nextThumbs div {
	background-position: -190px -600px;
}
.camera_gold_skin .camera_prev > span {
	background-position: 0 -600px;
}
.camera_gold_skin .camera_next > span {
	background-position: -40px -600px;
}
.camera_gold_skin .camera_commands > .camera_play {
	background-position: -80px -600px;
}
.camera_gold_skin .camera_commands > .camera_stop {
	background-position: -120px -600px	;
}
/*GREEN SKIN*/
.camera_green_skin .camera_prevThumbs div {
	background-position: -160px -640px;
}
.camera_green_skin .camera_nextThumbs div {
	background-position: -190px -640px;
}
.camera_green_skin .camera_prev > span {
	background-position: 0 -640px;
}
.camera_green_skin .camera_next > span {
	background-position: -40px -640px;
}
.camera_green_skin .camera_commands > .camera_play {
	background-position: -80px -640px;
}
.camera_green_skin .camera_commands > .camera_stop {
	background-position: -120px -640px	;
}
/*GREY SKIN*/
.camera_grey_skin .camera_prevThumbs div {
	background-position: -160px -680px;
}
.camera_grey_skin .camera_nextThumbs div {
	background-position: -190px -680px;
}
.camera_grey_skin .camera_prev > span {
	background-position: 0 -680px;
}
.camera_grey_skin .camera_next > span {
	background-position: -40px -680px;
}
.camera_grey_skin .camera_commands > .camera_play {
	background-position: -80px -680px;
}
.camera_grey_skin .camera_commands > .camera_stop {
	background-position: -120px -680px	;
}
/*INDIGO SKIN*/
.camera_indigo_skin .camera_prevThumbs div {
	background-position: -160px -720px;
}
.camera_indigo_skin .camera_nextThumbs div {
	background-position: -190px -720px;
}
.camera_indigo_skin .camera_prev > span {
	background-position: 0 -720px;
}
.camera_indigo_skin .camera_next > span {
	background-position: -40px -720px;
}
.camera_indigo_skin .camera_commands > .camera_play {
	background-position: -80px -720px;
}
.camera_indigo_skin .camera_commands > .camera_stop {
	background-position: -120px -720px	;
}
/*KHAKI SKIN*/
.camera_khaki_skin .camera_prevThumbs div {
	background-position: -160px -760px;
}
.camera_khaki_skin .camera_nextThumbs div {
	background-position: -190px -760px;
}
.camera_khaki_skin .camera_prev > span {
	background-position: 0 -760px;
}
.camera_khaki_skin .camera_next > span {
	background-position: -40px -760px;
}
.camera_khaki_skin .camera_commands > .camera_play {
	background-position: -80px -760px;
}
.camera_khaki_skin .camera_commands > .camera_stop {
	background-position: -120px -760px	;
}
/*LIME SKIN*/
.camera_lime_skin .camera_prevThumbs div {
	background-position: -160px -800px;
}
.camera_lime_skin .camera_nextThumbs div {
	background-position: -190px -800px;
}
.camera_lime_skin .camera_prev > span {
	background-position: 0 -800px;
}
.camera_lime_skin .camera_next > span {
	background-position: -40px -800px;
}
.camera_lime_skin .camera_commands > .camera_play {
	background-position: -80px -800px;
}
.camera_lime_skin .camera_commands > .camera_stop {
	background-position: -120px -800px	;
}
/*MAGENTA SKIN*/
.camera_magenta_skin .camera_prevThumbs div {
	background-position: -160px -840px;
}
.camera_magenta_skin .camera_nextThumbs div {
	background-position: -190px -840px;
}
.camera_magenta_skin .camera_prev > span {
	background-position: 0 -840px;
}
.camera_magenta_skin .camera_next > span {
	background-position: -40px -840px;
}
.camera_magenta_skin .camera_commands > .camera_play {
	background-position: -80px -840px;
}
.camera_magenta_skin .camera_commands > .camera_stop {
	background-position: -120px -840px	;
}
/*MAROON SKIN*/
.camera_maroon_skin .camera_prevThumbs div {
	background-position: -160px -880px;
}
.camera_maroon_skin .camera_nextThumbs div {
	background-position: -190px -880px;
}
.camera_maroon_skin .camera_prev > span {
	background-position: 0 -880px;
}
.camera_maroon_skin .camera_next > span {
	background-position: -40px -880px;
}
.camera_maroon_skin .camera_commands > .camera_play {
	background-position: -80px -880px;
}
.camera_maroon_skin .camera_commands > .camera_stop {
	background-position: -120px -880px	;
}
/*ORANGE SKIN*/
.camera_orange_skin .camera_prevThumbs div {
	background-position: -160px -920px;
}
.camera_orange_skin .camera_nextThumbs div {
	background-position: -190px -920px;
}
.camera_orange_skin .camera_prev > span {
	background-position: 0 -920px;
}
.camera_orange_skin .camera_next > span {
	background-position: -40px -920px;
}
.camera_orange_skin .camera_commands > .camera_play {
	background-position: -80px -920px;
}
.camera_orange_skin .camera_commands > .camera_stop {
	background-position: -120px -920px	;
}
/*OLIVE SKIN*/
.camera_olive_skin .camera_prevThumbs div {
	background-position: -160px -1080px;
}
.camera_olive_skin .camera_nextThumbs div {
	background-position: -190px -1080px;
}
.camera_olive_skin .camera_prev > span {
	background-position: 0 -1080px;
}
.camera_olive_skin .camera_next > span {
	background-position: -40px -1080px;
}
.camera_olive_skin .camera_commands > .camera_play {
	background-position: -80px -1080px;
}
.camera_olive_skin .camera_commands > .camera_stop {
	background-position: -120px -1080px	;
}
/*PINK SKIN*/
.camera_pink_skin .camera_prevThumbs div {
	background-position: -160px -960px;
}
.camera_pink_skin .camera_nextThumbs div {
	background-position: -190px -960px;
}
.camera_pink_skin .camera_prev > span {
	background-position: 0 -960px;
}
.camera_pink_skin .camera_next > span {
	background-position: -40px -960px;
}
.camera_pink_skin .camera_commands > .camera_play {
	background-position: -80px -960px;
}
.camera_pink_skin .camera_commands > .camera_stop {
	background-position: -120px -960px	;
}
/*PISTACHIO SKIN*/
.camera_pistachio_skin .camera_prevThumbs div {
	background-position: -160px -1040px;
}
.camera_pistachio_skin .camera_nextThumbs div {
	background-position: -190px -1040px;
}
.camera_pistachio_skin .camera_prev > span {
	background-position: 0 -1040px;
}
.camera_pistachio_skin .camera_next > span {
	background-position: -40px -1040px;
}
.camera_pistachio_skin .camera_commands > .camera_play {
	background-position: -80px -1040px;
}
.camera_pistachio_skin .camera_commands > .camera_stop {
	background-position: -120px -1040px	;
}
/*PINK SKIN*/
.camera_pink_skin .camera_prevThumbs div {
	background-position: -160px -80px;
}
.camera_pink_skin .camera_nextThumbs div {
	background-position: -190px -80px;
}
.camera_pink_skin .camera_prev > span {
	background-position: 0 -80px;
}
.camera_pink_skin .camera_next > span {
	background-position: -40px -80px;
}
.camera_pink_skin .camera_commands > .camera_play {
	background-position: -80px -80px;
}
.camera_pink_skin .camera_commands > .camera_stop {
	background-position: -120px -80px;
}
/*RED SKIN*/
.camera_red_skin .camera_prevThumbs div {
	background-position: -160px -1000px;
}
.camera_red_skin .camera_nextThumbs div {
	background-position: -190px -1000px;
}
.camera_red_skin .camera_prev > span {
	background-position: 0 -1000px;
}
.camera_red_skin .camera_next > span {
	background-position: -40px -1000px;
}
.camera_red_skin .camera_commands > .camera_play {
	background-position: -80px -1000px;
}
.camera_red_skin .camera_commands > .camera_stop {
	background-position: -120px -1000px	;
}
/*TANGERINE SKIN*/
.camera_tangerine_skin .camera_prevThumbs div {
	background-position: -160px -1120px;
}
.camera_tangerine_skin .camera_nextThumbs div {
	background-position: -190px -1120px;
}
.camera_tangerine_skin .camera_prev > span {
	background-position: 0 -1120px;
}
.camera_tangerine_skin .camera_next > span {
	background-position: -40px -1120px;
}
.camera_tangerine_skin .camera_commands > .camera_play {
	background-position: -80px -1120px;
}
.camera_tangerine_skin .camera_commands > .camera_stop {
	background-position: -120px -1120px	;
}
/*TURQUOISE SKIN*/
.camera_turquoise_skin .camera_prevThumbs div {
	background-position: -160px -1160px;
}
.camera_turquoise_skin .camera_nextThumbs div {
	background-position: -190px -1160px;
}
.camera_turquoise_skin .camera_prev > span {
	background-position: 0 -1160px;
}
.camera_turquoise_skin .camera_next > span {
	background-position: -40px -1160px;
}
.camera_turquoise_skin .camera_commands > .camera_play {
	background-position: -80px -1160px;
}
.camera_turquoise_skin .camera_commands > .camera_stop {
	background-position: -120px -1160px	;
}
/*VIOLET SKIN*/
.camera_violet_skin .camera_prevThumbs div {
	background-position: -160px -1200px;
}
.camera_violet_skin .camera_nextThumbs div {
	background-position: -190px -1200px;
}
.camera_violet_skin .camera_prev > span {
	background-position: 0 -1200px;
}
.camera_violet_skin .camera_next > span {
	background-position: -40px -1200px;
}
.camera_violet_skin .camera_commands > .camera_play {
	background-position: -80px -1200px;
}
.camera_violet_skin .camera_commands > .camera_stop {
	background-position: -120px -1200px	;
}
/*WHITE SKIN*/
.camera_white_skin .camera_prevThumbs div {
	background-position: -160px -80px;
}
.camera_white_skin .camera_nextThumbs div {
	background-position: -190px -80px;
}
.camera_white_skin .camera_prev > span {
	background-position: 0 -80px;
}
.camera_white_skin .camera_next > span {
	background-position: -40px -80px;
}
.camera_white_skin .camera_commands > .camera_play {
	background-position: -80px -80px;
}
.camera_white_skin .camera_commands > .camera_stop {
	background-position: -120px -80px;
}
/*YELLOW SKIN*/
.camera_yellow_skin .camera_prevThumbs div {
	background-position: -160px -1240px;
}
.camera_yellow_skin .camera_nextThumbs div {
	background-position: -190px -1240px;
}
.camera_yellow_skin .camera_prev > span {
	background-position: 0 -1240px;
}
.camera_yellow_skin .camera_next > span {
	background-position: -40px -1240px;
}
.camera_yellow_skin .camera_commands > .camera_play {
	background-position: -80px -1240px;
}
.camera_yellow_skin .camera_commands > .camera_stop {
	background-position: -120px -1240px	;
}

ul.camera_pag_ul {
	overflow: visible;
}mod_slideshowck/themes/default/css/camera_ie8.css000060400000000122152456304320016125 0ustar00/* IE8 specific css for Slideshow CK */
.camera_wrap:after {
	background: none;
}
mod_slideshowck/themes/default/css/index.html000060400000000037152456304320015420 0ustar00<!DOCTYPE html><title></title>
mod_slideshowck/themes/default/index.html000060400000000037152456304320014630 0ustar00<!DOCTYPE html><title></title>
mod_slideshowck/index.html000060400000000037152456304320011717 0ustar00<!DOCTYPE html><title></title>
mod_slideshowck/helper.php000060400000143714152456304320011724 0ustar00<?php

/**
 * @copyright	Copyright (C) 2011 Cedric KEIFLIN alias ced1870
 * https://www.joomlack.fr
 * Module Slideshow CK
 * @license		GNU/GPL
 * */
// no direct access
defined('_JEXEC') or die;

/** 
 * NOTE : THIS FILE IS USED FOR B/C OF THE V1 FEATURES ONLY !! 
 */
 
 
//$com_path = JPATH_SITE . '/components/com_content/';
//require_once $com_path . 'router.php';
//require_once $com_path . 'helpers/route.php';
//\Joomla\CMS\MVC\Model\BaseDatabaseModel::addIncludePath($com_path . '/models', 'ContentModel');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');

class modSlideshowckHelper {

	private static $_params;

	private static $folderLabels = array();

	private static $imagesOrderByLabels = array();

	/**
	 * Get a list of the items.
	 *
	 * @param	\Joomla\Registry\Registry	$params	The module options.
	 *
	 * @return	array
	 */
	static function getItems(&$params) {
		// Initialise variables.
		self::$_params = $params;
		$db = \Joomla\CMS\Factory::getDbo();
		$document = \Joomla\CMS\Factory::getDocument();

		// load the libraries
		//jimport('joomla.application.module.helper');
		$items = json_decode(str_replace("|qq|", "\"", $params->get('slides')));
		foreach ($items as $i => $item) {
			if (!$item->imgname) {
				unset($items[$i]);
				continue;
			}

			// check if the slide is published
			if (isset($item->state) && $item->state == '0') {
				unset($items[$i]);
				continue;
			}

			// check the slide start date
			if (isset($item->startdate) && $item->startdate) {
				// if (date("d M Y") < $item->startdate) {
				if (time() < strtotime($item->startdate)) {
					unset($items[$i]);
					continue;
				}
			}

			// check the slide end date
			if (isset($item->enddate) && $item->enddate) {
				// if (date("d M Y") > $item->enddate) {
				if (time() > strtotime($item->enddate)) {
					unset($items[$i]);
					continue;
				}
			}

			if (isset($item->slidearticleid) && $item->slidearticleid) {
				$item = self::getArticle($item, $params);
			} else {
				$item->article = null;
			}
			// create new images for mobile
			if ($params->get('usemobileimage', '0')) { 
				$resolutions = explode(',', $params->get('mobileimageresolution', '640'));
				foreach ($resolutions as $resolution) {
					self::resizeImage($item->imgname, (int)$resolution, '', (int)$resolution, '');
				}
			}

			if (stristr($item->imgname, "http")) {
				$item->imgthumb = $item->imgname;
			} else {
				// renomme le fichier
				$thumbext = explode(".", $item->imgname);
				$thumbext = end($thumbext);
				// crée la miniature
				if ($params->get('thumbnails', '1') == '1' && $params->get('autocreatethumbs','1')) {
					$item->imgthumb = \Joomla\CMS\Uri\Uri::base(true) . '/' . self::resizeImage($item->imgname, $params->get('thumbnailwidth', '182'), $params->get('thumbnailheight', '187'));
				} else {
					$thumbfile = str_replace(\Joomla\CMS\Filesystem\File::getName($item->imgname), "th/" . \Joomla\CMS\Filesystem\File::getName($item->imgname), $item->imgname);
					$thumbfile = str_replace("." . $thumbext, "_th." . $thumbext, $thumbfile);
					$item->imgthumb = \Joomla\CMS\Uri\Uri::base(true) . '/' . $thumbfile;
				}
				$item->imgname = \Joomla\CMS\Uri\Uri::base(true) . '/' . $item->imgname;
			}

			// set the videolink
			if ($item->imgvideo)
				$item->imgvideo = self::setVideolink($item->imgvideo);

			// manage the title and description
			if (stristr($item->imgcaption, "||")) {
				$splitcaption = explode("||", $item->imgcaption);
				$item->imgcaption = '<div class="slideshowck_title">' . $splitcaption[0] . '</div><div class="slideshowck_description">' . $splitcaption[1] . '</div>';
			}
			
			// route the url
			if (strcasecmp(substr($item->imglink, 0, 4), 'http') && (strpos($item->imglink, 'index.php?') !== false)) {
				$item->imglink = \Joomla\CMS\Router\Route::_($item->imglink, true, false);
			} else {
				$item->imglink = \Joomla\CMS\Router\Route::_($item->imglink);
			}
			
			if (!isset($item->imgtitle)) $item->imgtitle = '';
		}

		return $items;
	}

	static function getArticle(&$item, $params) {
		$com_path = JPATH_SITE . '/components/com_content/';
		require_once $com_path . 'router.php';
		require_once $com_path . 'helpers/route.php';
		\Joomla\CMS\MVC\Model\BaseDatabaseModel::addIncludePath($com_path . '/models', 'ContentModel');
		self::$_params = $params;
		// Access filter
		$access = !\Joomla\CMS\Component\ComponentHelper::getParams('com_content')->get('show_noauth');
		$authorised = \Joomla\CMS\Access\Access::getAuthorisedViewLevels(\Joomla\CMS\Factory::getUser()->get('id'));
		// Get an instance of the generic articles model
		$articles = \Joomla\CMS\MVC\Model\BaseDatabaseModel::getInstance('Articles', 'ContentModel', array('ignore_request' => true));
		// Set application parameters in model
		$app = \Joomla\CMS\Factory::getApplication();
		$appParams = $app->getParams();
		$articles->setState('params', $appParams);
		$articles->setState('filter.published', 1);
		$articles->setState('filter.article_id', $item->slidearticleid);
		$items2 = $articles->getItems();
		$item->article = $items2[0];
		$item->article->text = \Joomla\CMS\HTML\HTMLHelper::_('content.prepare', $item->article->introtext);
		$item->article->text = self::truncate($item->article->text, $params->get('articlelength', '150'));
		// $item->article->text = \Joomla\CMS\HTML\HTMLHelper::_('string.truncate',$item->article->introtext,'150');
		// set the item link to the article depending on the user rights
		if ($access || in_array($item->article->access, $authorised)) {
			// We know that user has the privilege to view the article
			$item->slug = $item->article->id . ':' . $item->article->alias;
			$item->catslug = $item->article->catid ? $item->article->catid . ':' . $item->article->category_alias : $item->article->catid;
			$item->article->link = \Joomla\CMS\Router\Route::_(\Joomla\Component\Content\Site\Helper\RouteHelper::getArticleRoute($item->slug, $item->catslug));
		} else {
			$app = \Joomla\CMS\Factory::getApplication();
			$menu = $app->getMenu();
			$menuitems = $menu->getItems('link', 'index.php?option=com_users&view=login');
			if (isset($menuitems[0])) {
				$Itemid = $menuitems[0]->id;
			} elseif (JRequest::getInt('Itemid') > 0) {
				$Itemid = JRequest::getInt('Itemid');
			}
			$item->article->link = \Joomla\CMS\Router\Route::_('index.php?option=com_users&view=login&Itemid=' . $Itemid);
		}
		return $item;
	}

	/**
	 * Get a list of the items.
	 *
	 * @param	\Joomla\Registry\Registry	$params	The module options.
	 *
	 * @return	array
	 */
	static function getItemsFromfolder(&$params) {
		self::$_params = $params;
		$authorisedExt = array('png', 'jpg', 'JPG', 'JPEG', 'jpeg', 'bmp', 'tiff', 'gif');
		$items = json_decode(str_replace("|qq|", "\"", $params->get('slidesfromfolder')));
		foreach ($items as & $item) {
//			$item->imgname = str_replace(\Joomla\CMS\Uri\Uri::base(), '', $item->imgname);
			$item->imgthumb = '';
			$item->imgname = trim($item->imgname, '/');
			$item->imgname = trim($item->imgname, '\\');
			// create new images for mobile
			if ($params->get('usemobileimage', '0')) { 
				self::resizeImage($item->imgname, $params->get('mobileimageresolution', '640'), '', $params->get('mobileimageresolution', '640'), '');
			}
			if ($params->get('thumbnails', '1') == '1')
				$item->imgthumb = \Joomla\CMS\Uri\Uri::base(true) . '/' . self::resizeImage($item->imgname, $params->get('thumbnailwidth', '100'), $params->get('thumbnailheight', '75'));
			$thumbext = explode(".", $item->imgname);
			$thumbext = end($thumbext);
			// set the variables
			$item->imgvideo = null;
			$item->slideselect = null;
			$item->slideselect = null;
			$item->imgcaption = null;
			$item->article = null;
			$item->slidearticleid = null;
			$item->imgalignment = null;
			$item->imgtarget = 'default';
			$item->imgtime = null;
			$item->imglink = null;
			$item->imgtitle = null;

			if (!in_array(strToLower(\Joomla\CMS\Filesystem\File::getExt($item->imgname)), $authorisedExt))
				continue;

			// load the image data from txt
			$item = self::getImageDataFromfolder($item, $params);
			$item->imgname = \Joomla\CMS\Uri\Uri::base(true) . '/' . $item->imgname;
			
			// route the url
			if (strcasecmp(substr($item->imglink, 0, 4), 'http') && (strpos($item->imglink, 'index.php?') !== false)) {
				$item->imglink = \Joomla\CMS\Router\Route::_($item->imglink, true, false);
			} else {
				$item->imglink = \Joomla\CMS\Router\Route::_($item->imglink);
			}
		}

		return $items;
	}
	
	static function getItemsAutoloadfolder(&$params) {
		self::$_params = $params;
		$authorisedExt = array('png', 'jpg', 'JPG', 'JPEG', 'jpeg', 'bmp', 'tiff', 'gif');
		$folder = trim($params->get('autoloadfoldername'), '/');
		if (file_exists($folder . '/labels.txt')) {
			$items = self::loadImagesFromFolder($folder);
		} else {
			$items = \Joomla\CMS\Filesystem\Folder::files($folder, '.jpg|.png|.jpeg|.gif|.JPG|.JPEG|.jpeg', false, true);
			foreach ($items as $i => $name) {
				$item = new stdClass();
				// $item->imgname = str_replace(\Joomla\CMS\Uri\Uri::base(),'', $item->imgname);
				$item->imgthumb = '';
				$item->imgname = trim(str_replace('\\','/',$name), '/');
				$item->imgname = trim($item->imgname, '\\');
				// create new images for mobile
				if ($params->get('usemobileimage', '0')) { 
					self::resizeImage($item->imgname, $params->get('mobileimageresolution', '640'), '', $params->get('mobileimageresolution', '640'), '');
				}
				if ($params->get('thumbnails', '1') == '1')
					$item->imgthumb = \Joomla\CMS\Uri\Uri::base(true) . '/' . self::resizeImage($item->imgname, $params->get('thumbnailwidth', '100'), $params->get('thumbnailheight', '75'));
				$thumbext = explode(".", $item->imgname);
				$thumbext = end($thumbext);
				// set the variables
				$item->imgvideo = null;
				$item->slideselect = null;
				$item->slideselect = null;
				$item->imgcaption = null;
				$item->article = null;
				$item->slidearticleid = null;
				$item->imgalignment = null;
				$item->imgtarget = 'default';
				$item->imgtime = null;
				$item->imglink = null;
				$item->imgtitle = null;

				if (!in_array(strToLower(\Joomla\CMS\Filesystem\File::getExt($item->imgname)), $authorisedExt))
					continue;

				// load the image data from txt
				$item = self::getImageDataFromfolder($item, $params);
				$item->imgname = \Joomla\CMS\Uri\Uri::base(true) . '/' . $item->imgname;
				$items[$i] = $item;

				// route the url
				if (strcasecmp(substr($item->imglink, 0, 4), 'http') && (strpos($item->imglink, 'index.php?') !== false)) {
					$item->imglink = \Joomla\CMS\Router\Route::_($item->imglink, true, false);
				} else {
					$item->imglink = \Joomla\CMS\Router\Route::_($item->imglink);
				}
			}
		}
		return $items;
	}

	/*
	 * Load the image from the specified folder 
	 */
	public static function loadImagesFromFolder($directory) {

		// encode the folder path, needed if contains an accent
		try {
			$translatedDirectory = iconv("UTF-8", "ISO-8859-1//TRANSLIT", urldecode($directory));
			if ($translatedDirectory) $directory = $translatedDirectory;
		} catch (Exception $e) {
			echo 'CK Message : ',  $e->getMessage(), "\n";
		}

		// load the files from the folder
		$files = \Joomla\CMS\Filesystem\Folder::files(trim(trim($directory), '/'), '.', false, true);

		if (! $files) return 'CK message : No files found in the directory : ' . $directory;

		self::$imagesOrderByLabels = array();
		// load the labels from the folder
		self::getImageLabelsFromFolder($directory);

		$order = self::$_params->get('displayorder');
		// set the images order
		if ($order == 'shuffle') {
			shuffle($files);
		} else 
//			if(isset($params->order) && $params->order == 'labels') 
				{
			natsort($files);
			$files = array_map(array(__CLASS__, 'formatPath'), $files);
			$baseDir = self::formatPath($directory);
			$labelsOrder = array_reverse(self::$imagesOrderByLabels);
			foreach ($labelsOrder as $name) {
				$imgFile = $baseDir . '/' . $name;
				array_unshift($files, $imgFile);
			}
			// now make it unique
			$files = array_unique($files);
		} 
//		else {
//			natsort($files);
//		}

		$authorisedExt = array('png','jpg','jpeg','bmp','tiff','gif');
		$items = array();
		$i = 0;
		foreach ($files as $file) {
			$fileExt = \Joomla\CMS\Filesystem\File::getExt($file);
			if (!in_array(strToLower($fileExt),$authorisedExt)) continue;

			$item = new stdClass();
			// set the variables
			$item->imgvideo = null;
			$item->slideselect = null;
			$item->slideselect = null;
			$item->imgcaption = null;
			$item->article = null;
			$item->slidearticleid = null;
			$item->imgalignment = null;
			$item->imgtarget = 'default';
			$item->imgtime = null;
			$item->imglink = null;
			$item->imgtitle = null;

			// limit the number of images
//			if (isset($params->number) && $params->number > 0 && $i > (int)$params->number) $show = false;

			// get the data for the image
			$filedata = self::getImageDataFromfolder2($file, $directory);

			$file = str_replace("\\", "/", iconv('ISO-8859-1', 'UTF-8', $file));
			if (isset($filedata->link) && $filedata->link) {
				$item->imglink = $filedata->link;
			} else {
				$videoFile = str_replace($fileExt, 'mp4', $file);
				$hasVideo = file_exists($videoFile);
				$item->imglink = $hasVideo ? $videoFile : $file;
			}

			$item->imgname = \Joomla\CMS\Uri\Uri::base(true) . '/' . $file;
			$item->imgthumb = $item->imgname;
			$item->imgtitle = $filedata->title;
			$item->imgcaption = $filedata->desc;
			$item->imgvideo = $filedata->video;
//			$linktitle = $filedata->title || $filedata->desc ? ($filedata->desc ? $filedata->title . '::' . $filedata->desc : $filedata->title) : $title;

			$items[$i] = $item;
			$i++;
		}

		return $items;
	}

	/*
	 * Remove special character
	 */
	private static function cleanName($path) {
		return preg_replace('/[^a-z0-9]/i', '_', $path);
	}

	public static function formatPath($p) {
		return trim(str_replace("\\", "/", $p), "/");
	}

	private static function getImageLabelsFromFolder($directory) {
		$dirindex = self::cleanName($directory);
		if (! empty(self::$folderLabels[$dirindex])) return;

		$items = array();
		$item = new stdClass();

		// get the language
		$lang = \Joomla\CMS\Factory::getLanguage();
		$langtag = $lang->getTag(); // returns fr-FR or en-GB

		// load the image data from txt
		if (file_exists(JPATH_ROOT . '/' . $directory . '/labels.' . $langtag . '.txt')) {
			$data = file_get_contents(JPATH_ROOT . '/' . $directory . '/labels.' . $langtag . '.txt');
		} else if (file_exists(JPATH_ROOT . '/' . $directory . '/labels.txt')) {
			$data = file_get_contents(JPATH_ROOT . '/' . $directory . '/labels.txt');
		} else {
			return null;
		}

		$doUTF8encode = true;
		// remove UTF-8 BOM and normalize line endings
		if (!strcmp("\xEF\xBB\xBF", substr($data,0,3))) {  // file starts with UTF-8 BOM
			$data = substr($data, 3);  // remove UTF-8 BOM
			$doUTF8encode = false;
		}
		$data = str_replace("\r", "\n", $data);  // normalize line endings

		// if no data found, exit
		if(! $data) return null;

		// explode the file into rows
		// $imgdatatmp = explode("\n", $data);
		$imgdatatmp = preg_split("/\r\n|\n|\r/", $data, -1, PREG_SPLIT_NO_EMPTY);

		$parmsnumb = count($imgdatatmp);
		for ($i = 0; $i < $parmsnumb; $i++) {
			$imgdatatmp[$i] = trim($imgdatatmp[$i]);
			$line = explode('|', $imgdatatmp[$i]);

			// store the order or files from the TXT file
			self::$imagesOrderByLabels[] = $line[0];

			$item = new stdClass();
			$item->index = self::cleanName($line[0]);
			$item->title = (isset($line[1])) ? ( $doUTF8encode ? (iconv('ISO-8859-1', 'UTF-8', $line[1])) : ($line[1]) ) : '';
			$item->desc = (isset($line[2])) ? ( $doUTF8encode ? (iconv('ISO-8859-1', 'UTF-8', $line[2])) : ($line[2]) ) : '';
			$item->link = (isset($line[3])) ? ( $doUTF8encode ? (iconv('ISO-8859-1', 'UTF-8', $line[3])) : ($line[3]) ) : '';
			$item->video = (isset($line[4])) ? ( $doUTF8encode ? (iconv('ISO-8859-1', 'UTF-8', $line[4])) : ($line[4]) ) : '';

			$items[$item->index] = $item;
		}

		self::$folderLabels[$dirindex] = $items;
	}

	/*
	 * Load the data for the image (title and description)
	 */
	private static function getImageDataFromfolder2($file, $directory) {
		$filename = explode('/', $file);
		$filename = end($filename);
		$dirindex = self::cleanName($directory);
		$fileindex = self::cleanName($filename);

		if (! empty(self::$folderLabels[$dirindex]) && ! empty(self::$folderLabels[$dirindex][$fileindex])) {
				$item = self::$folderLabels[$dirindex][$fileindex];
		} else {
			$item = new stdClass();
			$item->title = null;
			$item->desc = null;
			$item->video = null;
			// old method, get image data from txt file with image name // TODO : remove
			// $item = self::getImageDataFromImageTxt($file)
		}

		return $item;
	}

	/**
	 * Get a list of the items.
	 *
	 * @param	\Joomla\Registry\Registry	$params	The module options.
	 *
	 * @return	array
	 */
	static function getItemsAutoloadflickr(&$params) {
		self::$_params = $params;

		$url = 'https://api.flickr.com/services/rest/?format=json&method=flickr.photosets.getPhotos&extras=description,original_format,url_sq,url_t,url_s,url_m,url_o&nojsoncallback=1';
		$url .= '&api_key=' . $params->get('flickr_apikey');
		$url .= '&photoset_id=' . $params->get('flickr_photoset');

		if (ini_get('allow_url_fopen') && function_exists('file_get_contents')) {  
			$result = file_get_contents($url);  
		}
		// look for curl
		if ($result == '' && extension_loaded('curl')) {
			$ch = curl_init();  
			$timeout = 30;  
			curl_setopt($ch, CURLOPT_URL, $url);  
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
			curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);  
			$result = curl_exec($ch);  
			curl_close($ch);  
		}

		$images = json_decode($result)->photoset->photo;
		$items = Array();
		$i = 0;
		$flickrSuffixes = array('o', 'k', 'h', 'b', 'z', 'sq', 't', 'sm', 'm');
		foreach ($images as & $image) {
			$items[$i] = new stdClass();
			$item = $items[$i];
			$suffix = 'o';
			foreach ($flickrSuffixes as $flickrSuffixe) {
				if (isset($image->{'url_' . $flickrSuffixe})) {
					$suffix = $flickrSuffixe;
					break;
				}
			}
			$item->imgname = $image->{'url_' . $suffix};
			$item->imgthumb = $item->imgname;
			// create new images for mobile
			// if ($params->get('usemobileimage', '0')) { 
				// self::resizeImage($item->imgname, $params->get('mobileimageresolution', '640'), '', $params->get('mobileimageresolution', '640'), '');
			// }
			// if ($params->get('thumbnails', '1') == '1')
				// $item->imgthumb = \Joomla\CMS\Uri\Uri::base(true) . '/' . self::resizeImage($item->imgname, $params->get('thumbnailwidth', '100'), $params->get('thumbnailheight', '75'));
			// $thumbext = explode(".", $item->imgname);
			// $thumbext = end($thumbext);
			// set the variables
			$item->imgvideo = null;
			$item->slideselect = null;
			$item->slideselect = null;
			$item->imgcaption = null;
			$item->article = null;
			$item->slidearticleid = null;
			$item->imgalignment = null;
			$item->imgtarget = 'default';
			$item->imgtime = null;
			$item->imglink = null;
			$item->imgtitle = null;

			// show the title and description of the image
			if ($params->get('flickr_showcaption', '1')) {
				$item->imgtitle = $image->title;
				$item->imgcaption = $image->description->_content;
			}

			// set the link to the image
			if ($params->get('flickr_autolink', '0')) {
				$item->imglink = $image->{'url_' . $suffix};
			}

			$i++;
		}

		return $items;
	}

	static function getItemsAutoloadarticlecategory(&$params) {
		$com_path = JPATH_SITE . '/components/com_content/';
		require_once $com_path . 'router.php';
		require_once $com_path . 'helpers/route.php';
		\Joomla\CMS\MVC\Model\BaseDatabaseModel::addIncludePath($com_path . '/models', 'ContentModel');
		// Get an instance of the generic articles model
		$articles = \Joomla\CMS\MVC\Model\BaseDatabaseModel::getInstance('Articles', 'ContentModel', array('ignore_request' => true));

		// Set application parameters in model
		$app = \Joomla\CMS\Factory::getApplication();
		$appParams = $app->getParams();
		$articles->setState('params', $appParams);

		// Set the filters based on the module params
		$articles->setState('list.start', 0);
//		$articles->setState('list.limit', (int) $params->get('count', 0)); // must check if the image exists
		$articles->setState('list.limit', 0);
		$articles->setState('filter.published', 1);

		// Access filter
		$access = !\Joomla\CMS\Component\ComponentHelper::getParams('com_content')->get('show_noauth');
		$authorised = \Joomla\CMS\Access\Access::getAuthorisedViewLevels(\Joomla\CMS\Factory::getUser()->get('id'));
		$articles->setState('filter.access', $access);

		// Prep for Normal or Dynamic Modes
		$mode = $params->get('mode', 'normal');
		switch ($mode)
		{
			case 'dynamic':
				$option = JRequest::getCmd('option');
				$view = JRequest::getCmd('view');
				if ($option === 'com_content') {
					switch($view)
					{
						case 'category':
							$catids = array(JRequest::getInt('id'));
							break;
						case 'categories':
							$catids = array(JRequest::getInt('id'));
							break;
						case 'article':
							if ($params->get('show_on_article_page', 1)) {
								$article_id = JRequest::getInt('id');
								$catid = JRequest::getInt('catid');

								if (!$catid) {
									// Get an instance of the generic article model
									$article = \Joomla\CMS\MVC\Model\BaseDatabaseModel::getInstance('Article', 'ContentModel', array('ignore_request' => true));

									$article->setState('params', $appParams);
									$article->setState('filter.published', 1);
									$article->setState('article.id', (int) $article_id);
									$item = $article->getItem();

									$catids = array($item->catid);
								}
								else {
									$catids = array($catid);
								}
							}
							else {
								// Return right away if show_on_article_page option is off
								return;
							}
							break;

						case 'featured':
						default:
							// Return right away if not on the category or article views
							return;
					}
				}
				else {
					// Return right away if not on a com_content page
					return;
				}

				break;

			case 'normal':
			default:
				$catids = $params->get('catid');
				$articles->setState('filter.category_id.include', (bool) $params->get('category_filtering_type', 1));
				break;
		}

		// Category filter
		if ($catids) {
			if ($params->get('show_child_category_articles', 0) && (int) $params->get('levels', 0) > 0) {
				// Get an instance of the generic categories model
				$categories = \Joomla\CMS\MVC\Model\BaseDatabaseModel::getInstance('Categories', 'ContentModel', array('ignore_request' => true));
				$categories->setState('params', $appParams);
				$levels = $params->get('levels', 1) ? $params->get('levels', 1) : 9999;
				$categories->setState('filter.get_children', $levels);
				$categories->setState('filter.published', 1);
				$categories->setState('filter.access', $access);
				$additional_catids = array();

				foreach($catids as $catid)
				{
					$categories->setState('filter.parentId', $catid);
					$recursive = true;
					$items = $categories->getItems($recursive);

					if ($items)
					{
						foreach($items as $category)
						{
							$condition = (($category->level - $categories->getParent()->level) <= $levels);
							if ($condition) {
								$additional_catids[] = $category->id;
							}

						}
					}
				}

				$catids = array_unique(array_merge($catids, $additional_catids));
			}

			$articles->setState('filter.category_id', $catids);
		}

		// Ordering
		$articles->setState('list.ordering', $params->get('article_ordering', 'a.ordering'));
		$articles->setState('list.direction', $params->get('article_ordering_direction', 'ASC'));

		// New Parameters
		$articles->setState('filter.featured', $params->get('show_front', 'show'));
//		$articles->setState('filter.author_id', $params->get('created_by', ""));
//		$articles->setState('filter.author_id.include', $params->get('author_filtering_type', 1));
//		$articles->setState('filter.author_alias', $params->get('created_by_alias', ""));
//		$articles->setState('filter.author_alias.include', $params->get('author_alias_filtering_type', 1));
		$excluded_articles = $params->get('excluded_articles', '');

		if ($excluded_articles) {
			$excluded_articles = explode("\r\n", $excluded_articles);
			$articles->setState('filter.article_id', $excluded_articles);
			$articles->setState('filter.article_id.include', false); // Exclude
		}

		$date_filtering = $params->get('date_filtering', 'off');
		if ($date_filtering !== 'off') {
			$articles->setState('filter.date_filtering', $date_filtering);
			$articles->setState('filter.date_field', $params->get('date_field', 'a.created'));
			$articles->setState('filter.start_date_range', $params->get('start_date_range', '1000-01-01 00:00:00'));
			$articles->setState('filter.end_date_range', $params->get('end_date_range', '9999-12-31 23:59:59'));
			$articles->setState('filter.relative_date', $params->get('relative_date', 30));
		}

		// Filter by language
		$articles->setState('filter.language', $app->getLanguageFilter());

		$items = $articles->getItems();

		// Display options
		$show_date = $params->get('show_date', 0);
		$show_date_field = $params->get('show_date_field', 'created');
		$show_date_format = $params->get('show_date_format', 'Y-m-d H:i:s');
		$show_category = $params->get('show_category', 0);
		$show_hits = $params->get('show_hits', 0);
		$show_author = $params->get('show_author', 0);
		$show_introtext = $params->get('show_introtext', 0);
		$introtext_limit = $params->get('introtext_limit', 100);

		// Find current Article ID if on an article page
		$option = JRequest::getCmd('option');
		$view = JRequest::getCmd('view');

		if ($option === 'com_content' && $view === 'article') {
			$active_article_id = JRequest::getInt('id');
		}
		else {
			$active_article_id = 0;
		}

		// Prepare data for display using display options
		$slideItems = Array();
		foreach ($items as &$item)
		{
			$item->slug = $item->id.':'.$item->alias;
			$item->catslug = $item->catid ? $item->catid .':'.$item->category_alias : $item->catid;

			if ($access || in_array($item->access, $authorised)) {
				// We know that user has the privilege to view the article
				$item->link = \Joomla\CMS\Router\Route::_(\Joomla\Component\Content\Site\Helper\RouteHelper::getArticleRoute($item->slug, $item->catslug));
			}
			 else {
				// Angie Fixed Routing
				$app	= \Joomla\CMS\Factory::getApplication();
				$menu	= $app->getMenu();
				$menuitems	= $menu->getItems('link', 'index.php?option=com_users&view=login');
				if(isset($menuitems[0])) {
						$Itemid = $menuitems[0]->id;
					} elseif (JRequest::getInt('Itemid') > 0) { //use Itemid from requesting page only if there is no existing menu
						$Itemid = JRequest::getInt('Itemid');
					}

				$item->link = \Joomla\CMS\Router\Route::_('index.php?option=com_users&view=login&Itemid='.$Itemid);
			}

			// Used for styling the active article
			$item->active = $item->id == $active_article_id ? 'active' : '';

			$item->displayDate = '';
			if ($show_date) {
				$item->displayDate = \Joomla\CMS\HTML\HTMLHelper::_('date', $item->$show_date_field, $show_date_format);
			}

			if ($item->catid) {
				$item->displayCategoryLink = \Joomla\CMS\Router\Route::_(\Joomla\Component\Content\Site\Helper\RouteHelper::getCategoryRoute($item->catid));
				$item->displayCategoryTitle = $show_category ? '<a href="'.$item->displayCategoryLink.'">'.$item->category_title.'</a>' : '';
			}
			else {
				$item->displayCategoryTitle = $show_category ? $item->category_title : '';
			}

			$item->displayHits = $show_hits ? $item->hits : '';
			$item->displayAuthorName = $show_author ? $item->author : '';
//			if ($show_introtext) {
//				$item->introtext = \Joomla\CMS\HTML\HTMLHelper::_('content.prepare', $item->introtext, '', 'mod_articles_category.content');
//				$item->introtext = self::_cleanIntrotext($item->introtext);
//			}
			$item->displayIntrotext = $show_introtext ? self::truncate($item->introtext, $introtext_limit) : '';
			$item->displayReadmore = $item->alternative_readmore;
			
			// add the article to the slide
			$registry = new \Joomla\Registry\Registry;
			$registry->loadString($item->images);
			$item->images = $registry->toArray();
			$article_image  =false;
			$slideItem_article_text = '';
			switch ($params->get('articleimgsource', 'introimage')) {
				case 'firstimage':
					$search_images = preg_match('/<img(.*?)src="(.*?)"(.*?)\/>/is', $item->introtext, $imgresult);
					$article_image = (isset($imgresult[2]) && $imgresult[2] != '') ? $imgresult[2] : false;
					$slideItem_article_text = (isset($imgresult[2])) ? str_replace($imgresult[0], '', $item->introtext) : $item->introtext;
					break;
				case 'fullimage':
					$article_image = (isset($item->images['image_fulltext']) && $item->images['image_fulltext']) ? $item->images['image_fulltext'] : false;
					$slideItem_article_text = $item->introtext;
					break;
				case 'introimage':
				default:
					$article_image = (isset($item->images['image_intro']) && $item->images['image_intro']) ? $item->images['image_intro'] : false;
					$slideItem_article_text = $item->introtext;
					break;
			}
			
			if ( $article_image
					 && (count($slideItems) < (int) $params->get('count', 0) || (int) $params->get('count', 0) == 0)) {
				$slideItem = new stdClass();
				$slideItem->imgname = $article_image;
//				$slideItem->imgname = trim(str_replace('\\', '/', $item->images['image_intro']), '/');
				$slideItem->imgname = trim($slideItem->imgname, '\\');
				$slideItem->imgthumb = \Joomla\CMS\Uri\Uri::base(true) . '/' . $slideItem->imgname;
				$slideItem->imgname = \Joomla\CMS\Uri\Uri::base(true) . '/' . $slideItem->imgname;
				$slideItem->imgvideo = null;
				$slideItem->slideselect = null;
				$slideItem->imgcaption = null;
				$slideItem->article = new stdClass();
				$slideItem->slidearticleid = null;
				$slideItem->imgalignment = null;
				$slideItem->imgtarget = 'default';
				$slideItem->imgtime = null;
				$slideItem->imglink = null;
				$slideItem->imgtitle = null;
				$slideItem->article->title = $item->title;
				$slideItem->article->text = \Joomla\CMS\HTML\HTMLHelper::_('content.prepare', $slideItem_article_text);
				if ($params->get('striptags', '0') == '1') {
					$slideItem->article->text = strip_tags($slideItem->article->text);
				}
				$slideItem->article->text = self::truncate($slideItem->article->text, $params->get('articlelength', '150'));
				$slideItem->article->link = $item->link;
				
				$slideItems[] = $slideItem;
			}
		}

		return $slideItems;
	}

	static function getImageDataFromfolder(&$item, $params) {
		$item->imgvideo = null;
		$item->slideselect = null;
		$item->imgcaption = null;
		$item->article = null;
		$item->imgalignment = null;
		$item->imgtarget = 'default';
		$item->imgtime = null;
		$item->imglink = null;
		// load the image data from txt
		$datafile = JPATH_ROOT . '/' . str_replace(\Joomla\CMS\Filesystem\File::getExt($item->imgname), 'txt', $item->imgname);
		$data = \Joomla\CMS\Filesystem\File::exists($datafile) ? file_get_contents($datafile) : '';
		$imgdatatmp = explode("\n", $data);

		$parmsnumb = count($imgdatatmp);
		for ($i = 0; $i < $parmsnumb; $i++) {
			$imgdatatmp[$i] = trim($imgdatatmp[$i]);
			$item->imgcaption = stristr($imgdatatmp[$i], "caption=") ? str_replace('caption=', '', $imgdatatmp[$i]) : $item->imgcaption;
			$item->slidearticleid = stristr($imgdatatmp[$i], "articleid=") ? str_replace('articleid=', '', $imgdatatmp[$i]) : $item->slidearticleid;
			$item->imgvideo = stristr($imgdatatmp[$i], "video=") ? str_replace('video=', '', $imgdatatmp[$i]) : $item->imgvideo;
			$item->imglink = stristr($imgdatatmp[$i], "link=") ? str_replace('link=', '', $imgdatatmp[$i]) : $item->imglink;
			$item->imgtime = stristr($imgdatatmp[$i], "time=") ? str_replace('time=', '', $imgdatatmp[$i]) : $item->imgtime;
			$item->imgtarget = stristr($imgdatatmp[$i], "target=") ? str_replace('target=', '', $imgdatatmp[$i]) : $item->imgtarget;
		}

		if ($item->imgvideo)
			$item->slideselect = 'video';
		
		// manage the title and description
		if (stristr($item->imgcaption, "||")) {
			$splitcaption = explode("||", $item->imgcaption);
			$item->imgcaption = '<div class="slideshowck_title">' . $splitcaption[0] . '</div><div class="slideshowck_description">' . $splitcaption[1] . '</div>';
		}

		if (isset($item->slidearticleid) && $item->slidearticleid) {
			$item = self::getArticle($item, $params);
		}

		return $item;
	}

	/**
	 * Set the correct video link
	 *
	 * $videolink string the video path
	 *
	 * @return string the new video path
	 */
	static function setVideolink($videolink) {
		// youtube
		if (stristr($videolink, 'youtu.be')) {
			$videolink = str_replace('youtu.be', 'www.youtube.com/embed', $videolink);
		} else if (stristr($videolink, 'www.youtube.com') AND !stristr($videolink, 'embed')) {
			$videolink = str_replace('youtube.com', 'youtube.com/embed', $videolink);
		}

		$videolink .= ( stristr($videolink, '?')) ? '&wmode=transparent' : '?wmode=transparent';

		return $videolink;
	}

	/**
	 * Create the list of all modules published as Object
	 *
	 * $file string the image path
	 * $x integer the new image width
	 * $y integer the new image height
	 *
	 * @return Boolean True on Success
	 */
	static function resizeImage($file, $x, $y = '', $thumbpath = 'th', $thumbsuffix = '_th') {

		if (!$file)
			return;

		$params = self::$_params;
		if (!$params->get('autocreatethumbs','1'))
			return;
			
		$thumbext = explode(".", $file);
		$thumbext = end($thumbext);
		$thumbfile = str_replace(\Joomla\CMS\Filesystem\File::getName($file), $thumbpath . "/" . \Joomla\CMS\Filesystem\File::getName($file), $file);
		$thumbfile = str_replace("." . $thumbext, $thumbsuffix . "." . $thumbext, $thumbfile);
		
		$filetmp = JPATH_ROOT . '/' . $file;
		$filetmp = str_replace("%20", " ", $filetmp);
		if (!Jfile::exists($filetmp))
			return;
		$size = getimagesize($filetmp);

		if ($size[0] > $size[1]) // paysage
		{
			$y = $x * $size[1] / $size[0];
		} else 
		{
//			$tmpx = $x;
//			$x = $y;
//			$y = $tmpx * $size[0] / $size[1];
			$x = $y * $size[0] / $size[1];
		}

		
		if ($size) {
			if (\Joomla\CMS\Filesystem\File::exists($thumbfile)) {
				return $thumbfile;
				// $thumbsize = getimagesize(JPATH_ROOT . '/' . $thumbfile);
				// if ($thumbsize[0] == $x || $thumbsuffix == '') {
					// return $thumbfile;
				// }
			}
			
			$thumbfolder = str_replace(\Joomla\CMS\Filesystem\File::getName($file), $thumbpath . "/", $filetmp);
			if (!\Joomla\CMS\Filesystem\Folder::exists($thumbfolder)) { 
				\Joomla\CMS\Filesystem\Folder::create($thumbfolder);
				\Joomla\CMS\Filesystem\File::copy(JPATH_ROOT . '/modules/mod_slideshowck/index.html', $thumbfolder . 'index.html' );
			}

			if ($size['mime'] == 'image/jpeg') {
				$img_big = imagecreatefromjpeg($filetmp); # On ouvre l'image d'origine
				$img_new = imagecreate($x, $y);
				# création de la miniature
				$img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y);
				// copie de l'image, avec le redimensionnement.
				imagecopyresized($img_mini, $img_big, 0, 0, 0, 0, $x, $y, $size[0], $size[1]);

				imagejpeg($img_mini, JPATH_ROOT . '/' . $thumbfile);
			} elseif ($size['mime'] == 'image/png') {
				$img_big = imagecreatefrompng($filetmp); # On ouvre l'image d'origine
				$img_new = imagecreate($x, $y);
				# création de la miniature
				$img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y);
				// copie de l'image, avec le redimensionnement.
				imagecopyresized($img_mini, $img_big, 0, 0, 0, 0, $x, $y, $size[0], $size[1]);

				imagepng($img_mini, JPATH_ROOT . '/' . $thumbfile);
			} elseif ($size['mime'] == 'image/gif') {
				$img_big = imagecreatefromgif($filetmp); # On ouvre l'image d'origine
				$img_new = imagecreate($x, $y);
				# création de la miniature
				$img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y);
				// copie de l'image, avec le redimensionnement.
				imagecopyresized($img_mini, $img_big, 0, 0, 0, 0, $x, $y, $size[0], $size[1]);

				imagegif($img_mini, JPATH_ROOT . '/' . $thumbfile);
			}
			//echo 'Image redimensionnée !';
		}

		return $thumbfile;
	}

	/**
	 * Create the css
	 *
	 * $params \Joomla\Registry\Registry the module params
	 * $prefix integer the prefix of the params
	 *
	 * @return Array of css
	 */
	static function createCss($params, $prefix = 'menu') {
		$css = Array();
		$csspaddingtop = ($params->get($prefix . 'paddingtop') AND $params->get($prefix . 'usemargin')) ? 'padding-top: ' . self::testUnit($params->get($prefix . 'paddingtop', '0')) . ';' : '';
		$csspaddingright = ($params->get($prefix . 'paddingright') AND $params->get($prefix . 'usemargin')) ? 'padding-right: ' . self::testUnit($params->get($prefix . 'paddingright', '0')) . ';' : '';
		$csspaddingbottom = ($params->get($prefix . 'paddingbottom') AND $params->get($prefix . 'usemargin') ) ? 'padding-bottom: ' . self::testUnit($params->get($prefix . 'paddingbottom', '0')) . ';' : '';
		$csspaddingleft = ($params->get($prefix . 'paddingleft') AND $params->get($prefix . 'usemargin')) ? 'padding-left: ' . self::testUnit($params->get($prefix . 'paddingleft', '0')) . ';' : '';
		$css['padding'] = $csspaddingtop . $csspaddingright . $csspaddingbottom . $csspaddingleft;
		$cssmargintop = ($params->get($prefix . 'margintop') AND $params->get($prefix . 'usemargin')) ? 'margin-top: ' . self::testUnit($params->get($prefix . 'margintop', '0')) . ';' : '';
		$cssmarginright = ($params->get($prefix . 'marginright') AND $params->get($prefix . 'usemargin')) ? 'margin-right: ' . self::testUnit($params->get($prefix . 'marginright', '0')) . ';' : '';
		$cssmarginbottom = ($params->get($prefix . 'marginbottom') AND $params->get($prefix . 'usemargin')) ? 'margin-bottom: ' . self::testUnit($params->get($prefix . 'marginbottom', '0')) . ';' : '';
		$cssmarginleft = ($params->get($prefix . 'marginleft') AND $params->get($prefix . 'usemargin')) ? 'margin-left: ' . self::testUnit($params->get($prefix . 'marginleft', '0')) . ';' : '';
		$css['margin'] = $cssmargintop . $cssmarginright . $cssmarginbottom . $cssmarginleft;
		$bgcolor1 = ($params->get($prefix . 'bgcolor1') && $params->get($prefix . 'bgopacity')) ? self::hex2RGB($params->get($prefix . 'bgcolor1'), $params->get($prefix . 'bgopacity')) : $params->get($prefix . 'bgcolor1');
		$css['background'] = '';
		if ($params->get($prefix . 'bgopacity') == '0' AND $params->get($prefix . 'usebackground')) {
			$css['background'] = 'background: transparent;';
		} else if ($params->get($prefix . 'bgcolor1') AND $params->get($prefix . 'usebackground')) {
			$css['background'] = 'background: ' . $bgcolor1 . ';';
		}
//		$css['background'] = ($params->get($prefix . 'bgcolor1') AND $params->get($prefix . 'usebackground')) ? 'background: ' . $bgcolor1 . ';' : '';
		$css['background'] .= ( $params->get($prefix . 'bgimage') AND $params->get($prefix . 'usebackground')) ? 'background-image: url("' . \Joomla\CMS\Uri\Uri::ROOT() . $params->get($prefix . 'bgimage') . '");' : '';
		$css['background'] .= ( $params->get($prefix . 'bgimage') AND $params->get($prefix . 'usebackground')) ? 'background-repeat: ' . $params->get($prefix . 'bgimagerepeat') . ';' : '';
		$css['background'] .= ( $params->get($prefix . 'bgimage') AND $params->get($prefix . 'usebackground')) ? 'background-position: ' . $params->get($prefix . 'bgpositionx') . ' ' . $params->get($prefix . 'bgpositiony') . ';' : '';
		$css['gradient'] = ($css['background'] AND $params->get($prefix . 'bgcolor2') AND $params->get($prefix . 'usegradient')) ?
				"background: -moz-linear-gradient(top,  " . $params->get($prefix . 'bgcolor1', '#f0f0f0') . " 0%, " . $params->get($prefix . 'bgcolor2', '#e3e3e3') . " 100%);"
				. "background: -webkit-gradient(linear, left top, left bottom, color-stop(0%," . $params->get($prefix . 'bgcolor1', '#f0f0f0') . "), color-stop(100%," . $params->get($prefix . 'bgcolor2', '#e3e3e3') . ")); "
				. "background: -webkit-linear-gradient(top,  " . $params->get($prefix . 'bgcolor1', '#f0f0f0') . " 0%," . $params->get($prefix . 'bgcolor2', '#e3e3e3') . " 100%);"
				. "background: -o-linear-gradient(top,  " . $params->get($prefix . 'bgcolor1', '#f0f0f0') . " 0%," . $params->get($prefix . 'bgcolor2', '#e3e3e3') . " 100%);"
				. "background: -ms-linear-gradient(top,  " . $params->get($prefix . 'bgcolor1', '#f0f0f0') . " 0%," . $params->get($prefix . 'bgcolor2', '#e3e3e3') . " 100%);"
				. "background: linear-gradient(top,  " . $params->get($prefix . 'bgcolor1', '#f0f0f0') . " 0%," . $params->get($prefix . 'bgcolor2', '#e3e3e3') . " 100%); "
				. "filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='" . $params->get($prefix . 'bgcolor1', '#f0f0f0') . "', endColorstr='" . $params->get($prefix . 'bgcolor2', '#e3e3e3') . "',GradientType=0 );" : '';
		$css['borderradius'] = ($params->get($prefix . 'useroundedcorners')) ?
				'-moz-border-radius: ' . $params->get($prefix . 'roundedcornerstl', '0') . 'px ' . $params->get($prefix . 'roundedcornerstr', '0') . 'px ' . $params->get($prefix . 'roundedcornersbr', '0') . 'px ' . $params->get($prefix . 'roundedcornersbl', '0') . 'px;'
				. '-webkit-border-radius: ' . $params->get($prefix . 'roundedcornerstl', '0') . 'px ' . $params->get($prefix . 'roundedcornerstr', '0') . 'px ' . $params->get($prefix . 'roundedcornersbr', '0') . 'px ' . $params->get($prefix . 'roundedcornersbl', '0') . 'px;'
				. 'border-radius: ' . $params->get($prefix . 'roundedcornerstl', '0') . 'px ' . $params->get($prefix . 'roundedcornerstr', '0') . 'px ' . $params->get($prefix . 'roundedcornersbr', '0') . 'px ' . $params->get($prefix . 'roundedcornersbl', '0') . 'px;' : '';
		$shadowinset = $params->get($prefix . 'shadowinset', 0) ? 'inset ' : '';
		$css['shadow'] = ($params->get($prefix . 'shadowcolor') AND $params->get($prefix . 'shadowblur') AND $params->get($prefix . 'useshadow')) ?
				'-moz-box-shadow: ' . $shadowinset . $params->get($prefix . 'shadowoffsetx', '0') . 'px ' . $params->get($prefix . 'shadowoffsety', '0') . 'px ' . $params->get($prefix . 'shadowblur', '') . 'px ' . $params->get($prefix . 'shadowspread', '0') . 'px ' . $params->get($prefix . 'shadowcolor', '') . ';'
				. '-webkit-box-shadow: ' . $shadowinset . $params->get($prefix . 'shadowoffsetx', '0') . 'px ' . $params->get($prefix . 'shadowoffsety', '0') . 'px ' . $params->get($prefix . 'shadowblur', '') . 'px ' . $params->get($prefix . 'shadowspread', '0') . 'px ' . $params->get($prefix . 'shadowcolor', '') . ';'
				. 'box-shadow: ' . $shadowinset . $params->get($prefix . 'shadowoffsetx', '0') . 'px ' . $params->get($prefix . 'shadowoffsety', '0') . 'px ' . $params->get($prefix . 'shadowblur', '') . 'px ' . $params->get($prefix . 'shadowspread', '0') . 'px ' . $params->get($prefix . 'shadowcolor', '') . ';' : '';
		$css['border'] = ($params->get($prefix . 'bordercolor') AND $params->get($prefix . 'borderwidth') AND $params->get($prefix . 'useborders')) ?
				'border: ' . $params->get($prefix . 'bordercolor', '#efefef') . ' ' . $params->get($prefix . 'borderwidth', '1') . 'px solid;' : '';
		$css['fontsize'] = ($params->get($prefix . 'usefont') AND $params->get($prefix . 'fontsize')) ?
				'font-size: ' . $params->get($prefix . 'fontsize') . ';' : '';
		$css['fontcolor'] = ($params->get($prefix . 'usefont') AND $params->get($prefix . 'fontcolor')) ?
				'color: ' . $params->get($prefix . 'fontcolor') . ';' : '';
		$css['fontweight'] = ($params->get($prefix . 'usefont') AND $params->get($prefix . 'fontweight')) ?
				'font-weight: ' . $params->get($prefix . 'fontweight') . ';' : '';
		/* $css['fontcolorhover'] = ($params->get($prefix . 'usefont') AND $params->get($prefix . 'fontcolorhover')) ?
		  'color: ' . $params->get($prefix . 'fontcolorhover') . ';' : ''; */
		$css['descfontsize'] = ($params->get($prefix . 'usefont') AND $params->get($prefix . 'descfontsize')) ?
				'font-size: ' . $params->get($prefix . 'descfontsize') . ';' : '';
		$css['descfontcolor'] = ($params->get($prefix . 'usefont') AND $params->get($prefix . 'descfontcolor')) ?
				'color: ' . $params->get($prefix . 'descfontcolor') . ';' : '';
		return $css;
	}

	/**
	 * Truncates text blocks over the specified character limit and closes
	 * all open HTML tags. The method will optionally not truncate an individual
	 * word, it will find the first space that is within the limit and
	 * truncate at that point. This method is UTF-8 safe.
	 *
	 * @param   string   $text       The text to truncate.
	 * @param   integer  $length     The maximum length of the text.
	 * @param   boolean  $noSplit    Don't split a word if that is where the cutoff occurs (default: true).
	 * @param   boolean  $allowHtml  Allow HTML tags in the output, and close any open tags (default: true).
	 *
	 * @return  string   The truncated text.
	 *
	 * @since   11.1
	 */
	public static function truncate($text, $length = 0, $noSplit = true, $allowHtml = true) {
		if ($length == 0) return '';
		// Check if HTML tags are allowed.
		if (!$allowHtml) {
			// Deal with spacing issues in the input.
			$text = str_replace('>', '> ', $text);
			$text = str_replace(array('&nbsp;', '&#160;'), ' ', $text);
			$text = JString::trim(preg_replace('#\s+#mui', ' ', $text));

			// Strip the tags from the input and decode entities.
			$text = strip_tags($text);
			$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');

			// Remove remaining extra spaces.
			$text = str_replace('&nbsp;', ' ', $text);
			$text = JString::trim(preg_replace('#\s+#mui', ' ', $text));
		}

		// Truncate the item text if it is too long.
		if ($length > 0 && JString::strlen($text) > $length) {
			// Find the first space within the allowed length.
			$tmp = JString::substr($text, 0, $length);

			if ($noSplit) {
				$offset = JString::strrpos($tmp, ' ');
				if (JString::strrpos($tmp, '<') > JString::strrpos($tmp, '>')) {
					$offset = JString::strrpos($tmp, '<');
				}
				$tmp = JString::substr($tmp, 0, $offset);

				// If we don't have 3 characters of room, go to the second space within the limit.
				if (JString::strlen($tmp) > $length - 3) {
					$tmp = JString::substr($tmp, 0, JString::strrpos($tmp, ' '));
				}
			}

			if ($allowHtml) {
				// Put all opened tags into an array
				preg_match_all("#<([a-z][a-z0-9]*)\b.*?(?!/)>#i", $tmp, $result);
				$openedTags = $result[1];
				$openedTags = array_diff($openedTags, array("img", "hr", "br"));
				$openedTags = array_values($openedTags);

				// Put all closed tags into an array
				preg_match_all("#</([a-z]+)>#iU", $tmp, $result);
				$closedTags = $result[1];

				$numOpened = count($openedTags);

				// All tags are closed
				if (count($closedTags) == $numOpened) {
					return $tmp . '...';
				}
				$tmp .= '...';
				$openedTags = array_reverse($openedTags);

				// Close tags
				for ($i = 0; $i < $numOpened; $i++) {
					if (!in_array($openedTags[$i], $closedTags)) {
						$tmp .= "</" . $openedTags[$i] . ">";
					} else {
						unset($closedTags[array_search($openedTags[$i], $closedTags)]);
					}
				}
			}

			$text = $tmp;
		}

		return $text;
	}
	
	/**
	 * Convert a hexa decimal color code to its RGB equivalent
	 *
	 * @param string $hexStr (hexadecimal color value)
	 * @param boolean $returnAsString (if set true, returns the value separated by the separator character. Otherwise returns associative array)
	 * @param string $seperator (to separate RGB values. Applicable only if second parameter is true.)
	 * @return array or string (depending on second parameter. Returns False if invalid hex color value)
	 */
	static function hex2RGB($hexStr, $opacity) {
		if (!stristr($opacity, '.'))
			$opacity = $opacity / 100;
		$hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string
		$rgbArray = array();
		if (strlen($hexStr) == 6) { //If a proper hex code, convert using bitwise operation. No overhead... faster
			$colorVal = hexdec($hexStr);
			$rgbArray['red'] = 0xFF & ($colorVal >> 0x10);
			$rgbArray['green'] = 0xFF & ($colorVal >> 0x8);
			$rgbArray['blue'] = 0xFF & $colorVal;
		} elseif (strlen($hexStr) == 3) { //if shorthand notation, need some string manipulations
			$rgbArray['red'] = hexdec(str_repeat(substr($hexStr, 0, 1), 2));
			$rgbArray['green'] = hexdec(str_repeat(substr($hexStr, 1, 1), 2));
			$rgbArray['blue'] = hexdec(str_repeat(substr($hexStr, 2, 1), 2));
		} else {
			return false; //Invalid hex color code
		}
		$rgbacolor = "rgba(" . $rgbArray['red'] . "," . $rgbArray['green'] . "," . $rgbArray['blue'] . "," . $opacity . ")";

		return $rgbacolor;
	}

	/**
	 * Test if there is already a unit, else add the px
	 *
	 * @param string $value
	 * @return string
	 */
	static function testUnit($value) {
		if ((stristr($value, 'px')) OR (stristr($value, 'em')) OR (stristr($value, '%'))) {
			return $value;
		}

		if ($value == '') {
			$value = 0;
		}

		return $value . 'px';
	}

	/*
	 * Make empty slide object
	 */
	public static function initItem() {
		$item = new stdClass();
		$item->imgname = null;
		$item->imgthumb = null;
		$item->imgvideo = null;
		$item->slideselect = null;
		$item->imgcaption = null;
		$item->article = new stdClass();
		$item->slidearticleid = null;
		$item->imgalignment = null;
		$item->imgtarget = 'default';
		$item->imgtime = null;
		$item->imglink = null;
		$item->imgtitle = null;
		$item->article->title = null;
		$item->article->text = null;

		return $item;
	}

	/**
	 * Get a subtring with the max word setting
	 *
	 * @param string $text;
	 * @param int $length limit characters showing;
	 * @param string $replacer;
	 * @return tring;
	 */

	public static function substrword($text, $length = 100, $replacer = '...', $isStrips = true, $stringtags = '') {
		if($isStrips){
			$text = preg_replace('/\<p.*\>/Us','',$text);
			$text = str_replace('</p>','<br/>',$text);
			$text = strip_tags($text, $stringtags);
		}
		$tmp = explode(" ", $text);

		if (count($tmp) < $length)
			return $text;

		$text = implode(" ", array_slice($tmp, 0, $length)) . $replacer;

		return $text;
	}

	/**
	 * Get a subtring with the max length setting.
	 *
	 * @param string $text;
	 * @param int $length limit characters showing;
	 * @param string $replacer;
	 * @return tring;
	 */
	public static function substring($text, $length = 100, $replacer = '...', $isStrips = true, $stringtags = '') {
	
		if($isStrips){
			$text = preg_replace('/\<p.*\>/Us','',$text);
			$text = str_replace('</p>','<br/>',$text);
			$text = strip_tags($text, $stringtags);
		}
		
		if(function_exists('mb_strlen')){
			if (mb_strlen($text) < $length)	return $text;
			$text = mb_substr($text, 0, $length);
		}else{
			if (strlen($text) < $length)	return $text;
			$text = substr($text, 0, $length);
		}
		
		return $text . $replacer;
	}
}
mod_slideshowck/legacy.php000060400000007121152456304320011700 0ustar00<?php

/**
 * @copyright	Copyright (C) 2012-2019 Cedric KEIFLIN alias ced1870
 * https://www.joomlack.fr
 * Module Slideshow CK
 * @license		GNU/GPL
 * */
// no direct access
defined('_JEXEC') or die;

if ($params->get('slideshowckhikashop_enable', '0') == '1') {
	if (\Joomla\CMS\Filesystem\File::exists(JPATH_ROOT . '/plugins/system/slideshowckhikashop/helper/helper_slideshowckhikashop.php')) {
		require_once JPATH_ROOT . '/plugins/system/slideshowckhikashop/helper/helper_slideshowckhikashop.php';
		$items = modSlideshowckhikashopHelper::getItems($params);
	} else {
		echo '<p style="color:red;font-weight:bold;">File /plugins/system/slideshowckhikashop/helper/helper_slideshowckhikashop.php not found ! Please download the patch for Slideshow CK - Hikashop on <a href="https://www.joomlack.fr">https://www.joomlack.fr</a></p>';
		return false;
	}
} else if ($params->get('slideshowckjoomgallery_enable', '0') == '1') {
	if (\Joomla\CMS\Filesystem\File::exists(JPATH_ROOT . '/plugins/system/slideshowckjoomgallery/helper/helper_slideshowckjoomgallery.php')) {
		require_once JPATH_ROOT . '/plugins/system/slideshowckjoomgallery/helper/helper_slideshowckjoomgallery.php';
		$items = modSlideshowckjoomgalleryHelper::getItems($params);
	} else {
		echo '<p style="color:red;font-weight:bold;">File /plugins/system/slideshowckjoomgallery/helper/helper_slideshowckjoomgallery.php not found ! Please download the patch for Slideshow CK - Joomgallery on <a href="https://www.joomlack.fr">https://www.joomlack.fr</a></p>';
		return false;
	}
} else if ($params->get('slideshowckvirtuemart_enable', '0') == '1') {
	if (\Joomla\CMS\Filesystem\File::exists(JPATH_ROOT . '/plugins/system/slideshowckvirtuemart/helper/helper_slideshowckvirtuemart.php')) {
		require_once JPATH_ROOT . '/plugins/system/slideshowckvirtuemart/helper/helper_slideshowckvirtuemart.php';
		$items = modSlideshowckvirtuemartHelper::getItems($params);
	} else {
		echo '<p style="color:red;font-weight:bold;">File /plugins/system/slideshowckvirtuemart/helper/helper_slideshowckvirtuemart.php not found ! Please download the patch for Slideshow CK - Virtuemart on <a href="https://www.joomlack.fr">https://www.joomlack.fr</a></p>';
		return false;
	}
} else if ($params->get('slideshowckk2_enable', '0') == '1') {
	if (\Joomla\CMS\Filesystem\File::exists(JPATH_ROOT . '/plugins/system/slideshowckk2/helper/helper_slideshowckk2.php')) {
		require_once JPATH_ROOT . '/plugins/system/slideshowckk2/helper/helper_slideshowckk2.php';
		$items = modSlideshowckk2Helper::getItems($params);
	} else {
		echo '<p style="color:red;font-weight:bold;">File /plugins/system/slideshowckk2/helper/helper_slideshowckk2.php not found ! Please download the patch for Slideshow CK - K2 on <a href="https://www.joomlack.fr">https://www.joomlack.fr</a></p>';
		return false;
	}
} 

else {
	switch ($params->get('slidesssource', 'slidesmanager')) {
		case 'folder':
			$items = modSlideshowckHelper::getItemsFromfolder($params);

			break;
		case 'autoloadfolder':
			$items = modSlideshowckHelper::getItemsAutoloadfolder($params);

			break;
		case 'autoloadarticlecategory':
			$items = modSlideshowckHelper::getItemsAutoloadarticlecategory($params);
			break;
		case 'flickr':
			$items = modSlideshowckHelper::getItemsAutoloadflickr($params);
			break;
		case 'googlephotos':
			include_once(JPATH_SITE. '/plugins/system/slideshowckparams/helper/class-helpersource-google.php');
			$items = SlideshowckHelpersourceGoogle::getItems($params);
			break;
		default:
//			$items = modSlideshowckHelper::getItems($params);
			break;
	}

//	if ($params->get('displayorder', 'normal') == 'shuffle')
//		shuffle($items);
}
mod_slideshowck/mod_slideshowck.php000060400000020231152456304320013607 0ustar00<?php
/**
 * @copyright	Copyright (C) 2012-2019 Cedric KEIFLIN alias ced1870
 * https://www.joomlack.fr
 * Module Slideshow CK
 * @license		GNU/GPL
 * */

// no direct access
defined('_JEXEC') or die;

include_once JPATH_ROOT . '/administrator/components/com_slideshowck/helpers/defines.php';
include_once JPATH_ROOT . '/administrator/components/com_slideshowck/helpers/helper.php';

if (version_compare(JVERSION, '4', '<')) include_once dirname(__FILE__) . '/helper.php';
if (! defined('SLIDESHOWCK_PATH')) define('SLIDESHOWCK_PATH', JPATH_ROOT . '/administrator/components/com_slideshowck');

// load the items
$source = $params->get('source', 'slidesmanager');
if ($source != 'slidesmanager') {
	$sourceFile = JPATH_ROOT . '/plugins/slideshowck/' . strtolower($source) . '/helper/helper_' . strtolower($source) . '.php';
	if (! file_exists($sourceFile)) {
		echo '<p syle="color:red;">Error : File plugins/slideshowck/' . strtolower($source) . '/helper/helper_' . strtolower($source) . '.php not found !</p>';
		return;
	}
	include_once $sourceFile;
} else {
	include_once SLIDESHOWCK_PATH . '/helpers/source/' . $source . '.php';
}
// store the module ID in the params
$params->set('moduleid', $module->id);
$loaderClass = 'SlideshowckHelpersource' . ucfirst($source);
$items = $loaderClass::getItems($params);

// load items for B/C if the save action has not yet been triggered
if (version_compare(JVERSION, '4', '<')) require dirname(__FILE__) . '/legacy.php';

if (empty($items) || $items === false) {
	if ($params->get('debug', true) === true) echo '<p>SLIDESHOW CK : No items found.</p>';
	return;
}

if ($params->get('displayorder', 'normal') == 'shuffle')
	shuffle($items);

$doc = \Joomla\CMS\Factory::getDocument();
\Joomla\CMS\HTML\HTMLHelper::_("jquery.framework", true);
if ($params->get('loadjqueryeasing', '1')) {
	$doc->addScript(SLIDESHOWCK_MEDIA_URI . '/assets/jquery.easing.1.3.js');
}

$debug = false;
if ($debug) {
	$doc->addScript(SLIDESHOWCK_MEDIA_URI . '/assets/camera.js');
} else {
	$doc->addScript(SLIDESHOWCK_MEDIA_URI . '/assets/camera.min.js?ver=' . SLIDESHOWCK_VERSION);
}

$theme = $params->get('theme', 'default');
$langdirection = $doc->getDirection();

if ($theme == 'default' && file_exists(JPATH_ROOT . '/templates/' . $doc->template . '/css/camera.css')) {
	if ($langdirection == 'rtl' && file_exists(JPATH_ROOT . '/templates/' . $doc->template . '/css/camera_rtl.css')) {
		$cssfilesrc = 'templates/' . $doc->template . '/css/camera_rtl.css';
	} else {
		$cssfilesrc = 'templates/' . $doc->template . '/css/camera.css';
	}
} else {
	if ($langdirection == 'rtl' && file_exists(JPATH_ROOT . '/modules/mod_slideshowck/themes/' . $theme . '/css/camera_rtl.css')) {
		$cssfilesrc = 'modules/mod_slideshowck/themes/' . $theme . '/css/camera_rtl.css';
	} else {
		$cssfilesrc = 'modules/mod_slideshowck/themes/' . $theme . '/css/camera.css';
	}
}
$doc->addStylesheet(\Joomla\CMS\Uri\Uri::root(true) . '/' . $cssfilesrc);

// set the navigation variables
if (count($items) == 1) { // for only one slide, no navigation, no button
	$navigation = "navigationHover: false,
			mobileNavHover: false,
			navigation: false,
			playPause: false,";
} else {
	switch ($params->get('navigation', '2')) {
		case 0:
			// aucune
			$navigation = "navigationHover: false,
				mobileNavHover: false,
				navigation: false,
				playPause: false,";
			break;
		case 1:
			// toujours
			$navigation = "navigationHover: false,
				mobileNavHover: false,
				navigation: true,
				playPause: true,";
			break;
		case 2:
		default:
			// on mouseover
			$navigation = "navigationHover: true,
				mobileNavHover: true,
				navigation: true,
				playPause: true,";
			break;
	}
}

$autoAdvance = (count($items) > 1) ? $params->get('autoAdvance', '1') : '0';
// load the slideshow script
$js = "
		jQuery(document).ready(function(){
			new Slideshowck('#camera_wrap_" . $module->id . "', {
				height: '" . $params->get('height', '400') . "',
				minHeight: '" . $params->get('minheight', '150') . "',
				pauseOnClick: false,
				hover: " . $params->get('hover', '1') . ",
				fx: '" . implode(",", $params->get('effect', array('linear'))) . "',
				loader: '" . $params->get('loader', 'pie') . "',
				pagination: " . $params->get('pagination', '1') . ",
				thumbnails: " . $params->get('thumbnails', '1') . ",
				thumbheight: " . $params->get('thumbnailheight', '100') . ",
				thumbwidth: " . $params->get('thumbnailwidth', '75') . ",
				time: " . $params->get('time', '7000') . ",
				transPeriod: " . $params->get('transperiod', '1500') . ",
				alignment: '" . $params->get('alignment', 'center') . "',
				autoAdvance: " . $autoAdvance . ",
				mobileAutoAdvance: " . $params->get('autoAdvance', '1') . ",
				portrait: " . $params->get('portrait', '0') . ",
				barDirection: '" . $params->get('barDirection', 'leftToRight') . "',
				imagePath: '" . \Joomla\CMS\Uri\Uri::base(true) . "/media/com_slideshowck/images/',
				lightbox: '" . $params->get('lightboxtype', 'mediaboxck') . "',
				fullpage: " . $params->get('fullpage', '0') . ",
				mobileimageresolution: '" . ($params->get('usemobileimage', '0') ? $params->get('mobileimageresolution', '640') : '0') . "',
				" . $navigation . "
				barPosition: '" . $params->get('barPosition', 'bottom') . "',
				responsiveCaption: " . ($params->get('usecaptionresponsive') == '2' ? '1' : '0') . ",
				keyboardNavigation: " . $params->get('keyboardnavigation', '0') . ",
				titleInThumbs: " . $params->get('titleInThumbs', '0') . ",
				container: '" . $params->get('container', '') . "'
		});
}); 
";

if ($params->get('loadinline', '0') == '1') {
	echo '<script>' . $js . '</script>';
} else {
	$doc->addScriptDeclaration($js);
}

$css = '';
// load some css
$css = "#camera_wrap_" . $module->id . " .camera_pag_ul li img, #camera_wrap_" . $module->id . " .camera_thumbs_cont ul li > img {height:" . SlideshowckHelper::testUnit($params->get('thumbnailheight', '75')) . ";}";

// load the caption styles
if (version_compare(JVERSION, '4', '<')) {
$captioncss = modSlideshowckHelper::createCss($params, 'captionstyles');
$fontfamily = ($params->get('captionstylesusefont','0') && $params->get('captionstylestextgfont', '0')) ? "font-family:'" . $params->get('captionstylestextgfont', 'Droid Sans') . "';" : '';
if ($fontfamily) {
	$gfonturl = str_replace(" ", "+", $params->get('captionstylestextgfont', 'Droid Sans'));
	$doc->addStylesheet('https://fonts.googleapis.com/css?family=' . $gfonturl);
}

$css .= "
#camera_wrap_" . $module->id . " .camera_caption {
	display: block;
	position: absolute;
}
#camera_wrap_" . $module->id . " .camera_caption > div {
	" . $captioncss['padding'] . $captioncss['margin'] . $captioncss['background'] . $captioncss['gradient'] . $captioncss['borderradius'] . $captioncss['shadow'] . $captioncss['border'] . $fontfamily . "
}
#camera_wrap_" . $module->id . " .camera_caption > div div.camera_caption_title {
	" . $captioncss['fontcolor'] . $captioncss['fontsize'] . "
}
#camera_wrap_" . $module->id . " .camera_caption > div div.camera_caption_desc {
	" . $captioncss['descfontcolor'] . $captioncss['descfontsize'] . "
}
";
}

if ($params->get('usecaptionresponsive') == '1' || $params->get('usecaptionresponsive') == '2') {
	$css .= "
@media screen and (max-width: " . str_replace("px", "", $params->get('captionresponsiveresolution', '480')) . "px) {
		#camera_wrap_" . $module->id . " .camera_caption {
			" . ( $params->get('captionresponsivehidecaption', '0') == '1' ? "display: none !important;" : ($params->get('usecaptionresponsive') == '1' ? "font-size: " . $params->get('captionresponsivefontsize', '0.6em') ." !important;" : "") ) . "
		}
		" . ( $params->get('captionresponsivehidedescription', '0') == '1' ? "#camera_wrap_" . $module->id . " .camera_caption_desc {display: none !important;}" : "") . "
}";
}

// load the style 
if ($styleId = $params->get('styles', '')) {
	$layoutcss = str_replace('|ID|', '#camera_wrap_' . $module->id, SlideshowckHelper::getStyleLayoutcss($styleId) );
	$css .= $layoutcss;
}

$doc->addStyleDeclaration($css);

// load the php Class for the html fixer
if ($params->get('fixhtml', '0') == '1') include_once SLIDESHOWCK_PATH . '/helpers/htmlfixer.php';

// display the module
require \Joomla\CMS\Helper\ModuleHelper::getLayoutPath('mod_slideshowck', $params->get('layout', 'default'));
mod_slideshowck/mod_slideshowck.xml000060400000062271152456304320013632 0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension
	type="module"
	version="3.0"
	client="site"
	method="upgrade">
	<name>Slideshow CK</name>
	<author>Cédric KEIFLIN</author>
	<creationDate>Avril 2012</creationDate>
	<copyright>Cédric KEIFLIN</copyright>
	<license>GNU/GPL 3 http://www.gnu.org/licenses/gpl.html</license>
	<authorEmail>ced1870@gmail.com</authorEmail>
	<authorUrl>https://www.joomlack.fr</authorUrl>
	<version>2.5.0</version>
	<description>SLIDESHOWCK_XML_DESCRIPTION</description>
	<files>
		<folder>language</folder>
		<folder>themes</folder>
		<folder>tmpl</folder>
		<filename>helper.php</filename>
		<filename>index.html</filename>
		<filename>legacy.php</filename>
		<filename>logo_slideshowck.png</filename>
		<filename module="mod_slideshowck">mod_slideshowck.php</filename>
		<filename>mod_slideshowck.xml</filename>
	</files>
	<languages>
		<language tag="en-GB">language/en-GB/en-GB.mod_slideshowck.ini</language>
		<language tag="en-GB">language/en-GB/en-GB.mod_slideshowck.sys.ini</language>
		<language tag="fr-FR">language/fr-FR/fr-FR.mod_slideshowck.ini</language>
		<language tag="fr-FR">language/fr-FR/fr-FR.mod_slideshowck.sys.ini</language>
	</languages>
	<config>
		<fields name="params">
			<fieldset name="basic" addfieldpath="/administrator/components/com_slideshowck/elements">
				<field 
					name="slideshowckinterface"
					type="slideshowckinterface"
					/>
				<field 
					name="infos" 
					type="ckinfo"
					/>
				<field
					name="infospro"
					type="cklight"
					/>
				<field
					name="joomlackproducts"
					type="ckproducts"
					/>
				<field
					name="v1tov2migration"
					type="ckmigrate"
					/>
			</fieldset>
			<fieldset name="editionfieldset" label="SLIDESHOWCK_SOURCE_FIELDSET_LABEL">
				<field
					name="source"
					type="cksource"
					default="slidesmanager"
					label="SLIDESHOWCK_SLIDESSOURCE_LABEL"
					description="SLIDESHOWCK_SLIDESSOURCE_DESC"
					icon="image_link.png"
				>
					<option value="slidesmanager">SLIDESHOWCK_SOURCE_SLIDESMANAGER</option>
				</field>
				<field
					name="sourceproonly"
					type="ckproonly"
					label="SLIDESHOWCK_SLIDESSOURCE_PRO_ONLY"
				/>
				<field
					name="slides"
					type="ckslidesmanager"
					label="SLIDESHOWCK_SLIDES_LABEL"
					default="[{|qq|imgname|qq|:|qq|media/com_slideshowck/images/slides/bridge.jpg|qq|,|qq|imgcaption|qq|:|qq|This bridge is very long|qq|,|qq|imgtitle|qq|:|qq|This is a bridge|qq|,|qq|imgthumb|qq|:|qq|../media/com_slideshowck/images/slides/bridge.jpg|qq|,|qq|imglink|qq|:|qq||qq|,|qq|imgtarget|qq|:|qq|default|qq|,|qq|imgalignment|qq|:|qq|default|qq|,|qq|imgvideo|qq|:|qq||qq|,|qq|slidearticleid|qq|:|qq||qq|,|qq|slidearticlename|qq|:|qq||qq|,|qq|imgtime|qq|:|qq||qq|},{|qq|imgname|qq|:|qq|media/com_slideshowck/images/slides/road.jpg|qq|,|qq|imgcaption|qq|:|qq|This slideshow uses a JQuery script adapted from Pixedelic|qq|,|qq|imgtitle|qq|:|qq|On the road again|qq|,|qq|imgthumb|qq|:|qq|../media/com_slideshowck/images/slides/road.jpg|qq|,|qq|imglink|qq|:|qq||qq|,|qq|imgtarget|qq|:|qq|default|qq|,|qq|imgalignment|qq|:|qq|default|qq|,|qq|imgvideo|qq|:|qq||qq|,|qq|slidearticleid|qq|:|qq||qq|,|qq|slidearticlename|qq|:|qq||qq|,|qq|imgtime|qq|:|qq||qq|},{|qq|imgname|qq|:|qq|media/com_slideshowck/images/slides2/sea.jpg|qq|,|qq|imgcaption|qq|:|qq||qq|,|qq|imgtitle|qq|:|qq||qq|,|qq|imgthumb|qq|:|qq|../media/com_slideshowck/images/slides2/sea.jpg|qq|,|qq|imglink|qq|:|qq||qq|,|qq|imgtarget|qq|:|qq|default|qq|,|qq|imgalignment|qq|:|qq|default|qq|,|qq|imgvideo|qq|:|qq||qq|,|qq|slidearticleid|qq|:|qq||qq|,|qq|slidearticlename|qq|:|qq||qq|,|qq|imgtime|qq|:|qq||qq|}]"
					filter="raw"
					showon="source:slidesmanager"
				/>
				<field
					name="spacerfolderimport"
					type="slideshowckspacer"
					style="title"
					label="SLIDESHOWCK_SPACERFOLDERIMPORT_LABEL"
					showon="source:slidesmanager"
				/>
				<field
					type="ckproonly"
				/>
			</fieldset>
			<fieldset name="optionsfieldset" label="SLIDESHOWCK_OPTIONS_FIELDSET_LABEL" >
				<field
					name="spacerdisplay"
					type="slideshowckspacer"
					label="SLIDESHOWCK_DISPLAY_OPTIONS_LABEL"
					style="title"
					/>
				<field
					name="theme"
					type="ckfolderlist"
					directory="modules/mod_slideshowck/themes"
					hide_none="true"
					hide_default="true"
					label="SLIDESHOWCK_THEME_LABEL"
					description="SLIDESHOWCK_THEME_DESC"
					icon="photo.png" />
				<field
					name="styles"
					type="ckstyle"
					label="SLIDESHOWCK_SELECT_STYLE_LABEL"
					description="SLIDESHOWCK_SELECT_STYLE_DESC"
					icon="palette.png"
					default=""
					/>

				<field
					name="alignment"
					type="slideshowcklist"
					default="center"
					label="SLIDESHOWCK_ALIGNEMENT_LABEL"
					description="SLIDESHOWCK_ALIGNEMENT_DESC"
					icon="image_alignment.png"
				>
					<option value="topLeft">SLIDESHOWCK_TOPLEFT</option>
					<option value="topCenter">SLIDESHOWCK_TOPCENTER</option>
					<option value="topRight">SLIDESHOWCK_TOPRIGHT</option>
					<option value="centerLeft">SLIDESHOWCK_MIDDLELEFT</option>
					<option value="center">SLIDESHOWCK_CENTER</option>
					<option value="centerRight">SLIDESHOWCK_MIDDLERIGHT</option>
					<option value="bottomLeft">SLIDESHOWCK_BOTTOMLEFT</option>
					<option value="bottomCenter">SLIDESHOWCK_BOTTOMCENTER</option>
					<option value="bottomRight">SLIDESHOWCK_BOTTOMRIGHT</option>
				</field>
				<field
					name="slideshowstylesillustration"
					type="ckbackground"
					background="slideshowck_styles.png"
					styles="height:264px;width:356px;"
				/>
				<field
					name="loader"
					type="slideshowcklist"
					default="pie"
					label="SLIDESHOWCK_LOADER_LABEL"
					description="SLIDESHOWCK_LOADER_DESC"
					icon="arrow_rotate_clockwise.png"
				>
					<option value="pie">SLIDESHOWCK_LOADER_PIE</option>
					<option value="bar">SLIDESHOWCK_LOADER_BAR</option>
					<option value="none">SLIDESHOWCK_LOADER_NONE</option>
				</field>

				<field
					name="width"
					type="slideshowcktext"
					default="auto"
					label="SLIDESHOWCK_WIDTH_LABEL"
					description="SLIDESHOWCK_WIDTH_DESC"
					icon="width.png"
					suffix=""
				/>
				<field
					name="height"
					type="ckheight"
					default="62%"
					label="SLIDESHOWCK_HEIGHT_LABEL"
					description="SLIDESHOWCK_HEIGHT_DESC"
					icon="height.png"
					suffix=""
				/>
				<field
					name="minheight"
					type="slideshowcktext"
					default="150"
					label="SLIDESHOWCK_MINHEIGHT_LABEL"
					description="SLIDESHOWCK_MINHEIGHT_DESC"
					suffix="px"
				/>
				<field
					name="navigation"
					type="slideshowckradio"
					default="2"
					label="SLIDESHOWCK_NAVIGATION_LABEL"
					description="SLIDESHOWCK_NAVIGATION_DESC"
					class="btn-group"
					icon="resultset_next.png"
				>
					<option value="2">SLIDESHOWCK_NAVIGATION_HOVER</option>
					<option value="1">SLIDESHOWCK_NAVIGATION_ALWAYS</option>
					<option value="0">SLIDESHOWCK_NAVIGATION_NONE</option>
				</field>
				<field
					name="skin"
					type="slideshowcklist"
					default="camera_amber_skin"
					label="SLIDESHOWCK_SKIN_LABEL"
					description="SLIDESHOWCK_SKIN_DESC"
					icon="palette.png" >
					<option value="camera_amber_skin">amber</option>
					<option value="camera_ash_skin">ash</option>
					<option value="camera_azure_skin">azure</option>
					<option value="camera_beige_skin">beige</option>
					<option value="camera_black_skin">black</option>
					<option value="camera_blue_skin">blue</option>
					<option value="camera_brown_skin">brown</option>
					<option value="camera_burgundy_skin">burgundy</option>
					<option value="camera_charcoal_skin">charcoal</option>
					<option value="camera_chocolate_skin">chocolate</option>
					<option value="camera_coffee_skin">coffee</option>
					<option value="camera_cyan_skin">cyan</option>
					<option value="camera_fuchsia_skin">fuchsia</option>
					<option value="camera_gold_skin">gold</option>
					<option value="camera_green_skin">green</option>
					<option value="camera_grey_skin">grey</option>
					<option value="camera_indigo_skin">indigo</option>
					<option value="camera_khaki_skin">khaki</option>
					<option value="camera_lime_skin">lime</option>
					<option value="camera_magenta_skin">magenta</option>
					<option value="camera_maroon_skin">maroon</option>
					<option value="camera_orange_skin">orange</option>
					<option value="camera_olive_skin">olive</option>
					<option value="camera_pink_skin">pink</option>
					<option value="camera_pistachio_skin">pistachio</option>
					<option value="camera_pink_skin">pink</option>
					<option value="camera_red_skin">red</option>
					<option value="camera_tangerine_skin">tangerine</option>
					<option value="camera_turquoise_skin">turquoise</option>
					<option value="camera_violet_skin">violet</option>
					<option value="camera_white_skin">white</option>
					<option value="camera_yellow_skin">yellow</option>
				</field>
				<field
					name="thumbnails"
					type="slideshowckradio"
					default="1"
					label="SLIDESHOWCK_THUMBNAILS_LABEL"
					description="SLIDESHOWCK_THUMBNAILS_DESC"
					class="btn-group"
					icon="pictures.png"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="titleInThumbs"
					type="slideshowckradio"
					default="0"
					label="SLIDESHOWCK_TITLE_IN_THUMBNAILS_LABEL"
					class="btn-group"
					showon="thumbnails:1"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>

				<field
					name="thumbnailwidth"
					type="slideshowcktext"
					default="100"
					label="SLIDESHOWCK_THUMBNAILWIDTH_LABEL"
					description="SLIDESHOWCK_THUMBNAILWIDTH_DESC"
					suffix="px"
				/>

				<field
					name="thumbnailheight"
					type="slideshowcktext"
					default="75"
					label="SLIDESHOWCK_THUMBNAILHEIGHT_LABEL"
					description="SLIDESHOWCK_THUMBNAILHEIGHT_DESC"
					suffix="px"
				/>

				<field
					name="pagination"
					type="slideshowckradio"
					default="1"
					label="SLIDESHOWCK_PAGINATION_LABEL"
					description="SLIDESHOWCK_PAGINATION_DESC"
					class="btn-group"
					icon="edit-list-order.png"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="displayorder"
					type="slideshowcklist"
					default="normal"
					label="SLIDESHOWCK_DISPLAYORDER_LABEL"
					description="SLIDESHOWCK_DISPLAYORDER_DESC"
					icon="control_repeat.png"
				>
					<option value="normal">SLIDESHOWCK_DISPLAYORDER_NORMAL</option>
					<option value="shuffle">SLIDESHOWCK_DISPLAYORDER_SHUFFLE</option>
				</field>
				<field
					name="limitslides"
					type="slideshowcktext"
					default=""
					label="SLIDESHOWCK_NUMBER_SLIDES_LABEL"
					description="SLIDESHOWCK_NUMBER_SLIDES_DESC"
					icon="application_cascade.png"
					
					/>
				<field
					name="spacertext"
					type="slideshowckspacer"
					label="SLIDESHOWCK_TEXT_OPTIONS_LABEL"
					style="title"
					/>
				<field
					name="usecaption"
					type="slideshowckradio"
					label="SLIDESHOWCK_USECAPTION_LABEL"
					description="SLIDESHOWCK_USECAPTION_DESC"
					icon="switch.png"
					class="btn-group"
					default="1"
					>
						<option value="0">JNO</option>
						<option value="1">JYES</option>
				</field>
				<field
					name="usetitle"
					type="slideshowckradio"
					label="SLIDESHOWCK_USETITLE_LABEL"
					description="SLIDESHOWCK_USETITLE_DESC"
					icon="switch.png"
					class="btn-group"
					default="1"
					showon="usecaption:1"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="usecaptiondesc"
					type="slideshowckradio"
					label="SLIDESHOWCK_USECAPTIONDESC_LABEL"
					description="SLIDESHOWCK_USECAPTIONDESC_DESC"
					icon="switch.png"
					class="btn-group"
					default="1"
					showon="usecaption:1"
					>
						<option value="0">JNO</option>
						<option value="1">JYES</option>
				</field>
				<field
					name="textlength"
					type="slideshowcktext"
					default=""
					label="SLIDESHOWCK_ARTICLELENGTH_LABEL"
					description="SLIDESHOWCK_ARTICLELENGTH_DESC"
					icon="text_signature.png"
					showon="usecaption:1"
				/>
				<field
					name="striptags"
					type="slideshowckradio"
					default="1"
					label="SLIDESHOWCK_STRIPTAGS_LABEL"
					description="SLIDESHOWCK_STRIPTAGS_DESC"
					icon="html.png"
					class="btn-group"
					showon="usecaption:1"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="spacerlink"
					type="slideshowckspacer"
					label="SLIDESHOWCK_LINK_OPTIONS_LABEL"
					style="title"
					/>
				<field
					name="linkposition"
					type="slideshowcklist"
					label="SLIDESHOWCK_LINK_POSITION_LABEL"
					description="SLIDESHOWCK_LINK_POSITION_DESC"
					icon="link.png"
					default="fullslide"
					>
					<option value="fullslide">SLIDESHOWCK_LINK_FULLSLIDE</option>
					<option value="title">SLIDESHOWCK_LINK_TITLE</option>
					<option value="button">SLIDESHOWCK_LINK_BUTTON</option>
					<option value="none">SLIDESHOWCK_NONE</option>
				</field>
				<field
					name="linkbuttontext"
					type="slideshowcktext"
					label="SLIDESHOWCK_LINK_BUTTON_TEXT_LABEL"
					description="SLIDESHOWCK_LINK_BUTTON_TEXT_DESC"
					icon="text_signature.png"
					default="SLIDESHOWCK_LINK_BUTTON_TEXT"
					showon="linkposition:button"
					/>
				<field
					name="linkbuttonclass"
					type="slideshowcktext"
					label="SLIDESHOWCK_LINK_BUTTON_CLASS_LABEL"
					description="SLIDESHOWCK_LINK_BUTTON_CLASS_DESC"
					icon="css.png"
					default="btn"
					showon="linkposition:button"
					/>
				<field
					name="linkautoimage"
					type="slideshowckradio"
					label="SLIDESHOWCK_LINK_AUTOIMAGE_LABEL"
					description="SLIDESHOWCK_LINK_AUTOIMAGE_DESC"
					icon="link_add.png"
					default="0"
					class="btn-group"
					showon="linkposition!:none"
					>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="linktarget"
					type="slideshowcklist"
					label="SLIDESHOWCK_LINK_TARGET_LABEL"
					description="SLIDESHOWCK_LINK_TARGET_DESC"
					icon="link_go.png"
					default="_parent"
					showon="linkposition!:none"
					>
					<option value="_parent">SLIDESHOWCK_LINK_SAME_WINDOW</option>
					<option value="_blank">SLIDESHOWCK_LINK_NEW_WINDOW</option>
				</field>
				<field
					name="spacerlightbox"
					type="slideshowckspacer"
					label="SLIDESHOWCK_LIGHTBOX_SPACER_LABEL"
					style="title"
					/>
				<field
					type="ckproonly"
				/>
			</fieldset>

			<fieldset name="effects" label="SLIDESHOWCK_EFFECTS_OPTIONS">

				<field
					name="effect"
					type="slideshowcklist"
					default="random"
					multiple="true"
					label="SLIDESHOWCK_EFFECT_LABEL"
					description="SLIDESHOWCK_EFFECT_DESC"
					icon="application_view_gallery.png"
					styles="width:200px;"
				>
					<option value="random">random</option>
					<option value="kenburns">kenburns</option>
					<option value="simpleFade">simpleFade</option>
					<option value="curtainTopLeft">curtainTopLeft</option>
					<option value="curtainTopRight">curtainTopRight</option>
					<option value="curtainBottomLeft">curtainBottomLeft</option>
					<option value="curtainBottomRight">curtainBottomRight</option>
					<option value="curtainSliceLeft">curtainSliceLeft</option>
					<option value="curtainSliceRight">curtainSliceRight</option>
					<option value="blindCurtainTopLeft">blindCurtainTopLeft</option>
					<option value="blindCurtainTopRight">blindCurtainTopRight</option>
					<option value="blindCurtainBottomLeft">blindCurtainBottomLeft</option>
					<option value="blindCurtainBottomRight">blindCurtainBottomRight</option>
					<option value="blindCurtainSliceBottom">blindCurtainSliceBottom</option>
					<option value="blindCurtainSliceTop">blindCurtainSliceTop</option>
					<option value="stampede">stampede</option>
					<option value="mosaic">mosaic</option>
					<option value="mosaicReverse">mosaicReverse</option>
					<option value="mosaicRandom">mosaicRandom</option>
					<option value="mosaicSpiral">mosaicSpiral</option>
					<option value="mosaicSpiralReverse">mosaicSpiralReverse</option>
					<option value="topLeftBottomRight">topLeftBottomRight</option>
					<option value="bottomRightTopLeft">bottomRightTopLeft</option>
					<option value="bottomLeftTopRight">bottomLeftTopRight</option>
					<option value="bottomLeftTopRight">bottomLeftTopRight</option>
					<option value="scrollLeft">scrollLeft</option>
					<option value="scrollRight">scrollRight</option>
					<option value="scrollHorz">scrollHorz</option>
					<option value="scrollBottom">scrollBottom</option>
					<option value="scrollTop">scrollTop</option>
				</field>

				<field
					name="time"
					type="slideshowcktext"
					default="7000"
					label="SLIDESHOWCK_TIME_LABEL"
					description="SLIDESHOWCK_TIME_DESC"
					icon="hourglass.png"
					suffix="ms" />

				<field
					name="transperiod"
					type="slideshowcktext"
					default="1500"
					label="SLIDESHOWCK_TRANSPERIOD_LABEL"
					description="SLIDESHOWCK_TRANSPERIOD_DESC"
					icon="hourglass.png"
					suffix="ms" />
				<field
					name="captioneffect"
					type="slideshowcklist"
					default="random"
					label="SLIDESHOWCK_CAPTIONEFFECT_LABEL"
					description="SLIDESHOWCK_CAPTIONEFFECT_DESC"
					icon="application_view_gallery.png"
					styles=""
				>
					<option value="moveFromLeft">moveFromLeft</option>
					<option value="moveFromRight">moveFromRight</option>
					<option value="moveFromTop">moveFromTop</option>
					<option value="moveFromBottom">moveFromBottom</option>
					<option value="fadeIn">fadeIn</option>
					<option value="fadeFromLeft">fadeFromLeft</option>
					<option value="fadeFromRight">fadeFromRight</option>
					<option value="fadeFromTop">fadeFromTop</option>
					<option value="fadeFromBottom">fadeFromBottom</option>
					<option value="none">none</option>
				</field>
				<field
					name="portrait"
					type="slideshowckradio"
					default="0"
					label="SLIDESHOWCK_PORTRAIT_LABEL"
					description="SLIDESHOWCK_PORTRAIT_DESC"
					icon="shape_handles.png"
					class="btn-group"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>

				<field
					name="autoAdvance"
					type="slideshowckradio"
					default="1"
					label="SLIDESHOWCK_AUTOADVANCE_LABEL"
					description="SLIDESHOWCK_AUTOADVANCE_DESC"
					icon="control_play.png"
					class="btn-group"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>

				<field
					name="hover"
					type="slideshowckradio"
					default="1"
					label="SLIDESHOWCK_HOVER_LABEL"
					description="SLIDESHOWCK_HOVER_DESC"
					icon="control_pause.png"
					class="btn-group"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="keyboardnavigation"
					type="slideshowckradio"
					default="0"
					label="SLIDESHOWCK_KEYBOARD_CONTROL_LABEL"
					description="SLIDESHOWCK_KEYBOARD_CONTROL_DESC"
					class="btn-group"
					icon="keyboard.png"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="fullpage"
					type="slideshowckradio"
					default="0"
					label="SLIDESHOWCK_FULLPAGE_LABEL"
					description="SLIDESHOWCK_FULLPAGE_DESC"
					class="btn-group"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				
				<field
					name="container"
					type="slideshowcktext"
					default=""
					label="SLIDESHOWCK_CONTAINER_LABEL"
					description="SLIDESHOWCK_CONTAINER_DESC"
					class="btn-group"
				/>
				
				
			</fieldset>
			<fieldset name="responsiveoptions" label="SLIDESHOWCK_RESPONSIVE">
				<field 
					name="mobileimagespacer"
					label="SLIDESHOWCK_MOBILEIMAGE_SPACER_LABEL"
					type="slideshowckspacer"
					style="title"
				/>
				<field
					name="usemobileimage"
					type="slideshowckradio"
					default="0"
					label="SLIDESHOWCK_USEMOBILEIMAGE_LABEL"
					description="SLIDESHOWCK_USEMOBILEIMAGE_DESC"
					class="btn-group"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="mobileimageresolution"
					type="slideshowcktext"
					default="640"
					label="SLIDESHOWCK_MOBILEIMAGERESOLUTION_LABEL"
					description="SLIDESHOWCK_MOBILEIMAGERESOLUTION_DESC"
					icon="width.png"
					suffix="px" 
				/>
				<field
					name="captionresponsiveckspacer"
					type="slideshowckspacer"
					label="SLIDESHOWCK_SPACER_RESPONSIVE"
					style="title"
				/>
				<field
					name="usecaptionresponsive"
					type="slideshowcklist"
					label="SLIDESHOWCK_USERESPONSIVECAPTION_LABEL"
					description="SLIDESHOWCK_USERESPONSIVECAPTION_DESC"
					icon="ipod.png"
					class="btn-group"
					default="1"
					>
						<option value="2">SLIDESHOWCK_RESOLUTION_ADAPTATIVE</option>
						<option value="1">SLIDESHOWCK_RESOLUTION_STEP</option>
						<option value="0">JNO</option>
				</field>
				<field
					name="captionresponsiveresolution"
					type="slideshowcktext"
					label="SLIDESHOWCK_RESPONSIVERESOLUTION_LABEL"
					description="SLIDESHOWCK_RESPONSIVERESOLUTION_DESC"
					icon="width.png"
					default="480"
					showon="usecaptionresponsive!:0"
				/>
				<field
					name="captionresponsivefontsize"
					type="slideshowcktext"
					label="SLIDESHOWCK_RESPONSIVEFONTSIZE_LABEL"
					description="SLIDESHOWCK_RESPONSIVEFONTSIZE_DESC"
					icon="style.png"
					default="0.6em"
					showon="usecaptionresponsive:1"
				/>
				<field
					name="captionresponsivehidecaption"
					type="slideshowckradio"
					label="SLIDESHOWCK_RESPONSIVEHIDECAPTION_LABEL"
					description="SLIDESHOWCK_RESPONSIVEHIDECAPTION_DESC"
					icon="style_delete.png"
					class="btn-group"
					default="0"
					showon="usecaptionresponsive!:0"
					>
						<option value="0">JNO</option>
						<option value="1">JYES</option>
				</field>
				<field
					name="captionresponsivehidedescription"
					type="slideshowckradio"
					label="SLIDESHOWCK_RESPONSIVEHIDEDESCRIPTION_LABEL"
					description="SLIDESHOWCK_RESPONSIVEHIDEDESCRIPTION_DESC"
					icon="style_delete.png"
					class="btn-group"
					default="0"
					showon="usecaptionresponsive!:0[AND]captionresponsivehidecaption:0"
					>
						<option value="0">JNO</option>
						<option value="1">JYES</option>
				</field>
			</fieldset>
			<fieldset name="advanced">
				<field
					name="loadjqueryeasing"
					type="slideshowckradio"
					default="1"
					label="SLIDESHOWCK_LOADJQUERYEASING_LABEL"
					description="SLIDESHOWCK_LOADJQUERYEASING_DESC"
					icon="page_white_wrench.png"
					class="btn-group"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				
				<field
					name="autocreatethumbs"
					type="slideshowckradio"
					default="1"
					label="SLIDESHOWCK_AUTOCREATETHUMBS_LABEL"
					description="SLIDESHOWCK_AUTOCREATETHUMBS_DESC"
					icon="application_cascade.png"
					class="btn-group"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="usethumbstype"
					type="slideshowckradio"
					default="mini"
					label="SLIDESHOWCK_THUMBSTYPE_LABEL"
					description="SLIDESHOWCK_THUMBSTYPE_DESC"
					class="btn-group"
				>
					<option value="mini">SLIDESHOWCK_THUMBSTYPE_MINI</option>
					<option value="normal">SLIDESHOWCK_THUMBSTYPE_NORMAL</option>
				</field>
				<field
					name="fixhtml"
					type="slideshowckradio"
					default="0"
					label="SLIDESHOWCK_FIXHTML_LABEL"
					description="SLIDESHOWCK_FIXHTML_DESC"
					icon="bug_delete.png"
					class="btn-group"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="content_prepare"
					type="slideshowckradio"
					default="1"
					label="SLIDESHOWCK_CONTENT_PREPARE_LABEL"
					description="SLIDESHOWCK_CONTENT_PREPARE_DESC"
					class="btn-group"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="debug"
					type="slideshowckradio"
					default="1"
					label="SLIDESHOWCK_DEBUG_LABEL"
					description="SLIDESHOWCK_DEBUG_DESC"
					class="btn-group"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="loadinline"
					type="slideshowckradio"
					default="0"
					label="SLIDESHOWCK_LOAD_INLINE_LABEL"
					description="SLIDESHOWCK_LOAD_INLINE_DESC"
					class="btn-group"
				>
					<option value="0">JNO</option>
					<option value="1">JYES</option>
				</field>
				<field
					name="layout"
					type="modulelayout"
					label="JFIELD_ALT_LAYOUT_LABEL"
					description="JFIELD_ALT_MODULE_LAYOUT_DESC"
					icon="layout.png" />

				<field
					name="moduleclass_sfx"
					type="slideshowcktext"
					label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
					description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC"
					icon="text_signature.png" />

				<field
					name="cache"
					type="slideshowcklist"
					default="1"
					label="COM_MODULES_FIELD_CACHING_LABEL"
					description="COM_MODULES_FIELD_CACHING_DESC" >
					<option	value="1">JGLOBAL_USE_GLOBAL</option>
					<option	value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
				</field>

				<field
					name="cache_time"
					type="slideshowcktext"
					default="900"
					label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
					description="COM_MODULES_FIELD_CACHE_TIME_DESC"
					icon="hourglass.png"
					suffix="min" />

				<field
					name="cachemode"
					type="hidden"
					default="itemid" >
					<option	value="itemid"></option>
				</field>

			</fieldset>
		</fields>
	</config>
</extension>
mod_slideshowck/logo_slideshowck.png000060400000007125152456304320013774 0ustar00�PNG


IHDR@@�iq�sBIT|d�	pHYs��:���tEXtSoftwarewww.inkscape.org��<
�IDATx�ݚ{��]�?�������a�v];�ڍ�68�4.uJ�T})�ABQ@@�^AUB�
h����@ʓ�4�ݒƯƎ���^������sܝ�sggf�>�?8��93s�|����1sW

M���y���X�~#���o����E��y�^*�$�q�RI0��]$���@�� ��X����Q$_�
��xd�ul)�@�m,�A�q��`��n����$����I
j$)!z�*���]m�k��,�wKK!�nX_J�<XM$��Z��֐�_*�_
�'m�,|#*��	a�մ���u|h�� ��RA���{�� ,W
Q��?���`���^���KI�q�#!�X���O�+	��(�q�����Y=HBl\���/֢|?H�r^�y�I�J��M#!..5�%Y=���q?�����~D)�w�c�@S3��(�-D�PXw?��#u5��b��R����~�����~�1����L^D�>�w�q��M����:�K�7�vf~�I�_=�dc(�ۉp��ξ�5j�F�O@�:쎵X/�.r�j��mK,K��r{��<�6*�; ݊��!eY��n�ػ
պ����8�c�r���b�v���.|�k[���|
�A(9s{�T�;�۳�>�A �\E�x�1��G\8X#�c1q��ҽ�D������`	S�GJۑU`z�#PΣs]����\@��yj%�-1��?�� %Vq
����B
���7����C���)ĕ�*U�-��Z������V��d~��G���Ď!0���b翞��>�;����,������ǫj�w�"��1�A<9!`���g��k��q��ĭ�ؖD�j@�B¦=dN��s����
�=���Jڝ�����'C��Z���S���eЪ*q)�dI�K�i:���
�6�ܣ��^sN���+�)�T�/$�翌�u⌞�l؅�ɋ�>��,��=�N��҃;�}�kuA��0�/?G�ßE�:Mi��-�>�z��HK��K��֋�v�>��[�J�@J�M{k�'��Na����O�	��y0k���#ؖ-�`M]#%2ׁ37��́7��8�<:�	W!�>J靗H
�=�m��߇۱��^��E��h]\��A�ܹAy����^z�S8�<�`���%ƒHǩL�R���t@[^�@����Xo�=j�>L[Xz�nt�ے�ޖ�-��0��	Ws��"��aR��2jݽ4��B�
��!�ev�VJ~TL�5���r;5n%%��(!��Ag�1A��II��eJ�מETj�қ���=�P�>��ۂ��XrA�pl�F!r-�R"�t(N&�B�˳�[�h��o�Fޅ��Ar��l;��~eAj�H��ȓ`YB�̶��N��A���8�)W��y��A�
�� �?�g�7����M�}q�%�ˁ{���Jam�i���`��	)��$���Z��{5z��;���P�3�u��d��So=���t>��2�zfb������g�4ה���/�j�i�&�ڍ*�3����֠n��JgQ7Nan�����o���j�`�E�OD������5�ձs�R�UW�ubm�ڋ�փ�kG^9�#Si���o�)�j��}�G���ح����q�`n���5q�0��@�
���hF��0w�M�<�bJ<��C&X��`�:�����q]�	�`�,l…Nx?�{�q��>1�,�*��bF��l�/�5�+��W��9��:KG\�ǀ$�HY*Q$D=l�I��ۑ��oT!Q��a5[TM2�7
:��$ �!���ŕ8��v#�d��I4rM#d��(�>��&�kk��F>D�X�=Q���TuOҜ�}V����5��l�7�Gۖ�4ub5e�����#��6�7��G�>�Ϩ�Qd���=O!s�{���&#�vkv��7?ɕW����DR�s&f��h��YO�g~����>03�y�k6�ӎ��!*G^$�����a���8��w0���(
ۡ��}t�_N�:i��#��>p�ٍ�KcvK����-�*�h��h�~WYM����P����TS��tc��Mt�}��������o$���Y�)2����*;��i��)L/��{A���;�g`��U
���1�/�C��/���)���=�<�?�&�ۗ�9��H���Aו�B��mk
��u�$fvJo�U�^_Q��<��ja`k6���/!Z{�V�=%��o2s�P�|�b�b	\ tP�m����?0�gޠr�u��2r���a��0�@��u�Ë1�A�bx/!`�|�;7(�G��}’,E�1�J@�`��Eɗ�@�N-��kZ�X��S�ո9�����Q<	�k hu]�����ת��a,FFbޠ������F�բ�U(��%*۟�ݸ��V�1ry�yȏb��!j)dDf�0�j@2��ZJ�j��q֯��@yׯc�Z����c���z8�^vԉ��Z�A�*���ՃsEY_��t������Ѥ/�I���P)$K���.:8Vs��眏�^ԏg}o�U���&�t�:�ۧb�D��K!�] t��=���q�~p��[��j�[�~���/���V�@!%H��z��]]w�R��J�0>�4�-?O��~��W��[+�d��z.�m�y�ڂ�F��������7����n�����\x�nox���K!dQx�s��V�R��+ �Z���
����'1���62����wr�VE
�h�6�T�T�ze�_#�~^�
F�t_��[�pi��1�2�dž��A~�Ӵ�:B���*M�(6X===�FY&<f������AiC���5z�+u֏ۏ��-��
���#���۠]��k��P�c�y=�����>�va�2���V���(�Ӝ]���NPnj��D�>��'ɖưT�*D�P�_��q:��`��:����������}L�n�����
Ops�N�ξ@&�!�q��8jD�/�K����e���=.������Y;v�Zaj����<�^��eۉ��z�..~��(�ɟk"3���f���h�XZlX��"�1���Y��aWҦ3k�@�[7n�J�����w�/h�s��>!���D�Q�d�L��5����_�6yzE�䯠�����S
���Nq21ucH��z�o�x�[X���)U����)����~mt(g���;PNe�AZ�ןڇ�@�??�)�њ�����QLw�:}�T%L�A�ۯ�9fs�(+M��Y?�6���͛�R��}݉JyQ}�-
x����R.��I���\�~9d�Iotq���NplR&$�+UA!��x.�A#���X?��(�,��m�8�p7TP��E��V�^$�aV����TA�a$J�Q�������H�SA����+M��}L2IEND�B`�search.php000060400000002570152456736360006543 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

class WFSearchExtension extends WFExtension
{
    private static $instances = array();

    /**
     * Returns a reference to a plugin object.
     *
     * This method must be invoked as:
     *         <pre>  $advlink =AdvLink::getInstance();</pre>
     *
     * @return JCE The editor object
     *
     * @since    1.5
     */
    public static function getInstance($type, $config = array())
    {
        if (!isset(self::$instances)) {
            self::$instances = array();
        }

        if (empty(self::$instances[$type])) {
            $file = WF_EDITOR . '/extensions/search/' . $type . '.php';

            if (is_file($file)) {
                require_once WF_EDITOR . '/extensions/search/' . $type . '.php';
            }

            $classname = 'WF' . ucfirst($type) . 'SearchExtension';

            if (class_exists($classname)) {
                self::$instances[$type] = new $classname($config);
            } else {
                self::$instances[$type] = new self();
            }
        }

        return self::$instances[$type];
    }
}
filesystem.php000060400000016611152456736360007463 0ustar00<?php

/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Uri\Uri;
use Joomla\Registry\Registry;

class WFFileSystem extends WFExtension
{
    /**
     * Constructor activating the default information of the class.
     */
    public function __construct($config = array())
    {
        if (!isset($config['list_limit'])) {
            $config['list_limit'] = 50;
        }

        if (!isset($config['local'])) {
            $config['local'] = true;
        }

        if (!isset($config['readonly'])) {
            $config['readonly'] = false;
        }

        if (!isset($config['list_limit_options'])) {
            $config['list_limit_options'] = array(10, 25, 50, 0);
        }
        
        parent::__construct($config);
    }

    /**
     * Custom parameter function for Filesystems which contain complex values
     *
     * @param [string] $key Parameter key
     * @param string $default Default value to return
     * @return mixed Parameter value or default
     */
    public function getParam($key, $default = '')
    {
        $wf = WFEditorPlugin::getInstance();

        // get the filesystem plugin name
        $name = $this->get('name');

        // First, try from the editor context
        $value = $wf->getParam('editor.filesystem.' . $name . '.' . $key, $default);

        $fsConfig = $wf->getParam($wf->getName() . '.filesystem.' . $name);

        if (is_object($fsConfig) || $wf->getParam($wf->getName() . '.filesystem.name') == $name) {
            $fs = new Registry($fsConfig);
            $value = $fs->get($key, $default);
        }

        return $value;
    }

    /**
     * Returns a reference to a plugin object.
     */
    public static function getInstance($type = 'joomla', $config = array())
    {
        static $instances = array();

        $signature = md5($type . serialize($config));

        if (!isset($instances[$signature])) {
            $fs = parent::loadExtensions('filesystem', $type);

            // load the default...
            if (empty($fs)) {
                $fs = parent::loadExtensions('filesystem', 'joomla');
            }

            // get the first filesystem extension only
            if (is_array($fs)) {
                $fs = array_shift($fs);
            }

            $classname = 'WF' . ucfirst($fs->name) . 'FileSystem';

            // store the name
            $config['name'] = $fs->name;

            if (class_exists($classname)) {
                $instances[$signature] = new $classname($config);
            } else {
                $instances[$signature] = new self($config);
            }
        }

        return $instances[$signature];
    }

    /**
     * Get the base directory.
     *
     * @return string base dir
     */
    public function getBaseDir()
    {
        return JPATH_SITE;
    }

    /**
     * Get the full base url.
     *
     * @return string base url
     */
    public function getBaseURL()
    {
        return Uri::root(true);
    }

    /**
     * Return default directory for the filesystem.
     *
     * @return Relative path to the root directory
     */
    public function getRootDir()
    {
        $wf = WFEditorPlugin::getInstance();
        $name = $this->get('name');

        $allow_root = $wf->getParam('filesystem.' . $name . '.allow_root', 0);

        if ($allow_root) {
            return '';
        }

        return 'images';
    }

    protected static function sortItemsByKey($items, $type)
    {
        $sortable = array();

        // set default direction
        $direction = 'asc';

        if ($type[0] === '-') {
            $direction = 'desc';
            $type = substr($type, 1);
        }

        foreach ($items as $key => $item) {
            $sortable[$key] = isset($item[$type]) ? $item[$type] : $item['properties'][$type];
        }

        array_multisort($sortable, $direction === 'desc' ? SORT_DESC : SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE, $items);

        return $items;
    }

    public function toAbsolute($path)
    {
        return $path;
    }

    public function toRelative($path)
    {
        return $path;
    }

    public function getTotalSize($path, $recurse = true)
    {
        return 0;
    }

    public function countFiles($path, $recurse = false)
    {
        return 0;
    }

    public function getFiles($path, $filter)
    {
        return array();
    }

    public function getFolders($path, $filter)
    {
        return array();
    }

    public function getSourceDir($path)
    {
        return $path;
    }

    public function getSourceDirFromFile($path)
    {
        if ($this->is_file($path)) {
            return $this->getSourceDir($path);
        }

        return $path;
    }

    public function isMatch($needle, $haystack)
    {
        return $needle == $haystack;
    }

    public function pathinfo($path)
    {
        return pathinfo($path);
    }

    public function delete($path)
    {
        return true;
    }

    public function createFolder($path, $new)
    {
        return true;
    }

    public function rename($src, $dest)
    {
        return true;
    }

    public function copy($src, $dest)
    {
        return true;
    }

    public function move($src, $dest)
    {
        return true;
    }

    public function getFolderDetails($path)
    {
        return array(
            'properties' => array('modified' => ''),
        );
    }

    public function getFileDetails($path)
    {
        $data = array(
            'properties' => array(
                'size' => '',
                'modified' => '',
            ),
        );

        if (preg_match('#\.(jpg|jpeg|bmp|gif|tiff|png)#i', $path)) {
            $image = array(
                'properties' => array(
                    'width' => 0,
                    'height' => 0,
                    'preview' => '',
                ),
            );

            return array_merge_recursive($data, $image);
        }

        return $data;
    }

    public function getDimensions($path)
    {
        return array(
            'width' => '',
            'height' => '',
        );
    }

    public function upload($method, $src, $dir, $name, $chunks = 0, $chunk = 0)
    {
        return true;
    }

    public function exists($path)
    {
        return true;
    }

    public function read($path)
    {
        return '';
    }

    public function write($path, $content)
    {
        return true;
    }

    public function isLocal()
    {
        return $this->get('local') === true;
    }

    public function is_file($path)
    {
        return true;
    }

    public function is_dir($path)
    {
        return true;
    }
}

/**
 * Filesystem Error class.
 */
final class WFFileSystemResult
{
    /*
     * @var Object type eg: file / folder
     */

    public $type = 'files';
    /*
     * @boolean    Result state
     */
    public $state = false;
    /*
     * @int    Error code
     */
    public $code = null;
    /*
     * @var Error message
     */
    public $message = null;
    /*
     * @var File / Folder path
     */
    public $path = null;
    /*
     * @var File / Folder url
     */
    public $url = null;
    /*
     * @var Original Source path
     */
    public $source = null;

    public function __construct() {}
}
aggregator.php000060400000006741152456736360007424 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\Filesystem\Folder;

class WFAggregatorExtension extends WFExtension
{
    protected static $instance;

    /**
     * Returns a reference to a plugin object.
     *
     * This method must be invoked as:
     *         <pre>  $advlink =AdvLink::getInstance();</pre>
     *
     * @return JCE The editor object
     *
     * @since    1.5
     */
    public static function getInstance($config = array())
    {
        if (!isset(self::$instance)) {
            self::$instance = new self($config);
        }

        return self::$instance;
    }

    public function getName()
    {
        return $this->get('name');
    }

    public function getTitle()
    {
        return $this->get('title');
    }

    public function display()
    {
        parent::display();

        $document = WFDocument::getInstance();

        $aggregators = $this->getAggregators();

        foreach ($aggregators as $aggregator) {
            $aggregator->display();

            $params = $aggregator->getParams();

            if (!empty($params)) {
                $document->addScriptDeclaration('WFExtensions.Aggregator.setParams("' . $aggregator->getName() . '",' . json_encode($params) . ');');
            }
        }
    }

    public function getAggregators()
    {
        static $aggregators;

        if (!isset($aggregators)) {
            $aggregators = array();
        }

        // get the aggregator format for this instance
        $format = $this->get('format');

        if (empty($aggregators[$format])) {

            // get a plugin instance
            $plugin = WFEditorPlugin::getInstance();

            $aggregators[$format] = array();

            $path = WF_EDITOR_EXTENSIONS . '/aggregator';
            $files = Folder::files($path, '\.php$', false, true);

            foreach ($files as $file) {
                require_once $file;

                $name = basename($file, '.php');
                $classname = 'WFAggregatorExtension_' . ucfirst($name);

                // only load if enabled
                if (class_exists($classname)) {
                    $aggregator = new $classname();

                    // check if enabled
                    if ($aggregator->isEnabled()) {
                        if ($aggregator->get('format') == $format) {
                            $aggregator->set('name', $name);
                            $aggregator->set('title', 'WF_AGGREGATOR_' . strtoupper($name) . '_TITLE');
                            $aggregators[$format][] = $aggregator;
                        }
                    }
                }
            }
        }

        return $aggregators[$format];
    }

    /**
     * @param object $player
     *
     * @return string
     */
    public function loadTemplate($name, $tpl = '')
    {
        $path = WF_EDITOR_EXTENSIONS . '/aggregator/' . $name;

        $output = '';

        $file = 'default.php';

        if ($tpl) {
            $file = 'default_' . $tpl . '.php';
        }

        if (file_exists($path . '/tmpl/' . $file)) {
            ob_start();

            include $path . '/tmpl/' . $file;

            $output .= ob_get_contents();
            ob_end_clean();
        }

        return $output;
    }
}
popups.php000060400000010775152456736360006632 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\Filesystem\Path;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;

class WFPopupsExtension extends WFExtension
{
    protected static $instance;

    private $_popups = array();
    private $_templates = array();

    /**
     * Constructor activating the default information of the class.
     */
    public function __construct($config = array())
    {
        parent::__construct($config);

        $this->setProperties($config);
    }

    /**
     * Returns a reference to a plugin object.
     *
     * This method must be invoked as:
     *    <pre>  $advlink =AdvLink::getInstance();</pre>
     *
     * @return JCE The editor object
     *
     * @since 1.5
     */
    public static function getInstance($config = array())
    {
        if (!isset(self::$instance)) {
            self::$instance = new self($config);
        }

        return self::$instance;
    }

    public function display()
    {
        parent::display();

        $document = WFDocument::getInstance();

        // get all popups extensions
        $popups = parent::loadExtensions('popups');

        $config = $this->getProperties();

        if ($config) {
            // Create global config
            $document->addScriptDeclaration('WFExtensions.Popups.setConfig(' . json_encode($config) . ');');
        }

        // Create an instance of each popup and check if enabled
        foreach ($popups as $item) {
            $popup = $this->getPopupExtension($item->name);

            if ($popup->isEnabled()) {
                $this->addPopup($item);

                $params = $popup->getParams();

                if (!empty($params)) {
                    $document->addScriptDeclaration('WFExtensions.Popups.setParams("' . $item->name . '",' . json_encode($params) . ');');
                }
            }
        }

        $tabs = WFTabs::getInstance();

        // Add popup tab and assign popups reference to document
        if (count($this->getPopups())) {
            $tabs->addTab('popups');
            $panel = $tabs->getPanel('popups');
            $panel->popups = $this;
        }
    }

    private function getPopups()
    {
        return $this->_popups;
    }

    public function addPopup($popup)
    {
        $this->_popups[] = $popup;
    }

    private function getTemplates()
    {
        return $this->_templates;
    }

    public function addTemplate($template)
    {
        $this->_templates[] = $template;
    }

    private function getPopupExtension($name)
    {
        static $popups = array();

        if (!isset($popups[$name])) {
            $classname = 'WFPopupsExtension_' . ucfirst($name);
            $popups[$name] = new $classname();
        }

        return $popups[$name];
    }

    public function getPopupList()
    {
        $options = array();

        $options[] = HTMLHelper::_('select.option', '', '-- ' . Text::_('WF_POPUP_TYPE_SELECT') . ' --');

        foreach ($this->getPopups() as $popup) {
            $options[] = HTMLHelper::_('select.option', $popup->name, Text::_('WF_POPUPS_' . strtoupper($popup->name) . '_TITLE'));
        }

        return HTMLHelper::_('select.genericlist', $options, 'popup_list', '', 'value', 'text', $this->get('default'));
    }

    public function getPopupTemplates()
    {
        $output = '';

        foreach ($this->getTemplates() as $template) {
            $wf = WFEditorPlugin::getInstance();
            $view = $wf->getView();

            $output .= $view->loadTemplate($template);
        }

        foreach ($this->getPopups() as $popup) {
            $view = new WFView(array(
                'name' => $popup->name,
                'base_path' => $popup->path,
                'template_path' => $popup->path . '/tmpl',
            ));

            $instance = $this->getPopupExtension($popup->name);
            $view->popup = $instance;

            if (file_exists($popup->path . '/tmpl/default.php')) {
                ob_start();

                $output .= '<div id="popup_extension_' . $popup->name . '" style="display:none;">';

                $view->display();

                $output .= ob_get_contents();
                $output .= '</div>';
                ob_end_clean();
            }
        }

        return $output;
    }
}
link.php000060400000015476152456736360006244 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Filter\InputFilter;

class WFLinkExtension extends WFExtension
{
    /*
     *  @var varchar
     */

    private $extensions = array();
    protected static $instance;
    protected static $links = array();

    /**
     * Constructor activating the default information of the class.
     */
    public function __construct()
    {
        parent::__construct();

        $extensions = self::loadExtensions('links');

        // Load all link extensions
        foreach ($extensions as $link) {
            $this->extensions[] = $this->getLinkExtension($link->name);
        }

        $request = WFRequest::getInstance();
        $request->setRequest(array($this, 'getLinks'));
    }

    public static function getInstance($config = array())
    {
        if (!isset(self::$instance)) {
            self::$instance = new self($config);
        }

        return self::$instance;
    }

    public function display()
    {
        parent::display();

        foreach ($this->extensions as $extension) {
            $extension->display();
        }
    }

    private function getLinkExtension($name)
    {
        if (array_key_exists($name, self::$links) === false || empty(self::$links[$name])) {
            $classname = 'WFLinkBrowser_' . ucfirst($name);
            // create class
            if (class_exists($classname)) {
                self::$links[$name] = new $classname();
            }
        }

        return self::$links[$name];
    }

    public function getLists()
    {
        $list = array();

        foreach ($this->extensions as $extension) {
            if ($extension->isEnabled()) {
                $list[] = $extension->getList();
            }
        }

        return $list;
    }

    public function render()
    {
        $list = $this->getLists();

        if (empty($list)) {
            return '';
        }

        $view = $this->getView(array('name' => 'links', 'layout' => 'links'));
        $view->list = implode("\n", $list);
        $view->display();
    }

    private static function cleanInput($args, $method = 'string')
    {
        $filter = InputFilter::getInstance();

        foreach ($args as $k => $v) {
            $args->$k = $filter->clean($v, $method);
            $args->$k = (string) filter_var($args->$k, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK);
            $args->$k = htmlspecialchars(strip_tags($args->$k));
        }

        return $args;
    }

    public function getLinks($args)
    {
        $args = self::cleanInput($args, 'STRING');

        foreach ($this->extensions as $extension) {
            if (in_array($args->option, $extension->getOption())) {
                $items = $extension->getLinks($args);
            }
        }
        $array = array();
        $result = array();
        if (isset($items)) {
            foreach ($items as $item) {
                $array[] = array(
                    'id' => isset($item['id']) ? self::xmlEncode($item['id']) : '',
                    'url' => isset($item['url']) ? self::xmlEncode($item['url']) : '',
                    'name' => self::xmlEncode($item['name']), 'class' => $item['class'],
                );
            }
            $result = array('folders' => $array);
        }

        return $result;
    }

    /**
     * Category function used by many extensions.
     *
     * @return Category list object
     *
     * @since    1.5
     */
    public static function getCategory($section, $parent = 1)
    {
        $db = Factory::getDBO();
        $user = Factory::getUser();
        $wf = WFEditorPlugin::getInstance();

        $query = $db->getQuery(true);

        $where = array();

        $version = new Joomla\CMS\Version();
        $language = $version->isCompatible('3.0') ? ', language' : '';

        $where[] = 'parent_id = ' . (int) $parent;
        $where[] = 'extension = ' . $db->Quote($section);

        if (!$user->authorise('core.admin')) {
            $where[] = 'access IN (' . implode(',', $user->getAuthorisedViewLevels()) . ')';
        }

        if (!$wf->checkAccess('static', 1)) {
            $where[] = 'path != ' . $db->Quote('uncategorised');
        }

        $case = '';

        if ($wf->getParam('category_alias', 1) == 1) {
            //sqlsrv changes
            $case = ', CASE WHEN ';
            $case .= $query->charLength('alias', '!=', '0');
            $case .= ' THEN ';

            // Joomla 3 compatibility
            if (method_exists($query, 'castAsChar')) {
                $a_id = $query->castAsChar('id');
            } else {
                $a_id = $query->castAs('CHAR', 'id');
            }

            $case .= $query->concatenate(array($a_id, 'alias'), ':');
            $case .= ' ELSE ';
            $case .= $a_id . ' END as slug';
        }

        $where[] = 'published = 1';
        $query->select('id AS slug, id AS id, title, alias, access' . $language . $case)->from('#__categories')->where($where)->order('title');

        $db->setQuery($query);

        return $db->loadObjectList();
    }

    /**
     * (Attempt to) Get an Itemid.
     *
     * @param string $component
     * @param array  $needles
     *
     * @return Category list object
     */
    public static function getItemId($component, $needles = array())
    {
        $match = null;

        $version = new Joomla\CMS\Version();

        $app = CMSApplication::getInstance('site');
        $tag = $version->isCompatible('4.0') ? 'component_id' : 'componentid';

        $component = ComponentHelper::getComponent($component);
        $menu = $app->getMenu('site');
        $items = $menu->getItems($tag, $component->id);

        if ($items) {
            foreach ($needles as $needle => $id) {
                foreach ($items as $item) {
                    if ((@$item->query['view'] == $needle) && (@$item->query['id'] == $id)) {
                        $match = $item->id;
                        break;
                    }
                }
                if (isset($match)) {
                    break;
                }
            }
        }

        return $match ? '&Itemid=' . $match : '';
    }

    /**
     * XML encode a string.
     *
     * @param     string    String to encode
     *
     * @return string Encoded string
     */
    private static function xmlEncode($string)
    {
        return str_replace(array('&', '<', '>', "'", '"'), array('&amp;', '&lt;', '&gt;', '&apos;', '&quot;'), $string);
    }
}

abstract class WFLinkBrowser extends WFLinkExtension
{
}
mediaplayer.php000060400000006413152456736360007572 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

class WFMediaPlayerExtension extends WFExtension
{
    protected static $instance;

    public function __construct($config = array())
    {
        $default = array(
            'name' => '',
            'title' => '',
            'params' => array(),
        );

        $config = array_merge($default, $config);

        parent::__construct($config);
    }

    /**
     * Returns a reference to a manager object.
     *
     * This method must be invoked as:
     *    <pre>  $manager =MediaManager::getInstance();</pre>
     *
     * @return MediaManager The manager object
     *
     * @since 1.5
     */
    public static function getInstance($name = 'jceplayer')
    {
        if (!isset(self::$instance)) {
            $classname = '';

            if ($name && $name != 'none') {
                $player = parent::loadExtensions('mediaplayer', $name);

                if ($player) {
                    $classname = 'WFMediaPlayerExtension_' . ucfirst($player->name);
                }
            }

            if ($classname && class_exists($classname)) {
                self::$instance = new $classname();
            } else {
                self::$instance = new self();
            }
        }

        return self::$instance;
    }

    public function display()
    {
        parent::display();

        $document = WFDocument::getInstance();

        if ($this->isEnabled() && $this->get('name')) {
            $document->addScript(array(
                'mediaplayer/' . $this->get('name') . '/js/' . $this->get('name'),
            ), 'extensions');

            $document->addStyleSheet(array(
                'mediaplayer/' . $this->get('name') . '/css/' . $this->get('name'),
            ), 'extensions');

            $document->addScriptDeclaration('WFExtensions.MediaPlayer.init(' . json_encode($this->getProperties()) . ')');
        }
    }

    public function isEnabled()
    {
        return false;
    }

    public function getName()
    {
        return $this->get('name');
    }

    public function getTitle()
    {
        return $this->get('title');
    }

    public function getParams()
    {
        return $this->params;
    }

    public function getParam($param, $default = '')
    {
        $params = $this->getParams();

        return isset($params[$param]) ? $params[$param] : $default;
    }

    /**
     * @param object $player
     *
     * @return string
     */
    public function loadTemplate($tpl = '')
    {
        $output = '';

        if ($this->isEnabled()) {
            $path = WF_EDITOR_EXTENSIONS . '/mediaplayer/' . $this->get('name');

            $file = 'default.php';

            if ($tpl) {
                $file = 'default_' . $tpl . '.php';
            }

            if (file_exists($path . '/tmpl/' . $file)) {
                ob_start();

                include $path . '/tmpl/' . $file;

                $output .= ob_get_contents();
                ob_end_clean();
            }
        }

        return $output;
    }
}