Showing
137 changed files
with
14239 additions
and
666 deletions
| 1 | -<?php | ||
| 2 | - | ||
| 3 | -use Twig\Environment; | ||
| 4 | -use Twig\Error\LoaderError; | ||
| 5 | -use Twig\Error\RuntimeError; | ||
| 6 | -use Twig\Extension\CoreExtension; | ||
| 7 | -use Twig\Extension\SandboxExtension; | ||
| 8 | -use Twig\Markup; | ||
| 9 | -use Twig\Sandbox\SecurityError; | ||
| 10 | -use Twig\Sandbox\SecurityNotAllowedTagError; | ||
| 11 | -use Twig\Sandbox\SecurityNotAllowedFilterError; | ||
| 12 | -use Twig\Sandbox\SecurityNotAllowedFunctionError; | ||
| 13 | -use Twig\Source; | ||
| 14 | -use Twig\Template; | ||
| 15 | - | ||
| 16 | -/* default/template/common/content_bottom.twig */ | ||
| 17 | -class __TwigTemplate_20077d3fae6fb4bcc496aed14ba7dad2 extends Template | ||
| 18 | -{ | ||
| 19 | - private $source; | ||
| 20 | - private $macros = []; | ||
| 21 | - | ||
| 22 | - public function __construct(Environment $env) | ||
| 23 | - { | ||
| 24 | - parent::__construct($env); | ||
| 25 | - | ||
| 26 | - $this->source = $this->getSourceContext(); | ||
| 27 | - | ||
| 28 | - $this->parent = false; | ||
| 29 | - | ||
| 30 | - $this->blocks = [ | ||
| 31 | - ]; | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | - protected function doDisplay(array $context, array $blocks = []) | ||
| 35 | - { | ||
| 36 | - $macros = $this->macros; | ||
| 37 | - // line 1 | ||
| 38 | - $context['_parent'] = $context; | ||
| 39 | - $context['_seq'] = CoreExtension::ensureTraversable(($context["modules"] ?? null)); | ||
| 40 | - foreach ($context['_seq'] as $context["_key"] => $context["module"]) { | ||
| 41 | - // line 2 | ||
| 42 | - yield $context["module"]; | ||
| 43 | - yield " | ||
| 44 | -"; | ||
| 45 | - } | ||
| 46 | - $_parent = $context['_parent']; | ||
| 47 | - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['module'], $context['_parent'], $context['loop']); | ||
| 48 | - $context = array_intersect_key($context, $_parent) + $_parent; | ||
| 49 | - return; yield ''; | ||
| 50 | - } | ||
| 51 | - | ||
| 52 | - /** | ||
| 53 | - * @codeCoverageIgnore | ||
| 54 | - */ | ||
| 55 | - public function getTemplateName() | ||
| 56 | - { | ||
| 57 | - return "default/template/common/content_bottom.twig"; | ||
| 58 | - } | ||
| 59 | - | ||
| 60 | - /** | ||
| 61 | - * @codeCoverageIgnore | ||
| 62 | - */ | ||
| 63 | - public function isTraitable() | ||
| 64 | - { | ||
| 65 | - return false; | ||
| 66 | - } | ||
| 67 | - | ||
| 68 | - /** | ||
| 69 | - * @codeCoverageIgnore | ||
| 70 | - */ | ||
| 71 | - public function getDebugInfo() | ||
| 72 | - { | ||
| 73 | - return array ( 42 => 2, 38 => 1,); | ||
| 74 | - } | ||
| 75 | - | ||
| 76 | - public function getSourceContext() | ||
| 77 | - { | ||
| 78 | - return new Source("", "default/template/common/content_bottom.twig", ""); | ||
| 79 | - } | ||
| 80 | -} |
| 1 | -<?php | ||
| 2 | - | ||
| 3 | -use Twig\Environment; | ||
| 4 | -use Twig\Error\LoaderError; | ||
| 5 | -use Twig\Error\RuntimeError; | ||
| 6 | -use Twig\Extension\CoreExtension; | ||
| 7 | -use Twig\Extension\SandboxExtension; | ||
| 8 | -use Twig\Markup; | ||
| 9 | -use Twig\Sandbox\SecurityError; | ||
| 10 | -use Twig\Sandbox\SecurityNotAllowedTagError; | ||
| 11 | -use Twig\Sandbox\SecurityNotAllowedFilterError; | ||
| 12 | -use Twig\Sandbox\SecurityNotAllowedFunctionError; | ||
| 13 | -use Twig\Source; | ||
| 14 | -use Twig\Template; | ||
| 15 | - | ||
| 16 | -/* default/template/common/column_left.twig */ | ||
| 17 | -class __TwigTemplate_6dba69384bf8cae44ff9814eb1a6ed36 extends Template | ||
| 18 | -{ | ||
| 19 | - private $source; | ||
| 20 | - private $macros = []; | ||
| 21 | - | ||
| 22 | - public function __construct(Environment $env) | ||
| 23 | - { | ||
| 24 | - parent::__construct($env); | ||
| 25 | - | ||
| 26 | - $this->source = $this->getSourceContext(); | ||
| 27 | - | ||
| 28 | - $this->parent = false; | ||
| 29 | - | ||
| 30 | - $this->blocks = [ | ||
| 31 | - ]; | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | - protected function doDisplay(array $context, array $blocks = []) | ||
| 35 | - { | ||
| 36 | - $macros = $this->macros; | ||
| 37 | - // line 1 | ||
| 38 | - if (($context["modules"] ?? null)) { | ||
| 39 | - // line 2 | ||
| 40 | - yield "<aside id=\"column-left\" class=\"col-sm-3 hidden-xs\"> | ||
| 41 | - "; | ||
| 42 | - // line 3 | ||
| 43 | - $context['_parent'] = $context; | ||
| 44 | - $context['_seq'] = CoreExtension::ensureTraversable(($context["modules"] ?? null)); | ||
| 45 | - foreach ($context['_seq'] as $context["_key"] => $context["module"]) { | ||
| 46 | - // line 4 | ||
| 47 | - yield " "; | ||
| 48 | - yield $context["module"]; | ||
| 49 | - yield " | ||
| 50 | - "; | ||
| 51 | - } | ||
| 52 | - $_parent = $context['_parent']; | ||
| 53 | - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['module'], $context['_parent'], $context['loop']); | ||
| 54 | - $context = array_intersect_key($context, $_parent) + $_parent; | ||
| 55 | - // line 6 | ||
| 56 | - yield "</aside> | ||
| 57 | -"; | ||
| 58 | - } | ||
| 59 | - return; yield ''; | ||
| 60 | - } | ||
| 61 | - | ||
| 62 | - /** | ||
| 63 | - * @codeCoverageIgnore | ||
| 64 | - */ | ||
| 65 | - public function getTemplateName() | ||
| 66 | - { | ||
| 67 | - return "default/template/common/column_left.twig"; | ||
| 68 | - } | ||
| 69 | - | ||
| 70 | - /** | ||
| 71 | - * @codeCoverageIgnore | ||
| 72 | - */ | ||
| 73 | - public function isTraitable() | ||
| 74 | - { | ||
| 75 | - return false; | ||
| 76 | - } | ||
| 77 | - | ||
| 78 | - /** | ||
| 79 | - * @codeCoverageIgnore | ||
| 80 | - */ | ||
| 81 | - public function getDebugInfo() | ||
| 82 | - { | ||
| 83 | - return array ( 56 => 6, 47 => 4, 43 => 3, 40 => 2, 38 => 1,); | ||
| 84 | - } | ||
| 85 | - | ||
| 86 | - public function getSourceContext() | ||
| 87 | - { | ||
| 88 | - return new Source("", "default/template/common/column_left.twig", ""); | ||
| 89 | - } | ||
| 90 | -} |
| 1 | -<?php | ||
| 2 | - | ||
| 3 | -use Twig\Environment; | ||
| 4 | -use Twig\Error\LoaderError; | ||
| 5 | -use Twig\Error\RuntimeError; | ||
| 6 | -use Twig\Extension\CoreExtension; | ||
| 7 | -use Twig\Extension\SandboxExtension; | ||
| 8 | -use Twig\Markup; | ||
| 9 | -use Twig\Sandbox\SecurityError; | ||
| 10 | -use Twig\Sandbox\SecurityNotAllowedTagError; | ||
| 11 | -use Twig\Sandbox\SecurityNotAllowedFilterError; | ||
| 12 | -use Twig\Sandbox\SecurityNotAllowedFunctionError; | ||
| 13 | -use Twig\Source; | ||
| 14 | -use Twig\Template; | ||
| 15 | - | ||
| 16 | -/* default/template/common/column_right.twig */ | ||
| 17 | -class __TwigTemplate_babf68b5e85aed4f33117758f832b697 extends Template | ||
| 18 | -{ | ||
| 19 | - private $source; | ||
| 20 | - private $macros = []; | ||
| 21 | - | ||
| 22 | - public function __construct(Environment $env) | ||
| 23 | - { | ||
| 24 | - parent::__construct($env); | ||
| 25 | - | ||
| 26 | - $this->source = $this->getSourceContext(); | ||
| 27 | - | ||
| 28 | - $this->parent = false; | ||
| 29 | - | ||
| 30 | - $this->blocks = [ | ||
| 31 | - ]; | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | - protected function doDisplay(array $context, array $blocks = []) | ||
| 35 | - { | ||
| 36 | - $macros = $this->macros; | ||
| 37 | - // line 1 | ||
| 38 | - if (($context["modules"] ?? null)) { | ||
| 39 | - // line 2 | ||
| 40 | - yield "<aside id=\"column-right\" class=\"col-sm-3 hidden-xs\"> | ||
| 41 | - "; | ||
| 42 | - // line 3 | ||
| 43 | - $context['_parent'] = $context; | ||
| 44 | - $context['_seq'] = CoreExtension::ensureTraversable(($context["modules"] ?? null)); | ||
| 45 | - foreach ($context['_seq'] as $context["_key"] => $context["module"]) { | ||
| 46 | - // line 4 | ||
| 47 | - yield " "; | ||
| 48 | - yield $context["module"]; | ||
| 49 | - yield " | ||
| 50 | - "; | ||
| 51 | - } | ||
| 52 | - $_parent = $context['_parent']; | ||
| 53 | - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['module'], $context['_parent'], $context['loop']); | ||
| 54 | - $context = array_intersect_key($context, $_parent) + $_parent; | ||
| 55 | - // line 6 | ||
| 56 | - yield "</aside> | ||
| 57 | -"; | ||
| 58 | - } | ||
| 59 | - return; yield ''; | ||
| 60 | - } | ||
| 61 | - | ||
| 62 | - /** | ||
| 63 | - * @codeCoverageIgnore | ||
| 64 | - */ | ||
| 65 | - public function getTemplateName() | ||
| 66 | - { | ||
| 67 | - return "default/template/common/column_right.twig"; | ||
| 68 | - } | ||
| 69 | - | ||
| 70 | - /** | ||
| 71 | - * @codeCoverageIgnore | ||
| 72 | - */ | ||
| 73 | - public function isTraitable() | ||
| 74 | - { | ||
| 75 | - return false; | ||
| 76 | - } | ||
| 77 | - | ||
| 78 | - /** | ||
| 79 | - * @codeCoverageIgnore | ||
| 80 | - */ | ||
| 81 | - public function getDebugInfo() | ||
| 82 | - { | ||
| 83 | - return array ( 56 => 6, 47 => 4, 43 => 3, 40 => 2, 38 => 1,); | ||
| 84 | - } | ||
| 85 | - | ||
| 86 | - public function getSourceContext() | ||
| 87 | - { | ||
| 88 | - return new Source("", "default/template/common/column_right.twig", ""); | ||
| 89 | - } | ||
| 90 | -} |
| 1 | -<?php | ||
| 2 | - | ||
| 3 | -use Twig\Environment; | ||
| 4 | -use Twig\Error\LoaderError; | ||
| 5 | -use Twig\Error\RuntimeError; | ||
| 6 | -use Twig\Extension\CoreExtension; | ||
| 7 | -use Twig\Extension\SandboxExtension; | ||
| 8 | -use Twig\Markup; | ||
| 9 | -use Twig\Sandbox\SecurityError; | ||
| 10 | -use Twig\Sandbox\SecurityNotAllowedTagError; | ||
| 11 | -use Twig\Sandbox\SecurityNotAllowedFilterError; | ||
| 12 | -use Twig\Sandbox\SecurityNotAllowedFunctionError; | ||
| 13 | -use Twig\Source; | ||
| 14 | -use Twig\Template; | ||
| 15 | - | ||
| 16 | -/* default/template/extension/module/carousel.twig */ | ||
| 17 | -class __TwigTemplate_326e88fa5a1e8d2824b5dfd502a55eeb extends Template | ||
| 18 | -{ | ||
| 19 | - private $source; | ||
| 20 | - private $macros = []; | ||
| 21 | - | ||
| 22 | - public function __construct(Environment $env) | ||
| 23 | - { | ||
| 24 | - parent::__construct($env); | ||
| 25 | - | ||
| 26 | - $this->source = $this->getSourceContext(); | ||
| 27 | - | ||
| 28 | - $this->parent = false; | ||
| 29 | - | ||
| 30 | - $this->blocks = [ | ||
| 31 | - ]; | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | - protected function doDisplay(array $context, array $blocks = []) | ||
| 35 | - { | ||
| 36 | - $macros = $this->macros; | ||
| 37 | - // line 1 | ||
| 38 | - yield "<div class=\"carousel swiper-viewport\"> | ||
| 39 | - <div id=\"carousel"; | ||
| 40 | - // line 2 | ||
| 41 | - yield ($context["module"] ?? null); | ||
| 42 | - yield "\" class=\"swiper-container\"> | ||
| 43 | - <div class=\"swiper-wrapper\">"; | ||
| 44 | - // line 3 | ||
| 45 | - $context['_parent'] = $context; | ||
| 46 | - $context['_seq'] = CoreExtension::ensureTraversable(($context["banners"] ?? null)); | ||
| 47 | - foreach ($context['_seq'] as $context["_key"] => $context["banner"]) { | ||
| 48 | - // line 4 | ||
| 49 | - yield " <div class=\"swiper-slide text-center\">"; | ||
| 50 | - if (CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "link", [], "any", false, false, false, 4)) { | ||
| 51 | - yield "<a href=\""; | ||
| 52 | - yield CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "link", [], "any", false, false, false, 4); | ||
| 53 | - yield "\"><img src=\""; | ||
| 54 | - yield CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "image", [], "any", false, false, false, 4); | ||
| 55 | - yield "\" alt=\""; | ||
| 56 | - yield CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "title", [], "any", false, false, false, 4); | ||
| 57 | - yield "\" class=\"img-responsive\" /></a>"; | ||
| 58 | - } else { | ||
| 59 | - yield "<img src=\""; | ||
| 60 | - yield CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "image", [], "any", false, false, false, 4); | ||
| 61 | - yield "\" alt=\""; | ||
| 62 | - yield CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "title", [], "any", false, false, false, 4); | ||
| 63 | - yield "\" class=\"img-responsive\" />"; | ||
| 64 | - } | ||
| 65 | - yield "</div> | ||
| 66 | - "; | ||
| 67 | - } | ||
| 68 | - $_parent = $context['_parent']; | ||
| 69 | - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['banner'], $context['_parent'], $context['loop']); | ||
| 70 | - $context = array_intersect_key($context, $_parent) + $_parent; | ||
| 71 | - // line 5 | ||
| 72 | - yield "</div> | ||
| 73 | - </div> | ||
| 74 | - <div class=\"swiper-pagination carousel"; | ||
| 75 | - // line 7 | ||
| 76 | - yield ($context["module"] ?? null); | ||
| 77 | - yield "\"></div> | ||
| 78 | - <div class=\"swiper-pager\"> | ||
| 79 | - <div class=\"swiper-button-next\"></div> | ||
| 80 | - <div class=\"swiper-button-prev\"></div> | ||
| 81 | - </div> | ||
| 82 | -</div> | ||
| 83 | -<script type=\"text/javascript\"><!-- | ||
| 84 | -\$('#carousel"; | ||
| 85 | - // line 14 | ||
| 86 | - yield ($context["module"] ?? null); | ||
| 87 | - yield "').swiper({ | ||
| 88 | -\tmode: 'horizontal', | ||
| 89 | -\tslidesPerView: 5, | ||
| 90 | -\tpagination: '.carousel"; | ||
| 91 | - // line 17 | ||
| 92 | - yield ($context["module"] ?? null); | ||
| 93 | - yield "', | ||
| 94 | -\tpaginationClickable: true, | ||
| 95 | -\tnextButton: '.carousel .swiper-button-next', | ||
| 96 | - prevButton: '.carousel .swiper-button-prev', | ||
| 97 | -\tautoplay: 2500, | ||
| 98 | -\tloop: true | ||
| 99 | -}); | ||
| 100 | ---></script>"; | ||
| 101 | - return; yield ''; | ||
| 102 | - } | ||
| 103 | - | ||
| 104 | - /** | ||
| 105 | - * @codeCoverageIgnore | ||
| 106 | - */ | ||
| 107 | - public function getTemplateName() | ||
| 108 | - { | ||
| 109 | - return "default/template/extension/module/carousel.twig"; | ||
| 110 | - } | ||
| 111 | - | ||
| 112 | - /** | ||
| 113 | - * @codeCoverageIgnore | ||
| 114 | - */ | ||
| 115 | - public function isTraitable() | ||
| 116 | - { | ||
| 117 | - return false; | ||
| 118 | - } | ||
| 119 | - | ||
| 120 | - /** | ||
| 121 | - * @codeCoverageIgnore | ||
| 122 | - */ | ||
| 123 | - public function getDebugInfo() | ||
| 124 | - { | ||
| 125 | - return array ( 92 => 17, 86 => 14, 76 => 7, 72 => 5, 49 => 4, 45 => 3, 41 => 2, 38 => 1,); | ||
| 126 | - } | ||
| 127 | - | ||
| 128 | - public function getSourceContext() | ||
| 129 | - { | ||
| 130 | - return new Source("", "default/template/extension/module/carousel.twig", ""); | ||
| 131 | - } | ||
| 132 | -} |
| 1 | -<?php | ||
| 2 | - | ||
| 3 | -use Twig\Environment; | ||
| 4 | -use Twig\Error\LoaderError; | ||
| 5 | -use Twig\Error\RuntimeError; | ||
| 6 | -use Twig\Extension\CoreExtension; | ||
| 7 | -use Twig\Extension\SandboxExtension; | ||
| 8 | -use Twig\Markup; | ||
| 9 | -use Twig\Sandbox\SecurityError; | ||
| 10 | -use Twig\Sandbox\SecurityNotAllowedTagError; | ||
| 11 | -use Twig\Sandbox\SecurityNotAllowedFilterError; | ||
| 12 | -use Twig\Sandbox\SecurityNotAllowedFunctionError; | ||
| 13 | -use Twig\Source; | ||
| 14 | -use Twig\Template; | ||
| 15 | - | ||
| 16 | -/* default/template/extension/module/slideshow.twig */ | ||
| 17 | -class __TwigTemplate_83d94754975c47fd97a36be351259cb2 extends Template | ||
| 18 | -{ | ||
| 19 | - private $source; | ||
| 20 | - private $macros = []; | ||
| 21 | - | ||
| 22 | - public function __construct(Environment $env) | ||
| 23 | - { | ||
| 24 | - parent::__construct($env); | ||
| 25 | - | ||
| 26 | - $this->source = $this->getSourceContext(); | ||
| 27 | - | ||
| 28 | - $this->parent = false; | ||
| 29 | - | ||
| 30 | - $this->blocks = [ | ||
| 31 | - ]; | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | - protected function doDisplay(array $context, array $blocks = []) | ||
| 35 | - { | ||
| 36 | - $macros = $this->macros; | ||
| 37 | - // line 1 | ||
| 38 | - yield "<div class=\"slideshow swiper-viewport\"> | ||
| 39 | - <div id=\"slideshow"; | ||
| 40 | - // line 2 | ||
| 41 | - yield ($context["module"] ?? null); | ||
| 42 | - yield "\" class=\"swiper-container\"> | ||
| 43 | - <div class=\"swiper-wrapper\"> "; | ||
| 44 | - // line 3 | ||
| 45 | - $context['_parent'] = $context; | ||
| 46 | - $context['_seq'] = CoreExtension::ensureTraversable(($context["banners"] ?? null)); | ||
| 47 | - foreach ($context['_seq'] as $context["_key"] => $context["banner"]) { | ||
| 48 | - // line 4 | ||
| 49 | - yield " <div class=\"swiper-slide text-center\">"; | ||
| 50 | - if (CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "link", [], "any", false, false, false, 4)) { | ||
| 51 | - yield "<a href=\""; | ||
| 52 | - yield CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "link", [], "any", false, false, false, 4); | ||
| 53 | - yield "\"><img src=\""; | ||
| 54 | - yield CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "image", [], "any", false, false, false, 4); | ||
| 55 | - yield "\" alt=\""; | ||
| 56 | - yield CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "title", [], "any", false, false, false, 4); | ||
| 57 | - yield "\" class=\"img-responsive\" /></a>"; | ||
| 58 | - } else { | ||
| 59 | - yield "<img src=\""; | ||
| 60 | - yield CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "image", [], "any", false, false, false, 4); | ||
| 61 | - yield "\" alt=\""; | ||
| 62 | - yield CoreExtension::getAttribute($this->env, $this->source, $context["banner"], "title", [], "any", false, false, false, 4); | ||
| 63 | - yield "\" class=\"img-responsive\" />"; | ||
| 64 | - } | ||
| 65 | - yield "</div> | ||
| 66 | - "; | ||
| 67 | - } | ||
| 68 | - $_parent = $context['_parent']; | ||
| 69 | - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['banner'], $context['_parent'], $context['loop']); | ||
| 70 | - $context = array_intersect_key($context, $_parent) + $_parent; | ||
| 71 | - // line 5 | ||
| 72 | - yield " </div> | ||
| 73 | - </div> | ||
| 74 | - <div class=\"swiper-pagination slideshow"; | ||
| 75 | - // line 7 | ||
| 76 | - yield ($context["module"] ?? null); | ||
| 77 | - yield "\"></div> | ||
| 78 | - <div class=\"swiper-pager\"> | ||
| 79 | - <div class=\"swiper-button-next\"></div> | ||
| 80 | - <div class=\"swiper-button-prev\"></div> | ||
| 81 | - </div> | ||
| 82 | -</div> | ||
| 83 | -<script type=\"text/javascript\"><!-- | ||
| 84 | -\$('#slideshow"; | ||
| 85 | - // line 14 | ||
| 86 | - yield ($context["module"] ?? null); | ||
| 87 | - yield "').swiper({ | ||
| 88 | -\tmode: 'horizontal', | ||
| 89 | -\tslidesPerView: 1, | ||
| 90 | -\tpagination: '.slideshow"; | ||
| 91 | - // line 17 | ||
| 92 | - yield ($context["module"] ?? null); | ||
| 93 | - yield "', | ||
| 94 | -\tpaginationClickable: true, | ||
| 95 | -\tnextButton: '.slideshow .swiper-button-next', | ||
| 96 | - prevButton: '.slideshow .swiper-button-prev', | ||
| 97 | - spaceBetween: 30, | ||
| 98 | -\tautoplay: 2500, | ||
| 99 | - autoplayDisableOnInteraction: true, | ||
| 100 | -\tloop: true | ||
| 101 | -}); | ||
| 102 | -//--></script>"; | ||
| 103 | - return; yield ''; | ||
| 104 | - } | ||
| 105 | - | ||
| 106 | - /** | ||
| 107 | - * @codeCoverageIgnore | ||
| 108 | - */ | ||
| 109 | - public function getTemplateName() | ||
| 110 | - { | ||
| 111 | - return "default/template/extension/module/slideshow.twig"; | ||
| 112 | - } | ||
| 113 | - | ||
| 114 | - /** | ||
| 115 | - * @codeCoverageIgnore | ||
| 116 | - */ | ||
| 117 | - public function isTraitable() | ||
| 118 | - { | ||
| 119 | - return false; | ||
| 120 | - } | ||
| 121 | - | ||
| 122 | - /** | ||
| 123 | - * @codeCoverageIgnore | ||
| 124 | - */ | ||
| 125 | - public function getDebugInfo() | ||
| 126 | - { | ||
| 127 | - return array ( 92 => 17, 86 => 14, 76 => 7, 72 => 5, 49 => 4, 45 => 3, 41 => 2, 38 => 1,); | ||
| 128 | - } | ||
| 129 | - | ||
| 130 | - public function getSourceContext() | ||
| 131 | - { | ||
| 132 | - return new Source("", "default/template/extension/module/slideshow.twig", ""); | ||
| 133 | - } | ||
| 134 | -} |
| 1 | -<?php | ||
| 2 | - | ||
| 3 | -use Twig\Environment; | ||
| 4 | -use Twig\Error\LoaderError; | ||
| 5 | -use Twig\Error\RuntimeError; | ||
| 6 | -use Twig\Extension\CoreExtension; | ||
| 7 | -use Twig\Extension\SandboxExtension; | ||
| 8 | -use Twig\Markup; | ||
| 9 | -use Twig\Sandbox\SecurityError; | ||
| 10 | -use Twig\Sandbox\SecurityNotAllowedTagError; | ||
| 11 | -use Twig\Sandbox\SecurityNotAllowedFilterError; | ||
| 12 | -use Twig\Sandbox\SecurityNotAllowedFunctionError; | ||
| 13 | -use Twig\Source; | ||
| 14 | -use Twig\Template; | ||
| 15 | - | ||
| 16 | -/* default/template/common/content_top.twig */ | ||
| 17 | -class __TwigTemplate_b04ee162285ebc94ac04a52e8ca6e27c extends Template | ||
| 18 | -{ | ||
| 19 | - private $source; | ||
| 20 | - private $macros = []; | ||
| 21 | - | ||
| 22 | - public function __construct(Environment $env) | ||
| 23 | - { | ||
| 24 | - parent::__construct($env); | ||
| 25 | - | ||
| 26 | - $this->source = $this->getSourceContext(); | ||
| 27 | - | ||
| 28 | - $this->parent = false; | ||
| 29 | - | ||
| 30 | - $this->blocks = [ | ||
| 31 | - ]; | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | - protected function doDisplay(array $context, array $blocks = []) | ||
| 35 | - { | ||
| 36 | - $macros = $this->macros; | ||
| 37 | - // line 1 | ||
| 38 | - $context['_parent'] = $context; | ||
| 39 | - $context['_seq'] = CoreExtension::ensureTraversable(($context["modules"] ?? null)); | ||
| 40 | - foreach ($context['_seq'] as $context["_key"] => $context["module"]) { | ||
| 41 | - // line 2 | ||
| 42 | - yield $context["module"]; | ||
| 43 | - yield " | ||
| 44 | -"; | ||
| 45 | - } | ||
| 46 | - $_parent = $context['_parent']; | ||
| 47 | - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['module'], $context['_parent'], $context['loop']); | ||
| 48 | - $context = array_intersect_key($context, $_parent) + $_parent; | ||
| 49 | - return; yield ''; | ||
| 50 | - } | ||
| 51 | - | ||
| 52 | - /** | ||
| 53 | - * @codeCoverageIgnore | ||
| 54 | - */ | ||
| 55 | - public function getTemplateName() | ||
| 56 | - { | ||
| 57 | - return "default/template/common/content_top.twig"; | ||
| 58 | - } | ||
| 59 | - | ||
| 60 | - /** | ||
| 61 | - * @codeCoverageIgnore | ||
| 62 | - */ | ||
| 63 | - public function isTraitable() | ||
| 64 | - { | ||
| 65 | - return false; | ||
| 66 | - } | ||
| 67 | - | ||
| 68 | - /** | ||
| 69 | - * @codeCoverageIgnore | ||
| 70 | - */ | ||
| 71 | - public function getDebugInfo() | ||
| 72 | - { | ||
| 73 | - return array ( 42 => 2, 38 => 1,); | ||
| 74 | - } | ||
| 75 | - | ||
| 76 | - public function getSourceContext() | ||
| 77 | - { | ||
| 78 | - return new Source("", "default/template/common/content_top.twig", ""); | ||
| 79 | - } | ||
| 80 | -} |
This diff could not be displayed because it is too large.
upload/.htaccess.txt
deleted
100644 → 0
| 1 | -# 1.To use URL Alias you need to be running apache with mod_rewrite enabled. | ||
| 2 | - | ||
| 3 | -# 2. In your opencart directory rename htaccess.txt to .htaccess. | ||
| 4 | - | ||
| 5 | -# For any support issues please visit: http://www.opencart.com | ||
| 6 | - | ||
| 7 | -Options +FollowSymlinks | ||
| 8 | - | ||
| 9 | -# Prevent Directory listing | ||
| 10 | -Options -Indexes | ||
| 11 | - | ||
| 12 | -# Prevent Direct Access to files | ||
| 13 | -<FilesMatch "(?i)((\.tpl|\.twig|\.ini|\.log|(?<!robots)\.txt))"> | ||
| 14 | - Require all denied | ||
| 15 | -## For apache 2.2 and older, replace "Require all denied" with these two lines : | ||
| 16 | -# Order deny,allow | ||
| 17 | -# Deny from all | ||
| 18 | -</FilesMatch> | ||
| 19 | - | ||
| 20 | -# SEO URL Settings | ||
| 21 | -RewriteEngine On | ||
| 22 | -# If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/ | ||
| 23 | - | ||
| 24 | -RewriteBase / | ||
| 25 | -RewriteCond %{QUERY_STRING} ^(.*)&?page=1$ | ||
| 26 | -RewriteRule ^(.*)/?$ /$1?%1%2 [R=301,L] #remove page=1 from url | ||
| 27 | -RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L] | ||
| 28 | -RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L] | ||
| 29 | -RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L] | ||
| 30 | -RewriteCond %{REQUEST_FILENAME} !-f | ||
| 31 | -RewriteCond %{REQUEST_FILENAME} !-d | ||
| 32 | -RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css) | ||
| 33 | -RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA] | ||
| 34 | - | ||
| 35 | -### Additional Settings that may need to be enabled for some servers | ||
| 36 | -### Uncomment the commands by removing the # sign in front of it. | ||
| 37 | -### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that. | ||
| 38 | - | ||
| 39 | -# 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it: | ||
| 40 | -# php_flag register_globals off | ||
| 41 | - | ||
| 42 | -# 2. If your cart has magic quotes enabled, This may work to disable it: | ||
| 43 | -# php_flag magic_quotes_gpc Off | ||
| 44 | - | ||
| 45 | -# 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try | ||
| 46 | -# php_value upload_max_filesize 999M | ||
| 47 | - | ||
| 48 | -# 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields | ||
| 49 | -# php_value post_max_size 999M | ||
| 50 | - | ||
| 51 | -# 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields | ||
| 52 | -# php_value max_execution_time 200 | ||
| 53 | - | ||
| 54 | -# 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields | ||
| 55 | -# php_value max_input_time 200 | ||
| 56 | - | ||
| 57 | -# 7. disable open_basedir limitations | ||
| 58 | -# php_admin_value open_basedir none |
| 1 | +<?php | ||
| 2 | +class ControllerFeedAdvancedSitemap extends Controller { | ||
| 3 | + private $error = array(); | ||
| 4 | + private $token; | ||
| 5 | + private $url_alias; | ||
| 6 | + | ||
| 7 | + public function __construct($registry) { | ||
| 8 | + parent::__construct($registry); | ||
| 9 | + | ||
| 10 | + $this->token = isset($this->session->data['user_token']) ? 'user_token='.$this->session->data['user_token'] : 'token='.$this->session->data['token']; | ||
| 11 | + | ||
| 12 | + if (version_compare(VERSION, '3', '>=')) { | ||
| 13 | + $this->load->language('extension/feed/advanced_sitemap'); | ||
| 14 | + $this->url_alias = 'seo_url'; | ||
| 15 | + } else { | ||
| 16 | + $this->load->language('feed/advanced_sitemap'); | ||
| 17 | + $this->url_alias = 'url_alias'; | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + public function index() { | ||
| 22 | + $this->load->model('user/user_group'); | ||
| 23 | + /* | ||
| 24 | + $this->model_user_user_group->addPermission(version_compare(VERSION, '2.0.2', '>=') ? $this->user->getGroupId() : 1, 'access', 'feed/advanced_sitemap'); | ||
| 25 | + $this->model_user_user_group->addPermission(version_compare(VERSION, '2.0.2', '>=') ? $this->user->getGroupId() : 1, 'modify', 'feed/advanced_sitemap'); | ||
| 26 | + if (version_compare(VERSION, '2.3', '>=')) { | ||
| 27 | + $this->model_user_user_group->addPermission(version_compare(VERSION, '2.0.2', '>=') ? $this->user->getGroupId() : 1, 'access', 'extension/feed/advanced_sitemap'); | ||
| 28 | + $this->model_user_user_group->addPermission(version_compare(VERSION, '2.0.2', '>=') ? $this->user->getGroupId() : 1, 'modify', 'extension/feed/advanced_sitemap'); | ||
| 29 | + } | ||
| 30 | + */ | ||
| 31 | + | ||
| 32 | + $data['_language'] = &$this->language; | ||
| 33 | + $data['_config'] = &$this->config; | ||
| 34 | + $data['_url'] = &$this->url; | ||
| 35 | + $data['token'] = $this->token; | ||
| 36 | + $data['OC_V2'] = version_compare(VERSION, '2', '>='); | ||
| 37 | + $data['button_clear_cache'] = $this->language->get('button_clear_cache'); | ||
| 38 | + | ||
| 39 | + $this->load->model('localisation/language'); | ||
| 40 | + $languages = $data['languages'] = $this->model_localisation_language->getLanguages(); | ||
| 41 | + | ||
| 42 | + foreach ($languages as &$language) { | ||
| 43 | + if (version_compare(VERSION, '2.2', '>=')) { | ||
| 44 | + $language['image'] = 'language/'.$language['code'].'/'.$language['code'].'.png'; | ||
| 45 | + } else { | ||
| 46 | + $language['image'] = 'view/image/flags/'. $language['image']; | ||
| 47 | + } | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + $data['languages'] = $languages; | ||
| 51 | + | ||
| 52 | + $lgcodes = array(); | ||
| 53 | + $data['fullcode'] = $fullcode = ''; | ||
| 54 | + foreach ($languages as $lang) { | ||
| 55 | + if (in_array(substr($lang['code'], 0, 2), $lgcodes)) { | ||
| 56 | + $data['fullcode'] = $fullcode = 1; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + $lgcodes[] = substr($lang['code'], 0, 2); | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + if (!version_compare(VERSION, '2', '>=')) { | ||
| 63 | + $this->document->addStyle('view/advanced_sitemap/awesome/css/font-awesome.min.css'); | ||
| 64 | + $this->document->addStyle('view/advanced_sitemap/bootstrap.min.css'); | ||
| 65 | + $this->document->addStyle('view/advanced_sitemap/bootstrap-theme.min.css'); | ||
| 66 | + $this->document->addScript('view/advanced_sitemap/bootstrap.min.js'); | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + $this->document->addScript('view/advanced_sitemap/itoggle.js'); | ||
| 70 | + $this->document->addStyle('view/advanced_sitemap/style.css'); | ||
| 71 | + | ||
| 72 | + $this->language->load('feed/advanced_sitemap'); | ||
| 73 | + | ||
| 74 | + $this->document->setTitle(strip_tags($this->language->get('heading_title'))); | ||
| 75 | + | ||
| 76 | + $this->load->model('setting/setting'); | ||
| 77 | + | ||
| 78 | + if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { | ||
| 79 | + $this->request->post['advanced_sitemap_default_lang'] = $this->config->get('config_language'); | ||
| 80 | + $this->model_setting_setting->editSetting('advanced_sitemap', $this->request->post); | ||
| 81 | + | ||
| 82 | + $this->session->data['success'] = $this->language->get('text_success'); | ||
| 83 | + | ||
| 84 | + if (version_compare(VERSION, '2', '>=')) { | ||
| 85 | + $this->response->redirect($this->url->link('feed/advanced_sitemap', $this->token, 'SSL')); | ||
| 86 | + } else { | ||
| 87 | + $this->redirect($this->url->link('feed/advanced_sitemap', $this->token, 'SSL')); | ||
| 88 | + } | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + if (!$this->config->get('advanced_sitemap_status')) { | ||
| 92 | + $this->session->data['error'] = 'Sitemap not active, please save options at least once to enable the sitemap'; | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + $data['journal_active'] = is_dir(DIR_APPLICATION . 'model/journal2') || is_dir(DIR_APPLICATION . 'model/journal3'); | ||
| 96 | + $data['seo_package_active'] = file_exists(DIR_APPLICATION . 'model/tool/seo_package.php'); | ||
| 97 | + | ||
| 98 | + // if ($data['seo_package_active'] && file_exists(DIR_APPLICATION . 'controller/feed/seopackage_sitemap.php')) { | ||
| 99 | + // @rename(DIR_APPLICATION . 'controller/feed/seopackage_sitemap.php', DIR_APPLICATION . 'controller/feed/seopackage_sitemap.php_disabled'); | ||
| 100 | + // } | ||
| 101 | + | ||
| 102 | + // multi-stores | ||
| 103 | + $this->load->model('setting/store'); | ||
| 104 | + $data['stores'] = array(); | ||
| 105 | + $data['stores'][] = array( | ||
| 106 | + 'store_id' => 0, | ||
| 107 | + 'name' => $this->config->get('config_name'), | ||
| 108 | + 'url' => HTTP_CATALOG, | ||
| 109 | + ); | ||
| 110 | + | ||
| 111 | + $stores = $this->model_setting_store->getStores(); | ||
| 112 | + | ||
| 113 | + foreach ($stores as $store) { | ||
| 114 | + $action = array(); | ||
| 115 | + | ||
| 116 | + $data['stores'][] = array( | ||
| 117 | + 'store_id' => $store['store_id'], | ||
| 118 | + 'name' => $store['name'], | ||
| 119 | + 'url' => $store['url'], | ||
| 120 | + ); | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + $data['cron_url'] = str_replace('system/', '', DIR_SYSTEM).'sitemap_cli.php'; | ||
| 124 | + $data['heading_title'] = $this->language->get('heading_title'); | ||
| 125 | + | ||
| 126 | + $data['text_enabled'] = $this->language->get('text_enabled'); | ||
| 127 | + $data['text_disabled'] = $this->language->get('text_disabled'); | ||
| 128 | + | ||
| 129 | + $data['button_save'] = $this->language->get('button_save'); | ||
| 130 | + $data['button_cancel'] = $this->language->get('button_cancel'); | ||
| 131 | + | ||
| 132 | + $data['tab_general'] = $this->language->get('tab_general'); | ||
| 133 | + | ||
| 134 | + if (isset($this->session->data['success'])) { | ||
| 135 | + $data['success'] = $this->session->data['success']; | ||
| 136 | + unset($this->session->data['success']); | ||
| 137 | + } else $data['success'] = ''; | ||
| 138 | + | ||
| 139 | + if (isset($this->session->data['error'])) { | ||
| 140 | + $data['error'] = $this->session->data['error']; | ||
| 141 | + unset($this->session->data['error']); | ||
| 142 | + } else $data['error'] = ''; | ||
| 143 | + | ||
| 144 | + if (isset($this->error['warning'])) { | ||
| 145 | + $data['error_warning'] = $this->error['warning']; | ||
| 146 | + } else { | ||
| 147 | + $data['error_warning'] = ''; | ||
| 148 | + } | ||
| 149 | + | ||
| 150 | + $data['breadcrumbs'] = array(); | ||
| 151 | + | ||
| 152 | + $data['breadcrumbs'][] = array( | ||
| 153 | + 'text' => $this->language->get('text_home'), | ||
| 154 | + 'href' => $this->url->link('common/home', $this->token, 'SSL'), | ||
| 155 | + 'separator' => false | ||
| 156 | + ); | ||
| 157 | + | ||
| 158 | + if (version_compare(VERSION, '3', '>=')) { | ||
| 159 | + $extension_link = $this->url->link('marketplace/extension', 'type=feed&' . $this->token, 'SSL'); | ||
| 160 | + } else if (version_compare(VERSION, '2.3', '>=')) { | ||
| 161 | + $extension_link = $this->url->link('extension/extension', 'type=feed&' . $this->token, 'SSL'); | ||
| 162 | + } else { | ||
| 163 | + $extension_link = $this->url->link('extension/feed', $this->token, 'SSL'); | ||
| 164 | + } | ||
| 165 | + | ||
| 166 | + $data['breadcrumbs'][] = array( | ||
| 167 | + 'text' => $this->language->get('text_feed'), | ||
| 168 | + 'href' => $extension_link, | ||
| 169 | + 'separator' => ' :: ' | ||
| 170 | + ); | ||
| 171 | + | ||
| 172 | + $data['breadcrumbs'][] = array( | ||
| 173 | + 'text' => strip_tags($this->language->get('heading_title')), | ||
| 174 | + 'href' => $this->url->link('feed/advanced_sitemap', $this->token, 'SSL'), | ||
| 175 | + 'separator' => ' :: ' | ||
| 176 | + ); | ||
| 177 | + | ||
| 178 | + $data['action'] = $this->url->link('feed/advanced_sitemap', $this->token, 'SSL'); | ||
| 179 | + | ||
| 180 | + $data['cancel'] = $extension_link; | ||
| 181 | + | ||
| 182 | + if (isset($this->request->post['advanced_sitemap_feeds'])) { | ||
| 183 | + $data['advanced_sitemap_feeds'] = $this->request->post['advanced_sitemap_feeds']; | ||
| 184 | + } else { | ||
| 185 | + $data['advanced_sitemap_feeds'] = $this->config->get('advanced_sitemap_feeds'); | ||
| 186 | + } | ||
| 187 | + | ||
| 188 | + if (isset($this->request->post['advanced_sitemap_lang_feeds'])) { | ||
| 189 | + $data['advanced_sitemap_lang_feeds'] = $this->request->post['advanced_sitemap_lang_feeds']; | ||
| 190 | + } else { | ||
| 191 | + $data['advanced_sitemap_lang_feeds'] = $this->config->get('advanced_sitemap_lang_feeds'); | ||
| 192 | + } | ||
| 193 | + | ||
| 194 | + if (isset($this->request->post['advanced_sitemap_limit'])) { | ||
| 195 | + $data['advanced_sitemap_limit'] = $this->request->post['advanced_sitemap_limit']; | ||
| 196 | + } else { | ||
| 197 | + $data['advanced_sitemap_limit'] = $this->config->get('advanced_sitemap_limit'); | ||
| 198 | + } | ||
| 199 | + | ||
| 200 | + if (isset($this->request->post['advanced_sitemap_rewrite'])) { | ||
| 201 | + $data['advanced_sitemap_rewrite'] = $this->request->post['advanced_sitemap_rewrite']; | ||
| 202 | + } else { | ||
| 203 | + $data['advanced_sitemap_rewrite'] = $this->config->get('advanced_sitemap_rewrite'); | ||
| 204 | + } | ||
| 205 | + | ||
| 206 | + if (isset($this->request->post['advanced_sitemap_hreflang'])) { | ||
| 207 | + $data['advanced_sitemap_hreflang'] = $this->request->post['advanced_sitemap_hreflang']; | ||
| 208 | + } else { | ||
| 209 | + $data['advanced_sitemap_hreflang'] = $this->config->get('advanced_sitemap_hreflang'); | ||
| 210 | + } | ||
| 211 | + | ||
| 212 | + $default_cfg = array( | ||
| 213 | + 'product' => array( | ||
| 214 | + 'status' => 1, | ||
| 215 | + 'priority' => 0.8, | ||
| 216 | + 'freq' => 'weekly', | ||
| 217 | + ), | ||
| 218 | + 'category' => array( | ||
| 219 | + 'status' => 1, | ||
| 220 | + 'priority' => 0.8, | ||
| 221 | + 'freq' => 'weekly', | ||
| 222 | + ), | ||
| 223 | + 'information' => array( | ||
| 224 | + 'status' => 1, | ||
| 225 | + 'priority' => 0.7, | ||
| 226 | + 'freq' => 'monthly', | ||
| 227 | + ), | ||
| 228 | + 'manufacturer' => array( | ||
| 229 | + 'status' => 1, | ||
| 230 | + 'priority' => 0.7, | ||
| 231 | + 'freq' => 'monthly', | ||
| 232 | + ), | ||
| 233 | + 'image' => array( | ||
| 234 | + 'status' => 1, | ||
| 235 | + 'priority' => 0.7, | ||
| 236 | + 'freq' => 'monthly', | ||
| 237 | + ), | ||
| 238 | + 'journal' => array( | ||
| 239 | + 'status' => 0, | ||
| 240 | + 'priority' => 0.7, | ||
| 241 | + 'freq' => 'weekly', | ||
| 242 | + ), | ||
| 243 | + ); | ||
| 244 | + | ||
| 245 | + if (isset($this->request->post['advanced_sitemap_cfg'])) { | ||
| 246 | + $data['advanced_sitemap_cfg'] = $this->request->post['advanced_sitemap_cfg']; | ||
| 247 | + } else { | ||
| 248 | + $data['advanced_sitemap_cfg'] = array_merge($default_cfg, (array) $this->config->get('advanced_sitemap_cfg')); | ||
| 249 | + } | ||
| 250 | + | ||
| 251 | + // total products | ||
| 252 | + $extra_where = ''; | ||
| 253 | + | ||
| 254 | + if (!empty($data['advanced_sitemap_cfg']['in_stock'])) { | ||
| 255 | + $extra_where = " AND p.quantity > 0"; | ||
| 256 | + } | ||
| 257 | + $total = $this->db->query("SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'" . $extra_where)->row; | ||
| 258 | + $total_products = $total['total']; | ||
| 259 | + $limit = $this->config->get('advanced_sitemap_limit') ? $this->config->get('advanced_sitemap_limit') : 500; | ||
| 260 | + | ||
| 261 | + $page = ($total_products > $limit) ? 1 : ''; | ||
| 262 | + $product_pages = array(); | ||
| 263 | + if ($total_products) { | ||
| 264 | + while ($total_products > 0) { | ||
| 265 | + if ($this->config->get('advanced_sitemap_rewrite')) { | ||
| 266 | + $product_pages[] = $page ? '-'.$page++ : ''; | ||
| 267 | + } else { | ||
| 268 | + $product_pages[] = $page ? '&page='.$page++ : ''; | ||
| 269 | + } | ||
| 270 | + $total_products -= $limit; | ||
| 271 | + } | ||
| 272 | + } | ||
| 273 | + | ||
| 274 | + $data['grid_feeds'] = array(); | ||
| 275 | + | ||
| 276 | + if ($this->config->get('advanced_sitemap_rewrite')) { | ||
| 277 | + $data['main_feed'] = 'sitemap.xml'; | ||
| 278 | + foreach($languages as $lang) { | ||
| 279 | + $data['lang_feeds'][] = array( | ||
| 280 | + 'feed' => 'sitemap-'.($fullcode ? $lang['code'] : substr($lang['code'], 0, 2)).'.xml', | ||
| 281 | + 'image' => $lang['image'] | ||
| 282 | + ); | ||
| 283 | + } | ||
| 284 | + | ||
| 285 | + foreach($product_pages as $page) { | ||
| 286 | + $data['grid_feeds'][] = 'product-grid'.$page.'.xml'; | ||
| 287 | + } | ||
| 288 | + } else { | ||
| 289 | + $data['main_feed'] = 'index.php?route=feed/advanced_sitemap'; | ||
| 290 | + | ||
| 291 | + foreach($languages as $lang) { | ||
| 292 | + $data['lang_feeds'][] = array( | ||
| 293 | + 'feed' => 'index.php?route=feed/advanced_sitemap&lang='.($fullcode ? $lang['code'] : substr($lang['code'], 0, 2)), | ||
| 294 | + 'image' => $lang['image'] | ||
| 295 | + ); | ||
| 296 | + } | ||
| 297 | + | ||
| 298 | + foreach($product_pages as $page) { | ||
| 299 | + $data['grid_feeds'][] = 'index.php?route=feed/advanced_sitemap/product&grid=1'.$page; | ||
| 300 | + } | ||
| 301 | + } | ||
| 302 | + | ||
| 303 | + if (version_compare(VERSION, '2', '>=')) { | ||
| 304 | + $data['header'] = $this->load->controller('common/header'); | ||
| 305 | + $data['column_left'] = $this->load->controller('common/column_left'); | ||
| 306 | + $data['footer'] = $this->load->controller('common/footer'); | ||
| 307 | + | ||
| 308 | + if (version_compare(VERSION, '3', '>=')) { | ||
| 309 | + $this->config->set('template_engine', 'template'); | ||
| 310 | + $this->response->setOutput($this->load->view('feed/advanced_sitemap', $data)); | ||
| 311 | + } else { | ||
| 312 | + $this->response->setOutput($this->load->view('feed/advanced_sitemap.tpl', $data)); | ||
| 313 | + } | ||
| 314 | + } else { | ||
| 315 | + $data['column_left'] = ''; | ||
| 316 | + $this->data = &$data; | ||
| 317 | + $this->template = 'feed/advanced_sitemap.tpl'; | ||
| 318 | + $this->children = array( | ||
| 319 | + 'common/header', | ||
| 320 | + 'common/footer' | ||
| 321 | + ); | ||
| 322 | + | ||
| 323 | + $this->response->setOutput($this->render()); | ||
| 324 | + } | ||
| 325 | + } | ||
| 326 | + | ||
| 327 | + public function clearCache() { | ||
| 328 | + $json = []; | ||
| 329 | + $files = glob(DIR_CACHE . 'sitemaps/*'); | ||
| 330 | + $counter = 0; | ||
| 331 | + foreach ($files as $k => $file) { | ||
| 332 | + unlink($file); | ||
| 333 | + $counter++; | ||
| 334 | + } | ||
| 335 | + $json['counter'] = $counter; | ||
| 336 | + $this->response->addHeader('Content-Type: application/json'); | ||
| 337 | + $this->response->setOutput(json_encode($json)); | ||
| 338 | + } | ||
| 339 | + | ||
| 340 | + protected function validate() { | ||
| 341 | + if (!$this->user->hasPermission('modify', 'feed/advanced_sitemap')) { | ||
| 342 | + $this->error['warning'] = $this->language->get('error_permission'); | ||
| 343 | + } | ||
| 344 | + | ||
| 345 | + if (!$this->error) { | ||
| 346 | + return true; | ||
| 347 | + } else { | ||
| 348 | + return false; | ||
| 349 | + } | ||
| 350 | + } | ||
| 351 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
This diff could not be displayed because it is too large.
| 1 | +<?php | ||
| 2 | +// Heading | ||
| 3 | +if (file_exists(DIR_APPLICATION . 'model/tool/seo_package.php')) { | ||
| 4 | + $_['heading_title'] = '<img src="view/seo_package/img/icon.png" style="vertical-align:top;padding-right:4px"/> <b style="color:#11b209">SEO Package</b> <b style="color:#555">Sitemap</b>'; | ||
| 5 | +} else { | ||
| 6 | + $_['heading_title'] = '<i class="fa fa-sitemap" style="color:#11b209"></i> <b>Advanced</b> <b style="color:#11b209">Sitemap Generator</b>'; | ||
| 7 | +} | ||
| 8 | + | ||
| 9 | +// Text | ||
| 10 | +$_['text_feed'] = 'Product Feeds'; | ||
| 11 | +$_['text_add_feed'] = 'New sitemap'; | ||
| 12 | +$_['text_success'] = 'Success: options have been saved'; | ||
| 13 | +$_['text_info'] = 'This sitemap does not contains duplicates and integrates the hreflang tag if enabled in seo package options.'; | ||
| 14 | +$_['text_minute'] = 'Minute(s)'; | ||
| 15 | +$_['text_hour'] = 'Hour(s)'; | ||
| 16 | +$_['text_day'] = 'Day(s)'; | ||
| 17 | +$_['entry_data_feed'] = 'Full sitemap:<span class="help">Feed containing all languages using hreflang tag (hreflang will be displayed in case of more than one language)</span>'; | ||
| 18 | +$_['entry_lang_feed'] = 'Lang based sitemap:<span class="help">Use these if you prefer separate language version</span>'; | ||
| 19 | +$_['entry_grid_feed'] = 'Grid product sitemap:<span class="help">A grid of product thumbnails (this is for consult only, do not give this sitemap link to google)</span>'; | ||
| 20 | +$_['button_clear_cache'] = 'Clear Cache'; | ||
| 21 | +$_['button_generate_cache'] = 'Generate Cache'; | ||
| 22 | + | ||
| 23 | +// Tabs | ||
| 24 | +$_['text_tab_0'] = 'Sitemaps'; | ||
| 25 | +$_['tab_opt_1'] = 'Sitemap configuration'; | ||
| 26 | +$_['tab_opt_2'] = 'Advanced options'; | ||
| 27 | +$_['entry_feed_title'] = 'Name:'; | ||
| 28 | +$_['entry_cache_delay'] = 'Cache Delay'; | ||
| 29 | +$_['entry_cache_delay_help'] = 'How many time to display generated file until re-generation ?'; | ||
| 30 | +$_['entry_language'] = 'Language:<span class="help"></span>'; | ||
| 31 | +$_['entry_feed_url'] = 'Sitemap Url:<span class="help">Give this url to google or bing</span>'; | ||
| 32 | + | ||
| 33 | +$_['text_tab_1'] = 'Custom links'; | ||
| 34 | + | ||
| 35 | +// Configuration | ||
| 36 | +$_['text_tab_2'] = 'Configuration'; | ||
| 37 | + | ||
| 38 | +$_['text_link_type'] = 'Link type'; | ||
| 39 | +$_['text_type_product'] = 'Product'; | ||
| 40 | +$_['text_type_category'] = 'Category'; | ||
| 41 | +$_['text_type_manufacturer'] = 'Brand'; | ||
| 42 | +$_['text_type_information'] = 'Information'; | ||
| 43 | +$_['text_type_custom'] = 'Custom link'; | ||
| 44 | +$_['text_type_journal'] = 'Journal blog'; | ||
| 45 | + | ||
| 46 | +$_['entry_status'] = 'Status'; | ||
| 47 | +$_['entry_lang_feeds'] = 'Language Based Sitemap<span class="help">Enable or disable per language based sitemap</span>'; | ||
| 48 | +$_['entry_priority'] = 'Priority'; | ||
| 49 | +$_['entry_freq'] = 'Change frenquency'; | ||
| 50 | +$_['entry_in_stock'] = 'Include only in stock products:<span class="help">If disabled all products are included, if enabled only product with quantity >= 1</span>'; | ||
| 51 | +$_['entry_item_no'] = 'Number of items per xml:<span class="help">How many urls do you want to display in each xml file, default is 500'; | ||
| 52 | +$_['entry_friendly_url'] = 'Friendly URL:<span class="help">Display this sitemap in http://example.com/sitemap.xml instead of the default opencart sitemap</span>'; | ||
| 53 | +$_['entry_hreflang'] = 'Hreflang urls:<span class="help">Include or not the other langauge links as hreflang tag</span>'; | ||
| 54 | +$_['entry_display_img'] = 'Display image thumb in feed:<span class="help">This is for viewing only, the image is still included for search engines.<br/>Warning: if you enable this, the images could be indexed by google and lead to sitemap, it is recommended to enable this setting only for testing purpose.</span>'; | ||
| 55 | +$_['entry_include_img'] = 'Include main image in feed:<span class="help">Include main product image into your feed? This is better if you want to be found via google image search</span>'; | ||
| 56 | +$_['entry_additional_img'] = 'Include additional images:<span class="help">Include additional product images into your feed? This is better if you want to be found via google image search</span>'; | ||
| 57 | +$_['entry_fullsize_img'] = 'Fullsize images:<span class="help">Link to the fullsize image if enabled, or the resized image if disabled (like the one in product page)</span>'; | ||
| 58 | +$_['entry_no_count'] = 'Disable counter:<span class="help">On index page disable the counting of items to gain speed, in case you have big store it can increase the delay to show the sitemap</span>'; | ||
| 59 | +$_['custom_links_include'] = 'Include Custom Links:<span class="help">Set up your own links into the sitemap.<br/><br/>Must be formatted like this: <b>type@url</b><br/><br/>For example with static url: <b>MyBlog@http://website/my-blog</b><br/><br/>Or using dynamic urls (they will be automatically rewritten), just put all that is after index.php?route=, like this:<br/><b>MyBlog@blog/blog_id=123</b></span>'; | ||
| 60 | +$_['custom_links_exclude'] = 'Exclude Links:<span class="help">Set up the links you do not want to include in sitemap, it can be any link of your website.<br/><br/>For example:<br/><b>http://website/some_product</b></span>'; | ||
| 61 | + | ||
| 62 | +$_['text_freq_always'] = 'Always'; | ||
| 63 | +$_['text_freq_hourly'] = 'Hourly'; | ||
| 64 | +$_['text_freq_daily'] = 'Daily'; | ||
| 65 | +$_['text_freq_weekly'] = 'Weekly'; | ||
| 66 | +$_['text_freq_monthly'] = 'Monthly'; | ||
| 67 | +$_['text_freq_yearly'] = 'Yearly'; | ||
| 68 | +$_['text_freq_never'] = 'Never'; | ||
| 69 | + | ||
| 70 | +$_['text_tab_about'] = 'About'; | ||
| 71 | + | ||
| 72 | +// Entry | ||
| 73 | + | ||
| 74 | +// Error | ||
| 75 | +$_['error_permission'] = 'Warning: You do not have permission to modify SEO Package Sitemap feed!'; | ||
| 76 | +?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php | ||
| 2 | +// English | ||
| 3 | +// Heading | ||
| 4 | +$_['heading_title'] = '<strong style="color:#41637d">DEV-OPENCART.COM —</strong> <b>Complete SEO Package</b> <a href="https://dev-opencart.com" target="_blank" title="Dev-opencart.com - Модули и шаблоны для Opencart"><img style="margin-left:15px;height:35px;margin-top:10px;margin-bottom:10px;" src="https://dev-opencart.com/logob.svg" alt="Dev-opencart.com - Модули и шаблоны для Opencart"/></a>'; | ||
| 5 | +$_['module_title'] = 'Complete SEO <span>Package</span>'; | ||
| 6 | + | ||
| 7 | +$_['text_store_select'] = 'Store'; | ||
| 8 | + | ||
| 9 | +// Dashboard | ||
| 10 | +$_['tab_seo_dashboard'] = 'Dashboard'; | ||
| 11 | +$_['text_seo_score'] = 'SEO Power'; | ||
| 12 | +$_['text_dashboard_config'] = 'SEO Overview'; | ||
| 13 | + | ||
| 14 | +// Tab multistore | ||
| 15 | +$_['tab_seo_multistore'] = 'Multistore'; | ||
| 16 | +$_['info_multistore_dashboard'] = 'Here you can define specific parameters each store.<br/><br/>If Multistore SEO component is enabled you can also set specific urls for each store products/categories/informations and the mass update tab will be available here.<br/><br/>Enabling Multistore component will insert new tables in your database to handle the multistore urls and seo data (titles, metas, etc.).'; | ||
| 17 | + | ||
| 18 | +// Tab seo editor | ||
| 19 | +$_['tab_seo_editor'] = 'SEO Editor'; | ||
| 20 | +$_['tab_seo_editor_product'] = 'Product'; | ||
| 21 | +$_['tab_seo_editor_category'] = 'Category'; | ||
| 22 | +$_['tab_seo_editor_information'] = 'Information'; | ||
| 23 | +$_['tab_seo_editor_manufacturer'] = 'Manufacturer'; | ||
| 24 | +$_['tab_seo_editor_image'] = 'Image'; | ||
| 25 | +$_['tab_seo_editor_absolute'] = 'Absolute Url'; | ||
| 26 | +$_['tab_seo_editor_common'] = 'Common Page Url'; | ||
| 27 | +$_['tab_seo_editor_special'] = 'Param Url'; | ||
| 28 | +$_['tab_seo_editor_redirect'] = 'Url Redirection'; | ||
| 29 | +$_['tab_seo_editor_autolink'] = 'Auto-links'; | ||
| 30 | +$_['tab_seo_editor_dynamic_redirect'] = 'Dynamic Redirection'; | ||
| 31 | +$_['tab_seo_editor_404'] = '404 Manager'; | ||
| 32 | +$_['text_multistore'] = 'Multistore SEO'; | ||
| 33 | +$_['info_multistore'] = 'Give different SEO information (keyword, metas, etc) on products and categories for each store'; | ||
| 34 | +$_['text_preload'] = 'Url preload'; | ||
| 35 | +$_['info_preload'] = 'With stores with lot of products and categories there could be lot of request to database to get all different urls,<br/>this setting is improving performance by preloading in memory all the urls for faster access'; | ||
| 36 | +$_['text_editor_show_columns'] = 'Select visible columns: '; | ||
| 37 | +$_['text_editor_count'] = 'Count'; | ||
| 38 | +$_['text_editor_query'] = 'Query'; | ||
| 39 | +$_['text_editor_query_redirect'] = 'Query'; | ||
| 40 | +$_['text_editor_query_absolute'] = 'Full Query (value after route=)'; | ||
| 41 | +$_['text_editor_query_common'] = 'Query (value after route=)'; | ||
| 42 | +$_['text_editor_query_special'] = 'Query (ex: custom_id=1)'; | ||
| 43 | +$_['text_editor_query_autolink'] = 'Keyword (ex: Apple)'; | ||
| 44 | +$_['text_editor_image'] = 'Image'; | ||
| 45 | +$_['text_editor_name'] = 'Name'; | ||
| 46 | +$_['text_editor_title'] = 'Title'; | ||
| 47 | +$_['text_editor_seo_h1'] = 'SEO H1'; | ||
| 48 | +$_['text_editor_seo_h2'] = 'SEO H2'; | ||
| 49 | +$_['text_editor_seo_h3'] = 'SEO H3'; | ||
| 50 | +$_['text_editor_meta_title'] = 'Meta title'; | ||
| 51 | +$_['text_editor_meta_keyword'] = 'Meta keyword'; | ||
| 52 | +$_['text_editor_meta_description'] = 'Meta description'; | ||
| 53 | +$_['text_editor_url'] = 'SEO url'; | ||
| 54 | +$_['text_editor_url_absolute'] = 'Full seo url'; | ||
| 55 | +$_['text_editor_url_redirect'] = 'Redirect to'; | ||
| 56 | +$_['text_editor_url_autolink'] = 'Link url'; | ||
| 57 | +$_['text_editor_referer'] = 'Referer/Bot'; | ||
| 58 | +$_['text_editor_tag'] = 'Tags'; | ||
| 59 | +$_['text_editor_h1'] = 'Seo H1'; | ||
| 60 | +$_['text_editor_item_name'] = 'Product name'; | ||
| 61 | +$_['text_editor_image_name'] = 'Name'; | ||
| 62 | +$_['text_editor_image_alt'] = 'Alt'; | ||
| 63 | +$_['text_editor_image_title'] = 'Title'; | ||
| 64 | +$_['text_editor_related'] = 'Related'; | ||
| 65 | +$_['text_seo_new_alias_title'] = 'Insert new url alias'; | ||
| 66 | +$_['text_seo_new_autolink_info'] = 'Choose some keyword on which you would like to automatically add a link, for example if you have <b>Apple</b> appearing in your descriptions then if you want to redirect to https://mywebsite/apple you can do it with this section.<br/><br/>This is working for descriptions texts of products, categories and informations.'; | ||
| 67 | +$_['text_seo_new_absolute_alias_info'] = 'Rewrite an url in absolute way, for example index.php?route=<b>blog/blog&post_id=123</b><br/>In query field put <b>blog/blog&post_id=123</b> (insert only the value after index.php?route=)<br/>In SEO url field put the url you want: <b>blog/this-is-a-blog-post</b>'; | ||
| 68 | +$_['text_seo_new_alias_info'] = 'Rewrite an url that use the route parameter, for example index.php?route=<b>account/account</b><br/>In query field put <b>account/account</b> (it is not necessary to insert route=)<br/>In SEO url field put the url you want: <b>my-account</b>'; | ||
| 69 | +$_['text_seo_new_spec_alias_info'] = 'Rewrite urls that belongs to any custom module even if it is not made to handle friendly urls.<br/>For example index.php?<b>blog_news_id=123</b><br/>In query field put <b>blog_news_id=123</b><br/>In SEO url field put the url you want: <b>a-great-url-for-my-great-news</b>'; | ||
| 70 | +$_['text_seo_new_redirect'] = 'This generates a 301 redirection to indicate to search engines that the current url has been moved permanently to a new one. Use this feature to fix crawling errors from google webmaster.<br/><br/>In query type the full url <b>http://example.com/broken-url</b><br/>In redirect field put new url <b>http://example.com/fixed-url</b><br/><br/>Or without the domain name (don\'t forget the initial /)<br/>In query: <b>/broken-url</b><br/>In redirect field: <b>/fixed-url</b><br/><br/>Dynamic redirection<br/>If you want to make it work even with further url updates fill the redirect field that way:<br/><b>product/product&product_id=42</b> (where 42 is your actual product id)'; | ||
| 71 | +$_['text_info_limits_tab'] = 'Meta fields limits'; | ||
| 72 | +$_['text_info_limits_title'] = 'Meta title and description limits'; | ||
| 73 | +$_['text_info_404_options'] = '<h4>Log</h4> | ||
| 74 | +<p>When a 404 page is reached on your website this option will log the reached url into SEO Editor > 404 Manager, so you can know which urls are wrong on your website and eventually redirect them to another one.</p> | ||
| 75 | +<h4>Redirect to search</h4> | ||
| 76 | +<p>If the current url is for example like this <code>http://yourwebsite/category/subcategory/my-product</code> and is not found then the module will try to redirect to search page with "my product" inside the search field. The page will also be logged in 404 manager.</p> | ||
| 77 | +<h4>Filter 404 urls</h4> | ||
| 78 | +<p>You may not want all 404 urls to be logged, in this case just use this section to set some text to filter, if the text is found in the url then it won\'t be logged into 404 manager, use | as separator in order to use various snippets.</p>'; | ||
| 79 | +$_['text_info_robots'] = '<h4>Meta Robots</h4> | ||
| 80 | +<p>The robots meta tag lets you utilize a granular, page-specific approach to controlling how an individual page should be indexed and served to users in search results.<br/>The setting defined here will be the default one for all pages of your store, then you can edit a specific product to change the robots value (in data tab) for this product only.<br/>The meta robots parameter will be set in your page as meta tag in head section: <meta name="robots" /></p> | ||
| 81 | +<table class="table table-bordered"> | ||
| 82 | + <tbody><tr><th>Directive</th><th>Meaning</th></tr> | ||
| 83 | + <tr><td><code><span>all</span></code></td> | ||
| 84 | + <td>There are no restrictions for indexing or serving.<br/>Note: this | ||
| 85 | + directive is the default value and has no effect if explicitly | ||
| 86 | + listed, so when you choose this value the meta robots tag won\'t be displayed</td></tr> | ||
| 87 | + <tr><td><code><span>noindex, follow</span></code></td> | ||
| 88 | + <td>Do not show this page in search results, but follow the links</td></tr> | ||
| 89 | + <tr><td><code><span>index, nofollow</span></code></td> | ||
| 90 | + <td>Index but do not follow the links on this page</td></tr> | ||
| 91 | + <tr><td><code><span>none</span></code></td> | ||
| 92 | + <td>Do not index, do not follow links, equivalent to <code><span>noindex, nofollow</span></code></td></tr> | ||
| 93 | + <tr><td><code><span>noimageindex</span></code></td> | ||
| 94 | + <td>Do not index images on this page</td></tr> | ||
| 95 | +</tbody></table> | ||
| 96 | +<h4>Automatic settings</h4> | ||
| 97 | +<p>Once enabled you will be able to define the default value for meta robots, and the module will automatically apply the best parameter for some specific pages, please see the following list to know which parameters are automatically set on your website:</p> | ||
| 98 | +<table class="table table-bordered"> | ||
| 99 | +<tr><th style="width:220px">Type</th><th>Meta robots value</th></tr> | ||
| 100 | +<tr><td>Pagination pages</td><td><code>noindex, follow</code></td></tr> | ||
| 101 | +<tr><td>Page with sort or limit parameter</td><td><code>noindex, follow</code></td></tr> | ||
| 102 | +<tr><td>Search pages</td><td><code>none</code> (noindex, nofollow)</td></tr> | ||
| 103 | +</table> | ||
| 104 | +<h4>Recommended settings</h4> | ||
| 105 | +<p>Here is recommendations to set this section for most common use:</p> | ||
| 106 | +<table class="table table-bordered"> | ||
| 107 | +<tr><th style="width:220px">Type</th><th>Meta robots value</th></tr> | ||
| 108 | +<tr><td>Product</td><td><code>all</code></td></tr> | ||
| 109 | +<tr><td>Category</td><td><code>all</code></td></tr> | ||
| 110 | +<tr><td>Information</td><td><code>all</code></td></tr> | ||
| 111 | +<tr><td>Account</td><td><code>none</code></td></tr> | ||
| 112 | +<tr><td>Cart and Checkout</td><td><code>none</code></td></tr> | ||
| 113 | +</table> | ||
| 114 | +'; | ||
| 115 | +$_['text_info_limits'] = '<h4>Meta title and description limits</h4> | ||
| 116 | +<p>Meta title and description are very important since they are what the user will see when making a request on search engines, title as the main link and description the little text below.</p> | ||
| 117 | +<p><img src="view/seo_package/img/help/meta_title_desc.png" alt="" class="img-thumbnail"/></p> | ||
| 118 | +<p>Google is truncating your title after 67 characters but will index a few more, to get this easy to visualise the title field will become orange in case of bypassing 67 chars and red in case of bypassing 85 chars.<br/>The limit for description are ~300 chars for truncating and a bit more for indexing.</p> | ||
| 119 | +<p><span style="color:#fc7402">Orange color</span> means your text will surely be truncated but will be fully indexed anyway.<br /><span style="color:#f23333">Red color</span> means some words at the end of your text won\'t be indexed.</p> | ||
| 120 | +<p><b>Important:</b> default database field of opencart for meta description is limited to 255 chars, so if you want to have meta descriptions for 300 chars you should change the actual limit. To do so go into PHPMyAdmin > table oc_product_description > edit meta_description field and set 350 as the limit instead of 255.</p>'; | ||
| 121 | + | ||
| 122 | +// Tab seo configuration | ||
| 123 | +$_['tab_seo_options'] = 'SEO Configuration'; | ||
| 124 | +$_['text_seo_package_status'] = 'SEO Package status:'; | ||
| 125 | +$_['text_seo_components'] = 'Components:'; | ||
| 126 | +$_['text_seo_tab_general_1'] = 'Components'; | ||
| 127 | +$_['text_seo_tab_general_2'] = 'Language tag'; | ||
| 128 | +$_['text_seo_tab_general_3'] = 'Hreflang'; | ||
| 129 | +$_['text_seo_tab_general_4'] = 'Keyword options'; | ||
| 130 | +$_['text_seo_tab_general_5'] = 'Auto update'; | ||
| 131 | +$_['text_seo_tab_general_6'] = 'Friendly URLs'; | ||
| 132 | +$_['text_seo_tab_general_7'] = 'Cache'; | ||
| 133 | +$_['text_seo_tab_general_8'] = 'Canonical links'; | ||
| 134 | +$_['text_seo_tab_general_9'] = ''; | ||
| 135 | +$_['text_seo_tab_general_10'] = 'Reviews'; | ||
| 136 | +$_['text_seo_tab_general_11'] = 'Request headers'; | ||
| 137 | +$_['text_seo_tab_general_12'] = 'Sitemap'; | ||
| 138 | +$_['text_seo_tab_general_13'] = 'Meta robots'; | ||
| 139 | +$_['text_seo_tab_general_14'] = 'Redirections'; | ||
| 140 | +$_['text_seo_tab_general_16'] = 'Modules SEO'; | ||
| 141 | +$_['text_seo_tab_general_17'] = '404 Manager'; | ||
| 142 | +$_['text_seo_tab_general_18'] = 'SEO Headings'; | ||
| 143 | +$_['text_info_general'] = 'These settings impact the global functioning of SEOs, they take effect immediately and can be changed at any time.'; | ||
| 144 | +$_['text_info_general_3'] = 'Hreflang tag allow search engines to know the url of current page for other languages.<br/>Once activated it will be included in all pages of your website, and also into the seo package sitemap (feed > seo package sitemap).<br/> More information : <a href="https://support.google.com/webmasters/answer/189077?hl=en" target="new">here</a>'; | ||
| 145 | +$_['text_info_general_6'] = 'Rewrite pagination links SEO friendly, for example website.com/category?page=3 will become website.com/category/page-3'; | ||
| 146 | +$_['text_info_general_7'] = 'The cache feature will speed up your website by caching all url links instead of calculating them each time.<br/>Warning: this feature is experimental and may not work on all configurations, if you have another cache module or cache integrated with your theme disable this option.'; | ||
| 147 | +$_['text_info_general_8'] = 'Canonical links are informing search engines that if it find a same page elsewhere on the website it have to only consider one link, this is important in order to avoid duplicate content penalties'; | ||
| 148 | +$_['text_info_general_10'] = 'In default opencart reviews are loaded dynamically by ajax, that make search engines to not see the content of reviews which would be valuable content for your website, enable this option to be able to insert a block containing the user reviews in HTML in order to make search engines to be able to see them.<br /><br />You have to insert manually this code in your /catalog/view/theme/[your_theme]/template/product/product[.tpl|.twig] template, for tpl: <b><?php echo $seo_reviews; ?></b> for twig: {{ seo_reviews }}<br /><br /> Try to find where is the actual review tab to put the code inside.<br /><br />Then you can style it as you want, container class is <b>.seo_reviews</b>, item class is <b>.seo_review</b>'; | ||
| 149 | +$_['text_info_general_12'] = 'The sitemap have to be configured into feeds section, please click on the button below to configure it.'; | ||
| 150 | +$_['text_seopackage_sitemap'] = 'SEO Package Sitemap'; | ||
| 151 | +$_['text_seo_pagination_fix'] = 'Prev/next fix:<span class="help">Fix opencart 2.2+ issue with prev/next in subcategories</span>'; | ||
| 152 | +$_['text_seo_pagination_canonical'] = 'Canonical with pagination:<span class="help">Set canonical link of pagination pages to include the page number (not recommended)</span>'; | ||
| 153 | +$_['text_seo_canonical'] = 'Canonical:<span class="help">Enable canonical for all pages</span>'; | ||
| 154 | +$_['text_seo_pagination_name'] = 'Page name:<span class="help">Set name of page as it will appear for the page number in breadcrumbs</span>'; | ||
| 155 | +$_['text_seo_absolute'] = 'Absolute category path:'; | ||
| 156 | +$_['text_seo_absolute_help'] = 'Allow to use same keyword for sub-categories and something else (ex: <br/>/laptop/apple<br/>/desktop/apple<br/>/apple (manufacturer))<br/>If you give keyword for manufacturer, it cannot be used for top category (/apple and /apple), only subcategories'; | ||
| 157 | +$_['text_seo_reviews'] = 'SEO reviews:<span class="help">Insert reviews in HTML content</span>'; | ||
| 158 | +$_['text_safe_url_mode'] = 'Keyword sanitize:<span class="help">Choose how the keyword is sanitized by default, you can add new characters to remove or replace with the options below</span>'; | ||
| 159 | +$_['text_safe_url_min'] = 'Minimal - various special characters are allowed (parenthesis, dot, etc)'; | ||
| 160 | +$_['text_safe_url_ext'] = 'Extended - also removes most common special characters'; | ||
| 161 | +$_['text_safe_url_max'] = 'Maximum - remove any special characters, only letters allowed'; | ||
| 162 | +$_['text_seo_extension'] = 'Extension:<span class="help">Add the extension of your choice at the end of a product keyword (ex: .html)</span>'; | ||
| 163 | +$_['text_seo_extension_mode'] = 'Apply extension to:'; | ||
| 164 | +$_['text_ext_mode_all'] = 'All urls'; | ||
| 165 | +$_['text_ext_mode_nocat'] = 'All urls except category urls'; | ||
| 166 | +$_['text_seo_flag_tag'] = 'Tag after domain'; | ||
| 167 | +$_['text_seo_flag_store'] = 'Tag as subdomain'; | ||
| 168 | +$_['text_disable_other_store_links'] = 'Disable other links:<span class="help">Disable all links that does not belong to current store</span>'; | ||
| 169 | +$_['text_seo_flag'] = 'Language tag mode:'; | ||
| 170 | +$_['text_seo_flag_detect'] = 'Language detection:<span class="help">What to do when no language tag is present in the url?</span>'; | ||
| 171 | +$_['text_seo_flag_detect_auto'] = 'Auto-detect based on browser language'; | ||
| 172 | +$_['text_seo_flag_detect_force'] = 'Force default language'; | ||
| 173 | +$_['text_seo_flag_short'] = 'Short tag:'; | ||
| 174 | +$_['text_seo_flag_upper'] = 'Tag in uppercase:'; | ||
| 175 | +$_['text_seo_flag_default'] = 'No tag for default:'; | ||
| 176 | +$_['text_seo_flag_custom'] = 'Custom tag:<span class="help">Use this if you want to display different tag, can be useful in case of same initial language codes like zh-cn and zh-hk, let empty if you want to use default configuration</span>'; | ||
| 177 | +$_['text_seo_urlcache'] = 'URL Cache:<span class="help">Speed up page loading by using url caching</span>'; | ||
| 178 | +$_['text_seo_redirect_dynamic'] = 'Redirect dynamic links:<span class="help">Dynamic links (route=product/product&product_id=32) will be automatically redirected to their friendly url if it exists. The redirection is 301 so search engine will stop to index it and take only friendly url as reference.</span>'; | ||
| 179 | +$_['text_seo_redirect_canonical'] = 'Redirect to canonical:<span class="help">This is for friendly urls, it checks if the current link is the canonical link, if not it will be redirected to the canonical. This avoid to have multiple urls active for same item. The redirection is 301.<br/><br/><b>Important:</b> do not use redirect with category links when using a module like mega filter, because it will make the filters to not work.</span>'; | ||
| 180 | +$_['text_seo_redirect_canonical_1'] = 'Redirect all links except category links'; | ||
| 181 | +$_['text_seo_redirect_canonical_2'] = 'Redirect all links including category links'; | ||
| 182 | +$_['text_seo_redirect_http'] = 'HTTP mode:<span class="help">Use this to force your website to use SSL or www, if an url is not correct a 301 redirection will be made.</span>'; | ||
| 183 | +$_['text_seo_redirect_ssl'] = 'Force SSL value, don\'t change WWW'; | ||
| 184 | +$_['text_seo_redirect_www'] = 'Force WWW value, don\'t change SSL'; | ||
| 185 | +$_['text_seo_redirect_sslwww'] = 'Force both SSL and WWW values'; | ||
| 186 | +$_['text_seo_redirect_http_1'] = 'No-SSL, no-WWW - http://example.com'; | ||
| 187 | +$_['text_seo_redirect_http_2'] = 'No-SSL, WWW - http://www.example.com'; | ||
| 188 | +$_['text_seo_redirect_http_3'] = 'SSL, no-WWW - https://example.com'; | ||
| 189 | +$_['text_seo_redirect_http_4'] = 'SSL, WWW - https://www.example.com'; | ||
| 190 | +$_['text_seo_redirect_http_5'] = 'SSL - https://(www.)example.com'; | ||
| 191 | +$_['text_seo_redirect_http_6'] = 'No-SSL - http://(www.)example.com'; | ||
| 192 | +$_['text_seo_redirect_http_7'] = 'WWW - http(s)://www.example.com'; | ||
| 193 | +$_['text_seo_redirect_http_8'] = 'No-WWW - http(s)://example.com'; | ||
| 194 | +$_['text_seo_special_group'] = 'Special price group:<span class="help">[price] tag can calculate the special price, define here which customer group you want to use for calculating it, if disabled then only default price will be displayed</span>'; | ||
| 195 | +$_['text_seo_format_tag'] = 'Tag formatting:<span class="help">Add commas between each words to product tags when generating in mass update or auto-update</span>'; | ||
| 196 | +$_['text_seo_banner'] = 'Banner links rewrite:<span class="help">Dynamically generate seo link on banners (used in banner, carousel, slideshow modules)</span>'; | ||
| 197 | +$_['text_seo_banner_help'] = 'In banners section, do not enter the seo link (/category/product_name) but enter instead the default opencart link : <b>index.php?route=product/product&path=10_21&product_id=54</b>.<br />You can also strip out the index.php, like this : <b>product/product&path=23&product_id=48</b>'; | ||
| 198 | +$_['text_seo_hreflang'] = 'Enable hreflang tag:'; | ||
| 199 | +$_['text_seo_hreflang_mode'] = 'Hreflang lang display:'; | ||
| 200 | +$_['text_seo_hreflang_mode_1'] = 'Language only'; | ||
| 201 | +$_['text_seo_hreflang_mode_2'] = 'Language + country'; | ||
| 202 | +$_['text_seo_substore'] = 'Enable multi-store rewriting:'; | ||
| 203 | +$_['text_seo_substore_config'] = 'Actual configuration:'; | ||
| 204 | +$_['text_no_language_defined'] = 'No language defined'; | ||
| 205 | +$_['text_info_transform'] = 'All these settings define the way that the keyword will be generated when saving an item or using the mass update.'; | ||
| 206 | +$_['text_seo_whitespace'] = 'Spaces:<span class="help">Replace space chars by...</span>'; | ||
| 207 | +$_['text_seo_lowercase'] = 'Lowercase:<span class="help">QWERTY => qwerty</span>'; | ||
| 208 | +$_['text_seo_remove'] = 'Remove sentence:<span class="help">Remove some sentence when generating the urls, it will remove the sentence anywhere in the string<br/>Must be separated by comma</span>'; | ||
| 209 | +$_['text_seo_replace'] = 'Replace:<span class="help">Replace sentences when generating the urls<br/>For example:<br/><b>&:and</b> means replace "&" by "and"<br/>If you want to just remove do not set any replacement<br/>Must be separated by |</span>'; | ||
| 210 | +$_['text_seo_duplicate'] = 'Duplicates:<span class="help">Allow to use same keyword for distinct language version of an item</span>'; | ||
| 211 | +$_['text_seo_ascii'] = 'ASCII mode:<span class="help">Replace accentuated chars by their ascii equivalent<br/>"éàôï" => "eaoi"<br/>Supported languages: All latin (French, Italian, Spanish, Portuguese, etc), Arabic, Bulgarian, Croatian, Czech, Georgian, German, Greek, Latvian, Lithunanian, Polish, Romanian, Russian, Serbian, Slovak, Slovenian, Turkish, Ukrainian</span>'; | ||
| 212 | +$_['text_seo_autofill'] = 'Auto fill'; | ||
| 213 | +$_['text_seo_autofill_on'] = 'on:'; | ||
| 214 | +$_['text_seo_autofill_desc'] = 'Auto fill:<span class="help">If left the field blank on insert or edit, a value will be created automatically based on the pattern in mass update tab.<br/><br/>This works for : <br/>- products<br/>- categories<br/>- informations</span>'; | ||
| 215 | +$_['text_seo_autourl'] = 'Auto URL:<span class="help">If left blank on insert or edit, seo url keyword will be generated automatically using the parameter set in "Mass update" tab<br/>This works for products, categories and informations</span>'; | ||
| 216 | +$_['text_seo_autotitle'] = 'Auto title and desc for other langs:<span class="help">If left blank on insert or edit, titles and descriptions of other languages will copy the default language title and description<br/>This works for products, categories and informations</span>'; | ||
| 217 | +$_['text_headers_lastmod'] = 'Last-Modified:<span class="help">Add last modified date in headers</span>'; | ||
| 218 | +$_['text_all'] = 'All'; | ||
| 219 | +$_['text_insert'] = 'Insert'; | ||
| 220 | +$_['text_edit'] = 'Edit'; | ||
| 221 | +$_['text_fix_search'] = 'Fix search url:'; | ||
| 222 | +$_['text_fix_search_help'] = '<span class="help">Search url cannot be friendly for the top search bar because the url is hardcoded in javascript, enable this option if you want to have the search url rewritten. If it is not working with your theme please contact us.</span>'; | ||
| 223 | +$_['text_fix_cart'] = 'Fix cart remove issue:'; | ||
| 224 | +$_['text_fix_cart_help'] = '<span class="help">When there is friendly url for checkout/cart the remove of a product is not updating the current screen, enable this to fix this issue.</span>'; | ||
| 225 | +$_['tab_friendly_pagination'] = 'Pagination'; | ||
| 226 | +$_['tab_friendly_sorting'] = 'Sorting'; | ||
| 227 | +$_['tab_friendly_tag'] = 'Tags'; | ||
| 228 | +$_['tab_friendly_search'] = 'Search'; | ||
| 229 | +$_['text_seo_search'] = 'Enable friendly search<span class="help">Make search urls like /search/something</span>'; | ||
| 230 | +$_['text_seo_search_keyword'] = 'Search keyword:<span class="help">Choose keyword for search</span>'; | ||
| 231 | +$_['text_seo_pagination'] = 'Friendly url for pagination:<span class="help">Warning: this is not compatible with ajax pagination included some themes, if it doesn\'t work you will have to disable seo pagination or ajax pagination of the theme</span>'; | ||
| 232 | +$_['text_seo_sort'] = 'Enable friendly sorting:<span class="help">?sort=p.name&order=asc will be transformed to /sort-name-asc</span>'; | ||
| 233 | +$_['text_seo_tag'] = 'Enable friendly tag:'; | ||
| 234 | +$_['text_seo_pagination_keyword'] = 'Pagination keyword:<span class="help">?page=2 will be rewritten to /page-2</span>'; | ||
| 235 | +$_['text_seo_sorting_keyword'] = 'Sort keyword:<span class="help">Choose keyword for sort</span>'; | ||
| 236 | +$_['text_seo_order_keyword'] = 'Order keywords:<span class="help">Choose the keywords for asc and desc, must be separated by |</span>'; | ||
| 237 | +$_['text_seo_sortname_keyword'] = 'Sort type keywords:<span class="help">Choose the keywords for sort types (name, price, rating, mode), must be separated by |, must be in correct order</span>'; | ||
| 238 | +$_['text_seo_limit_keyword'] = 'Limit keyword:<span class="help">?limit=25 will be transformed to /limit-25</span>'; | ||
| 239 | +$_['text_seo_tag_keyword'] = 'Tag keyword:<span class="help">For tag urls (route=product/search&tag=something) define the keyword to use for nice url, for example if you set "tag" the result url will be /tag/something</span>'; | ||
| 240 | +$_['entry_404_log'] = 'Log 404 pages:<span class="help">When enabled the 404 pages will be logged and can be viewed in SEO Editor > 404 Manager</span>'; | ||
| 241 | +$_['entry_404_redir'] = 'Auto-redirect to search:<span class="help">Redirect 404 to search page containing last keyword</span>'; | ||
| 242 | +$_['entry_404_filter'] = 'Filter logging:<span class="help">Set some patterns on which a 404 page will not be logged, use | as separator</span>'; | ||
| 243 | +$_['entry_404_filter_ext'] = 'Filter extension:<span class="help">Set some file extension on which a 404 page will not be logged, use | as separator</span>'; | ||
| 244 | +$_['entry_shortcut'] = 'Module shortcut:<span class="help">Where do you want to display the module shortcut?</span>'; | ||
| 245 | +$_['text_shortcut_ext'] = 'Extensions menu'; | ||
| 246 | +$_['text_shortcut_top'] = 'Top level menu'; | ||
| 247 | +$_['text_shortcut_no'] = 'No shortcut'; | ||
| 248 | +$_['entry_url_backup'] = 'URL Auto Backup'; | ||
| 249 | +$_['info_url_backup'] = 'Don\'t worry anymore of changing any url on your website,<br/>when you change something this option will automatically save the old url and redirect to the new one'; | ||
| 250 | +$_['text_heading_position'] = 'Position'; | ||
| 251 | +$_['text_heading_position_i'] = 'Where to display the heading titles?'; | ||
| 252 | +$_['text_heading_css'] = 'Style'; | ||
| 253 | +$_['text_heading_css_i'] = 'Optionnal, apply some css to the title'; | ||
| 254 | +$_['text_headings_manual'] = 'Manual - see help section below'; | ||
| 255 | +$_['text_headings_topdesc'] = 'Top of description'; | ||
| 256 | +$_['text_headings_botdesc'] = 'Bottom of description'; | ||
| 257 | + | ||
| 258 | +// Tab store seo | ||
| 259 | +$_['tab_seo_store'] = 'Store SEO'; | ||
| 260 | +$_['text_info_store'] = '<h4>Store SEO</h4> | ||
| 261 | +<p>In this section you can customize the meta title, h1, meta keywords and description on home page for each store and each language!</p><p>Anything entered here will bypass the values entered in opencart settings.</p> | ||
| 262 | +<h4>Meta Title prefix and suffix</h4> | ||
| 263 | +<p>Use this parameter to add some text before or after all your website meta titles, they can be defined for each store and each language.</p> | ||
| 264 | +<p>For example if you want to have your title like <b>"Product title | My store"</b> just put <b>" | My store"</b> in suffix.</p>'; | ||
| 265 | +$_['text_info_seo_titles_tab'] = 'SEO titles (H1, H2, H3)'; | ||
| 266 | +$_['text_info_seo_titles'] = '<h4>SEO titles (H1, H2, H3)</h4> | ||
| 267 | +<p>If you prefer other position for SEO titles than top or bottom of description then choose "Manual" position, if you do so you will need to manually insert a code snippet in your templates, in any case it must be inserted manually for home page.<br/><br/>Files to modify (.tpl or .twig):<br/><code style="padding:0">/catalog/view/theme/[theme]/template/common/home<br/>/catalog/view/theme/[theme]/template/product/product<br/>/catalog/view/theme/[theme]/template/product/category<br/>/catalog/view/theme/[theme]/template/information/information<br/>/catalog/view/theme/[theme]/template/product/manufacturer_info</code><br/><br/>Insert these codes for .tpl (please note $heading_title is automatically containing $seo_h1, so it is generally not necessary to put seo h1, just h2 and h3): <br/><code style="padding:0"><h1><?php echo $seo_h1; ?></h1><br/><h2><?php echo $seo_h2; ?></h2><br/><h3><?php echo $seo_h3; ?></h3></code><br/><br/>Or these codes for .twig (please note {{ heading_title }} is automatically containing {{ seo_h1 }}, so it is generally not necessary to put seo h1, just h2 and h3): <br/><code style="padding:0"><h1>{{ seo_h1 }}</h1><br/><h2>{{ seo_h2 }}</h2><br/><h3>{{ seo_h3 }}</h3></code><br/></p> | ||
| 268 | +<p>Consider that elements with display:none may not be considered by search engines, so you may want to insert only some of these depending your template (h1 is the most important).</p>'; | ||
| 269 | +$_['entry_robots'] = 'Enable meta robots'; | ||
| 270 | +$_['entry_robots_product'] = 'Products'; | ||
| 271 | +$_['entry_robots_product_i'] = 'Default robots value for products, can be altered per-product in product edition > Data'; | ||
| 272 | +$_['entry_robots_category'] = 'Category'; | ||
| 273 | +$_['entry_robots_category_i'] = 'Default robots value for categories'; | ||
| 274 | +$_['entry_robots_information'] = 'Information'; | ||
| 275 | +$_['entry_robots_information_i'] = 'Default robots value for informations, can be altered per-information in information edition > Data'; | ||
| 276 | +$_['entry_robots_account'] = 'Account'; | ||
| 277 | +$_['entry_robots_account_i'] = 'Default robots value for customer account (login, register, ...)'; | ||
| 278 | +$_['entry_robots_checkout'] = 'Cart and Checkout'; | ||
| 279 | +$_['entry_robots_checkout_i'] = 'Default robots value for checkout pages (cart, checkout, ...)'; | ||
| 280 | +$_['entry_robots_manufacturer'] = 'Manufacturers'; | ||
| 281 | +$_['entry_robots_manufacturer_i'] = 'Default robots value for manufacturers'; | ||
| 282 | +$_['entry_robots_tag'] = 'Tag page'; | ||
| 283 | +$_['entry_robots_tag_i'] = 'Default robots value for tag pages'; | ||
| 284 | +$_['store_seo_global'] = 'Global settings'; | ||
| 285 | +$_['store_seo_home'] = 'Homepage only'; | ||
| 286 | +$_['entry_robots_default'] = 'Default value'; | ||
| 287 | +$_['entry_store_seo_title'] = 'Meta Title:'; | ||
| 288 | +$_['entry_store_seo_title_extra'] = 'Meta Title prefix and suffix:'; | ||
| 289 | +$_['entry_store_title'] = 'Title H1:'; | ||
| 290 | +$_['entry_store_h2'] = 'Title H2:'; | ||
| 291 | +$_['entry_store_h3'] = 'Title H3:'; | ||
| 292 | +$_['entry_store_desc'] = 'Meta Description:'; | ||
| 293 | +$_['entry_store_keywords'] = 'Meta Keywords:'; | ||
| 294 | +$_['info_store_heading'] = 'See information below to include in your theme'; | ||
| 295 | + | ||
| 296 | +// Tab store analytics | ||
| 297 | +$_['tab_seo_analytics'] = 'Analytics'; | ||
| 298 | +$_['tab_analytics'] = 'Analytics'; | ||
| 299 | +$_['entry_gg_components'] = 'Google Analytics components:'; | ||
| 300 | +$_['text_gg_analytics'] = 'Google Analytics'; | ||
| 301 | +$_['text_gg_enhanced'] = 'Track Ecommerce (advanced tracking of products view/add to cart/purchase)'; | ||
| 302 | +$_['text_gg_adwords'] = 'Google Adwords'; | ||
| 303 | +$_['entry_analytics_code'] = 'Google Analytics ID:<span class="help">It is ID in Google Analytics 4 format: G-123456789, or old format UA-123456789, use G- format to benefit of latest GA4 panel and improved analytics</span>'; | ||
| 304 | +$_['entry_adwords_code'] = 'Google Adwords ID:<span class="help">It is ID in this format: AW-12345678</span>'; | ||
| 305 | +$_['text_info_analytics4_tab'] = 'Google Analytics 4'; | ||
| 306 | +$_['text_info_analytics_tab'] = 'Google Analytics 3'; | ||
| 307 | +$_['text_info_analytics4'] = '<h4>Set up Google Analytics 4 (recommended)</h4> | ||
| 308 | +<p>You can have detailled information of your website SEO using latest Google Analytics 4 tracking, for that connect to <a href="https://analytics.google.com" target="_blank">https://analytics.google.com</a> and register your website, make sure to create a Google Analytics 4 property.</p><p>Check this help section to see how to create your analytics account and GA 4 property: <a href="https://support.google.com/analytics/answer/9304153" target="_blank">Set up Analytics for a website and/or app (GA4)</a></p> | ||
| 309 | +<h4 id="account">Create an Analytics account</h4> | ||
| 310 | +<p>Your first step is to set up an Analytics account, unless you already have one. Skip to <a href="#property">creating a property</a> unless you want to create a separate account for this website and/or app. For example, you might want to create another account if this website and/or app belong(s) to a separate business.</p> | ||
| 311 | +<ol> | ||
| 312 | + <li>In <a class="glossary-term" data-answer="6132368" href="https://support.google.com/analytics/answer/6132368" target="_blank" rel="noopener" data-stats-ve="40">Admin</a>, in the <em>Account</em> column, click <strong>Create Account</strong>.</li> | ||
| 313 | + <li>Provide an account name. Configure the <a href="https://support.google.com/analytics/answer/1011397" target="_blank" rel="noopener">data-sharing settings</a> to control which data you share with Google.</li> | ||
| 314 | + <li>Click <strong>Next</strong> to add the first property to the account.</li> | ||
| 315 | +</ol> | ||
| 316 | +<h4 id="property"> Create a Google Analytics 4 property</h4> | ||
| 317 | +<p>You need <a href="https://support.google.com/analytics/answer/9305587" target="_blank" rel="noopener">Edit permission</a> to add properties to a Google Analytics account. If you created this account, you automatically have Edit permission. You can add up to 100 properties to an Analytics account. To raise this limit, reach out to your account manager. </p> | ||
| 318 | +<p>To create a property:</p> | ||
| 319 | +<ol> | ||
| 320 | + <li>Are you continuing from "Create an Analytics account", above? If so, skip to step 2. Otherwise, | ||
| 321 | + <ul> | ||
| 322 | + <li>In <a class="glossary-term" data-answer="6132368" href="https://support.google.com/analytics/answer/6132368" target="_blank" rel="noopener" data-stats-ve="40">Admin</a>, look at the <em>Account</em> column to make sure that you\'ve selected the right account. Then, in the <em>Property</em> column, click <strong>Create Property</strong>.<br/><img src="//storage.googleapis.com/support-kms-prod/b8SYTWe17HviZx95qPL9HzIp2aVJKNlKM0Xk" alt="" width=""></li> | ||
| 323 | + </ul> | ||
| 324 | + </li> | ||
| 325 | + <li>Enter a name for the property and select the reporting time zone and currency. Time zone determines the day boundary for your reports regardless of where the data originates. | ||
| 326 | + <ul> | ||
| 327 | + <li>If you choose a time zone that honors Daylight Savings Time, Analytics automatically adjusts for time changes. Use Greenwich Mean Time if you don\'t want to adjust for Daylight Savings Time.</li> | ||
| 328 | + <li>Changing the time zone only affects data going forward. If you change the time zone for an existing property, you may see a flat spot or a spike in your data, caused by the time shift forwards or backwards, respectively. Report data may refer to the old time zone for a short period after you update your settings, until Analytics servers have processed the change.</li> | ||
| 329 | + </ul> | ||
| 330 | + </li> | ||
| 331 | + <li>Click <strong>Next.</strong> Select your industry category and business size.</li> | ||
| 332 | + <li>Click <strong>Create </strong>and accept the Analytics Terms of Service and the Data Processing Amendment.</li> | ||
| 333 | + <li>Copy your ID starting by G- in module option <strong>Google Analytics ID</strong></li> | ||
| 334 | +</ol> | ||
| 335 | +<p>It may take up to 30 minutes for data collection to start. You can then use the <a href="https://support.google.com/analytics/answer/9271392" target="_blank" rel="noopener">Realtime report</a> to verify that you\'re receiving data.</p> | ||
| 336 | + | ||
| 337 | +'; | ||
| 338 | +$_['text_info_analytics'] = '<h4>Set up Google Analytics in old format</h4> | ||
| 339 | +<p>You can have detailled information of your website SEO using Google Analytics and Enhanced eCommerce Tracking, for that connect to <a href="https://analytics.google.com" target="_blank">https://analytics.google.com</a> and register your website, make sure to create a Google Analytics 4 property.</p><p>Check this help section to see how to create your analytics account and GA 4 property: <a href="https://support.google.com/analytics/answer/9304153" target="_blank">Set up Analytics for a website and/or app (GA4)</a></p> | ||
| 340 | +<p><img src="view/seo_package/img/help/analytics_1.png" alt="" class="img-thumbnail"/></p> | ||
| 341 | +<p><img src="view/seo_package/img/help/analytics_2.png" alt="" class="img-thumbnail"/></p> | ||
| 342 | +'; | ||
| 343 | +$_['text_info_analytics_verification'] = '<h4>Verify your website on Google Analytics</h4> | ||
| 344 | +<p>You can have detailled information of your website SEO using google analytics, for that connect to <a href="https://www.google.com/webmasters/" target="_blank">https://www.google.com/webmasters/</a> and click on ADD A PROPERTY, then choose the HTML tag verification method like on the image below.</p> | ||
| 345 | +<p><img src="view/seo_package/img/help/analytics_verif.png" alt="" class="img-thumbnail"/></p> | ||
| 346 | +<p>Copy the code given by google here to activate the verification of your website. Now you should be able to verify on google page.</p>'; | ||
| 347 | +$_['text_tab_webmaster'] = 'Webmaster/Console'; | ||
| 348 | +$_['entry_google_webmaster'] = 'Google Search Console'; | ||
| 349 | +$_['entry_bing_webmaster'] = 'Bing Webmaster'; | ||
| 350 | +$_['entry_yandex_webmaster'] = 'Yandex Webmaster'; | ||
| 351 | +$_['text_info_analytics_main'] = '<p><i class="fa fa-info-circle"></i> Google analytics can provide detailled information and statistics related customer usage of your website.</p><p>It is not mandatory and does not impact the seo performance, but it can be helpful for you to improve your website.</p>'; | ||
| 352 | +$_['text_info_webmaster'] = '<p><i class="fa fa-info-circle"></i> Configure here the site verification to check your website on webmaster tools of google, bing, yandex, etc.</p><p>These webmaster/console tools are providing various statistics and informations about the health of your website, which may help you to identify if there is any issues with SEO or indexation of your urls.</p><p>You will just need to create account on corresponding websites and then enter the verification code here.</p><p>It is not mandatory and does not impact the seo performance, but it can be helpful for you to improve your website.</p>'; | ||
| 353 | +$_['text_info_webmaster1'] = '<h4>Verify your website on Google Search Console</h4> | ||
| 354 | +<ol> | ||
| 355 | +<li>Connect to <a href="https://search.google.com/search-console" target="_blank">Google Search Console</a></li> | ||
| 356 | +<li>Click on <b>ADD A PROPERTY</b></li> | ||
| 357 | +<li>Choose property type: <b>URL prefix</b></li> | ||
| 358 | +<li>Choose verification method: <b>HTML tag</b></li> | ||
| 359 | +<li>Copy the tag into "<b>Google Search Console</b>" field of this section</li> | ||
| 360 | +</ol>'; | ||
| 361 | +$_['text_info_webmaster2'] = '<h4>Verify your website on Bing Webmaster</h4> | ||
| 362 | +<ol> | ||
| 363 | +<li>Connect to <a href="https://www.bing.com/webmasters" target="_blank">Bing Webmaster</a></li> | ||
| 364 | +<li>Enter your website url into <b>Add your site manually</b></li> | ||
| 365 | +<li>Choose verification method: <b>HTML Meta Tag</b></li> | ||
| 366 | +<li>Copy the tag into "<b>Bing Webmaster</b>" field of this section</li> | ||
| 367 | +</ol>'; | ||
| 368 | +$_['text_info_webmaster3'] = '<h4>Verify your website on Yandex Webmaster</h4> | ||
| 369 | +<ol> | ||
| 370 | +<li>Connect to <a href="https://webmaster.yandex.com/" target="_blank">Yandex Webmaster</a></li> | ||
| 371 | +<li>Enter your website url into <b>Add your site manually</b></li> | ||
| 372 | +<li>Choose verification method: <b>Meta Tag</b></li> | ||
| 373 | +<li>Copy the tag into "<b>Yandex Webmaster</b>" field of this section</li> | ||
| 374 | +</ol>'; | ||
| 375 | + | ||
| 376 | +// Tab rich snippets | ||
| 377 | +$_['tab_seo_snippets'] = 'Rich Snippets'; | ||
| 378 | +$_['text_seo_tab_snippet_1'] = 'Google Microdata (Rich Cards)'; | ||
| 379 | +$_['text_seo_tab_snippet_2'] = 'Facebook Open Graph'; | ||
| 380 | +$_['text_seo_tab_snippet_3'] = 'Twitter Card'; | ||
| 381 | +$_['text_seo_tab_snippet_3'] = 'Twitter Card'; | ||
| 382 | +$_['text_seo_tab_snippet_4'] = 'Google Publisher'; | ||
| 383 | +$_['text_seo_tab_snippet_5'] = 'Facebook Pixel'; | ||
| 384 | +$_['tab_faq'] = 'FAQ'; | ||
| 385 | +$_['tab_microdata_1'] = 'Product'; | ||
| 386 | +$_['tab_microdata_2'] = 'Organization'; | ||
| 387 | +$_['tab_microdata_3'] = 'Store'; | ||
| 388 | +$_['tab_microdata_4'] = 'Website'; | ||
| 389 | +$_['tab_microdata_5'] = 'Place'; | ||
| 390 | +$_['tab_microdata_6'] = 'Breadcrumbs'; | ||
| 391 | +$_['tab_microdata_7'] = 'Category'; | ||
| 392 | +$_['entry_snippet_order_status'] = 'Stock statuses:<span class="help">Select to which microdata stock status you want to bind each of your stock status, any other than "In stock" is displayed only when product reach zero quantity</span>'; | ||
| 393 | +$_['entry_snippet_pricerange'] = 'Price range:'; | ||
| 394 | +$_['entry_snippet_same_as'] = 'Same as:'; | ||
| 395 | +$_['entry_enable_microdata'] = 'Enable Google Microdata:'; | ||
| 396 | +$_['entry_microdata_search'] = 'Search box'; | ||
| 397 | +$_['entry_microdata_logo'] = 'Logo'; | ||
| 398 | +$_['entry_microdata_address'] = 'Address'; | ||
| 399 | +$_['entry_snippet_contact'] = 'Contacts'; | ||
| 400 | +$_['entry_microdata_gps'] = 'GPS coordinates'; | ||
| 401 | +$_['entry_gps_lat'] = 'Latitude'; | ||
| 402 | +$_['entry_gps_long'] = 'Longitude'; | ||
| 403 | +$_['entry_address_street'] = 'Street'; | ||
| 404 | +$_['entry_address_city'] = 'Locality'; | ||
| 405 | +$_['entry_address_region'] = 'Region'; | ||
| 406 | +$_['entry_address_code'] = 'Postal code'; | ||
| 407 | +$_['entry_address_country'] = 'Country'; | ||
| 408 | +$_['entry_email'] = 'Email'; | ||
| 409 | +$_['entry_phone'] = 'Phone'; | ||
| 410 | +$_['entry_product_data'] = 'Include product data:'; | ||
| 411 | +$_['entry_snippet_data'] = 'Include data:'; | ||
| 412 | +$_['entry_model'] = 'Model'; | ||
| 413 | +$_['entry_description'] = 'Description (based on meta description)'; | ||
| 414 | +$_['entry_reviews'] = 'Reviews'; | ||
| 415 | +$_['entry_cat_reviews'] = 'Reviews'; | ||
| 416 | +$_['entry_cat_reviews_i'] = 'Warning if you have a lot of products in a category this can slow down a bit the opening of the category because it calculate the average rating of all products in current category.<br>In case of lot of products it is recommended to disable this option or to have a cache module like our Rocket Boost module.'; | ||
| 417 | +$_['entry_sku'] = 'SKU'; | ||
| 418 | +$_['entry_upc'] = 'UPC'; | ||
| 419 | +$_['entry_mpn'] = 'MPN'; | ||
| 420 | +$_['entry_ean'] = 'EAN'; | ||
| 421 | +$_['entry_isbn'] = 'ISBN'; | ||
| 422 | +$_['entry_rating'] = 'Average rating'; | ||
| 423 | +$_['entry_manufacturer'] = 'Manufacturer'; | ||
| 424 | +$_['entry_brand'] = 'Manufacturer'; | ||
| 425 | +$_['entry_enable_opengraph'] = 'Enable Facebook Open Graph:'; | ||
| 426 | +$_['entry_opengraph_id'] = 'Facebook App ID:'; | ||
| 427 | +$_['entry_enable_tcard'] = 'Enable Twitter Card:'; | ||
| 428 | +$_['entry_twitter_nick'] = 'Twitter nickname (optional):'; | ||
| 429 | +$_['entry_twitter_home_type'] = 'Home page type:'; | ||
| 430 | +$_['entry_twitter_summary'] = 'Summary'; | ||
| 431 | +$_['entry_twitter_summary_large'] = 'Summary with large image'; | ||
| 432 | +$_['entry_enable_gpublisher'] = 'Enable Google Publisher:'; | ||
| 433 | +$_['entry_gpublisher_url'] = 'Google+ url:'; | ||
| 434 | + | ||
| 435 | + | ||
| 436 | +// Tab friendly urls | ||
| 437 | +$_['tab_seo_friendly'] = 'Friendly URLs'; | ||
| 438 | +$_['text_seo_export_urls'] = 'Export URLs'; | ||
| 439 | +$_['text_seo_export_urls_tooltip'] = 'Export Friendly URLs and send them to the developer for integration in official package'; | ||
| 440 | +$_['text_seo_reset_urls'] = 'Restore default URLs'; | ||
| 441 | +$_['text_seo_reset_urls_tooltip']= 'If the current language does not have predefined urls the module will load english version'; | ||
| 442 | +$_['text_info_friendly'] = 'Here you can manage the friendly urls, edit them as you want.<br/>You have also the possibility to add new url, it works for example for any custom module you installed, just fill the 1st field with the value in route (?route=mymodule/action) and the 2nd field with the keyword you want to appear in the url.'; | ||
| 443 | +$_['text_seo_friendly'] = 'Common Pages Urls'; | ||
| 444 | +$_['info_seo_friendly'] = 'Enable this component in order to rewrite urls for common pages urls and param urls'; | ||
| 445 | +$_['info_seo_absolute'] = 'Enable this component in order to use absolute urls'; | ||
| 446 | +$_['info_seo_autolink'] = 'Enable this component in order to use auto-links'; | ||
| 447 | +$_['info_seo_404'] = 'Enable this component to activate the logging of 404 error pages'; | ||
| 448 | +$_['info_seo_redirect'] = 'Enable this component to activate 301 redirections'; | ||
| 449 | +$_['text_seo_cat_slash'] = 'Final slash on category'; | ||
| 450 | +$_['text_seo_cat_slash_help'] = 'Insert a final slash at the end of category urls'; | ||
| 451 | +$_['text_seo_redir_reviews'] = 'Redirect orhpan reviews:<span class="help">If a review page index.php?route=product/product/review is not accessed through ajax request then redirect 301 to the product page. This prevent these review snippet to be indexed.</span>'; | ||
| 452 | +$_['text_seo_remove_urls'] = 'Remove all entries'; | ||
| 453 | +$_['text_seo_remove_redirected'] = 'Remove redirected entries'; | ||
| 454 | +$_['text_seo_add_url'] = 'Add new entry'; | ||
| 455 | + | ||
| 456 | +// Tab full product path | ||
| 457 | +$_['tab_seo_fpp'] = 'Path Manager'; | ||
| 458 | +// Text | ||
| 459 | +$_['tab_fpp_product'] = 'Product'; | ||
| 460 | +$_['tab_fpp_category'] = 'Category'; | ||
| 461 | +$_['tab_fpp_manufacturer'] = 'Manufacturer'; | ||
| 462 | +$_['tab_fpp_search'] = 'Search/Tag'; | ||
| 463 | +$_['tab_fpp_common'] = 'Common'; | ||
| 464 | +$_['text_fpp_cat_canonical'] = 'Category canonical:'; | ||
| 465 | +$_['text_fpp_cat_mode_0'] = 'Direct link'; | ||
| 466 | +$_['text_fpp_cat_mode_1'] = 'Full path'; | ||
| 467 | +$_['text_fpp_cat_canonical_help'] = 'What kind of link you want to give to search engines ?<br/><b>Direct link</b>: /category (default)<br/><b>Full path</b>: /cat1/cat2/category<br/><br/>With direct link path mode the canonical is automatically set on directl link too'; | ||
| 468 | +$_['text_fpp_mode'] = 'Product path mode:'; | ||
| 469 | +$_['text_fpp_mode_0'] = 'Direct link'; | ||
| 470 | +$_['text_fpp_mode_1'] = 'Shortest path'; | ||
| 471 | +$_['text_fpp_mode_2'] = 'Largest path'; | ||
| 472 | +$_['text_fpp_mode_3'] = 'Manufacturer path'; | ||
| 473 | +$_['text_fpp_mode_4'] = 'Last category'; | ||
| 474 | +$_['text_fpp_mode_5'] = 'First category'; | ||
| 475 | +$_['text_fpp_slash'] = 'Final slash'; | ||
| 476 | +$_['text_fpp_slash_mode_0'] = 'No final slash'; | ||
| 477 | +$_['text_fpp_slash_mode_1'] = 'Final slash on categories'; | ||
| 478 | +$_['text_fpp_slash_mode_2'] = 'Final slash on all urls'; | ||
| 479 | +$_['text_fpp_slash_help'] = 'Insert a final slash on urls, this is matter of preference, there is no SEO impact.'; | ||
| 480 | +$_['placeholder_category'] = 'Categories'; | ||
| 481 | +$_['text_fpp_noprodbreadcrumb'] = 'Remove last breadcrumb:'; | ||
| 482 | +$_['text_fpp_noprodbreadcrumb_help'] = '<span class="help">Do not display the last breadcrumb link</span>'; | ||
| 483 | +$_['text_fpp_bc_mode'] = 'Breadcrumbs mode:'; | ||
| 484 | +$_['text_fpp_breadcrumbs_fix'] = 'Breadcrumbs generator:'; | ||
| 485 | +$_['text_fpp_breadcrumbs_0'] = 'Default'; | ||
| 486 | +$_['text_fpp_breadcrumbs_1'] = 'Generate if empty'; | ||
| 487 | +$_['text_fpp_breadcrumbs_2'] = 'Always generate'; | ||
| 488 | + | ||
| 489 | +$_['text_fpp_mode_help'] = '<span class="help"><b>Direct link:</b> direct link to product, no category included (ex: /product_name), this is default opencart behaviour<br/> | ||
| 490 | + <b>Shortest path:</b> shortest path by default, can be altered by banned categories (ex: /category/product_name)<br/> | ||
| 491 | + <b>Largest path:</b> largest path by default, can be altered by banned categories (ex: /category/sub-category/product_name)<br/> | ||
| 492 | + <b>Last category:</b> only the last category of the product will be displayed, if you have a product in /category/sub-category/product_name the link will be /sub-category/product_name<br/> | ||
| 493 | + <b>Manufacturer path:</b> manufacturer path instead of categories (ex: /manufacturer/product_name)</span>'; | ||
| 494 | +$_['text_fpp_breadcrumbs_help'] = '<span class="help"><b>Default:</b> default opencart behaviour: will display breadcrumbs coming from categories<br/> | ||
| 495 | + <b>Generate if empty:</b> generate breadcrumbs only when it is not already available, so category breadcrumb is preserved (recommended)<br/> | ||
| 496 | + <b>Always generate:</b> overwrite also the category breadcrumbs, so the only breadcrumbs you will get is the one generated by the module<br/></span>'; | ||
| 497 | +$_['text_fpp_bypasscat'] = 'Rewrite product path in categories:'; | ||
| 498 | +$_['text_fpp_bypasscat_help'] = '<span class="help">If disabled, the product link from categories remains the same in order to preserve normal behaviour and breadcrumbs.<br/>If enabled, the product link from categories is overwritten with path generated by the module.<br>In any case canonical link is updated with good value so google will only see the url generated by the module for a given product.</span>'; | ||
| 499 | +$_['text_fpp_directcat'] = 'Category path mode:'; | ||
| 500 | +$_['text_fpp_directcat_help'] = 'What kind of link you want to display on your website ?<br/><b>Direct link</b>: /category<br/><b>Full path</b>: /cat1/cat2/category (default)'; | ||
| 501 | +$_['text_fpp_homelink'] = 'Rewrite home link:'; | ||
| 502 | +$_['text_fpp_homelink_help'] = '<span class="help">Set homepage link to mystore.com instead of mystore.com/index.php?route=common/home</span>'; | ||
| 503 | +$_['text_fpp_depth'] = 'Max levels:'; | ||
| 504 | +$_['text_fpp_depth_help'] = '<span class="help">Maximum category depth you want to display, for example if you have a product in /cat/subcat/subcat/product and set this option to 2 the link will become /cat/subcat/product<br/>This option works in largest and shortest path modes</span>'; | ||
| 505 | +$_['text_fpp_unlimited'] = 'Unlimited'; | ||
| 506 | +$_['text_fpp_brand_parent'] = 'Manufacturer parent:'; | ||
| 507 | +$_['text_fpp_brand_parent_help'] = '<span class="help">Include the manufacturers inside the manufacturer list url.<br/>For example if your manufacturer list is /brand, the manufacturer apple will appear this way /brand/apple instead of direct /apple</span>'; | ||
| 508 | +$_['text_fpp_remove_search'] = 'Remove search/tag parameters:'; | ||
| 509 | +$_['text_fpp_remove_search_help'] = '<span class="help">Remove the search or tag parameter (?search=something, ?tag=something) from product urls in search results (products urls only, not search page url itself)</span>'; | ||
| 510 | +$_['entry_category'] = 'Banned categories:<span class="help">Choose the categories that will never be displayed in case of multiple paths</span>'; | ||
| 511 | + | ||
| 512 | +// Tab mass update | ||
| 513 | +$_['tab_seo_update'] = 'Mass Update'; | ||
| 514 | +$_['text_info_update'] = 'Be careful when using this function since it will overwrite all your keywords.<br/>You can use the simulate function to check the result before really update.<br/>Select the language flags to update only these languages.'; | ||
| 515 | +$_['text_seo_generator_report'] = 'Report'; | ||
| 516 | +$_['text_seo_generator_report_i'] = 'Check database to find if there is any issue'; | ||
| 517 | +$_['text_seo_generator_cleanup'] = 'Clean up'; | ||
| 518 | +$_['text_seo_generator_cleanup_i'] = 'Remove old urls in database, make a clean up if you have troubles with some urls'; | ||
| 519 | +$_['text_seo_generator_deduplicate'] = 'Remove duplicates'; | ||
| 520 | +$_['text_seo_generator_deduplicate_i'] = 'Check and remove any duplicates in url aliases'; | ||
| 521 | +$_['text_seo_mode_robots'] = 'Robots'; | ||
| 522 | +$_['text_seo_generator_robots'] = 'Generate robots.txt file'; | ||
| 523 | +$_['text_seo_generator_robots_i'] = 'If you use a cache extension the robots value set in each product will not work, in this case you will have to generate a robots.txt file to avoid this issue. This generator will automatically take all values for robots set in products and generate the corresponding robots.txt file'; | ||
| 524 | +$_['text_seo_mode_internal_links'] = 'Internal links'; | ||
| 525 | +$_['text_seo_generator_internal_links_i'] = 'Search for product names into your descriptions to automatically create a link to this product'; | ||
| 526 | +$_['text_seo_generator_internal_links'] = 'Generate internal links'; | ||
| 527 | +$_['text_cache'] = 'URL cache:<span class="help">Generate or delete url cache</span>'; | ||
| 528 | +$_['text_redirection'] = 'Dynamic backup urls:<span class="help">Save all actual urls for further redirection, then you can change the seo keyword, google will keep the track.</span>'; | ||
| 529 | +$_['text_cache_create_btn']= 'Generate cache'; | ||
| 530 | +$_['text_redirect_create_btn']= 'Generate redirection'; | ||
| 531 | +$_['text_cache_delete_btn']= 'Clear cache'; | ||
| 532 | +$_['text_cleanup_btn'] = 'Clean up'; | ||
| 533 | +$_['text_cleanup_duplicate_btn'] = 'Remove duplicate url alias'; | ||
| 534 | +$_['text_cleanup_done'] = 'Clean up done, %d entries deleted'; | ||
| 535 | +$_['text_seo_languages'] = 'Select languages'; | ||
| 536 | +$_['text_seo_simulate'] = 'Simulation:<span class="help">No changes are made while this button is on</span>'; | ||
| 537 | +$_['text_seo_empty_only'] = 'Update empty values only:<span class="help">Check off to overwrite all values</span>'; | ||
| 538 | +$_['text_seo_redirect'] = 'Redirection'; | ||
| 539 | +$_['text_seo_redirect_mode'] = 'Url redirection:<span class="help">Automatically insert a redirection for old urls</span>'; | ||
| 540 | +$_['text_image_name_lang'] = 'Image names can be set in only one language, please choose one and click on generate again'; | ||
| 541 | +$_['text_enable'] = 'Enable'; | ||
| 542 | +$_['text_deleted'] = 'Deleted'; | ||
| 543 | + | ||
| 544 | +// Tab cron | ||
| 545 | +$_['tab_seo_cron'] = 'Cron'; | ||
| 546 | +$_['text_seo_cron_update'] = 'Update:'; | ||
| 547 | +$_['text_clear_logs'] = 'Clear logs'; | ||
| 548 | +$_['text_tab_cron_1'] = 'Configuration'; | ||
| 549 | +$_['text_tab_cron_2'] = 'Report'; | ||
| 550 | +$_['text_seo_cron_log'] = 'Cron log:'; | ||
| 551 | +$_['text_log_all'] = 'Full - log all updated items and report'; | ||
| 552 | +$_['text_log_report'] = 'Report - log only report with number of items and elapsed time'; | ||
| 553 | +$_['text_log_off'] = 'Disabled - do not log anything'; | ||
| 554 | +$_['text_cli_log_save'] = 'Save log file'; | ||
| 555 | +$_['text_cli_log_too_big'] = 'Your log file is too big (%s) to be displayed here - you can download it or clear it with buttons below'; | ||
| 556 | + | ||
| 557 | +// Tab about | ||
| 558 | +$_['tab_seo_about'] = 'About'; | ||
| 559 | + | ||
| 560 | +$_['text_nothing_changed'] = 'Zero items'; | ||
| 561 | +$_['text_seo_no_language'] = 'No language selected'; | ||
| 562 | +$_['text_seo_fullscreen'] = 'Fullscreen'; | ||
| 563 | +$_['text_seo_show_old'] = 'Display old value'; | ||
| 564 | +$_['text_seo_change_count'] = 'entries changed'; | ||
| 565 | +$_['text_seo_old_value'] = 'Old value'; | ||
| 566 | +$_['text_seo_new_value'] = 'New value'; | ||
| 567 | +$_['text_seo_item'] = 'Item'; | ||
| 568 | +$_['text_simulation'] = 'Simulation mode'; | ||
| 569 | +$_['text_write'] = 'Write mode'; | ||
| 570 | +$_['text_empty_only'] = 'Empty values only'; | ||
| 571 | +$_['text_all_values'] = 'All values'; | ||
| 572 | +$_['text_seo_update_info'] = '1. Enable or disable simulation mode<br/>2. Select if you want to update only empty items or all items<br/>3. Click on the Generate button of your choice<br/>4. Results will be displayed here'; | ||
| 573 | +$_['text_seo_simulation_mode'] = '<span>SIMULATION MODE</span><br/>No changes will be made to database'; | ||
| 574 | +$_['text_seo_write_mode'] = '<span>WRITE MODE</span><br/>Modifications will be saved'; | ||
| 575 | +$_['text_seo_product'] = 'Product'; | ||
| 576 | +$_['text_seo_category'] = 'Category'; | ||
| 577 | +$_['text_seo_manufacturer'] = 'Manufacturer'; | ||
| 578 | +$_['text_seo_information'] = 'Information'; | ||
| 579 | +$_['text_seo_cache'] = 'Name'; | ||
| 580 | +$_['text_seo_cleanup'] = 'Entry (url)'; | ||
| 581 | +$_['text_seo_type_product'] = 'Products'; | ||
| 582 | +$_['text_seo_type_category'] = 'Categories'; | ||
| 583 | +$_['text_seo_type_manufacturer'] = 'Manufacturers'; | ||
| 584 | +$_['text_seo_type_information'] = 'Informations'; | ||
| 585 | +$_['text_seo_type_redirect'] = 'Backup URLs'; | ||
| 586 | +$_['text_seo_mode_product'] = 'Products'; | ||
| 587 | +$_['text_seo_mode_category'] = 'Categories'; | ||
| 588 | +$_['text_seo_mode_manufacturer'] = 'Manufacturers'; | ||
| 589 | +$_['text_seo_mode_information'] = 'Informations'; | ||
| 590 | +$_['text_seo_mode_url_alias'] = 'Url Alias'; | ||
| 591 | +$_['text_seo_mode_duplicate'] = 'Remove duplicate'; | ||
| 592 | +$_['text_seo_mode_redirection'] = 'Backup URLs'; | ||
| 593 | +$_['text_seo_type_redirection'] = 'Backup URL'; | ||
| 594 | +$_['text_seo_type_report'] = 'Report'; | ||
| 595 | +$_['text_seo_type_cache'] = 'Cache'; | ||
| 596 | +$_['text_seo_type_cleanup'] = 'Clean up'; | ||
| 597 | +$_['text_seo_generator_product'] = 'Products'; | ||
| 598 | +$special_tags = '<strong>Special tags</strong><br/><b>[current]</b> Current value<br/><b>[store]</b> Store name<br/><b>[lang]</b> Current language<br/><b>[lang_id]</b> Current language ID<br/><b>{aa|bb|cc}</b> Random values<br/><b>{en}..{/en}</b> Only for lang<br/><b>{upcase}..{/upcase}</b> Uppercase<br/><b>{lowcase}..{/lowcase}</b> Lowercase<br/><b>{ucfirst}..{/ucfirst}</b> Uppercase on first letter<br/><b>{limit:100}</b> Limit text to 100 chars'; | ||
| 599 | +$_['text_seo_generator_product_desc'] = '<strong>Main</strong><br/><b>[name]</b> Product name<br/><b>[model]</b> Model<br/><b>[category]</b> Category name<br/><b>[parent_cat]</b> Parent category<br/><b>[cat_X]</b> Category level X (set number)<br/><b>[desc]</b> Description extract<br/><b>[desc_sentence]</b> 1st sentence<br/><b>[price]</b> Price with tax<br/><b>[price_notax]</b> Price without tax<br/><br/><strong>Attributes and options</strong><br/><b>[attributes]</b> All attributes<br/><b>[attr_name]</b> Attribute (replace name)<br/><b>[opt_name]</b> Option (replace name)<br/><br/><strong>Product data</strong><br/><b>[upc]</b> <b>[sku]</b> <b>[ean]</b> <b>[jan]</b> <b>[isbn]</b> <b>[mpn]</b> <b>[location]</b> <b>[prod_id]</b> <b>[cat_id]</b><br/><br/><strong>Manufacturer data</strong><br/><b>[brand]</b> <b>[brand_title]</b> <b>[brand_desc]</b> <b>[brand_meta_desc]</b> <b>[brand_keywords]</b> <b>[brand_h1]</b> <b>[brand_h2]</b> <b>[brand_h3]</b><br/><br/>'.$special_tags; | ||
| 600 | +$_['text_seo_generator_category'] = 'Categories'; | ||
| 601 | +$_['text_seo_generator_category_desc'] = '<strong>Main</strong><br/><b>[name]</b> Category name<br/><b>[desc]</b> Description extract<br/><b>[desc_sentence]</b> 1st sentence<br/><b>[parent]</b> Parent category name<br/><b>[grandparent]</b> Grandparent category name<br/><b>[child]</b> Child category name<br/><b>[lowest_price]</b> Lowest product price<br/><b>[highest_price]</b> Highest product price<br/><br/>'.$special_tags; | ||
| 602 | +$_['text_seo_generator_information'] = 'Informations pages'; | ||
| 603 | +$_['text_seo_generator_information_desc']= '<strong>Main</strong><br/><b>[name]</b> Information title<br/><b>[desc]</b> Description extract<br/><b>[desc_sentence]</b> 1st sentence<br/><br/>'.$special_tags; | ||
| 604 | +$_['text_seo_generator_manufacturer'] = 'Manufacturers'; | ||
| 605 | +$_['text_seo_generator_manufacturer_desc']= '<strong>Main</strong><br/><b>[name]</b> Manufacturer name<br/><br/>'.$special_tags; | ||
| 606 | +$_['text_seo_generator_other'] = 'Extra functions'; | ||
| 607 | +$_['text_seo_generator_other_desc'] = ''; | ||
| 608 | +$_['text_seo_generator_drag_info'] = '<i class="fa fa-info-circle"></i> Tip: drag and drop the tag into replacement pattern'; | ||
| 609 | +$_['text_type'] = 'Type'; | ||
| 610 | +$_['text_info'] = 'Info'; | ||
| 611 | +$_['text_patterns'] = 'Replacement pattern'; | ||
| 612 | +$_['text_generate'] = 'Generate'; | ||
| 613 | +$_['text_available_tags'] = 'Available tags'; | ||
| 614 | +$_['text_seo_mode_url'] = 'SEO URLs'; | ||
| 615 | +$_['text_seo_generator_redirect'] = 'Generate Backup URLs'; | ||
| 616 | +$_['text_seo_generator_redirect_i'] = 'Save all actual urls as 301 redirect to a dynamic link, this will make for example to save "apple-iphone" to its corresponding product id, then if later you change this product url it will be automatically redirected to the new url "apple-iphone-new".<br/>Generate here only if you don\'t use the Auto URL Backup mode.'; | ||
| 617 | +$_['text_seo_mode_title'] = 'Meta Title'; | ||
| 618 | +$_['seo_title_prefix'] = 'Prefix'; | ||
| 619 | +$_['seo_title_suffix'] = 'Suffix'; | ||
| 620 | +$_['text_seo_mode_h1'] = 'SEO H1'; | ||
| 621 | +$_['text_seo_mode_h2'] = 'SEO H2'; | ||
| 622 | +$_['text_seo_mode_h3'] = 'SEO H3'; | ||
| 623 | +$_['text_seo_mode_image_name'] = 'Image name'; | ||
| 624 | +$_['text_seo_mode_image_alt'] = 'Image alt'; | ||
| 625 | +$_['text_seo_mode_image_title'] = 'Image title'; | ||
| 626 | +$_['text_seo_mode_keyword'] = 'Meta Keywords'; | ||
| 627 | +$_['text_seo_mode_description'] = 'Meta Description'; | ||
| 628 | +$_['text_seo_mode_full_desc'] = 'Description'; | ||
| 629 | +$_['text_seo_mode_related'] = 'Related products'; | ||
| 630 | +$_['text_seo_mode_tag'] = 'Tags'; | ||
| 631 | +$_['text_seo_mode_create'] = 'Generate'; | ||
| 632 | +$_['text_seo_mode_delete'] = 'Delete'; | ||
| 633 | +$_['text_seo_generator_url'] = 'Generate URLs'; | ||
| 634 | +$_['text_seo_generator_title'] = 'Generate Meta Title'; | ||
| 635 | +$_['text_seo_generator_keywords'] = 'Generate Meta Keywords'; | ||
| 636 | +$_['text_seo_generator_desc'] = 'Generate Meta Description'; | ||
| 637 | +$_['text_seo_generator_full_desc'] = 'Generate Description'; | ||
| 638 | +$_['text_seo_generator_store_copy_i'] = 'Copy store data from default store'; | ||
| 639 | +$_['text_seo_generator_store_copy'] = 'Copy store SEO data'; | ||
| 640 | +$_['text_seo_mode_store_copy'] = 'Copy store SEO data'; | ||
| 641 | +$_['text_seo_generator_tag'] = 'Generate Tags'; | ||
| 642 | +$_['text_seo_generator_h1'] = 'Generate SEO H1'; | ||
| 643 | +$_['text_seo_generator_h2'] = 'Generate SEO H2'; | ||
| 644 | +$_['text_seo_generator_h3'] = 'Generate SEO H3'; | ||
| 645 | +$_['text_seo_generator_imgalt'] = 'Generate Image Alt'; | ||
| 646 | +$_['text_seo_generator_imgtitle'] = 'Generate Image Title'; | ||
| 647 | +$_['text_seo_generator_imgname'] = 'Generate Image Name'; | ||
| 648 | +$_['text_seo_generator_related'] = 'Generate Related Products'; | ||
| 649 | +$_['text_seo_generator_related_no'] = 'Qty:'; | ||
| 650 | +$_['text_seo_generator_related_relevance'] = 'Relevance (0-10):'; | ||
| 651 | +$_['text_seo_generator_related_samecat'] = 'Same category'; | ||
| 652 | +$_['text_query'] = 'Query'; | ||
| 653 | +$_['text_keyword'] = 'Keyword'; | ||
| 654 | +$_['text_status'] = 'Status'; | ||
| 655 | +$_['text_empty'] = 'Empty'; | ||
| 656 | +$_['text_duplicate'] = 'Duplicate'; | ||
| 657 | +$_['text_report'] = 'Report'; | ||
| 658 | +$_['text_url_alias_report_btn'] = 'Url alias report'; | ||
| 659 | + | ||
| 660 | +$_['text_seo_result'] = 'Result:'; | ||
| 661 | + | ||
| 662 | +$_['text_module'] = 'Modules'; | ||
| 663 | +$_['text_success'] = 'Success: You have modified module SEO module!'; | ||
| 664 | + | ||
| 665 | +$_['text_man_ext'] = 'Manufacturer extended'; | ||
| 666 | + | ||
| 667 | +$_['text_seo_confirm'] = 'Are you sure ?'; | ||
| 668 | +$_['text_description'] = 'Description'; | ||
| 669 | + | ||
| 670 | + | ||
| 671 | +// Full product path | ||
| 672 | + | ||
| 673 | +// Help sections | ||
| 674 | + | ||
| 675 | +$_['tab_info_request'] = 'Request headers'; | ||
| 676 | +$_['title_common_overview'] = 'Url components'; | ||
| 677 | +$_['text_info_common_overview'] = ' | ||
| 678 | +<p><b>Url components quick description, check dedicated section for more information.</b></p> | ||
| 679 | +<h4>Absolute url</h4> | ||
| 680 | +<p>Use this component to set friendly url to any custom module, works with full url instead of url keyword.</p> | ||
| 681 | +<p>http://website.com/index.php?<b>route=blog/blog&path=12&post=32</b> > http://website.com/<b>blog/blog-cat/this-is-a-blog-post</b></p> | ||
| 682 | +<h4>Common Page Url</h4> | ||
| 683 | +<p>Use this component to set friendly url to default opencart pages (account, contact, checkout, ...), handles only the route= parameter.</p> | ||
| 684 | +<p>http://website.com/index.php?<b>route=account/register</b> > http://website.com/<b>my-account/register</b></p> | ||
| 685 | +<h4>Param url</h4> | ||
| 686 | +<p>This component lists the seo url parameters from custom modules, so you can quick check them, you can create new parameters but it may not work on some modules so absolute url is recommended because it will work in any case.</p> | ||
| 687 | +<p>http://website.com/some-category?<b>super_filter=42</b> > http://website.com/some-category/<b>filter-blue</b></p>'; | ||
| 688 | +$_['text_info_absolute'] = ' | ||
| 689 | +<h4>Absolute Url - Handle any custom module url</h4> | ||
| 690 | +<p>Opencart is working by default with url keywords, for example <b>/desktop/pc/some-computer</b>, from this url opencart is searching in database each part to determine to what it relates (category, product, information, etc), then it will compute this link to an understandable one for the system which will look like <b>index.php?route=product/product&path=12_31&product_id=54</b>.</p> | ||
| 691 | +<p>With absolute url component you can define an url not using the keyword part but the full url itself, it is no use for product/information/categories etc but it can be very handy for making to work with any custom module.</p> | ||
| 692 | +<p>It is working with unlimited parameters in source url and unlimited levels in seo url.</p> | ||
| 693 | +<h4>Set up a new absolute url</h4> | ||
| 694 | +<p>Example, transform <b>http://website.com/index.php?route=blog/blog&post=32</b> into <b>http://website.com/blog/this-is-a-blog-post</b>.</p> | ||
| 695 | +<ol> | ||
| 696 | +<li>Click on <span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span></li> | ||
| 697 | +<li>Insert in query field <b>blog/blog&post=32</b> (do not insert index.php?route=)</li> | ||
| 698 | +<li>in Full seo url field <b>blog/this-is-a-blog-post</b></li> | ||
| 699 | +</ol> | ||
| 700 | +</ul> | ||
| 701 | +<h4>Use the wildcard to handle urls with extra parameters</h4> | ||
| 702 | +<p>In previous example, when the url <b>http://website.com/blog/this-is-a-blog-post</b> is reached it works only if it is the exact url, if the url contains extra parameters like this <b>http://website.com/blog/this-is-a-blog-post?search=true</b> then it does not work anymore.<br/>In such case you can use the wildcard at the end of the url so any url with extra parameters will work.</p> | ||
| 703 | +<ol> | ||
| 704 | +<li>Click on <span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span></li> | ||
| 705 | +<li>Insert in query field <b>blog/blog&post=32</b> (do not insert index.php?route=)</li> | ||
| 706 | +<li>in Full seo url field <b>blog/this-is-a-blog-post<span style="color:red">*</span></b></li> | ||
| 707 | +</ol> | ||
| 708 | +</ul>'; | ||
| 709 | +$_['text_info_common'] = ' | ||
| 710 | +<h4>Common Page Url - Give friendly url to default opencart pages (account, contact, checkout, ...)</h4> | ||
| 711 | +<p>By default opencart is not rewritting the common page urls, they remain this way <b>index.php?route=account/login</b>.</p> | ||
| 712 | +<p>With common page url component you can define an seo url for all these pages </p> | ||
| 713 | +<p>For example you can rewrite <b>index.php?route=account/register</b> to <b>register</b>, just put <b>account/register</b> in query (do not insert index.php?route=), and put <b>register</b> in seo url field.</p> | ||
| 714 | +<p>Here you can not insert any parameter, for example <b>account/register&param=value</b> won\'t work, you have to use absolute url for such link or insert the parameter into parameter url</p> | ||
| 715 | +<h4>Get predefined urls</h4> | ||
| 716 | +<p>Complete SEO comes with predefined urls for all common opencart pages, there various languages available and they will be automatically retrieved for current selected language if exists, if not it will get english urls instead.</p> | ||
| 717 | +<p>Warning: using restore default urls will replace all existent common page urls listed for current language.</p> | ||
| 718 | +<ol> | ||
| 719 | +<li>Click on <span class="gkd-badge"><i class="fa fa-caret-down"></i></span> on the bottom button to get access to advanced options.</li> | ||
| 720 | +<li>Then click on <span class="gkd-badge"><i class="fa fa-magic" style="color:#FB7C00"></i> Restore default URLs</span></li> | ||
| 721 | +<li>If the keywords are available for current language they will be displayed, if not english language will be displayed and you will have to translate.</li> | ||
| 722 | +<li>You translated a new language and want us to integrate in main package? then click on <span class="gkd-badge"><i class="fa fa-save" style="color:#4276D2"></i> Export URLs</span> and send us export file at support@geekodev.com</li> | ||
| 723 | +</ol> | ||
| 724 | +<h4>Set up a new common page url</h4> | ||
| 725 | +<p>Example, transform <b>http://website.com/index.php?route=account/register</b> into <b>http://website.com/my-account/register</b>.</p> | ||
| 726 | +<ol> | ||
| 727 | +<li>Click on <span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span></li> | ||
| 728 | +<li>Insert in query field <b>account/register</b> (do not insert route=)</li> | ||
| 729 | +<li>in Full seo url field <b>my-account/register</b></li> | ||
| 730 | +</ol> | ||
| 731 | +</ul>'; | ||
| 732 | +$_['text_info_special'] = ' | ||
| 733 | +<h4>Param url - Manage seo keywords of parameters in url</h4> | ||
| 734 | +<p>If you have a custom module which is handling seo keywords, its keywords will generally appear there, so you can easily give a look on them and change if necessary.</p> | ||
| 735 | +<p>If your custom module does not manage seo url automatically then it is recommended to use Absolute Url component to handle the urls. You can also use a combination of Common Page and Param url to handle it but Absolute url is easier for that, so this component is recommended only for view and not for url creation.</p> | ||
| 736 | +<h4>Set up a new redirection</h4> | ||
| 737 | +<p><span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span> click on this button and follow the instructions to set your url redirection.</p> | ||
| 738 | +</ul>'; | ||
| 739 | +$_['text_info_404'] = ' | ||
| 740 | +<h4>Not found (404) manager</h4> | ||
| 741 | +<p>This section lists all url accessed on your website that are actually not existant or that opencart system have not been able to forward to any content. For example when you arrive on such page:</p> | ||
| 742 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/not_found.png" alt=""/></p> | ||
| 743 | +<p>In such case Complete SEO Package will automatically save this url so you will be able to easily check all not found urls in this table and how many times they have been requested.</p> | ||
| 744 | +<h4>Create a redirection from a not found url</h4> | ||
| 745 | +<p>Click on the button <img src="view/seo_package/img/help/btn_plus.png"/> to a easily add a redirection for this url, once added your redirection will appear into "Url redirection" tab, and here the url will appear in <span class="text-success">green color</span> to indicate that this url already have a redirection.</p> | ||
| 746 | +<h4>Remove actual entries</h4> | ||
| 747 | +<p>These entries are for your information only, there is no impact to remove them, to do so just click on one of the following buttons:</p> | ||
| 748 | +<ul class="list-unstyled"> | ||
| 749 | +<li style="margin-top:12px"><span class="gkd-badge"><i class="fa fa-minus" style="color:#ED5555"></i> Remove redirected entries</span> this will remove all urls marked as <span class="text-success">green</span> which means any url that already have his redirection set</li> | ||
| 750 | +<li style="margin-top:12px"><span class="gkd-badge"><i class="fa fa-close" style="color:#ED5555"></i> Remove all entries</span> this will remove all urls in this table, marked green or not, don\'t worry this is not deleting the redirections made on these urls</li> | ||
| 751 | +</ul>'; | ||
| 752 | +$_['text_info_redirections'] = ' | ||
| 753 | +<h4>Url redirection</h4> | ||
| 754 | +<p>Here you can define your own URL redirections, this is using the redirection 301, it means search engines will consider the new url as the valid one.</p> | ||
| 755 | +<p>If you need to change the URL of a page as it is shown in search engine results, we recommend that you use a server-side 301 redirect. This is the best way to ensure that users and search engines are directed to the correct page. The 301 status code means that a page has permanently moved to a new location.</p> | ||
| 756 | +<p>301 redirects are particularly useful if you have any url not found on your website.</p> | ||
| 757 | +<h4>Set up a new redirection</h4> | ||
| 758 | +<p><span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span> click on this button and follow the instructions to set your url redirection.</p>'; | ||
| 759 | +$_['text_info_dynamic_redirections'] = ' | ||
| 760 | +<h4>How does it work?</h4> | ||
| 761 | +<p>Dynamic redirections is a way to handle URL change on your website and avoir 404 not found results on already indexed pages.</p> | ||
| 762 | +<p>If you going to update your seo urls, then it\'s better to save dynamic redirectionss. What it means: You have 2 types of urls <b>domain.com/product-seo-url</b> (seo link) and <b>domain.com/index.php?route=product/product&product_id=123</b> (dynamic link).</p> | ||
| 763 | +<p>Before changing your urls, you can generate dynamic redirection, so all your current seo urls will obtain their dynamic url correspondence, and this will make that the module will automatically find new url if it has changed. For example you generate a dynamic redirection like this: <b>domain.com/product</b> -> <b>domain.com/index.php?route=product/product&product_id=1</b></p> | ||
| 764 | +<p>Then you change your seo url, to <b>domain.com/product-name-2019-high-quality</b></p> | ||
| 765 | +<p>But google already indexed your old seo url <b>/product</b> and in google results will show your old url.</p> | ||
| 766 | +<p>When customer will go to your product with old url, he should get 404 page (Not found) because you changed seo url, BUT you generated dynamic redirections and Complete SEO module will check: "Is this old url has dynamic correspondence?</p> | ||
| 767 | +<p>Yes, it\'s exist, it\'s <b>/index.php?route=product/product&product_id=1</b></p> | ||
| 768 | +<p>Ok, then let\'s search new seo url with product_id=1, oh it\'s also exist, it\'s <b>/product-name-2019-high-quality</b></p> | ||
| 769 | +<p>So your customer will be properly redirected from old url <b>/product</b> to current seo url -> <b>/product-name-2019-high-quality</b></p> | ||
| 770 | +<p>If you change again the url then <b>/product</b> will alway be redirected to latest url. But if you want</p> | ||
| 771 | +<p>And after some time google will reindex your pages to their new links without loosing ranking of your pages and being penalized because of 404 pages.</p> | ||
| 772 | +<h4>Set up Dynamic redirections</h4> | ||
| 773 | +<p>You have 2 ways to generate the dynamic redirections:</p> | ||
| 774 | +<ul><li>Manually in SEO Editor > Url Redirection</li> | ||
| 775 | +<li>Automatically in Mass Update > Generate dynamic redirections</li></ul> | ||
| 776 | +'; | ||
| 777 | +$_['text_info_request'] = '<h4>Request headers</h4> | ||
| 778 | +<p>Request headers are part of the HTTP protocol, they are sent on each request made to the server.<br/>Here you will be able to change some parameters related to request headers, such optimizations can improve performance for the end user and also for search engine crawling robots.</p> | ||
| 779 | +<h5>Last-Modified</h5> | ||
| 780 | +<p>Include the last modified date of the actual item, improves performance for user (browser will fetch page from cache if not updated) and for crawling robots. For products the date will be the one of the last edit of product or the one of the last review if any. It is highly recommended to activate this setting.</p><p><img class="img-thumbnail" src="view/seo_package/img/help/headers-last-modified.png" alt=""/></p>'; | ||
| 781 | +$_['help_fb_appid_tab'] = 'Facebook App ID'; | ||
| 782 | +$_['help_microdata'] = ' | ||
| 783 | +<h4>Google microdata</h4> | ||
| 784 | +<p>Microdata is widely used by search engines to format the search result in better way, for example a product can display the price and review rating directly in search results : </p> | ||
| 785 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/microdata-product.jpg" alt=""/></p> | ||
| 786 | +<p>Complete SEO Package is using the latest JSON-LD format to include the microdata on your website. Basic informations are included (category, description, image, price, stock) and you can select extra data you want to display.</p> | ||
| 787 | +<h4>Benefits of using microdata</h4> | ||
| 788 | +<p><ul> | ||
| 789 | + <li>Eye catching results - Drawing a search users attention from your competitors and to your own result.</li> | ||
| 790 | + <li>Potential CTR increase - Possibly increasing click through rates and lowering the chance of the user bouncing as they have more information on the page before clicking through.</li> | ||
| 791 | + <li>Providing quality results - Offering results that are closer to user specifications.</li> | ||
| 792 | +</ul></p> | ||
| 793 | +<h4>Testing tool</h4> | ||
| 794 | +<p>Use the following testing tool to check your actual microdata: <a href="https://search.google.com/structured-data/testing-tool" target="_blank">Google structured data testing tool</a></p> | ||
| 795 | +'; | ||
| 796 | +$_['help_microdata_faq'] = ' | ||
| 797 | +<h4>Warning: "This Product is missing a global identifier"</h4> | ||
| 798 | +<p>Global identifier (GTIN) make know to google your product identifier, if you have this warning it means you need to fill in your products one of these values: <b>UPC, EAN, JAN or ISBN</b>, and then enable corresponding value in Complete SEO > Rich Snippet > Google > Product.</p> | ||
| 799 | +'; | ||
| 800 | +$_['entry_facebook_pixel'] = 'Facebook Pixel code:'; | ||
| 801 | +$_['help_fb_pixel_tab'] = 'About Facebook Pixel'; | ||
| 802 | +$_['help_fb_pixel2_tab'] = 'Install Facebook Pixel'; | ||
| 803 | +$_['help_fb_pixel'] = '<div><h4>About Facebook Pixel</h4><p>The Facebook pixel is an analytics tool that allows you to measure the effectiveness of your advertising by understanding the actions people take on your website. </p></div><div>When someone visits your website and takes an action (like completing a purchase), the Facebook pixel is triggered and reports this action. This way, you\'ll know when a customer takes an action, and will be able to reach that customer again through future Facebook ads. </p></div><div><p></p><h4>Benefits</h4><p></p><ul><li>Reach the right people</li><li>Drive more sales</li><li>Measure the results of your ads</li></ul><div><p></p><h4>How the Facebook pixel collects data</h4><p></p><p> When you set up the Facebook pixel, we will start to receive information from your website. This information allows us to better target your ads and optimize your ads for conversions. You can also use this information to build website Custom Audiences and reach people who are likely to convert.</p><p class="_3p8"> Once you implement the pixel base code, we will start to receive the following information:</p><p class="_3p8"></p><ul><li>HTTP headers – Anything present in HTTP headers. HTTP headers are a standard web protocol sent between any browser and any server on the internet. HTTP headers include IP addresses, information about the web browser, page location, document, referrer and device.</li><li>Pixel-specific data – Includes Pixel ID and the Facebook cookie.</li><li>Button-click data – Includes any buttons clicked by site visitors, the labels of those buttons and any pages visited as a result of the button clicks. Also, includes website form field names such as ‘email’, ‘address’, ‘quantity’ for when you purchase a product or service. We don\'t capture form field values unless you include them as part of <a target="_blank" href="https://developers.facebook.com/docs/facebook-pixel/pixel-with-ads/conversion-tracking#advanced_match">Advanced Matching</a> or optional values.</li><li>Page metadata - Includes page descriptions, tags, and keywords. This is the same data typically used by search engines and other web services to rank pages.</li></ul></div></div><p></p><h4>Facebook Pixel documentation</h4><p>See full Facebook pixel documentation here: <a target="_blank" href="https://www.facebook.com/business/help/553691765029382">Facebook Pixel documenation</a></p>'; | ||
| 804 | +$_['help_fb_pixel2'] = '<h4>1. Create a Facebook pixel</h4><ol><li>Go to your <a target="_blank" href="https://www.facebook.com/ads/manager/pixel/facebook_pixel"><b>Pixels</b></a> tab in Events Manager.</li><li>Click <b>Create a Pixel</b>. </li><li>Click <b>Create</b> in the box that appears to finish creating your pixel. </li></ol><h4>2. Add the Facebook pixel to your website</h4><p>Once you\'ve created your pixel, you\'re ready to put the Facebook pixel code on your website. Choose the statement below that best fits how you make updates to your website\'s code for instructions:</p><div ><ol><li>Go to the Pixels tab in Ads Manager.</li><li>Click <b>Set Up Pixel</b></li><li>Click <b>Install the Code Yourself.</b></li><li>Copy the entire code and paste it here in <b>Facebook Pixel code</b>.</li></ol></div>'; | ||
| 805 | +$_['help_fb_appid'] = ' | ||
| 806 | +<h4>Facebook App ID</h4> | ||
| 807 | +<p>You must fill your facebook App ID in order to get this feature working, you will find it in the settings of your developper panel: <a href="http://facebook.com/developers">http://facebook.com/developers</a>.</p> | ||
| 808 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/settings_app-id.gif" alt=""/></p> | ||
| 809 | +'; | ||
| 810 | +$_['help_fb_setup_tab'] = 'How to use Facebook Opengraph'; | ||
| 811 | +$_['help_fb_setup'] = ' | ||
| 812 | +<h4>Install the Facebook Developer Application</h4> | ||
| 813 | +<p>The first step in creating an application in Facebok is to install the Facebook Developer application.</p> | ||
| 814 | +<p>To do that, log in to Facebook and then visit the URL <a href="http://facebook.com/developers">http://facebook.com/developers</a>.</p> | ||
| 815 | +<p>If this is the first time you’ve installed the Developer Application, you will see the Request for Permission dialog show below:</p> | ||
| 816 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/permission.jpg" alt="" /></p> | ||
| 817 | +<p>Click the <b>Allow</b> button to proceed.</p> | ||
| 818 | +<h4>Creating the Facebook Application for your Website</h4> | ||
| 819 | +<p>Now that you have the Developer App installed, click on the<b> Create New App</b> button.<br/><img class="img-thumbnail" src="view/seo_package/img/help/create-new-app.gif" alt=""/></p> | ||
| 820 | +<p>Give your application an "App Display Name" (the name displayed to users).</p> | ||
| 821 | +<p>For purposes of this tutorial, you don’t need to have a "Namespace".</p> | ||
| 822 | +<p>Click the "I agree to Facebook Platform Policies" box; then click the <b>Continue</b> button.<br/><img class="img-thumbnail" src="view/seo_package/img/help/dialog_new-app.gif" alt=""/></p> | ||
| 823 | +<p>On the next screen, enter the security phrase and then click <b>Submit</b>.</p> | ||
| 824 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/new-app_captcha.gif" alt=""/></p> | ||
| 825 | +<p>There are a lot of options you can tweak related to your application. In this post, we are going to focus on the basics needed to get your website set up with a Facebook App ID.</p> | ||
| 826 | +<h4>The Settings Tab</h4> | ||
| 827 | +<p>This is where you do the basic set up for your app</p> | ||
| 828 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/settings_app-id.gif" alt=""/></p> | ||
| 829 | +<p>App ID is now set up. Your App ID is the value you’ll be using to integrate your website with Facebook’s APIs so you can add the Social Plugins (Like Button, Send Button, Comments Box, etc.).</p> | ||
| 830 | +<p>You don’t need to add an icon. If your website has a favicon, it will be displayed next to your site’s URL in Facebook Insights.</p> | ||
| 831 | +<p><b>Basic info:</b></p> | ||
| 832 | +<p><ul> | ||
| 833 | +<li><b>App Display Name:</b> Make this the same as the original value you provided</li> | ||
| 834 | +<li><b>App Namespace:</b> Leave blank</li> | ||
| 835 | +<li><b>Contact Email:</b> Where you want Facebook to send emails regarding your app</li> | ||
| 836 | +<li><b>App Domain:</b> just put “mydomain.com” where “mydomain.com” is your website’s domain URL (TLD)</li> | ||
| 837 | +<li><b>Category:</b> Select a category from the pulldown list (optional)</li> | ||
| 838 | +</ul></p> | ||
| 839 | +<p>Your website is now an “object” in Facebook’s Open Graph, with its own App ID.</p> | ||
| 840 | +'; | ||
| 841 | +$_['help_flag_mode'] = ' | ||
| 842 | +<h4>Tag after domain</h4> | ||
| 843 | +<p>Language prefix mode permits to add the language code just after the domain name:</p> | ||
| 844 | +<p><code>http://example.com/<b>en</b></code><br/><code>http://example.com/<b>fr</b></code> | ||
| 845 | +<p>It can be useful to have a good separation between each language in multilingual websites.</p> | ||
| 846 | +<p>This parameter can be enabled anytime and take effect immediately, there is no need to re-generate the urls.</p> | ||
| 847 | +<h4>Extra options</h4> | ||
| 848 | +<table class="table table-bordered"> | ||
| 849 | +<tr><th style="width:220px">Option</th><th>Effect</th></tr> | ||
| 850 | +<tr><td><code>Short tag</code></td><td>Display <b>/en</b> instead of <b>/en-gb</b> in case you have full format defined</td></tr> | ||
| 851 | +<tr><td><code>No tag for default</code></td><td>Default language won\'t display the language tag</td></tr> | ||
| 852 | +<tr><td><code>Tag in uppercase</code></td><td>Display tag in uppercase <b>/EN, /FR</b></td></tr> | ||
| 853 | +</table> | ||
| 854 | +'; | ||
| 855 | +$_['help_store_mode'] = ' | ||
| 856 | +<h4>Tag as subdomain</h4> | ||
| 857 | +<p>Enable this option if you want your links to be written with specific store depending the language. For example if you have 2 stores defined like this :</p> | ||
| 858 | +<p><code>http://<b>en</b>.domain.com</code><br/><code>http://<b>fr</b>.domain.com</code></p> | ||
| 859 | +<p>By default opencart allows to change language but stay on same domain, if you enable this option and change the language, you will be redirected to the other domain. Also the hreflang links will be correctly updated with corresponding store url.</p> | ||
| 860 | +<p>This setting is using your stores configuration, so you have to configure the stores correctly to get this working, also note that this is not limited to subdomains, you could also use separate domains names for each language:</p> | ||
| 861 | +<p><code>http://<b>english-store</b>.com</code><br/><code>http://<b>french-store</b>.com</code></p> | ||
| 862 | +<p>If you make any modification on configuration in Settings > Stores, come back here and save settings again.</p> | ||
| 863 | +<h5>Actual configuration</h5> | ||
| 864 | +<p>In this section you can see how are actually binded your stores to each language, you must have only one store for each language in order to get this option working properly, if a store have no defined language you will get the message "<span class="text-danger">No language defined</span>", in this case it is necessary you define a language for this store in Settings > Stores.</p> | ||
| 865 | +'; | ||
| 866 | + | ||
| 867 | +$_['help_cron_title'] = 'Cron jobs'; | ||
| 868 | +$_['help_cron_setup_title'] = 'Set up a cron job'; | ||
| 869 | +$_['help_cron'] = ' | ||
| 870 | +<h4>What is a cron job?</h4> | ||
| 871 | +<p>Cron is a linux utility which schedules a command or script on your server to run automatically at a specified time and date. A cron job is the scheduled task itself. Cron jobs can be very useful to automate repetitive tasks.</p><p>In Complete SEO Package the cron job is used to automatically update your store data just like you would do manually using the mass updater.</p> | ||
| 872 | +<h4>Time Intervals</h4> | ||
| 873 | +<p>Cron jobs can be set to run by the minute, hour, day of the week, day of the month, month or any combination of these.</p><p>This has to be set when creating the cron job on your server (in cPanel for example).</p> | ||
| 874 | +<h4>Limitations</h4> | ||
| 875 | +<p>Cron jobs may not be able generate unlimited items depending on your server limitations and number of items you have you may face error on using cron, it is recommended to use the "empty only" parameter to limit the number of items you are going to update using cron.</p> | ||
| 876 | +'; | ||
| 877 | +$_['help_cron_setup'] = ' | ||
| 878 | +<h4>Cron command</h4> | ||
| 879 | +<p>Use this cron command for main store:<br/><code>/[path_to_php]/php '.str_replace('system/', '', DIR_SYSTEM).'seo_package_cli.php</code></p> | ||
| 880 | +<p>Or this one for sub-stores (replace X by store ID):<br/><code>/[path_to_php]/php '.str_replace('system/', '', DIR_SYSTEM).'seo_package_cli.php store=X</code></p> | ||
| 881 | +<p>Use this path if you put the seo_package_cli.php file into your root opencart directory, if elsewhere don\'t forget to adapt the path to match the correct file location.</p> | ||
| 882 | +<h4>How to set up a cron job with cPanel?</h4> | ||
| 883 | +<ol> | ||
| 884 | +<li>Copy the file seo_package_cli.php from module package > _extra files to your FTP (preferably into a directory outside of web root)</li> | ||
| 885 | +<li>Log in your cPanel and go to <b>Cron Jobs</b> section</li> | ||
| 886 | +<li>Select the wanted time interval, for example <b>once per day</b></li> | ||
| 887 | +<li>In <b>command</b> copy the <i>cron command</i> displayed at top of this section</li> | ||
| 888 | +<li>Adapt [path_to_php] to your server path to php, it is generally written inside cPanel cron section</li> | ||
| 889 | +<li>Click on Add new cron job.</li> | ||
| 890 | +</ol> | ||
| 891 | +<p>That\'s all! Now your server will call the update script at specified times, and you will be able to see the result into the report section.</p> | ||
| 892 | +<h4>Specific cron command for single type</h4> | ||
| 893 | +<p>By default the cron command will update all data types you selected in cron section, if you want to update only one data type you can use this command::<br/><code>/[path_to_php]/php '.str_replace('system/', '', DIR_SYSTEM).'seo_package_cli.php product=X simulation=1 empty_only=1</code></p> | ||
| 894 | +<p>You can use category, information or manufacturer instead of product, simulation and empty_only are disabled by default, set them to 1 to enable<br/>Replace X by one of the following data types: | ||
| 895 | +<ul> | ||
| 896 | +<li><b>product:</b> url, title, keyword, description, full_desc, h1, h2, h3, tag</li> | ||
| 897 | +<li><b>category:</b> url, title, keyword, description, full_desc, h1, h2, h3</li> | ||
| 898 | +<li><b>information:</b> url, title, keyword, description, full_desc, h1, h2, h3</li> | ||
| 899 | +<li><b>manufacturer:</b> url</li> | ||
| 900 | +<li><b>redirection:</b> product, category, information, manufacturer</li> | ||
| 901 | +</ul> | ||
| 902 | +</p> | ||
| 903 | +'; | ||
| 904 | + | ||
| 905 | +$_['text_hours'] = 'hours'; | ||
| 906 | +$_['text_minutes'] = 'minutes'; | ||
| 907 | +$_['text_seconds'] = 'seconds'; | ||
| 908 | + | ||
| 909 | +// Extra modules | ||
| 910 | +$_['text_seo_generator_j3posts_desc']= '<strong>Main</strong><br/><b>[name]</b> Journal3 Blog Post title<br/><br/>'.$special_tags; | ||
| 911 | +$_['text_seo_generator_j3posts'] = 'Journal3 Blog Posts'; | ||
| 912 | + | ||
| 913 | +// Error | ||
| 914 | +$_['error_permission'] = 'Warning: You do not have permission to modify this module!'; | ||
| 915 | +$_['error_module_disabled'] = 'Complete SEO Package is currently disabled, you can enable with the button on dashboard tab.'; | ||
| 916 | +$_['error_friendly_disabled'] = 'Warning: Common Page Url component is disabled, you can edit all values but they will be active on front only when you activate this component in SEO Configuration'; | ||
| 917 | +$_['error_404_disabled'] = 'Warning: 404 Manager component is disabled, the logging of not found pages will be active only when you activate this component in SEO Configuration'; | ||
| 918 | +$_['error_absolute_disabled'] = 'Warning: Absolute Url component is disabled, you can edit all values but they will be active on front only when you activate this component in SEO Configuration'; | ||
| 919 | +$_['error_redirect_disabled'] = 'Warning: Url Redirection component is disabled, you can edit all values but they will be active on front only when you activate this component in SEO Configuration'; | ||
| 920 | +?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php | ||
| 2 | +// Heading | ||
| 3 | +if (file_exists(DIR_APPLICATION . 'model/tool/seo_package.php')) { | ||
| 4 | + $_['heading_title'] = '<img src="view/seo_package/img/icon.png" style="vertical-align:top;padding-right:4px"/> <b style="color:#11b209">SEO Package</b> <b style="color:#555">Sitemap</b>'; | ||
| 5 | +} else { | ||
| 6 | + $_['heading_title'] = '<i class="fa fa-sitemap" style="color:#11b209"></i> <b>Advanced</b> <b style="color:#11b209">Sitemap Generator</b>'; | ||
| 7 | +} | ||
| 8 | + | ||
| 9 | +// Text | ||
| 10 | +$_['text_feed'] = 'Product Feeds'; | ||
| 11 | +$_['text_add_feed'] = 'New feed'; | ||
| 12 | +$_['text_success'] = 'Success: options have been saved'; | ||
| 13 | +$_['text_info'] = 'This sitemap does not contains duplicates and integrates the hreflang tag if enabled in seo package options.'; | ||
| 14 | +$_['text_minute'] = 'Minute(s)'; | ||
| 15 | +$_['text_hour'] = 'Hour(s)'; | ||
| 16 | +$_['text_day'] = 'Day(s)'; | ||
| 17 | +$_['entry_data_feed'] = 'Full Feed:<span class="help">Feed containing all languages using hreflang tag (hreflang will be displayed in case of more than one language)</span>'; | ||
| 18 | +$_['entry_lang_feed'] = 'Lang based feeds:<span class="help">Use these if you prefer separate language version</span>'; | ||
| 19 | +$_['entry_grid_feed'] = 'Grid product feeds:<span class="help">A grid of product thumbnails</span>'; | ||
| 20 | + | ||
| 21 | +// Tabs | ||
| 22 | +$_['text_tab_0'] = 'Sitemaps'; | ||
| 23 | +$_['tab_opt_1'] = 'Feed configuration'; | ||
| 24 | +$_['tab_opt_2'] = 'Advanced options'; | ||
| 25 | +$_['entry_feed_title'] = 'Name:'; | ||
| 26 | +$_['entry_cache_delay'] = 'Cache Delay'; | ||
| 27 | +$_['entry_cache_delay_help'] = 'How many time to display generated file until re-generation ?'; | ||
| 28 | +$_['entry_language'] = 'Language:<span class="help"></span>'; | ||
| 29 | +$_['entry_feed_url'] = 'Sitemap Url:<span class="help">Give this url to google or bing</span>'; | ||
| 30 | + | ||
| 31 | +$_['text_tab_1'] = 'Custom links'; | ||
| 32 | + | ||
| 33 | +// Configuration | ||
| 34 | +$_['text_tab_2'] = 'Configuration'; | ||
| 35 | + | ||
| 36 | +$_['text_link_type'] = 'Link type'; | ||
| 37 | +$_['text_type_product'] = 'Product'; | ||
| 38 | +$_['text_type_category'] = 'Category'; | ||
| 39 | +$_['text_type_manufacturer'] = 'Brand'; | ||
| 40 | +$_['text_type_information'] = 'Information'; | ||
| 41 | +$_['text_type_custom'] = 'Custom link'; | ||
| 42 | +$_['text_type_journal'] = 'Journal blog'; | ||
| 43 | + | ||
| 44 | +$_['entry_status'] = 'Status'; | ||
| 45 | +$_['entry_priority'] = 'Priority'; | ||
| 46 | +$_['entry_freq'] = 'Change frenquency'; | ||
| 47 | +$_['entry_in_stock'] = 'Include only in stock products:<span class="help">If disabled all products are included, if enabled only product with quantity >= 1</span>'; | ||
| 48 | +$_['entry_item_no'] = 'Number of items per xml:<span class="help">How many urls do you want to display in each xml file, default is 500'; | ||
| 49 | +$_['entry_friendly_url'] = 'Friendly URL:<span class="help">Display this sitemap in http://example.com/sitemap.xml instead of the default opencart sitemap</span>'; | ||
| 50 | +$_['entry_display_img'] = 'Display image thumb in feed:<span class="help">This is for viewing only, the image is still included for search engines</span>'; | ||
| 51 | +$_['entry_include_img'] = 'Include main image in feed:<span class="help">Include main product image into your feed? This is better if you want to be found via google image search</span>'; | ||
| 52 | +$_['entry_additional_img'] = 'Include additional images:<span class="help">Include additional product images into your feed? This is better if you want to be found via google image search</span>'; | ||
| 53 | + | ||
| 54 | +$_['text_freq_always'] = 'Always'; | ||
| 55 | +$_['text_freq_hourly'] = 'Hourly'; | ||
| 56 | +$_['text_freq_daily'] = 'Daily'; | ||
| 57 | +$_['text_freq_weekly'] = 'Weekly'; | ||
| 58 | +$_['text_freq_monthly'] = 'Monthly'; | ||
| 59 | +$_['text_freq_yearly'] = 'Yearly'; | ||
| 60 | +$_['text_freq_never'] = 'Never'; | ||
| 61 | + | ||
| 62 | +$_['text_tab_about'] = 'About'; | ||
| 63 | + | ||
| 64 | +// Entry | ||
| 65 | + | ||
| 66 | +// Error | ||
| 67 | +$_['error_permission'] = 'Warning: You do not have permission to modify SEO Package Sitemap feed!'; | ||
| 68 | +?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php | ||
| 2 | +// Русский перевод модуля от Alexius http://alexius.esy.es/ | ||
| 3 | +// Заголовок | ||
| 4 | +$_['heading_title'] = '<strong style="color:#41637d">DEV-OPENCART.COM —</strong> <b>Complete SEO Package</b> <a href="https://dev-opencart.com" target="_blank" title="Dev-opencart.com - Модули и шаблоны для Opencart"><img style="margin-left:15px;height:35px;margin-top:10px;margin-bottom:10px;" src="https://dev-opencart.com/logob.svg" alt="Dev-opencart.com - Модули и шаблоны для Opencart"/></a>'; | ||
| 5 | +$_['module_title'] = 'Complete SEO <span>Package</span>'; | ||
| 6 | + | ||
| 7 | + | ||
| 8 | +$_['text_store_select'] = 'Магазин'; | ||
| 9 | + | ||
| 10 | +// Dashboard | ||
| 11 | +$_['tab_seo_dashboard'] = 'Панель состояния'; | ||
| 12 | +$_['text_seo_score'] = 'SEO Мощность'; | ||
| 13 | +$_['text_dashboard_config'] = 'SEO Обзор'; | ||
| 14 | + | ||
| 15 | +// Таб seo эдитор | ||
| 16 | +$_['tab_seo_editor'] = 'SEO Редактор'; | ||
| 17 | +$_['tab_seo_editor_product'] = 'Товар'; | ||
| 18 | +$_['tab_seo_editor_category'] = 'Категория'; | ||
| 19 | +$_['tab_seo_editor_information'] = 'Информация'; | ||
| 20 | +$_['tab_seo_editor_manufacturer'] = 'Производитель'; | ||
| 21 | +$_['tab_seo_editor_image'] = 'Картинка'; | ||
| 22 | +$_['tab_seo_editor_absolute'] = 'Абсолютная ссылка'; | ||
| 23 | +$_['tab_seo_editor_common'] = 'Простая страница'; | ||
| 24 | +$_['tab_seo_editor_special'] = 'Специальные страницы'; | ||
| 25 | +$_['tab_seo_editor_redirect'] = 'Url переадресация'; | ||
| 26 | +$_['tab_seo_editor_404'] = 'Менеджер 404'; | ||
| 27 | +$_['text_multistore'] = 'Мультимагазинное SEO'; | ||
| 28 | +$_['info_multistore'] = 'Предоставляйте различные сведения о SEO (ключевое слово, мета и т. Д.) По продуктам и категориям для каждого магазина'; | ||
| 29 | +$_['text_editor_count'] = 'Счетчик'; | ||
| 30 | +$_['text_editor_query'] = 'Запрос'; | ||
| 31 | +$_['text_editor_query_redirect'] = 'Запрос'; | ||
| 32 | +$_['text_editor_query_absolute'] = 'Полный запрос (значение после route=)'; | ||
| 33 | +$_['text_editor_query_common'] = 'Запрос (значение после route=)'; | ||
| 34 | +$_['text_editor_query_special'] = 'Запрос (прим: custom_id=1)'; | ||
| 35 | +$_['text_editor_image'] = 'Какртинка'; | ||
| 36 | +$_['text_editor_name'] = 'Имя'; | ||
| 37 | +$_['text_editor_title'] = 'Тайтл'; | ||
| 38 | +$_['text_editor_meta_title'] = 'Мета Тайтл'; | ||
| 39 | +$_['text_editor_meta_keyword'] = 'Мета кейворд'; | ||
| 40 | +$_['text_editor_meta_description'] = 'Мета описание'; | ||
| 41 | +$_['text_editor_url'] = 'ЧПУ'; | ||
| 42 | +$_['text_editor_url_absolute'] = 'Полная СЕО ссылка'; | ||
| 43 | +$_['text_editor_url_redirect'] = 'Переадресация в'; | ||
| 44 | +$_['text_editor_tag'] = 'Теги'; | ||
| 45 | +$_['text_editor_h1'] = 'СЕО H1'; | ||
| 46 | +$_['text_editor_item_name'] = 'Название товара'; | ||
| 47 | +$_['text_editor_image_name'] = 'Название'; | ||
| 48 | +$_['text_editor_image_alt'] = 'Альт'; | ||
| 49 | +$_['text_editor_image_title'] = 'Тайтл'; | ||
| 50 | +$_['text_editor_related'] = 'Рекомендуемое'; | ||
| 51 | +$_['text_seo_new_alias_title'] = 'Новая ссылка'; | ||
| 52 | +$_['text_seo_new_absolute_alias_info'] = 'Переписать все ссылки на абсолютный путь, например index.php?route=<b>blog/blog&post_id=123</b><br/>В поле запроса вставьте <b>blog/blog&post_id=123</b> (вставляйте только значение после index.php?route=)<br/>В поле СЕО ссылки вставляйте только значение, котрое вы хотите: <b>blog/this-is-a-blog-post</b>'; | ||
| 53 | +$_['text_seo_new_alias_info'] = 'Переписать ссылку использующие параметр маршрута (rout), например index.php?route=<b>account/account</b><br/>В запросе вставьте <b>account/account</b> | ||
| 54 | +(нет необходимости вставлять route=)<br/>В поле ЧПУ вставьте нужное значение: <b>my-account</b>'; | ||
| 55 | +$_['text_seo_new_spec_alias_info'] = 'Переписывайте URL-адреса, относящиеся к любому настраиваемому модулю, даже если он не предназначен для обработки дружественных URL-адресов.<br/>Например index.php?<b>blog_news_id=123</b> | ||
| 56 | +<br/>В поле запроса пишите <b>blog_news_id=123</b><br/>В поле ЧПУ нужный параметр: <b>a-great-url-for-my-great-news</b>'; | ||
| 57 | +$_['text_seo_new_redirect'] = 'Это генерирует 301 переадресацию, чтобы указать поисковым машинам, что текущий URL-адрес был перенесен на новый. Используйте эту функцию, чтобы исправить ошибки сканирования с веб-мастера google.<br/> | ||
| 58 | +<br/>В поле запроса полная ссылка: <b>http://example.com/broken-url</b><br/>В поле переадресации новая ссылка: <b>http://example.com/fixed-url</b><br/><br/>Или без имени домена (не зубудьте в начале слеш: /)<br/> | ||
| 59 | +В запросе: <b>/broken-url</b><br/>В переадресации: <b>/fixed-url</b><br/><br/>Динамическое перенаправление<br/>Если вы хотите, чтобы он работал даже с дополнительными обновлениями URL-адресов, заполните поле перенаправления таким образом:<br/> | ||
| 60 | +<b>product/product&product_id=42</b> (где 42 это актуальный айди товара)'; | ||
| 61 | +$_['text_info_limits_tab'] = 'Пределы метаданных'; | ||
| 62 | +$_['text_info_limits_title'] = 'Пределы тайтлов и описания'; | ||
| 63 | +$_['text_info_robots'] = '<h4>Мета-роботы</h4> | ||
| 64 | +<p>Метатег роботов позволяет использовать гранулированный, зависящий от страницы подход к управлению тем, как индивидуальная страница должна индексироваться и обслуживаться пользователям в результатах поиска.<br/> | ||
| 65 | +Установленный здесь параметр будет по умолчанию для всех страниц вашего магазина, тогда вы можете отредактировать конкретный продукт, чтобы изменить значение робота (на вкладке данных) только для этого продукта.<br/> | ||
| 66 | +Параметр meta robots будет установлен на вашей странице как метатег в разделе главы: <meta name="robots" /></p> | ||
| 67 | +<table class="table table-bordered"> | ||
| 68 | + <tbody><tr><th>Значение</th><th>Директивы</th></tr> | ||
| 69 | + <tr><td><code><span>all</span></code></td> | ||
| 70 | + <td>Нет никаких ограничений на индексацию или обслуживание. Примечание: эта директива является значением по умолчанию и не имеет никакого эффекта, если явно указано, поэтому, когда вы выберете это значение, | ||
| 71 | + метка мета-роботов не будет отображаться</td></tr> | ||
| 72 | + <tr><td><code><span>noindex</span></code></td> | ||
| 73 | + <td>Не показывать эту сраницу в поиске</td></tr> | ||
| 74 | + <tr><td><code><span>nofollow</span></code></td> | ||
| 75 | + <td>Не переходить по ссылкам на этой странице</td></tr> | ||
| 76 | + <tr><td><code><span>none</span></code></td> | ||
| 77 | + <td>Эквивалент <code><span>noindex,<wbr> nofollow</span></code></td></tr> | ||
| 78 | + <tr><td><code><span>noimageindex</span></code></td> | ||
| 79 | + <td>Не индексировать картинки на этой старнице.</td></tr> | ||
| 80 | +</tbody></table> | ||
| 81 | +<h4>Автоматические настройки</h4> | ||
| 82 | +<p>После включения вы сможете определить значение по умолчанию для мета-роботов, и модуль автоматически применит лучший параметр для некоторых конкретных страниц, см. Следующий список, чтобы узнать, какие параметры автоматически устанавливаются на вашем веб-сайте:</p> | ||
| 83 | +<table class="table table-bordered"> | ||
| 84 | +<tr><th style="width:220px">Тип</th><th>Значения мета роботс</th></tr> | ||
| 85 | +<tr><td>Пагинация pages</td><td><code>noindex, follow</code></td></tr> | ||
| 86 | +<tr><td>Страницы с ограниченными параметрами</td><td><code>noindex, follow</code></td></tr> | ||
| 87 | +<tr><td>Страница поиска</td><td><code>none</code> (noindex, nofollow)</td></tr> | ||
| 88 | +</table> | ||
| 89 | +'; | ||
| 90 | +$_['text_info_limits'] = '<h4>Лимиты мета тайтлов и описания</h4> | ||
| 91 | +<p>Мета-заголовок и описание очень важны, так как они видят, что пользователь увидит при запросе на поисковые системы, заголовок в качестве основной ссылки и описание небольшого текста ниже..</p> | ||
| 92 | +<p><img src="view/seo_package/img/help/meta_title_desc.png" alt="" class="img-thumbnail"/></p> | ||
| 93 | +<p>Google урезает ваш заголовок после 67 символов, но будет индексировать еще несколько, чтобы это было легко визуализировать, поле заголовка станет оранжевым в случае обхода 67 символов и красного цвета в случае обхода 85 символов.<br/> | ||
| 94 | +Пределы для описания - 155 символов для урезания и 200 для индексации.</p> | ||
| 95 | +<p><span style="color:#fc7402">Оранжевый</span> означает, что ваш текст обязательно будет усечен, но будет полностью проиндексирован.<br /> | ||
| 96 | +<span style="color:#f23333">Красный</span> Означает, что некоторые слова в конце вашего текста не индексируются.</p>'; | ||
| 97 | +$_['entry_analytics_code'] = 'Код Google Аналитики:'; | ||
| 98 | +$_['text_info_analytics_tab'] = 'Google Аналитика'; | ||
| 99 | +$_['text_info_analytics'] = '<h4>Проверьте свой сайт в Google Analytics</h4> | ||
| 100 | +<p>Вы можете получить подробную информацию о своем веб-сайте с помощью Google Analytics, для этого перейдите по ссылке <a href="https://www.google.com/webmasters/">https://www.google.com/webmasters/</a> | ||
| 101 | +И нажмите «ДОБАВИТЬ СОБСТВЕННОСТЬ», затем выберите способ проверки HTML-тегов, например, на изображении ниже.</p> | ||
| 102 | +<p><img src="view/seo_package/img/help/gg_analytics.png" alt="" class="img-thumbnail"/></p> | ||
| 103 | +<p>Скопируйте код, указанный Google, чтобы активировать проверку вашего веб-сайта. Теперь вы можете проверить страницу google.</p>'; | ||
| 104 | + | ||
| 105 | +// Таб seo конфигурации | ||
| 106 | +$_['tab_seo_options'] = 'SEO Конфигурация'; | ||
| 107 | +$_['text_seo_package_status'] = 'SEO Package статус:'; | ||
| 108 | +$_['text_seo_components'] = 'Компоненты:'; | ||
| 109 | +$_['text_seo_tab_general_1'] = 'Главные опции'; | ||
| 110 | +$_['text_seo_tab_general_2'] = 'Теги языка'; | ||
| 111 | +$_['text_seo_tab_general_3'] = 'Hreflang'; | ||
| 112 | +$_['text_seo_tab_general_4'] = 'Опции кейвордов'; | ||
| 113 | +$_['text_seo_tab_general_5'] = 'Автообновление'; | ||
| 114 | +$_['text_seo_tab_general_6'] = 'Пагинация'; | ||
| 115 | +$_['text_seo_tab_general_7'] = 'Кеш'; | ||
| 116 | +$_['text_seo_tab_general_8'] = 'Канонические ссылки'; | ||
| 117 | +$_['text_seo_tab_general_9'] = ''; | ||
| 118 | +$_['text_seo_tab_general_10'] = 'Отзывы'; | ||
| 119 | +$_['text_seo_tab_general_11'] = 'Запросить заголовки'; | ||
| 120 | +$_['text_seo_tab_general_12'] = 'Карта сайта'; | ||
| 121 | +$_['text_seo_tab_general_13'] = 'Мета роботс'; | ||
| 122 | +$_['text_seo_tab_general_14'] = 'Переадресация'; | ||
| 123 | +$_['text_seo_tab_general_16'] = 'Модули СЕО'; | ||
| 124 | +$_['text_info_general'] = 'Эти настройки влияют на глобальное функционирование оптимизаторов, они вступают в силу немедленно и могут быть изменены в любое время.'; | ||
| 125 | +$_['text_info_general_3'] = 'Тег Hreflang позволяет поисковым системам знать URL текущей страницы для других языков.<br/> | ||
| 126 | +После активации он будет включен во все страницы вашего сайта, а также в карту сайта seo (feed> seo package карта сайта).<br/> | ||
| 127 | +Подробнее : <a href="https://support.google.com/webmasters/answer/189077?hl=en" target="new">здесь</a>'; | ||
| 128 | +$_['text_info_general_6'] = 'Перезапись пагинации на дружественную, например website.com/category?page=3 станет website.com/category/page-3'; | ||
| 129 | +$_['text_info_general_7'] = 'Функция кеша ускорит ваш сайт, кэшируя все URL-ссылки, а не вычисляя их каждый раз'; | ||
| 130 | +$_['text_info_general_8'] = 'Канонические ссылки информируют поисковые системы, что если он найдет одну и ту же страницу в другом месте на веб-сайте, она должна рассматривать только одну ссылку, это важно для того, чтобы избежать дублирования контента'; | ||
| 131 | +$_['text_info_general_10'] = 'В обзорах opensart по умолчанию загружаются динамически с помощью ajax, что заставляет поисковые системы не видеть контент отзывов, который был бы ценным контентом для вашего веб-сайта, включите этот параметр, чтобы он мог вставить блок, содержащий отзывы пользователей в HTML, чтобы сделать Чтобы их можно было увидеть.<br /> | ||
| 132 | +<br />Вы должны вручную вставить этот код в product/product.tpl шаблон : <b><?php echo $seo_reviews; ?></b><br /> | ||
| 133 | +<br /> Затем вы можете стилизовать его так, как хотите, контейнерный класс <b>.seo_reviews</b>, класс позиции <b>.seo_review</b>'; | ||
| 134 | +$_['text_info_general_12'] = 'Карта сайта должна быть настроена в разделе фидов, пожалуйста, нажмите на кнопку ниже, чтобы настроить ее.'; | ||
| 135 | +$_['text_seopackage_sitemap'] = 'SEO Package Карта сайта'; | ||
| 136 | +$_['text_seo_pagination'] = 'Включить СЕО пагинацию<span class="help">Предупреждение: это несовместимо с ajax пагинацией, включающей некоторые темы, если это не работает, вам придется отключить разбиение на страницы или ajax разбиение на страницы темы</span>'; | ||
| 137 | +$_['text_seo_pagination_fix'] = 'Предыдущий/следующий фикс:<span class="help">Фикс opencart 2.2+ проблемы с предыдущий/следующий в подкатегориях</span>'; | ||
| 138 | +$_['text_seo_pagination_canonical'] = 'Канонические с разбивкой на страницы:<span class="help">Установите каноническую ссылку страниц страницы, чтобы указать номер страницы (не рекомендуется)</span>'; | ||
| 139 | +$_['text_seo_canonical'] = 'Канонические:<span class="help">Включить каноникал для всех страниц</span>'; | ||
| 140 | +$_['text_seo_absolute'] = 'Абсолютная категория:<span class="help">Разрешить использовать одно и то же ключевое слово для подкатегорий и что-то еще (прим: <br/>/laptop/apple<br/>/desktop/apple<br/>/apple (производитель))<br/>Если вы укажете ключевое слово для производителя, его нельзя использовать для верхней категории (/apple and /apple), только подкатегория</span>'; | ||
| 141 | +$_['text_seo_absolute_help'] = 'Позвольте использовать одно и то же ключевое слово для подкатегорий и что-то еще (например: <br/> / laptop / apple <br/> / desktop / apple <br/> / apple (производитель)) <br/> Если вы укажете ключевое слово для Производитель, он не может использоваться для верхней категории (/apple и /apple), только подкатегории'; | ||
| 142 | +$_['text_seo_reviews'] = 'SEO отзывы:<span class="help">Вставить отзывы в HTML-контент</span>'; | ||
| 143 | +$_['text_seo_extension'] = 'Пример:<span class="help">Добавьте расширение по вашему выбору в конце ключевого слова продукта (прим: .html)</span>'; | ||
| 144 | +$_['text_seo_flag_tag'] = 'Тег после домена'; | ||
| 145 | +$_['text_seo_flag_store'] = 'Тег как поддомен'; | ||
| 146 | +$_['text_seo_flag'] = 'Режим языковых тегов:'; | ||
| 147 | +$_['text_seo_flag_short'] = 'Короткий тег:'; | ||
| 148 | +$_['text_seo_flag_upper'] = 'Тег в верхнем регистре:'; | ||
| 149 | +$_['text_seo_flag_default'] = 'Без тегов по умолчанию:'; | ||
| 150 | +$_['text_seo_urlcache'] = 'URL Кеш:<span class="help">Ускорить загрузку страницы с помощью кэширования URL-адресов</span>'; | ||
| 151 | +$_['text_seo_redirect_dynamic'] = 'Переадресация динамических ссылок:<span class="help">Динамические ссылки (route=product/product&product_id=32) будут автоматически перенаправлены на их дружественные URL-адреса, если они существуют. Перенаправление - 301, поэтому поисковая система остановится, чтобы индексировать его и использовать только дружественный URL-адрес в качестве ссылки.</span>'; | ||
| 152 | +$_['text_seo_redirect_canonical'] = 'Переадресация на каноникал:<span class="help">Это для дружественных URL-адресов, он проверяет, является ли текущая ссылка канонической ссылкой, если она не будет перенаправлена на каноническую. Это позволяет не использовать несколько URL-адресов для одного элемента. Перенаправление - 301.</span>'; | ||
| 153 | +$_['text_seo_redirect_canonical_1'] = 'Перенаправить все ссылки, кроме ссылок категории'; | ||
| 154 | +$_['text_seo_redirect_canonical_2'] = 'Redirect all links including category links'; | ||
| 155 | +$_['text_seo_redirect_http'] = 'HTTP режим:<span class="help">Используйте это, чтобы заставить веб-сайт использовать SSL или www, если URL неверен, будет выполнено 301 переадресация.</span>'; | ||
| 156 | +$_['text_seo_redirect_ssl'] = 'Режим SSL значения, не изменяя WWW'; | ||
| 157 | +$_['text_seo_redirect_www'] = 'Режим WWW значения, не изменяя SSL'; | ||
| 158 | +$_['text_seo_redirect_sslwww'] = 'Режим обоих SSL и WWW значений'; | ||
| 159 | +$_['text_seo_redirect_http_1'] = 'Без-SSL, Без-WWW - http://example.com'; | ||
| 160 | +$_['text_seo_redirect_http_2'] = 'Без-SSL, WWW - http://www.example.com'; | ||
| 161 | +$_['text_seo_redirect_http_3'] = 'SSL, Без-WWW - https://example.com'; | ||
| 162 | +$_['text_seo_redirect_http_4'] = 'SSL, WWW - https://www.example.com'; | ||
| 163 | +$_['text_seo_redirect_http_5'] = 'SSL - https://(www.)example.com'; | ||
| 164 | +$_['text_seo_redirect_http_6'] = 'Без-SSL - http://(www.)example.com'; | ||
| 165 | +$_['text_seo_redirect_http_7'] = 'WWW - http(s)://www.example.com'; | ||
| 166 | +$_['text_seo_redirect_http_8'] = 'Без-WWW - http(s)://example.com'; | ||
| 167 | +$_['text_seo_special_group'] = 'Специальная ценовая группа:<span class="help">[price] тег может рассчитать специальную цену, определите здесь, какую группу клиентов вы хотите использовать для ее расчета, если отключено, тогда будет отображаться только цена по умолчанию</span>'; | ||
| 168 | +$_['text_seo_format_tag'] = 'Форматирование тегов:<span class="help">Добавление запятых между каждым словом к тегам продукта при генерации при массовом обновлении или автоматическом обновлении</span>'; | ||
| 169 | +$_['text_seo_banner'] = 'Перезапись ссылок банеров:<span class="help">Динамически создавать seo-ссылку на баннеры (используется в баннерах, каруселях, модулях слайд-шоу)</span>'; | ||
| 170 | +$_['text_seo_banner_help'] = 'В разделе баннеров не вводите ссылку seo(/category/product_name) но вместо этого введите ссылку по умолчанию opencart: <b>index.php?route=product/product&path=10_21&product_id=54</b>.<br /> | ||
| 171 | +Вы также можете index.php, like this : <b>product/product&path=23&product_id=48</b>'; | ||
| 172 | +$_['text_seo_hreflang'] = 'Включить тег hreflang:'; | ||
| 173 | +$_['text_seo_substore'] = 'Включить многозадачную перезапись:'; | ||
| 174 | +$_['text_seo_substore_config'] = 'Актуальная конфигурация:'; | ||
| 175 | +$_['text_no_language_defined'] = 'Язык не определен'; | ||
| 176 | +$_['text_info_transform'] = 'Все эти параметры определяют способ генерации ключевого слова при сохранении элемента или использовании массового обновления.'; | ||
| 177 | +$_['text_seo_whitespace'] = 'Пробелы:<span class="help">Замените символы пробела ...</span>'; | ||
| 178 | +$_['text_seo_lowercase'] = 'Строчные:<span class="help">QWERTY => qwerty</span>'; | ||
| 179 | +$_['text_seo_remove'] = 'Удалить слова:<span class="help">Удалите некоторые слова при создании URL-адресов, их можно использовать для удаления общих слов типа «о, a, ...», поместить запятую между каждой</span>'; | ||
| 180 | +$_['text_seo_duplicate'] = 'Дубли:<span class="help">Разрешить использовать одно и то же ключевое слово для отдельной языковой версии элемента</span>'; | ||
| 181 | +$_['text_seo_ascii'] = 'ASCII режим:<span class="help">Замените акцентированные символы их эквивалентом ascii<br/>"éàôï" => "eaoi"<br/>Поддерживаемые языки: All latin (French, Italian, Spanish, etc), Arabic, Bulgarian, Croatian, Czech, German, Greek, Latvian, Lithunanian, Polish, Romanian, Русский, Serbian, Slovenian, Turkish, Украинский</span>'; | ||
| 182 | +$_['text_seo_autofill'] = 'Автозаполнение'; | ||
| 183 | +$_['text_seo_autofill_on'] = 'вкл:'; | ||
| 184 | +$_['text_seo_autofill_desc'] = 'Автозаполнение:<span class="help">Если оставить поле пустым при вставке или редактировании, значение будет создано автоматически на основе шаблона на вкладке массового обновления.<br/> | ||
| 185 | +<br/>Работает с : <br/>- товар<br/>- категории<br/>- инфомация</span>'; | ||
| 186 | +$_['text_seo_autourl'] = 'Авто URL:<span class="help">Если оставить пустым, ключевое слово seo url будет сгенерировано автоматически, используя параметр, установленный на вкладке «Массовое обновление»<br/> | ||
| 187 | +Работает с товаром, категориями и информацией</span>'; | ||
| 188 | +$_['text_seo_autotitle'] = 'Автоматическое название и описание для других языков:<span class="help">Если они оставлены пустыми при вставке или редактировании, названия и описания других языков будут копировать заголовок и описание языка по умолчанию<br/> | ||
| 189 | +Работает с товаром, категориями и информацией</span>'; | ||
| 190 | +$_['text_headers_lastmod'] = 'Последнее редактирование:<span class="help">Добавить последнюю измененную дату в шапку</span>'; | ||
| 191 | +$_['text_all'] = 'Все'; | ||
| 192 | +$_['text_insert'] = 'Вставить'; | ||
| 193 | +$_['text_edit'] = 'Редактировать'; | ||
| 194 | + | ||
| 195 | +$_['text_fix_search'] = 'Фикс поисковых ссылок:'; | ||
| 196 | +$_['text_fix_search_help'] = '<span class="help">Поисковые урлы могут быть некрасивые, потому что URL-адрес жестко закодирован в javascript, включите эту опцию, если вы хотите, чтобы URL-адрес поиска был заменен.</span>'; | ||
| 197 | +$_['text_fix_cart'] = 'Исправить ошибку удаления корзины:'; | ||
| 198 | +$_['text_fix_cart_help'] = '<span class="help">Когда есть дружественный url для checkout/cart, удаление продукта не обновляет текущий экран, включите это, чтобы исправить эту проблему.</span>'; | ||
| 199 | + | ||
| 200 | +// Таб магазинного seo | ||
| 201 | +$_['tab_seo_store'] = 'Магазинное SEO'; | ||
| 202 | +$_['text_info_store'] = '<h4>Магазинное SEO</h4> | ||
| 203 | +<p>В этом разделе вы можете настроить мета-заголовок, h1, мета ключевые слова и описание на домашней странице для каждого магазина и на каждом языке! <br/> Все, что вводится здесь, будет обходить значения, введенные в настройках opencart.</p> | ||
| 204 | +<p>Значения заголовков могут не применяться автоматически в зависимости от темы, чтобы вставить их, вы должны отредактировать свой обычный / домашний шаблон (и то же самое в шаблонах прод / кат / инфо) и использовать эти коды: <br/><code style="padding:0"><h1><?php echo $seo_h1; ?></h1><br/><h2><?php echo $seo_h2; ?></h2><br/><h3><?php echo $seo_h3; ?></h3></code></p> | ||
| 205 | +<p>Учтите, что элементы с дисплеем: ни один из них не может быть рассмотрен поисковыми системами, поэтому вы можете захотеть вставить только некоторые из них в зависимости от вашего шаблона (h1 является самым важным).</p> | ||
| 206 | +<h4>Префикс и суффикс заголовка Мета</h4> | ||
| 207 | +<p>Используйте этот параметр, чтобы добавить текст до или после всех названий вашего сайта, они могут быть определены для каждого магазина и каждого языка.</p> | ||
| 208 | +<p>Например, если вы хотите, чтобы ваш заголовок <b>"Название товара | Мой магазин"</b> просто вставьте <b>" | Мой магазин"</b> в суффикс.</p>'; | ||
| 209 | +$_['text_info_seo_titles_tab'] = 'SEO Тайтлы (H1, H2, H3)'; | ||
| 210 | +$_['text_info_seo_titles'] = '<h4>SEO тайтлы (H1, H2, H3)</h4> | ||
| 211 | +<p>Заголовки SEO не применяются автоматически к вашей теме, потому что это изменит ваш дизайн, поэтому вам придется вручную вставлять их в свои шаблоны.<br/><br/>Файлы для изменения | ||
| 212 | +(.tpl or .twig):<br/><code style="padding:0">/catalog/view/theme/[theme]/template/common/home<br/>/catalog/view/theme/[theme]/template/product/product<br/>/catalog/view/theme/[theme]/template/product/category<br/> | ||
| 213 | +/catalog/view/theme/[theme]/template/product/information</code><br/><br/> | ||
| 214 | +Вставьте этот код для .tpl: <br/><code style="padding:0"><h1><?php echo $seo_h1; ?></h1><br/><h2><?php echo $seo_h2; ?></h2><br/><h3><?php echo $seo_h3; ?></h3></code><br/><br/> | ||
| 215 | +Или этот для .twig: <br/><code style="padding:0"><h1>{{ seo_h1 }}</h1><br/><h2>{{ seo_h2 }}</h2><br/><h3>{{ seo_h3 }}</h3></code><br/></p> | ||
| 216 | +<p>Учтите, что элементы с отображением: ни один из них не может быть рассмотрен поисковыми системами, поэтому вы можете захотеть вставить только некоторые из них в зависимости от вашего шаблона (h1 является самым важным).</p>'; | ||
| 217 | + | ||
| 218 | +$_['entry_robots'] = 'Включить мета роботс'; | ||
| 219 | +$_['store_seo_global'] = 'Глобальные настройки'; | ||
| 220 | +$_['store_seo_home'] = 'Только главная страница'; | ||
| 221 | +$_['entry_robots_default'] = 'Значение по умолчанию'; | ||
| 222 | +$_['entry_store_seo_title'] = 'Мета тайтл:'; | ||
| 223 | +$_['entry_store_seo_title_extra'] = 'Мета тайтл префикс и суффикс:'; | ||
| 224 | +$_['entry_store_title'] = 'Тайтл H1:'; | ||
| 225 | +$_['entry_store_h2'] = 'Тайтл H2:'; | ||
| 226 | +$_['entry_store_h3'] = 'Тайтл H3:'; | ||
| 227 | +$_['entry_store_desc'] = 'Мета описание:'; | ||
| 228 | +$_['entry_store_keywords'] = 'Мета кейворды:'; | ||
| 229 | + | ||
| 230 | +// Таб расширенных описаний | ||
| 231 | +$_['tab_seo_snippets'] = 'Расширенные описания'; | ||
| 232 | +$_['text_seo_tab_snippet_1'] = 'Google Микроданные (Rich Cards)'; | ||
| 233 | +$_['text_seo_tab_snippet_2'] = 'Facebook Open Graph'; | ||
| 234 | +$_['text_seo_tab_snippet_3'] = 'Twitter Card'; | ||
| 235 | +$_['text_seo_tab_snippet_3'] = 'Twitter Card'; | ||
| 236 | +$_['text_seo_tab_snippet_4'] = 'Google Publisher'; | ||
| 237 | +$_['tab_microdata_1'] = 'Товар'; | ||
| 238 | +$_['tab_microdata_2'] = 'Организация'; | ||
| 239 | +$_['tab_microdata_3'] = 'Магазин'; | ||
| 240 | +$_['tab_microdata_4'] = 'Вебсайт'; | ||
| 241 | +$_['tab_microdata_5'] = 'Место'; | ||
| 242 | +$_['tab_microdata_6'] = 'Хлебные крошки'; | ||
| 243 | +$_['entry_snippet_pricerange'] = 'Ценовой диапозон:'; | ||
| 244 | +$_['entry_snippet_same_as'] = 'Такой как:'; | ||
| 245 | +$_['entry_enable_microdata'] = 'Включить Google Microdata:'; | ||
| 246 | +$_['entry_microdata_search'] = 'Поисковая строка'; | ||
| 247 | +$_['entry_microdata_logo'] = 'Лого'; | ||
| 248 | +$_['entry_microdata_address'] = 'Адрес'; | ||
| 249 | +$_['entry_snippet_contact'] = 'Контакты'; | ||
| 250 | +$_['entry_microdata_gps'] = 'GPS координаты'; | ||
| 251 | +$_['entry_gps_lat'] = 'Широта'; | ||
| 252 | +$_['entry_gps_long'] = 'Долгота'; | ||
| 253 | +$_['entry_address_street'] = 'Улица'; | ||
| 254 | +$_['entry_address_city'] = 'Местонахождение'; | ||
| 255 | +$_['entry_address_region'] = 'Регион'; | ||
| 256 | +$_['entry_address_code'] = 'Почтовый код'; | ||
| 257 | +$_['entry_address_country'] = 'Страна'; | ||
| 258 | +$_['entry_email'] = 'Email'; | ||
| 259 | +$_['entry_phone'] = 'Телефон'; | ||
| 260 | +$_['entry_product_data'] = 'Включить данные о продукте:'; | ||
| 261 | +$_['entry_snippet_data'] = 'Включить данные:'; | ||
| 262 | +$_['entry_model'] = 'Модель'; | ||
| 263 | +$_['entry_description'] = 'Описание (основано на метадескрипшине)'; | ||
| 264 | +$_['entry_reviews'] = 'Отзывы'; | ||
| 265 | +$_['entry_upc'] = 'UPC'; | ||
| 266 | +$_['entry_mpn'] = 'MPN'; | ||
| 267 | +$_['entry_ean'] = 'EAN'; | ||
| 268 | +$_['entry_isbn'] = 'ISBN'; | ||
| 269 | +$_['entry_rating'] = 'Средний рейтинг'; | ||
| 270 | +$_['entry_manufacturer'] = 'Производитель'; | ||
| 271 | +$_['entry_brand'] = 'Бренд'; | ||
| 272 | +$_['entry_enable_opengraph'] = 'Включить Facebook Open Graph:'; | ||
| 273 | +$_['entry_opengraph_id'] = 'Facebook App ID:'; | ||
| 274 | +$_['entry_enable_tcard'] = 'Включить Twitter Card:'; | ||
| 275 | +$_['entry_twitter_nick'] = 'Twitter никнейм (опционально):'; | ||
| 276 | +$_['entry_twitter_home_type'] = 'Тип главной:'; | ||
| 277 | +$_['entry_twitter_summary'] = 'Сводка'; | ||
| 278 | +$_['entry_twitter_summary_large'] = 'Сводка с большим изображением'; | ||
| 279 | +$_['entry_enable_gpublisher'] = 'Включить Google Publisher:'; | ||
| 280 | +$_['entry_gpublisher_url'] = 'Google+ url:'; | ||
| 281 | + | ||
| 282 | + | ||
| 283 | +// Таб дружественных УРЛ | ||
| 284 | +$_['tab_seo_friendly'] = 'Дружественные URLs'; | ||
| 285 | +$_['text_seo_export_urls'] = 'Экспорт URLs'; | ||
| 286 | +$_['text_seo_export_urls_tooltip'] = 'Экспорт дружественных URL-адресов и отправка их разработчику для интеграции в официальный пакет'; | ||
| 287 | +$_['text_seo_reset_urls'] = 'Восстановить дефолтные URLs'; | ||
| 288 | +$_['text_seo_reset_urls_tooltip'] = 'Если текущий язык не имеет предопределенных URL-адресов, модуль загрузит английскую версию'; | ||
| 289 | +$_['text_info_friendly'] = 'Здесь вы можете управлять дружественными URL-адресами, редактировать их по своему усмотрению.<br/> | ||
| 290 | +У вас также есть возможность добавить новый URL-адрес, он работает, например, для любого настраиваемого модуля, который вы установили, просто заполните 1-е поле значением в маршруте (?route=mymodule/action) и вторым полем с ключевым словом, которое вы хотите отобразить В URL.'; | ||
| 291 | +$_['text_seo_friendly'] = 'Дружественные URL-адреса для общих страниц:<span class="help">Включите эту опцию, чтобы использовать дружественные URL-адреса для общих страниц и специальных страниц (отредактируйте их на вкладке редактора SEO)</span>'; | ||
| 292 | +$_['info_seo_friendly'] = 'Включите этот компонент, чтобы переписать URL-адреса для общих URL-адресов страниц и параметров'; | ||
| 293 | +$_['info_seo_absolute'] = 'Включите этот компонент, чтобы использовать абсолютные URL-адреса'; | ||
| 294 | +$_['info_seo_404'] = 'Включите этот компонент, чтобы активировать протоколирование 404 страниц ошибок'; | ||
| 295 | +$_['info_seo_redirect'] = 'Включить этот компонент для активации 301 перенаправления'; | ||
| 296 | +$_['text_seo_cat_slash'] = 'Слеш в конце в категорий'; | ||
| 297 | +$_['text_seo_cat_slash_help'] = 'Вставить окончательный слеш в конце URL-адресов категорий'; | ||
| 298 | +$_['text_seo_redir_reviews'] = 'Перенаправление битых отзывов:<span class="help">Если на странице обзора index.php?route=product/product/review не открывается через ajax-запрос, то перенаправление 301 на страницу продукта. Это предотвратит индексирование этого фрагмента обзора.</span>'; | ||
| 299 | +$_['text_seo_remove_urls'] = 'Удалить все записи'; | ||
| 300 | +$_['text_seo_remove_redirected'] = 'Удалить перенаправленные записи'; | ||
| 301 | +$_['text_seo_add_url'] = 'Добавить новую запись'; | ||
| 302 | + | ||
| 303 | +// Таб полного пути товараh | ||
| 304 | +$_['tab_seo_fpp'] = 'Менеджер путей'; | ||
| 305 | +// Текст | ||
| 306 | +$_['tab_fpp_product'] = 'Товар'; | ||
| 307 | +$_['tab_fpp_category'] = 'Категория'; | ||
| 308 | +$_['tab_fpp_manufacturer'] = 'Производитель'; | ||
| 309 | +$_['tab_fpp_search'] = 'Поиск'; | ||
| 310 | +$_['tab_fpp_common'] = 'Общее'; | ||
| 311 | +$_['text_fpp_cat_canonical'] = 'Каноникал категории:'; | ||
| 312 | +$_['text_fpp_cat_mode_0'] = 'Прямая ссылка'; | ||
| 313 | +$_['text_fpp_cat_mode_1'] = 'Полный путь'; | ||
| 314 | +$_['text_fpp_cat_canonical_help'] = 'Какую ссылку вы хотите показать поисковым системам? <br/><b>Прямая ссылка</b>: /category (default)<br/><b>Полный путь</b>: /cat1/cat2/category<br/> | ||
| 315 | +<br/>В режиме прямой ссылки связи каноникал автоматически устанавливается также по прямой ссылке'; | ||
| 316 | +$_['text_fpp_mode'] = 'Режим пути товара:'; | ||
| 317 | +$_['text_fpp_mode_0'] = 'Прямая ссылка'; | ||
| 318 | +$_['text_fpp_mode_1'] = 'Короткий путь'; | ||
| 319 | +$_['text_fpp_mode_2'] = 'Длинный путь'; | ||
| 320 | +$_['text_fpp_mode_3'] = 'С производителем'; | ||
| 321 | +$_['text_fpp_mode_4'] = 'Последняя категория'; | ||
| 322 | + | ||
| 323 | +$_['text_fpp_slash'] = 'Слеш в конце'; | ||
| 324 | +$_['text_fpp_slash_mode_0'] = 'Без Слеша в конце'; | ||
| 325 | +$_['text_fpp_slash_mode_1'] = 'Слеш в конце категорий'; | ||
| 326 | +$_['text_fpp_slash_mode_2'] = 'Слеш в конце на всех ссылках'; | ||
| 327 | +$_['text_fpp_slash_help'] = 'Добавляет слеш в конце. Ника не влияет на СЕО'; | ||
| 328 | + | ||
| 329 | +$_['text_fpp_bc_mode'] = 'Режим хлебных крошек:'; | ||
| 330 | +$_['text_fpp_breadcrumbs_fix'] = 'Генератор хлебных крошек:'; | ||
| 331 | +$_['text_fpp_breadcrumbs_0'] = 'По умолчанию'; | ||
| 332 | +$_['text_fpp_breadcrumbs_1'] = 'Генерировать если пустое'; | ||
| 333 | +$_['text_fpp_breadcrumbs_2'] = 'Всегда генерировать'; | ||
| 334 | + | ||
| 335 | +$_['text_fpp_mode_help'] = '<span class="help"><b>Прямая ссылка:</b> Прямая ссылка на продукт, категория не включена (прим: /product_name), это станадртное значение опенкарта<br/> | ||
| 336 | + <b>Короткий путь:</b> Короткий путь по умолчанию, может быть изменен запрещенными категориями (прим: /category/product_name)<br/> | ||
| 337 | + <b>Длинный путь:</b> Длинный путь по умолчанию, может быть изменен запрещенными категориями (ex: /category/sub-category/product_name)<br/> | ||
| 338 | + <b>Последняя категория:</b> только последняя категория будет отображена. Если у вас /category/sub-category/product_name ссылка будет /sub-category/product_name<br/> | ||
| 339 | + <b>С производителем:</b> Производитель вместо категорий (ex: /manufacturer/product_name)</span>'; | ||
| 340 | +$_['text_fpp_breadcrumbs_help'] = '<span class="help"><b>По умолчанию:</b> отобображение опенкарта по умолчанию: отображение хлебных крошек исходя из категорий<br/> | ||
| 341 | + <b>Геренрировать если пусто:</b> генерирует хлебные крошки только если их нет,по этому категория хлебных крошек сохраняется (рекомендуется)<br/> | ||
| 342 | + <b>Всегда генерировать:</b> перезаписывает хлебные крошки, по этому на выходе только те, котрые генерирует модуль<br/></span>'; | ||
| 343 | +$_['text_fpp_bypasscat'] = 'Перезаписываьт пути товара в категориях:'; | ||
| 344 | +$_['text_fpp_bypasscat_help'] = '<span class="help">Если отключено, ссылка продукта из категорий остается неизменной, чтобы сохранить нормальные хлебные крошки.<br/> | ||
| 345 | +Если включено, ссылка продукта из категорий будет перезаписана путём, сгенерированным модулем. <br> В любом случае каноническая ссылка обновляется с хорошим значением, поэтому google будет видеть только URL-адрес, сгенерированный модулем для данного продукта.</span>'; | ||
| 346 | +$_['text_fpp_directcat'] = 'Режим пути категории:'; | ||
| 347 | +$_['text_fpp_directcat_help'] = 'Какую ссылку вы хотите отображать на своем веб-сайте?<br/><b>Прямая ссылка</b>: /category<br/><b>Полная ссылка</b>: /cat1/cat2/category (default)'; | ||
| 348 | +$_['text_fpp_homelink'] = 'Перезаписать ссылку на главную:'; | ||
| 349 | +$_['text_fpp_homelink_help'] = '<span class="help">Установить ссылку на главную вида mystore.com из mystore.com/index.php?route=common/home</span>'; | ||
| 350 | +$_['text_fpp_depth'] = 'Максимально уровней:'; | ||
| 351 | +$_['text_fpp_depth_help'] = '<span class="help">Максимальная глубина категории, которую вы хотите отобразить, например, если у вас есть продукт в /cat/subcat/subcat/product установите эту опцию на 2, ссылка станет /cat/subcat/product<br/>Эта опция работает в режиме наибольшего и кратчайшего пути</span>'; | ||
| 352 | +$_['text_fpp_unlimited'] = 'Безлимитно'; | ||
| 353 | +$_['text_fpp_brand_parent'] = 'Производитель родитель:'; | ||
| 354 | +$_['text_fpp_brand_parent_help'] = '<span class="help">Включите производителей в URL-адрес списка производителя.<br/>Например, если ваш список производителей /brand, apple производителя появится таким образом /brand/apple а было /apple</span>'; | ||
| 355 | +$_['text_fpp_remove_search'] = 'Удалить параметры поиска/тегов:'; | ||
| 356 | +$_['text_fpp_remove_search_help'] = '<span class="help">Удалить параметр поиска или тега (?search=something, ?tag=something) из URL-адресов продукта в результатах поиска (только для URL-адресов продуктов, а не для самого URL-адреса страницы поиска)</span>'; | ||
| 357 | +$_['text_fpp_seo_tag'] = 'СЕО тег:<span class="help">для ссылок тегов (route=product/search&tag=something) определяет ключевое слово для использования для хорошего URL-адреса, например, если вы установите «тег», то результатом будет URL-адрес /tag/something</span>, оставьте пустым для отключения'; | ||
| 358 | +$_['entry_category'] = 'Запрещенные категории:<span class="help">Выберите категории, которые никогда не будут отображаться в случае нескольких путей</span>'; | ||
| 359 | + | ||
| 360 | +// Таб массового обновления | ||
| 361 | +$_['tab_seo_update'] = 'Массовое обновление'; | ||
| 362 | +$_['text_info_update'] = 'Будьте осторожны при использовании этой функции, так как она перезапишет все ваши ключевые слова.<br/> | ||
| 363 | +Вы можете использовать функцию имитации, чтобы проверить результат до фактического обновления. <br/> Выберите флаги языка для обновления только этих языков.'; | ||
| 364 | +$_['text_cleanup'] = 'Очистить:<span class="help">Удалите старые URL-адреса в базе данных, сделайте очистку, если у вас возникли проблемы с некоторыми URL-адресами</span>'; | ||
| 365 | +$_['text_cache'] = 'ЧПУ кеш:<span class="help">Генерировать или очистить ЧПУ кеш</span>'; | ||
| 366 | +$_['text_redirection'] = 'Динамическая переадресация:<span class="help">Сохраните все фактические URL для дальнейшего перенаправления, затем вы можете изменить ключевое слово СЕО, google сохранит путь.</span>'; | ||
| 367 | +$_['text_cache_create_btn'] = 'Генерировать кеш'; | ||
| 368 | +$_['text_redirect_create_btn'] = 'Генерировать переадресации'; | ||
| 369 | +$_['text_cache_delete_btn'] = 'Очистить кеш'; | ||
| 370 | +$_['text_cleanup_btn'] = 'Очистить'; | ||
| 371 | +$_['text_cleanup_duplicate_btn'] = 'Удалить дубли ссылок'; | ||
| 372 | +$_['text_cleanup_done'] = 'Очистка завершена, %d записей удалено'; | ||
| 373 | +$_['text_seo_languages'] = 'Выберите язык'; | ||
| 374 | +$_['text_seo_simulate'] = 'Симуляция:<span class="help">Никаких изменений не будет, пока включяен этот режим</span>'; | ||
| 375 | +$_['text_seo_empty_only'] = 'Заполнить только пустые значения:<span class="help">Отключите для перезаписи всех значений</span>'; | ||
| 376 | +$_['text_seo_redirect'] = 'Переадресация'; | ||
| 377 | +$_['text_seo_redirect_mode'] = 'ЧПУ переадресайия:<span class="help">Автоматически вставляет переадресацию для старых ссылок</span>'; | ||
| 378 | +$_['text_image_name_lang'] = 'Имена изображений могут быть установлены только на одном языке, выберите один из них и нажмите «Создать» снова.'; | ||
| 379 | +$_['text_enable'] = 'Включить'; | ||
| 380 | +$_['text_deleted'] = 'Удалено'; | ||
| 381 | + | ||
| 382 | +// Tab cron | ||
| 383 | +$_['tab_seo_cron'] = 'Cron'; | ||
| 384 | +$_['text_info_cron'] = 'Вы можете сделать массовое обновление с помощью заданий cron, скопируйте файл <b>seo_package_cli.php</b> | ||
| 385 | +из "_extra files" (желательно в каталог за пределами корня веб-сервера) и сконфигурируйте свой cron с помощью пути к этому файлу.<br/> | ||
| 386 | +Сценарий будет использовать настройки, настроенные на этой странице.<br/> | ||
| 387 | +Ахтунг!!!: Задачи cron не могут генерировать неограниченные элементы (только массовые средства обновления), поэтому в зависимости от ограничений вашего сервера и количества элементов, которые у вас есть, | ||
| 388 | +вы можете столкнуться с ошибкой при использовании cron, рекомендуется использовать параметр «только пустой», чтобы ограничить количество элементов, котрые вы собираетесь обновлять с помощью cron.'; | ||
| 389 | +$_['text_seo_cron_update'] = 'Обновить:'; | ||
| 390 | +$_['text_clear_logs'] = 'Очистить логи'; | ||
| 391 | +$_['text_tab_cron_1'] = 'Конфигурация'; | ||
| 392 | +$_['text_tab_cron_2'] = 'Отчет'; | ||
| 393 | +$_['text_cli_log_save'] = 'Сохранить лог файл'; | ||
| 394 | +$_['text_cli_log_too_big'] = 'Ваш файл логов слишком большой (%s) для отображения здесь - вы можете загрузить его или очистить с помощью кнопок ниже'; | ||
| 395 | + | ||
| 396 | +// Tab about | ||
| 397 | +$_['tab_seo_about'] = 'О модуле'; | ||
| 398 | + | ||
| 399 | +$_['text_nothing_changed'] = 'Нулевое значение'; | ||
| 400 | +$_['text_seo_no_language'] = 'Язвк не выбран'; | ||
| 401 | +$_['text_seo_fullscreen'] = 'Полный экран'; | ||
| 402 | +$_['text_seo_show_old'] = 'Показать старые значения'; | ||
| 403 | +$_['text_seo_change_count'] = 'Pfgbcb bpvtytys'; | ||
| 404 | +$_['text_seo_old_value'] = 'Старые значения'; | ||
| 405 | +$_['text_seo_new_value'] = 'Новые значения'; | ||
| 406 | +$_['text_seo_item'] = 'Пункт'; | ||
| 407 | +$_['text_simulation'] = 'Режим симуляции'; | ||
| 408 | +$_['text_write'] = 'Режим записи'; | ||
| 409 | +$_['text_empty_only'] = 'Только пустые значения'; | ||
| 410 | +$_['text_all_values'] = 'Все значения'; | ||
| 411 | +$_['text_seo_update_info'] = '1. Включить или отключить режим симуляции<br/> | ||
| 412 | +2. Выберите, если вы хотите обновлять только пустые элементы или все элементы<br/> | ||
| 413 | +3. После выбора нажмите на кнопку Генерировать<br/> | ||
| 414 | +4. Результаты отобразятся здесь'; | ||
| 415 | +$_['text_seo_simulation_mode'] = '<span>РЕЖИМ СИМУЛЯЦИИ</span><br/>Никаких изменений не будет в базе данных'; | ||
| 416 | +$_['text_seo_write_mode'] = '<span>РЕЖИМ ЗАПИСИ</span><br/>Изменения сохранятся'; | ||
| 417 | +$_['text_seo_product'] = 'Товар'; | ||
| 418 | +$_['text_seo_category'] = 'Категория'; | ||
| 419 | +$_['text_seo_manufacturer'] = 'Производитель'; | ||
| 420 | +$_['text_seo_information'] = 'Информация'; | ||
| 421 | +$_['text_seo_cache'] = 'Имя'; | ||
| 422 | +$_['text_seo_cleanup'] = 'Пустая (ссылка)'; | ||
| 423 | +$_['text_seo_type_product'] = 'Товары'; | ||
| 424 | +$_['text_seo_type_category'] = 'Категории'; | ||
| 425 | +$_['text_seo_type_manufacturer'] = 'Производители'; | ||
| 426 | +$_['text_seo_type_information'] = 'Информация'; | ||
| 427 | +$_['text_seo_type_redirect'] = 'Динамическая переадресация'; | ||
| 428 | +$_['text_seo_mode_product'] = 'Товары'; | ||
| 429 | +$_['text_seo_mode_category'] = 'Категории'; | ||
| 430 | +$_['text_seo_mode_manufacturer'] = 'Производители'; | ||
| 431 | +$_['text_seo_mode_information'] = 'Информация'; | ||
| 432 | +$_['text_seo_mode_url_alias'] = 'Псевдонимы URL-адресов'; | ||
| 433 | +$_['text_seo_mode_duplicate'] = 'Удалить дубли'; | ||
| 434 | +$_['text_seo_type_redirection'] = 'Динамическая переадресация'; | ||
| 435 | +$_['text_seo_type_report'] = 'Отчет'; | ||
| 436 | +$_['text_seo_type_cache'] = 'Кеш'; | ||
| 437 | +$_['text_seo_type_cleanup'] = 'Очистить'; | ||
| 438 | +$_['text_seo_generator_product'] = 'Товары:'; | ||
| 439 | +$_['text_seo_generator_product_desc'] = '<span class="help">Доступные шаблоны:<br/><b>[name]</b> : Название товара<br/><b>[model]</b> : Модель<br/><b>[category]</b> : Название категории<br/><b>[brand]</b> : Название бренда<br/><b>[desc]</b> : Описание<br/><b>[current]</b> : Текущее значение<br/><b>{aa|bb|cc}</b> : Рандомное значение<br/><b>{en}..{/en}</b> : Только для яз<br/><br/>Другие : <b>[parent_category]</b> <b>[upc]</b> <b>[sku]</b> <b>[ean]</b> <b>[jan]</b> <b>[isbn]</b> <b>[mpn]</b> <b>[location]</b> <b>[price]</b> <b>[lang]</b> <b>[lang_id]</b> <b>[prod_id]</b> <b>[cat_id]</b></span>'; | ||
| 440 | +$_['text_seo_generator_category'] = 'Категории:'; | ||
| 441 | +$_['text_seo_generator_category_desc'] = '<span class="help">Доступные шаблоны:<br/><b>[name]</b> : Название категории<br/><b>[desc]</b> : Описание<br/><b>[current]</b> : Текуущее значение<br/><b>{aa|bb|cc}</b> : Рандомное значение<br/><b>{en}..{/en}</b> : Только для яз<br/><br/><b>[parent]</b> : Раотельское название категории<br/><b>[lowest_price]</b> : Наименьшая цена товара<br/><b>[highest_price]</b> : Наибольшая цена товара<br/><br/>Другие : <b>[lang]</b> <b>[lang_id]</b> <b>[cat_id]</b></span>'; | ||
| 442 | +$_['text_seo_generator_information'] = 'Информационный страницы:'; | ||
| 443 | +$_['text_seo_generator_information_desc'] = '<span class="help">Доступные шаблоны:<br/><b>[name]</b> : Информационный тайтл<br/><b>[desc]</b> : Описание<br/><b>[current]</b> : Текущее значение<br/><b>{aa|bb|cc}</b> : Рандомное значение<br/><b>{en}..{/en}</b> : Только для яз<br/><br/>Другие : <b>[lang]</b> <b>[lang_id]</b></span>'; | ||
| 444 | +$_['text_seo_generator_manufacturer'] = 'Производители:'; | ||
| 445 | +$_['text_seo_generator_manufacturer_desc'] = '<span class="help">Доступные шаблоны:<br/><b>[name]</b> : Название производителя<br/><b>[current]</b> : Текукщее значение<br/><b>{aa|bb|cc}</b> : Рандомное значение<br/><b>{en}..{/en}</b> : Только для языка</span>'; | ||
| 446 | +$_['text_seo_mode_url'] = 'СЕО УРЛы'; | ||
| 447 | +$_['text_seo_generator_redirect'] = 'Генерировать динамические редиректы'; | ||
| 448 | +$_['text_seo_mode_title'] = 'Мета тайтлы'; | ||
| 449 | +$_['seo_title_prefix'] = 'Префикс'; | ||
| 450 | +$_['seo_title_suffix'] = 'Суффикс'; | ||
| 451 | +$_['text_seo_mode_h1'] = 'СЕО H1'; | ||
| 452 | +$_['text_seo_mode_h2'] = 'СЕО H2'; | ||
| 453 | +$_['text_seo_mode_h3'] = 'СЕО H3'; | ||
| 454 | +$_['text_seo_mode_image_name'] = 'Имя картинки'; | ||
| 455 | +$_['text_seo_mode_image_alt'] = 'Альт картинки'; | ||
| 456 | +$_['text_seo_mode_image_title'] = 'Тайтл картинки'; | ||
| 457 | +$_['text_seo_mode_keyword'] = 'Мета ключевое слово'; | ||
| 458 | +$_['text_seo_mode_description'] = 'Мета описание'; | ||
| 459 | +$_['text_seo_mode_related'] = 'Рекомендуемые товары'; | ||
| 460 | +$_['text_seo_mode_tag'] = 'Теги'; | ||
| 461 | +$_['text_seo_mode_create'] = 'Генерировать'; | ||
| 462 | +$_['text_seo_mode_delete'] = 'Удалить'; | ||
| 463 | +$_['text_seo_report'] = 'Отчет'; | ||
| 464 | +$_['text_seo_generator_url'] = 'Геренировать УРЛы'; | ||
| 465 | +$_['text_seo_generator_title'] = 'Геренировать Мета тайтлы'; | ||
| 466 | +$_['text_seo_generator_keywords'] = 'Геренировать Мета ключевые слова'; | ||
| 467 | +$_['text_seo_generator_desc'] = 'Геренировать Мета описание'; | ||
| 468 | +$_['text_seo_generator_full_desc'] = 'Геренировать Описание'; | ||
| 469 | +$_['text_seo_generator_tag'] = 'Геренировать Теги'; | ||
| 470 | +$_['text_seo_generator_h1'] = 'Геренировать СЕО H1'; | ||
| 471 | +$_['text_seo_generator_h2'] = 'Геренировать СЕО H2'; | ||
| 472 | +$_['text_seo_generator_h3'] = 'Геренировать СЕО H3'; | ||
| 473 | +$_['text_seo_generator_imgalt'] = 'Геренировать Альт картинок'; | ||
| 474 | +$_['text_seo_generator_imgtitle'] = 'Геренировать Тайтл картинок'; | ||
| 475 | +$_['text_seo_generator_imgname'] = 'Геренировать Названия картинок'; | ||
| 476 | +$_['text_seo_generator_related'] = 'Геренировать Рекомендуемые товары'; | ||
| 477 | +$_['text_seo_generator_related_no'] = 'Кол-во:'; | ||
| 478 | +$_['text_seo_generator_related_relevance'] = 'Релевантность (0-10):'; | ||
| 479 | +$_['text_seo_generator_related_samecat'] = 'Некотрые категории'; | ||
| 480 | +$_['text_query'] = 'Запрос'; | ||
| 481 | +$_['text_keyword'] = 'Ключевое слово'; | ||
| 482 | +$_['text_status'] = 'Статус'; | ||
| 483 | +$_['text_empty'] = 'Пусто'; | ||
| 484 | +$_['text_duplicate'] = 'Дубликат'; | ||
| 485 | +$_['text_report'] = 'Отчет'; | ||
| 486 | +$_['text_url_alias_report_btn'] = 'Отчет псевдонима Url'; | ||
| 487 | + | ||
| 488 | +$_['text_seo_result'] = 'Результат:'; | ||
| 489 | + | ||
| 490 | +$_['text_module'] = 'Модули'; | ||
| 491 | +$_['text_success'] = 'Отлично: Вы изменили значения СЕО модуля!'; | ||
| 492 | + | ||
| 493 | +$_['text_man_ext'] = 'Расширение производителей'; | ||
| 494 | + | ||
| 495 | +$_['text_seo_confirm'] = 'Вы уверены?'; | ||
| 496 | +$_['text_description'] = 'Описания'; | ||
| 497 | + | ||
| 498 | + | ||
| 499 | +// Full product path | ||
| 500 | + | ||
| 501 | +// Help sections | ||
| 502 | + | ||
| 503 | +$_['tab_info_request'] = 'Запросить заголовки'; | ||
| 504 | +$_['title_common_overview'] = 'ЧПУ компоненты'; | ||
| 505 | +$_['text_info_common_overview'] = ' | ||
| 506 | +<p><b>Краткие описания компонентов ЧПУ.</b></p> | ||
| 507 | +<h4>Абсолютные ссылки</h4> | ||
| 508 | +<p>Используйте этот компонент, чтобы установить дружественный URL-адрес для любого настраиваемого модуля, работает с полным URL-адресом вместо ссылки ключевого слова.</p> | ||
| 509 | +<p>http://website.com/index.php?<b>route=blog/blog&path=12&post=32</b> > http://website.com/<b>blog/blog-cat/this-is-a-blog-post</b></p> | ||
| 510 | +<h4>Common Page Url</h4> | ||
| 511 | +<p>Use this component to set friendly url to default opencart pages (account, contact, checkout, ...), handles only the route= parameter.</p> | ||
| 512 | +<p>http://website.com/index.php?<b>route=account/register</b> > http://website.com/<b>my-account/register</b></p> | ||
| 513 | +<h4>Param url</h4> | ||
| 514 | +<p>This component lists the seo url parameters from custom modules, so you can quick check them, you can create new parameters but it may not work on some modules so absolute url is recommended because it will work in any case.</p> | ||
| 515 | +<p>http://website.com/some-category?<b>super_filter=42</b> > http://website.com/some-category/<b>filter-blue</b></p> | ||
| 516 | +</ul>'; | ||
| 517 | +$_['text_info_absolute'] = ' | ||
| 518 | +<h4>Absolute Url - Handle any custom module url</h4> | ||
| 519 | +<p>Opencart is working by default with url keywords, for example <b>/desktop/pc/some-computer</b>, from this url opencart is searching in database each part to determine to what it relates (category, product, information, etc), then it will compute this link to an understandable one for the system which will look like <b>index.php?route=product/product&path=12_31&product_id=54</b>.</p> | ||
| 520 | +<p>With absolute url component you can define an url not using the keyword part but the full url itself, it is no use for product/information/categories etc but it can be very handy for making to work with any custom module.</p> | ||
| 521 | +<p>It is working with unlimited parameters in source url and unlimited levels in seo url.</p> | ||
| 522 | +<h4>Set up a new absolute url</h4> | ||
| 523 | +<p>Example, transform <b>http://website.com/index.php?route=blog/blog&post=32</b> into <b>http://website.com/blog/this-is-a-blog-post</b>.</p> | ||
| 524 | +<ol> | ||
| 525 | +<li>Click on <span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span></li> | ||
| 526 | +<li>Insert in query field <b>blog/blog&post=32</b> (do not insert index.php?route=)</li> | ||
| 527 | +<li>in Full seo url field <b>blog/this-is-a-blog-post</b></li> | ||
| 528 | +</ol> | ||
| 529 | +</ul>'; | ||
| 530 | +$_['text_info_common'] = ' | ||
| 531 | +<h4>Common Page Url - Give friendly url to default opencart pages (account, contact, checkout, ...)</h4> | ||
| 532 | +<p>By default opencart is not rewritting the common page urls, they remain this way <b>index.php?route=account/login</b>.</p> | ||
| 533 | +<p>With common page url component you can define an seo url for all these pages </p> | ||
| 534 | +<p>For example you can rewrite <b>index.php?route=account/register</b> to <b>register</b>, just put <b>account/register</b> in query (do not insert index.php?route=), and put <b>register</b> in seo url field.</p> | ||
| 535 | +<p>Here you can not insert any parameter, for example <b>account/register&param=value</b> won\'t work, you have to use absolute url for such link or insert the parameter into parameter url</p> | ||
| 536 | +<h4>Get predefined urls</h4> | ||
| 537 | +<p>Complete SEO comes with predefined urls for all common opencart pages, there various languages available and they will be automatically retrieved for current selected language if exists, if not it will get english urls instead.</p> | ||
| 538 | +<p>Warning: using restore default urls will replace all existent common page urls listed for current language.</p> | ||
| 539 | +<ol> | ||
| 540 | +<li>Click on <span class="gkd-badge"><i class="fa fa-caret-down"></i></span> on the bottom button to get access to advanced options.</li> | ||
| 541 | +<li>Then click on <span class="gkd-badge"><i class="fa fa-magic" style="color:#FB7C00"></i> Restore default URLs</span></li> | ||
| 542 | +<li>If the keywords are available for current language they will be displayed, if not english language will be displayed and you will have to translate.</li> | ||
| 543 | +<li>You translated a new language and want us to integrate in main package? then click on <span class="gkd-badge"><i class="fa fa-save" style="color:#4276D2"></i> Export URLs</span> and send us export file at support@geekodev.com</li> | ||
| 544 | +</ol> | ||
| 545 | +<h4>Set up a new common page url</h4> | ||
| 546 | +<p>Example, transform <b>http://website.com/index.php?route=account/register</b> into <b>http://website.com/my-account/register</b>.</p> | ||
| 547 | +<ol> | ||
| 548 | +<li>Click on <span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span></li> | ||
| 549 | +<li>Insert in query field <b>account/register</b> (do not insert route=)</li> | ||
| 550 | +<li>in Full seo url field <b>my-account/register</b></li> | ||
| 551 | +</ol> | ||
| 552 | +</ul>'; | ||
| 553 | +$_['text_info_special'] = ' | ||
| 554 | +<h4>Param url - Manage seo keywords of parameters in url</h4> | ||
| 555 | +<p>If you have a custom module which is handling seo keywords, its keywords will generally appear there, so you can easily give a look on them and change if necessary.</p> | ||
| 556 | +<p>If your custom module does not manage seo url automatically then it is recommended to use Absolute Url component to handle the urls. You can also use a combination of Common Page and Param url to handle it but Absolute url is easier for that, so this component is recommended only for view and not for url creation.</p> | ||
| 557 | +<h4>Set up a new redirection</h4> | ||
| 558 | +<p><span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span> click on this button and follow the instructions to set your url redirection.</p> | ||
| 559 | +</ul>'; | ||
| 560 | +$_['text_info_404'] = ' | ||
| 561 | +<h4>Not found (404) manager</h4> | ||
| 562 | +<p>This section lists all url accessed on your website that are actually not existant or that opencart system have not been able to forward to any content. For example when you arrive on such page:</p> | ||
| 563 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/not_found.png" alt=""/></p> | ||
| 564 | +<p>In such case Complete SEO Package will automatically save this url so you will be able to easily check all not found urls in this table and how many times they have been requested.</p> | ||
| 565 | +<h4>Create a redirection from a not found url</h4> | ||
| 566 | +<p>Click on the button <img src="view/seo_package/img/help/btn_plus.png"/> to a easily add a redirection for this url, once added your redirection will appear into "Url redirection" tab, and here the url will appear in <span class="text-success">green color</span> to indicate that this url already have a redirection.</p> | ||
| 567 | +<h4>Remove actual entries</h4> | ||
| 568 | +<p>These entries are for your information only, there is no impact to remove them, to do so just click on one of the following buttons:</p> | ||
| 569 | +<ul class="list-unstyled"> | ||
| 570 | +<li style="margin-top:12px"><span class="gkd-badge"><i class="fa fa-minus" style="color:#ED5555"></i> Remove redirected entries</span> this will remove all urls marked as <span class="text-success">green</span> which means any url that already have his redirection set</li> | ||
| 571 | +<li style="margin-top:12px"><span class="gkd-badge"><i class="fa fa-close" style="color:#ED5555"></i> Remove all entries</span> this will remove all urls in this table, marked green or not, don\'t worry this is not deleting the redirections made on these urls</li> | ||
| 572 | +</ul>'; | ||
| 573 | +$_['text_info_redirections'] = ' | ||
| 574 | +<h4>Url redirection</h4> | ||
| 575 | +<p>Here you can define your own URL redirections, this is using the redirection 301, it means search engines will consider the new url as the valid one.</p> | ||
| 576 | +<p>If you need to change the URL of a page as it is shown in search engine results, we recommend that you use a server-side 301 redirect. This is the best way to ensure that users and search engines are directed to the correct page. The 301 status code means that a page has permanently moved to a new location.</p> | ||
| 577 | +<p>301 redirects are particularly useful if you have any url not found on your website.</p> | ||
| 578 | +<h4>Set up a new redirection</h4> | ||
| 579 | +<p><span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span> click on this button and follow the instructions to set your url redirection.</p>'; | ||
| 580 | +$_['text_info_request'] = '<h4>Request headers</h4> | ||
| 581 | +<p>Request headers are part of the HTTP protocol, they are sent on each request made to the server.<br/>Here you will be able to change some parameters related to request headers, such optimizations can improve performance for the end user and also for search engine crawling robots.</p> | ||
| 582 | +<h5>Last-Modified</h5> | ||
| 583 | +<p>Include the last modified date of the actual item, improves performance for user (browser will fetch page from cache if not updated) and for crawling robots. For products the date will be the one of the last edit of product or the one of the last review if any. It is highly recommended to activate this setting.</p><p><img class="img-thumbnail" src="view/seo_package/img/help/headers-last-modified.png" alt=""/></p>'; | ||
| 584 | +$_['help_fb_appid_tab'] = 'Facebook App ID'; | ||
| 585 | +$_['help_microdata'] = ' | ||
| 586 | +<h4>Google microdata</h4> | ||
| 587 | +<p>Microdata is widely used by search engines to format the search result in better way, for example a product can display the price and review rating directly in search results : </p> | ||
| 588 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/microdata-product.jpg" alt=""/></p> | ||
| 589 | +<p>Complete SEO Package is using the latest JSON-LD format to include the microdata on your website. Basic informations are included (category, description, image, price, stock) and you can select extra data you want to display.</p> | ||
| 590 | +<h4>Benefits of using microdata</h4> | ||
| 591 | +<p><ul> | ||
| 592 | + <li>Eye catching results - Drawing a search users attention from your competitors and to your own result.</li> | ||
| 593 | + <li>Potential CTR increase - Possibly increasing click through rates and lowering the chance of the user bouncing as they have more information on the page before clicking through.</li> | ||
| 594 | + <li>Providing quality results - Offering results that are closer to user specifications.</li> | ||
| 595 | +</ul></p> | ||
| 596 | +<h4>Testing tool</h4> | ||
| 597 | +<p>Use the following testing tool to check your actual microdata: <a href="https://search.google.com/structured-data/testing-tool" target="_blank">Google structured data testing tool</a></p> | ||
| 598 | +'; | ||
| 599 | +$_['help_fb_appid'] = ' | ||
| 600 | +<h4>Facebook App ID</h4> | ||
| 601 | +<p>You must fill your facebook App ID in order to get this feature working, you will find it in the settings of your developper panel: <a href="http://facebook.com/developers">http://facebook.com/developers</a>.</p> | ||
| 602 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/settings_app-id.gif" alt=""/></p> | ||
| 603 | +'; | ||
| 604 | +$_['help_fb_setup_tab'] = 'How to use Facebook Opengraph'; | ||
| 605 | +$_['help_fb_setup'] = ' | ||
| 606 | +<h4>Install the Facebook Developer Application</h4> | ||
| 607 | +<p>The first step in creating an application in Facebok is to install the Facebook Developer application.</p> | ||
| 608 | +<p>To do that, log in to Facebook and then visit the URL <a href="http://facebook.com/developers">http://facebook.com/developers</a>.</p> | ||
| 609 | +<p>If this is the first time you’ve installed the Developer Application, you will see the Request for Permission dialog show below:</p> | ||
| 610 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/permission.jpg" alt="" /></p> | ||
| 611 | +<p>Click the <b>Allow</b> button to proceed.</p> | ||
| 612 | +<h4>Creating the Facebook Application for your Website</h4> | ||
| 613 | +<p>Now that you have the Developer App installed, click on the<b> Create New App</b> button.<br/><img class="img-thumbnail" src="view/seo_package/img/help/create-new-app.gif" alt=""/></p> | ||
| 614 | +<p>Give your application an "App Display Name" (the name displayed to users).</p> | ||
| 615 | +<p>For purposes of this tutorial, you don’t need to have a "Namespace".</p> | ||
| 616 | +<p>Click the "I agree to Facebook Platform Policies" box; then click the <b>Continue</b> button.<br/><img class="img-thumbnail" src="view/seo_package/img/help/dialog_new-app.gif" alt=""/></p> | ||
| 617 | +<p>On the next screen, enter the security phrase and then click <b>Submit</b>.</p> | ||
| 618 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/new-app_captcha.gif" alt=""/></p> | ||
| 619 | +<p>There are a lot of options you can tweak related to your application. In this post, we are going to focus on the basics needed to get your website set up with a Facebook App ID.</p> | ||
| 620 | +<h4>The Settings Tab</h4> | ||
| 621 | +<p>This is where you do the basic set up for your app</p> | ||
| 622 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/settings_app-id.gif" alt=""/></p> | ||
| 623 | +<p>App ID is now set up. Your App ID is the value you’ll be using to integrate your website with Facebook’s APIs so you can add the Social Plugins (Like Button, Send Button, Comments Box, etc.).</p> | ||
| 624 | +<p>You don’t need to add an icon. If your website has a favicon, it will be displayed next to your site’s URL in Facebook Insights.</p> | ||
| 625 | +<p><b>Basic info:</b></p> | ||
| 626 | +<p><ul> | ||
| 627 | +<li><b>App Display Name:</b> Make this the same as the original value you provided</li> | ||
| 628 | +<li><b>App Namespace:</b> Leave blank</li> | ||
| 629 | +<li><b>Contact Email:</b> Where you want Facebook to send emails regarding your app</li> | ||
| 630 | +<li><b>App Domain:</b> just put “mydomain.com” where “mydomain.com” is your website’s domain URL (TLD)</li> | ||
| 631 | +<li><b>Category:</b> Select a category from the pulldown list (optional)</li> | ||
| 632 | +</ul></p> | ||
| 633 | +<p>Your website is now an “object” in Facebook’s Open Graph, with its own App ID.</p> | ||
| 634 | +'; | ||
| 635 | +$_['help_flag_mode'] = ' | ||
| 636 | +<h4>Tag after domain</h4> | ||
| 637 | +<p>Language prefix mode permits to add the language code just after the domain name:</p> | ||
| 638 | +<p><code>http://example.com/<b>en</b></code><br/><code>http://example.com/<b>fr</b></code> | ||
| 639 | +<p>It can be useful to have a good separation between each language in multilingual websites.</p> | ||
| 640 | +<p>This parameter can be enabled anytime and take effect immediately, there is no need to re-generate the urls.</p> | ||
| 641 | +<h4>Extra options</h4> | ||
| 642 | +<table class="table table-bordered"> | ||
| 643 | +<tr><th style="width:220px">Option</th><th>Effect</th></tr> | ||
| 644 | +<tr><td><code>Short tag</code></td><td>Display <b>/en</b> instead of <b>/en-gb</b> in case you have full format defined</td></tr> | ||
| 645 | +<tr><td><code>No tag for default</code></td><td>Default language won\'t display the language tag</td></tr> | ||
| 646 | +<tr><td><code>Tag in uppercase</code></td><td>Display tag in uppercase <b>/EN, /FR</b></td></tr> | ||
| 647 | +</table> | ||
| 648 | +'; | ||
| 649 | +$_['help_store_mode'] = ' | ||
| 650 | +<h4>Tag as subdomain</h4> | ||
| 651 | +<p>Enable this option if you want your links to be written with specific store depending the language. For example if you have 2 stores defined like this :</p> | ||
| 652 | +<p><code>http://<b>en</b>.domain.com</code><br/><code>http://<b>fr</b>.domain.com</code></p> | ||
| 653 | +<p>By default opencart allows to change language but stay on same domain, if you enable this option and change the language, you will be redirected to the other domain. Also the hreflang links will be correctly updated with corresponding store url.</p> | ||
| 654 | +<p>This setting is using your stores configuration, so you have to configure the stores correctly to get this working, also note that this is not limited to subdomains, you could also use separate domains names for each language:</p> | ||
| 655 | +<p><code>http://<b>english-store</b>.com</code><br/><code>http://<b>french-store</b>.com</code></p> | ||
| 656 | +<p>If you make any modification on configuration in Settings > Stores, come back here and save settings again.</p> | ||
| 657 | +<h5>Actual configuration</h5> | ||
| 658 | +<p>In this section you can see how are actually binded your stores to each language, you must have only one store for each language in order to get this option working properly, if a store have no defined language you will get the message "<span class="text-danger">No language defined</span>", in this case it is necessary you define a language for this store in Settings > Stores.</p> | ||
| 659 | +'; | ||
| 660 | + | ||
| 661 | + | ||
| 662 | +// Error | ||
| 663 | +$_['error_permission'] = 'Ахтунг!!!: У вас нет прав для редактирования этого модуля!'; | ||
| 664 | +$_['error_module_disabled'] = 'Complete SEO Package полностью отключен, вы можете включить его в вкладке СЕО конфигурации.'; | ||
| 665 | +$_['error_friendly_disabled'] = 'Ахтунг!!!:: Компонент ЧПУ специальных страниц отключен, вы можете редактировать все значения, но они будут активны только тогда, когда вы активируете этот компонент в настройке СЕО'; | ||
| 666 | +$_['error_404_disabled'] = 'Ахтунг!!!:: Менеджер компонента 404 отключен, запись не найденных страниц будет активна только при активации этого компонента в настройке СЕО'; | ||
| 667 | +$_['error_absolute_disabled'] = 'Ахтунг!!!:: Абсолютный URL-адрес отключен, вы можете редактировать все значения, но они будут активны только при активации этого компонента в настройке СЕО'; | ||
| 668 | +$_['error_redirect_disabled'] = 'Ахтунг!!!:: Компонент перенаправления УРЛ отключен, вы можете редактировать все значения, но они будут активны только тогда, когда вы активируете этот компонент в настройке СЕО'; | ||
| 669 | +?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php | ||
| 2 | +// English Multilingual SEO Author: Sirius Dev | ||
| 3 | +// Heading | ||
| 4 | +$_['heading_title'] = '<img src="view/seo_package/img/icon.png" style="vertical-align:top;padding-right:4px"/><b style="color:#555">Complete</b> <b style="color:#11b209">SEO Package</b>'; | ||
| 5 | +$_['module_title'] = 'Complete SEO <span>Package</span>'; | ||
| 6 | + | ||
| 7 | +$_['text_store_select'] = 'Store'; | ||
| 8 | + | ||
| 9 | +// Dashboard | ||
| 10 | +$_['tab_seo_dashboard'] = 'Dashboard'; | ||
| 11 | +$_['text_seo_score'] = 'SEO Power'; | ||
| 12 | +$_['text_dashboard_config'] = 'SEO Overview'; | ||
| 13 | + | ||
| 14 | +// Tab multistore | ||
| 15 | +$_['tab_seo_multistore'] = 'Multistore'; | ||
| 16 | +$_['info_multistore_dashboard'] = 'Here you can define specific parameters each store.<br/><br/>If Multistore SEO component is enabled you can also set specific urls for each store products/categories/informations and the mass update tab will be available here.<br/><br/>Enabling Multistore component will insert new tables in your database to handle the multistore urls and seo data (titles, metas, etc.).'; | ||
| 17 | + | ||
| 18 | +// Tab seo editor | ||
| 19 | +$_['tab_seo_editor'] = 'SEO Editor'; | ||
| 20 | +$_['tab_seo_editor_product'] = 'Product'; | ||
| 21 | +$_['tab_seo_editor_category'] = 'Category'; | ||
| 22 | +$_['tab_seo_editor_information'] = 'Information'; | ||
| 23 | +$_['tab_seo_editor_manufacturer'] = 'Manufacturer'; | ||
| 24 | +$_['tab_seo_editor_image'] = 'Image'; | ||
| 25 | +$_['tab_seo_editor_absolute'] = 'Absolute Url'; | ||
| 26 | +$_['tab_seo_editor_common'] = 'Common Page Url'; | ||
| 27 | +$_['tab_seo_editor_special'] = 'Param Url'; | ||
| 28 | +$_['tab_seo_editor_redirect'] = 'Url Redirection'; | ||
| 29 | +$_['tab_seo_editor_404'] = '404 Manager'; | ||
| 30 | +$_['text_multistore'] = 'Multistore SEO'; | ||
| 31 | +$_['info_multistore'] = 'Give different SEO information (keyword, metas, etc) on products and categories for each store'; | ||
| 32 | +$_['text_editor_count'] = 'Count'; | ||
| 33 | +$_['text_editor_query'] = 'Query'; | ||
| 34 | +$_['text_editor_query_redirect'] = 'Query'; | ||
| 35 | +$_['text_editor_query_absolute'] = 'Full Query (value after route=)'; | ||
| 36 | +$_['text_editor_query_common'] = 'Query (value after route=)'; | ||
| 37 | +$_['text_editor_query_special'] = 'Query (ex: custom_id=1)'; | ||
| 38 | +$_['text_editor_image'] = 'Image'; | ||
| 39 | +$_['text_editor_name'] = 'Name'; | ||
| 40 | +$_['text_editor_title'] = 'Title'; | ||
| 41 | +$_['text_editor_meta_title'] = 'Meta title'; | ||
| 42 | +$_['text_editor_meta_keyword'] = 'Meta keyword'; | ||
| 43 | +$_['text_editor_meta_description'] = 'Meta description'; | ||
| 44 | +$_['text_editor_url'] = 'SEO url'; | ||
| 45 | +$_['text_editor_url_absolute'] = 'Full seo url'; | ||
| 46 | +$_['text_editor_url_redirect'] = 'Redirect to'; | ||
| 47 | +$_['text_editor_tag'] = 'Tags'; | ||
| 48 | +$_['text_editor_h1'] = 'Seo H1'; | ||
| 49 | +$_['text_editor_item_name'] = 'Product name'; | ||
| 50 | +$_['text_editor_image_name'] = 'Name'; | ||
| 51 | +$_['text_editor_image_alt'] = 'Alt'; | ||
| 52 | +$_['text_editor_image_title'] = 'Title'; | ||
| 53 | +$_['text_editor_related'] = 'Related'; | ||
| 54 | +$_['text_seo_new_alias_title'] = 'Insert new url alias'; | ||
| 55 | +$_['text_seo_new_absolute_alias_info'] = 'Rewrite an url in absolute way, for example index.php?route=<b>blog/blog&post_id=123</b><br/>In query field put <b>blog/blog&post_id=123</b> (insert only the value after index.php?route=)<br/>In SEO url field put the url you want: <b>blog/this-is-a-blog-post</b>'; | ||
| 56 | +$_['text_seo_new_alias_info'] = 'Rewrite an url that use the route parameter, for example index.php?route=<b>account/account</b><br/>In query field put <b>account/account</b> (it is not necessary to insert route=)<br/>In SEO url field put the url you want: <b>my-account</b>'; | ||
| 57 | +$_['text_seo_new_spec_alias_info'] = 'Rewrite urls that belongs to any custom module even if it is not made to handle friendly urls.<br/>For example index.php?<b>blog_news_id=123</b><br/>In query field put <b>blog_news_id=123</b><br/>In SEO url field put the url you want: <b>a-great-url-for-my-great-news</b>'; | ||
| 58 | +$_['text_seo_new_redirect'] = 'This generates a 301 redirection to indicate to search engines that the current url has been moved permanently to a new one. Use this feature to fix crawling errors from google webmaster.<br/><br/>In query type the full url <b>http://example.com/broken-url</b><br/>In redirect field put new url <b>http://example.com/fixed-url</b><br/><br/>Or without the domain name (don\'t forget the initial /)<br/>In query: <b>/broken-url</b><br/>In redirect field: <b>/fixed-url</b><br/><br/>Dynamic redirection<br/>If you want to make it work even with further url updates fill the redirect field that way:<br/><b>product/product&product_id=42</b> (where 42 is your actual product id)'; | ||
| 59 | +$_['text_info_limits_tab'] = 'Meta fields limits'; | ||
| 60 | +$_['text_info_limits_title'] = 'Meta title and description limits'; | ||
| 61 | +$_['text_info_robots'] = '<h4>Meta Robots</h4> | ||
| 62 | +<p>The robots meta tag lets you utilize a granular, page-specific approach to controlling how an individual page should be indexed and served to users in search results.<br/>The setting defined here will be the default one for all pages of your store, then you can edit a specific product to change the robots value (in data tab) for this product only.<br/>The meta robots parameter will be set in your page as meta tag in head section: <meta name="robots" /></p> | ||
| 63 | +<table class="table table-bordered"> | ||
| 64 | + <tbody><tr><th>Directive</th><th>Meaning</th></tr> | ||
| 65 | + <tr><td><code><span>all</span></code></td> | ||
| 66 | + <td>There are no restrictions for indexing or serving. Note: this | ||
| 67 | + directive is the default value and has no effect if explicitly | ||
| 68 | + listed, so when you choose this value the meta robots tag won\'t be displayed</td></tr> | ||
| 69 | + <tr><td><code><span>noindex</span></code></td> | ||
| 70 | + <td>Do not show this page in search results</td></tr> | ||
| 71 | + <tr><td><code><span>nofollow</span></code></td> | ||
| 72 | + <td>Do not follow the links on this page</td></tr> | ||
| 73 | + <tr><td><code><span>none</span></code></td> | ||
| 74 | + <td>Equivalent to <code><span>noindex,<wbr> nofollow</span></code></td></tr> | ||
| 75 | + <tr><td><code><span>noimageindex</span></code></td> | ||
| 76 | + <td>Do not index images on this page.</td></tr> | ||
| 77 | +</tbody></table> | ||
| 78 | +<h4>Automatic settings</h4> | ||
| 79 | +<p>Once enabled you will be able to define the default value for meta robots, and the module will automatically apply the best parameter for some specific pages, please see the following list to know which parameters are automatically set on your website:</p> | ||
| 80 | +<table class="table table-bordered"> | ||
| 81 | +<tr><th style="width:220px">Type</th><th>Meta robots value</th></tr> | ||
| 82 | +<tr><td>Pagination pages</td><td><code>noindex, follow</code></td></tr> | ||
| 83 | +<tr><td>Page with limit parameter</td><td><code>noindex, follow</code></td></tr> | ||
| 84 | +<tr><td>Search pages</td><td><code>none</code> (noindex, nofollow)</td></tr> | ||
| 85 | +</table> | ||
| 86 | +'; | ||
| 87 | +$_['text_info_limits'] = '<h4>Meta title and description limits</h4> | ||
| 88 | +<p>Meta title and description are very important since they are what the user will see when making a request on search engines, title as the main link and description the little text below.</p> | ||
| 89 | +<p><img src="view/seo_package/img/help/meta_title_desc.png" alt="" class="img-thumbnail"/></p> | ||
| 90 | +<p>Google is truncating your title after 67 characters but will index a few more, to get this easy to visualise the title field will become orange in case of bypassing 67 chars and red in case of bypassing 85 chars.<br/>The limit for description are ~300 chars for truncating and a bit more for indexing.</p> | ||
| 91 | +<p><span style="color:#fc7402">Orange color</span> means your text will surely be truncated but will be fully indexed anyway.<br /><span style="color:#f23333">Red color</span> means some words at the end of your text won\'t be indexed.</p> | ||
| 92 | +<p><b>Important:</b> default database field of opencart for meta description is limited to 255 chars, so if you want to have meta descriptions for 300 chars you should change the actual limit. To do so go into PHPMyAdmin > table oc_product_description > edit meta_description field and set 350 as the limit instead of 255.</p>'; | ||
| 93 | +$_['entry_analytics_code'] = 'Google Analytics code:'; | ||
| 94 | +$_['text_info_analytics_tab'] = 'Google Analytics'; | ||
| 95 | +$_['text_info_analytics'] = '<h4>Verify your website on Google Analytics</h4> | ||
| 96 | +<p>You can have detailled information of your website SEO using google analytics, for that connect to <a href="https://www.google.com/webmasters/">https://www.google.com/webmasters/</a> and click on ADD A PROPERTY, then choose the HTML tag verification method like on the image below.</p> | ||
| 97 | +<p><img src="view/seo_package/img/help/gg_analytics.png" alt="" class="img-thumbnail"/></p> | ||
| 98 | +<p>Copy the code given by google here to activate the verification of your website. Now you should be able to verify on google page.</p>'; | ||
| 99 | + | ||
| 100 | +// Tab seo configuration | ||
| 101 | +$_['tab_seo_options'] = 'SEO Configuration'; | ||
| 102 | +$_['text_seo_package_status'] = 'SEO Package status:'; | ||
| 103 | +$_['text_seo_components'] = 'Components:'; | ||
| 104 | +$_['text_seo_tab_general_1'] = 'Components'; | ||
| 105 | +$_['text_seo_tab_general_2'] = 'Language tag'; | ||
| 106 | +$_['text_seo_tab_general_3'] = 'Hreflang'; | ||
| 107 | +$_['text_seo_tab_general_4'] = 'Keyword options'; | ||
| 108 | +$_['text_seo_tab_general_5'] = 'Auto update'; | ||
| 109 | +$_['text_seo_tab_general_6'] = 'Pagination'; | ||
| 110 | +$_['text_seo_tab_general_7'] = 'Cache'; | ||
| 111 | +$_['text_seo_tab_general_8'] = 'Canonical links'; | ||
| 112 | +$_['text_seo_tab_general_9'] = ''; | ||
| 113 | +$_['text_seo_tab_general_10'] = 'Reviews'; | ||
| 114 | +$_['text_seo_tab_general_11'] = 'Request headers'; | ||
| 115 | +$_['text_seo_tab_general_12'] = 'Sitemap'; | ||
| 116 | +$_['text_seo_tab_general_13'] = 'Meta robots'; | ||
| 117 | +$_['text_seo_tab_general_14'] = 'Redirections'; | ||
| 118 | +$_['text_seo_tab_general_16'] = 'Modules SEO'; | ||
| 119 | +$_['text_info_general'] = 'These settings impact the global functioning of SEOs, they take effect immediately and can be changed at any time.'; | ||
| 120 | +$_['text_info_general_3'] = 'Hreflang tag allow search engines to know the url of current page for other languages.<br/>Once activated it will be included in all pages of your website, and also into the seo package sitemap (feed > seo package sitemap).<br/> More information : <a href="https://support.google.com/webmasters/answer/189077?hl=en" target="new">here</a>'; | ||
| 121 | +$_['text_info_general_6'] = 'Rewrite pagination links SEO friendly, for example website.com/category?page=3 will become website.com/category/page-3'; | ||
| 122 | +$_['text_info_general_7'] = 'The cache feature will speed up your website by caching all url links instead of calculating them each time.<br/>Warning: this feature is experimental and may not work on all configurations, if you have another cache module or cache integrated with your theme disable this option.'; | ||
| 123 | +$_['text_info_general_8'] = 'Canonical links are informing search engines that if it find a same page elsewhere on the website it have to only consider one link, this is important in order to avoid duplicate content penalties'; | ||
| 124 | +$_['text_info_general_10'] = 'In default opencart reviews are loaded dynamically by ajax, that make search engines to not see the content of reviews which would be valuable content for your website, enable this option to be able to insert a block containing the user reviews in HTML in order to make search engines to be able to see them.<br /><br />You have to insert manually this code in your product/product.tpl template : <b><?php echo $seo_reviews; ?></b><br /><br /> Then you can style it as you want, container class is <b>.seo_reviews</b>, item class is <b>.seo_review</b>'; | ||
| 125 | +$_['text_info_general_12'] = 'The sitemap have to be configured into feeds section, please click on the button below to configure it.'; | ||
| 126 | +$_['text_seopackage_sitemap'] = 'SEO Package Sitemap'; | ||
| 127 | +$_['text_seo_pagination'] = 'Enable SEO pagination<span class="help">Warning: this is not compatible with ajax pagination included some themes, if it doesn\'t work you will have to disable seo pagination or ajax pagination of the theme</span>'; | ||
| 128 | +$_['text_seo_pagination_fix'] = 'Prev/next fix:<span class="help">Fix opencart 2.2+ issue with prev/next in subcategories</span>'; | ||
| 129 | +$_['text_seo_pagination_canonical'] = 'Canonical with pagination:<span class="help">Set canonical link of pagination pages to include the page number (not recommended)</span>'; | ||
| 130 | +$_['text_seo_canonical'] = 'Canonical:<span class="help">Enable canonical for all pages</span>'; | ||
| 131 | +$_['text_seo_absolute'] = 'Absolute category path:'; | ||
| 132 | +$_['text_seo_absolute_help'] = 'Allow to use same keyword for sub-categories and something else (ex: <br/>/laptop/apple<br/>/desktop/apple<br/>/apple (manufacturer))<br/>If you give keyword for manufacturer, it cannot be used for top category (/apple and /apple), only subcategories'; | ||
| 133 | +$_['text_seo_reviews'] = 'SEO reviews:<span class="help">Insert reviews in HTML content</span>'; | ||
| 134 | +$_['text_seo_extension'] = 'Extension:<span class="help">Add the extension of your choice at the end of a product keyword (ex: .html)</span>'; | ||
| 135 | +$_['text_seo_flag_tag'] = 'Tag after domain'; | ||
| 136 | +$_['text_seo_flag_store'] = 'Tag as subdomain'; | ||
| 137 | +$_['text_seo_flag'] = 'Language tag mode:'; | ||
| 138 | +$_['text_seo_flag_short'] = 'Short tag:'; | ||
| 139 | +$_['text_seo_flag_upper'] = 'Tag in uppercase:'; | ||
| 140 | +$_['text_seo_flag_default'] = 'No tag for default:'; | ||
| 141 | +$_['text_seo_urlcache'] = 'URL Cache:<span class="help">Speed up page loading by using url caching</span>'; | ||
| 142 | +$_['text_seo_redirect_dynamic'] = 'Redirect dynamic links:<span class="help">Dynamic links (route=product/product&product_id=32) will be automatically redirected to their friendly url if it exists. The redirection is 301 so search engine will stop to index it and take only friendly url as reference.</span>'; | ||
| 143 | +$_['text_seo_redirect_canonical'] = 'Redirect to canonical:<span class="help">This is for friendly urls, it checks if the current link is the canonical link, if not it will be redirected to the canonical. This avoid to have multiple urls active for same item. The redirection is 301.</span>'; | ||
| 144 | +$_['text_seo_redirect_canonical_1'] = 'Redirect all links except category links'; | ||
| 145 | +$_['text_seo_redirect_canonical_2'] = 'Redirect all links including category links'; | ||
| 146 | +$_['text_seo_redirect_http'] = 'HTTP mode:<span class="help">Use this to force your website to use SSL or www, if an url is not correct a 301 redirection will be made.</span>'; | ||
| 147 | +$_['text_seo_redirect_ssl'] = 'Force SSL value, don\'t change WWW'; | ||
| 148 | +$_['text_seo_redirect_www'] = 'Force WWW value, don\'t change SSL'; | ||
| 149 | +$_['text_seo_redirect_sslwww'] = 'Force both SSL and WWW values'; | ||
| 150 | +$_['text_seo_redirect_http_1'] = 'No-SSL, no-WWW - http://example.com'; | ||
| 151 | +$_['text_seo_redirect_http_2'] = 'No-SSL, WWW - http://www.example.com'; | ||
| 152 | +$_['text_seo_redirect_http_3'] = 'SSL, no-WWW - https://example.com'; | ||
| 153 | +$_['text_seo_redirect_http_4'] = 'SSL, WWW - https://www.example.com'; | ||
| 154 | +$_['text_seo_redirect_http_5'] = 'SSL - https://(www.)example.com'; | ||
| 155 | +$_['text_seo_redirect_http_6'] = 'No-SSL - http://(www.)example.com'; | ||
| 156 | +$_['text_seo_redirect_http_7'] = 'WWW - http(s)://www.example.com'; | ||
| 157 | +$_['text_seo_redirect_http_8'] = 'No-WWW - http(s)://example.com'; | ||
| 158 | +$_['text_seo_special_group'] = 'Special price group:<span class="help">[price] tag can calculate the special price, define here which customer group you want to use for calculating it, if disabled then only default price will be displayed</span>'; | ||
| 159 | +$_['text_seo_format_tag'] = 'Tag formatting:<span class="help">Add commas between each words to product tags when generating in mass update or auto-update</span>'; | ||
| 160 | +$_['text_seo_banner'] = 'Banner links rewrite:<span class="help">Dynamically generate seo link on banners (used in banner, carousel, slideshow modules)</span>'; | ||
| 161 | +$_['text_seo_banner_help'] = 'In banners section, do not enter the seo link (/category/product_name) but enter instead the default opencart link : <b>index.php?route=product/product&path=10_21&product_id=54</b>.<br />You can also strip out the index.php, like this : <b>product/product&path=23&product_id=48</b>'; | ||
| 162 | +$_['text_seo_hreflang'] = 'Enable hreflang tag:'; | ||
| 163 | +$_['text_seo_substore'] = 'Enable multi-store rewriting:'; | ||
| 164 | +$_['text_seo_substore_config'] = 'Actual configuration:'; | ||
| 165 | +$_['text_no_language_defined'] = 'No language defined'; | ||
| 166 | +$_['text_info_transform'] = 'All these settings define the way that the keyword will be generated when saving an item or using the mass update.'; | ||
| 167 | +$_['text_seo_whitespace'] = 'Spaces:<span class="help">Replace space chars by...</span>'; | ||
| 168 | +$_['text_seo_lowercase'] = 'Lowercase:<span class="help">QWERTY => qwerty</span>'; | ||
| 169 | +$_['text_seo_remove'] = 'Remove words:<span class="help">Remove some words when generating the urls, can be used to remove common words like "the, a, ...", put a comma between each one</span>'; | ||
| 170 | +$_['text_seo_duplicate'] = 'Duplicates:<span class="help">Allow to use same keyword for distinct language version of an item</span>'; | ||
| 171 | +$_['text_seo_ascii'] = 'ASCII mode:<span class="help">Replace accentuated chars by their ascii equivalent<br/>"éàôï" => "eaoi"<br/>Supported languages: All latin (French, Italian, Spanish, etc), Arabic, Bulgarian, Croatian, Czech, German, Greek, Latvian, Lithunanian, Polish, Romanian, Russian, Serbian, Slovenian, Turkish, Ukrainian</span>'; | ||
| 172 | +$_['text_seo_autofill'] = 'Auto fill'; | ||
| 173 | +$_['text_seo_autofill_on'] = 'on:'; | ||
| 174 | +$_['text_seo_autofill_desc'] = 'Auto fill:<span class="help">If left the field blank on insert or edit, a value will be created automatically based on the pattern in mass update tab.<br/><br/>This works for : <br/>- products<br/>- categories<br/>- informations</span>'; | ||
| 175 | +$_['text_seo_autourl'] = 'Auto URL:<span class="help">If left blank on insert or edit, seo url keyword will be generated automatically using the parameter set in "Mass update" tab<br/>This works for products, categories and informations</span>'; | ||
| 176 | +$_['text_seo_autotitle'] = 'Auto title and desc for other langs:<span class="help">If left blank on insert or edit, titles and descriptions of other languages will copy the default language title and description<br/>This works for products, categories and informations</span>'; | ||
| 177 | +$_['text_headers_lastmod'] = 'Last-Modified:<span class="help">Add last modified date in headers</span>'; | ||
| 178 | +$_['text_all'] = 'All'; | ||
| 179 | +$_['text_insert'] = 'Insert'; | ||
| 180 | +$_['text_edit'] = 'Edit'; | ||
| 181 | +$_['text_fix_search'] = 'Fix search url:'; | ||
| 182 | +$_['text_fix_search_help'] = '<span class="help">Search url cannot be friendly for the top search bar because the url is hardcoded in javascript, enable this option if you want to have the search url rewritten. If it is not working with your theme please contact us.</span>'; | ||
| 183 | +$_['text_fix_cart'] = 'Fix cart remove issue:'; | ||
| 184 | +$_['text_fix_cart_help'] = '<span class="help">When there is friendly url for checkout/cart the remove of a product is not updating the current screen, enable this to fix this issue.</span>'; | ||
| 185 | + | ||
| 186 | +// Tab store seo | ||
| 187 | +$_['tab_seo_store'] = 'Store SEO'; | ||
| 188 | +$_['text_info_store'] = '<h4>Store SEO</h4> | ||
| 189 | +<p>In this section you can customize the meta title, h1, meta keywords and description on home page for each store and each language!</p><p>Anything entered here will bypass the values entered in opencart settings.</p> | ||
| 190 | +<h4>Meta Title prefix and suffix</h4> | ||
| 191 | +<p>Use this parameter to add some text before or after all your website meta titles, they can be defined for each store and each language.</p> | ||
| 192 | +<p>For example if you want to have your title like <b>"Product title | My store"</b> just put <b>" | My store"</b> in suffix.</p>'; | ||
| 193 | +$_['text_info_seo_titles_tab'] = 'SEO titles (H1, H2, H3)'; | ||
| 194 | +$_['text_info_seo_titles'] = '<h4>SEO titles (H1, H2, H3)</h4> | ||
| 195 | +<p>SEO titles are not automatically applied to your theme because this will be changing your design, so you have to manually insert them in your themplates.<br/><br/>Files to modify (.tpl or .twig):<br/><code style="padding:0">/catalog/view/theme/[theme]/template/common/home<br/>/catalog/view/theme/[theme]/template/product/product<br/>/catalog/view/theme/[theme]/template/product/category<br/>/catalog/view/theme/[theme]/template/product/information</code><br/><br/>Insert these codes for .tpl (please not $heading_title is automatically containing $seo_h1, so it is generally not necessary to put seo h1, just h2 and h3): <br/><code style="padding:0"><h1><?php echo $seo_h1; ?></h1><br/><h2><?php echo $seo_h2; ?></h2><br/><h3><?php echo $seo_h3; ?></h3></code><br/><br/>Or these codes for .twig (please not {{ heading_title }} is automatically containing {{ seo_h1 }}, so it is generally not necessary to put seo h1, just h2 and h3): <br/><code style="padding:0"><h1>{{ seo_h1 }}</h1><br/><h2>{{ seo_h2 }}</h2><br/><h3>{{ seo_h3 }}</h3></code><br/></p> | ||
| 196 | +<p>Consider that elements with display:none may not be considered by search engines, so you may want to insert only some of these depending your template (h1 is the most important).</p>'; | ||
| 197 | +$_['entry_robots'] = 'Enable meta robots'; | ||
| 198 | +$_['store_seo_global'] = 'Global settings'; | ||
| 199 | +$_['store_seo_home'] = 'Homepage only'; | ||
| 200 | +$_['entry_robots_default'] = 'Default value'; | ||
| 201 | +$_['entry_store_seo_title'] = 'Meta Title:'; | ||
| 202 | +$_['entry_store_seo_title_extra'] = 'Meta Title prefix and suffix:'; | ||
| 203 | +$_['entry_store_title'] = 'Title H1:'; | ||
| 204 | +$_['entry_store_h2'] = 'Title H2:'; | ||
| 205 | +$_['entry_store_h3'] = 'Title H3:'; | ||
| 206 | +$_['entry_store_desc'] = 'Meta Description:'; | ||
| 207 | +$_['entry_store_keywords'] = 'Meta Keywords:'; | ||
| 208 | +$_['info_store_heading'] = 'See information below to include in your theme'; | ||
| 209 | + | ||
| 210 | +// Tab rich snippets | ||
| 211 | +$_['tab_seo_snippets'] = 'Rich Snippets'; | ||
| 212 | +$_['text_seo_tab_snippet_1'] = 'Google Microdata (Rich Cards)'; | ||
| 213 | +$_['text_seo_tab_snippet_2'] = 'Facebook Open Graph'; | ||
| 214 | +$_['text_seo_tab_snippet_3'] = 'Twitter Card'; | ||
| 215 | +$_['text_seo_tab_snippet_3'] = 'Twitter Card'; | ||
| 216 | +$_['text_seo_tab_snippet_4'] = 'Google Publisher'; | ||
| 217 | +$_['tab_microdata_1'] = 'Product'; | ||
| 218 | +$_['tab_microdata_2'] = 'Organization'; | ||
| 219 | +$_['tab_microdata_3'] = 'Store'; | ||
| 220 | +$_['tab_microdata_4'] = 'Website'; | ||
| 221 | +$_['tab_microdata_5'] = 'Place'; | ||
| 222 | +$_['tab_microdata_6'] = 'Breadcrumbs'; | ||
| 223 | +$_['entry_snippet_pricerange'] = 'Price range:'; | ||
| 224 | +$_['entry_snippet_same_as'] = 'Same as:'; | ||
| 225 | +$_['entry_enable_microdata'] = 'Enable Google Microdata:'; | ||
| 226 | +$_['entry_microdata_search'] = 'Search box'; | ||
| 227 | +$_['entry_microdata_logo'] = 'Logo'; | ||
| 228 | +$_['entry_microdata_address'] = 'Address'; | ||
| 229 | +$_['entry_snippet_contact'] = 'Contacts'; | ||
| 230 | +$_['entry_microdata_gps'] = 'GPS coordinates'; | ||
| 231 | +$_['entry_gps_lat'] = 'Latitude'; | ||
| 232 | +$_['entry_gps_long'] = 'Longitude'; | ||
| 233 | +$_['entry_address_street'] = 'Street'; | ||
| 234 | +$_['entry_address_city'] = 'Locality'; | ||
| 235 | +$_['entry_address_region'] = 'Region'; | ||
| 236 | +$_['entry_address_code'] = 'Postal code'; | ||
| 237 | +$_['entry_address_country'] = 'Country'; | ||
| 238 | +$_['entry_email'] = 'Email'; | ||
| 239 | +$_['entry_phone'] = 'Phone'; | ||
| 240 | +$_['entry_product_data'] = 'Include product data:'; | ||
| 241 | +$_['entry_snippet_data'] = 'Include data:'; | ||
| 242 | +$_['entry_model'] = 'Model'; | ||
| 243 | +$_['entry_description'] = 'Description (based on meta description)'; | ||
| 244 | +$_['entry_reviews'] = 'Reviews'; | ||
| 245 | +$_['entry_upc'] = 'UPC'; | ||
| 246 | +$_['entry_mpn'] = 'MPN'; | ||
| 247 | +$_['entry_ean'] = 'EAN'; | ||
| 248 | +$_['entry_isbn'] = 'ISBN'; | ||
| 249 | +$_['entry_rating'] = 'Average rating'; | ||
| 250 | +$_['entry_manufacturer'] = 'Manufacturer'; | ||
| 251 | +$_['entry_brand'] = 'Manufacturer'; | ||
| 252 | +$_['entry_enable_opengraph'] = 'Enable Facebook Open Graph:'; | ||
| 253 | +$_['entry_opengraph_id'] = 'Facebook App ID:'; | ||
| 254 | +$_['entry_enable_tcard'] = 'Enable Twitter Card:'; | ||
| 255 | +$_['entry_twitter_nick'] = 'Twitter nickname (optional):'; | ||
| 256 | +$_['entry_twitter_home_type'] = 'Home page type:'; | ||
| 257 | +$_['entry_twitter_summary'] = 'Summary'; | ||
| 258 | +$_['entry_twitter_summary_large'] = 'Summary with large image'; | ||
| 259 | +$_['entry_enable_gpublisher'] = 'Enable Google Publisher:'; | ||
| 260 | +$_['entry_gpublisher_url'] = 'Google+ url:'; | ||
| 261 | + | ||
| 262 | + | ||
| 263 | +// Tab friendly urls | ||
| 264 | +$_['tab_seo_friendly'] = 'Friendly URLs'; | ||
| 265 | +$_['text_seo_export_urls'] = 'Export URLs'; | ||
| 266 | +$_['text_seo_export_urls_tooltip'] = 'Export Friendly URLs and send them to the developer for integration in official package'; | ||
| 267 | +$_['text_seo_reset_urls'] = 'Restore default URLs'; | ||
| 268 | +$_['text_seo_reset_urls_tooltip']= 'If the current language does not have predefined urls the module will load english version'; | ||
| 269 | +$_['text_info_friendly'] = 'Here you can manage the friendly urls, edit them as you want.<br/>You have also the possibility to add new url, it works for example for any custom module you installed, just fill the 1st field with the value in route (?route=mymodule/action) and the 2nd field with the keyword you want to appear in the url.'; | ||
| 270 | +$_['text_seo_friendly'] = 'Common Pages Urls'; | ||
| 271 | +$_['info_seo_friendly'] = 'Enable this component in order to rewrite urls for common pages urls and param urls'; | ||
| 272 | +$_['info_seo_absolute'] = 'Enable this component in order to use absolute urls'; | ||
| 273 | +$_['info_seo_404'] = 'Enable this component to activate the logging of 404 error pages'; | ||
| 274 | +$_['info_seo_redirect'] = 'Enable this component to activate 301 redirections'; | ||
| 275 | +$_['text_seo_cat_slash'] = 'Final slash on category'; | ||
| 276 | +$_['text_seo_cat_slash_help'] = 'Insert a final slash at the end of category urls'; | ||
| 277 | +$_['text_seo_redir_reviews'] = 'Redirect orhpan reviews:<span class="help">If a review page index.php?route=product/product/review is not accessed through ajax request then redirect 301 to the product page. This prevent these review snippet to be indexed.</span>'; | ||
| 278 | +$_['text_seo_remove_urls'] = 'Remove all entries'; | ||
| 279 | +$_['text_seo_remove_redirected'] = 'Remove redirected entries'; | ||
| 280 | +$_['text_seo_add_url'] = 'Add new entry'; | ||
| 281 | + | ||
| 282 | +// Tab full product path | ||
| 283 | +$_['tab_seo_fpp'] = 'Path Manager'; | ||
| 284 | +// Text | ||
| 285 | +$_['tab_fpp_product'] = 'Product'; | ||
| 286 | +$_['tab_fpp_category'] = 'Category'; | ||
| 287 | +$_['tab_fpp_manufacturer'] = 'Manufacturer'; | ||
| 288 | +$_['tab_fpp_search'] = 'Search/Tag'; | ||
| 289 | +$_['tab_fpp_common'] = 'Common'; | ||
| 290 | +$_['text_fpp_cat_canonical'] = 'Category canonical:'; | ||
| 291 | +$_['text_fpp_cat_mode_0'] = 'Direct link'; | ||
| 292 | +$_['text_fpp_cat_mode_1'] = 'Full path'; | ||
| 293 | +$_['text_fpp_cat_canonical_help'] = 'What kind of link you want to give to search engines ?<br/><b>Direct link</b>: /category (default)<br/><b>Full path</b>: /cat1/cat2/category<br/><br/>With direct link path mode the canonical is automatically set on directl link too'; | ||
| 294 | +$_['text_fpp_mode'] = 'Product path mode:'; | ||
| 295 | +$_['text_fpp_mode_0'] = 'Direct link'; | ||
| 296 | +$_['text_fpp_mode_1'] = 'Shortest path'; | ||
| 297 | +$_['text_fpp_mode_2'] = 'Largest path'; | ||
| 298 | +$_['text_fpp_mode_3'] = 'Manufacturer path'; | ||
| 299 | +$_['text_fpp_mode_4'] = 'Last category'; | ||
| 300 | +$_['text_fpp_slash'] = 'Final slash'; | ||
| 301 | +$_['text_fpp_slash_mode_0'] = 'No final slash'; | ||
| 302 | +$_['text_fpp_slash_mode_1'] = 'Final slash on categories'; | ||
| 303 | +$_['text_fpp_slash_mode_2'] = 'Final slash on all urls'; | ||
| 304 | +$_['text_fpp_slash_help'] = 'Insert a final slash on urls, this is matter of preference, there is no SEO impact.'; | ||
| 305 | + | ||
| 306 | +$_['text_fpp_bc_mode'] = 'Breadcrumbs mode:'; | ||
| 307 | +$_['text_fpp_breadcrumbs_fix'] = 'Breadcrumbs generator:'; | ||
| 308 | +$_['text_fpp_breadcrumbs_0'] = 'Default'; | ||
| 309 | +$_['text_fpp_breadcrumbs_1'] = 'Generate if empty'; | ||
| 310 | +$_['text_fpp_breadcrumbs_2'] = 'Always generate'; | ||
| 311 | + | ||
| 312 | +$_['text_fpp_mode_help'] = '<span class="help"><b>Direct link:</b> direct link to product, no category included (ex: /product_name), this is default opencart behaviour<br/> | ||
| 313 | + <b>Shortest path:</b> shortest path by default, can be altered by banned categories (ex: /category/product_name)<br/> | ||
| 314 | + <b>Largest path:</b> largest path by default, can be altered by banned categories (ex: /category/sub-category/product_name)<br/> | ||
| 315 | + <b>Last category:</b> only the last category of the product will be displayed, if you have a product in /category/sub-category/product_name the link will be /sub-category/product_name<br/> | ||
| 316 | + <b>Manufacturer path:</b> manufacturer path instead of categories (ex: /manufacturer/product_name)</span>'; | ||
| 317 | +$_['text_fpp_breadcrumbs_help'] = '<span class="help"><b>Default:</b> default opencart behaviour: will display breadcrumbs coming from categories<br/> | ||
| 318 | + <b>Generate if empty:</b> generate breadcrumbs only when it is not already available, so category breadcrumb is preserved (recommended)<br/> | ||
| 319 | + <b>Always generate:</b> overwrite also the category breadcrumbs, so the only breadcrumbs you will get is the one generated by the module<br/></span>'; | ||
| 320 | +$_['text_fpp_bypasscat'] = 'Rewrite product path in categories:'; | ||
| 321 | +$_['text_fpp_bypasscat_help'] = '<span class="help">If disabled, the product link from categories remains the same in order to preserve normal behaviour and breadcrumbs.<br/>If enabled, the product link from categories is overwritten with path generated by the module.<br>In any case canonical link is updated with good value so google will only see the url generated by the module for a given product.</span>'; | ||
| 322 | +$_['text_fpp_directcat'] = 'Category path mode:'; | ||
| 323 | +$_['text_fpp_directcat_help'] = 'What kind of link you want to display on your website ?<br/><b>Direct link</b>: /category<br/><b>Full path</b>: /cat1/cat2/category (default)'; | ||
| 324 | +$_['text_fpp_homelink'] = 'Rewrite home link:'; | ||
| 325 | +$_['text_fpp_homelink_help'] = '<span class="help">Set homepage link to mystore.com instead of mystore.com/index.php?route=common/home</span>'; | ||
| 326 | +$_['text_fpp_depth'] = 'Max levels:'; | ||
| 327 | +$_['text_fpp_depth_help'] = '<span class="help">Maximum category depth you want to display, for example if you have a product in /cat/subcat/subcat/product and set this option to 2 the link will become /cat/subcat/product<br/>This option works in largest and shortest path modes</span>'; | ||
| 328 | +$_['text_fpp_unlimited'] = 'Unlimited'; | ||
| 329 | +$_['text_fpp_brand_parent'] = 'Manufacturer parent:'; | ||
| 330 | +$_['text_fpp_brand_parent_help'] = '<span class="help">Include the manufacturers inside the manufacturer list url.<br/>For example if your manufacturer list is /brand, the manufacturer apple will appear this way /brand/apple instead of direct /apple</span>'; | ||
| 331 | +$_['text_fpp_remove_search'] = 'Remove search/tag parameters:'; | ||
| 332 | +$_['text_fpp_remove_search_help'] = '<span class="help">Remove the search or tag parameter (?search=something, ?tag=something) from product urls in search results (products urls only, not search page url itself)</span>'; | ||
| 333 | +$_['text_fpp_seo_tag'] = 'Seo tag:<span class="help">For tag urls (route=product/search&tag=something) define the keyword to use for nice url, for example if you set "tag" the result url will be /tag/something</span>, let empty to disable'; | ||
| 334 | +$_['entry_category'] = 'Banned categories:<span class="help">Choose the categories that will never be displayed in case of multiple paths</span>'; | ||
| 335 | + | ||
| 336 | +// Tab mass update | ||
| 337 | +$_['tab_seo_update'] = 'Mass Update'; | ||
| 338 | +$_['text_info_update'] = 'Be careful when using this function since it will overwrite all your keywords.<br/>You can use the simulate function to check the result before really update.<br/>Select the language flags to update only these languages.'; | ||
| 339 | +$_['text_cleanup'] = 'Clean up:<span class="help">Remove old urls in database, make a clean up if you have troubles with some urls</span>'; | ||
| 340 | +$_['text_cache'] = 'URL cache:<span class="help">Generate or delete url cache</span>'; | ||
| 341 | +$_['text_redirection'] = 'Dynamic redirection:<span class="help">Save all actual urls for further redirection, then you can change the seo keyword, google will keep the track.</span>'; | ||
| 342 | +$_['text_cache_create_btn']= 'Generate cache'; | ||
| 343 | +$_['text_redirect_create_btn']= 'Generate redirection'; | ||
| 344 | +$_['text_cache_delete_btn']= 'Clear cache'; | ||
| 345 | +$_['text_cleanup_btn'] = 'Clean up'; | ||
| 346 | +$_['text_cleanup_duplicate_btn'] = 'Remove duplicate url alias'; | ||
| 347 | +$_['text_cleanup_done'] = 'Clean up done, %d entries deleted'; | ||
| 348 | +$_['text_seo_languages'] = 'Select languages'; | ||
| 349 | +$_['text_seo_simulate'] = 'Simulation:<span class="help">No changes are made while this button is on</span>'; | ||
| 350 | +$_['text_seo_empty_only'] = 'Update empty values only:<span class="help">Check off to overwrite all values</span>'; | ||
| 351 | +$_['text_seo_redirect'] = 'Redirection'; | ||
| 352 | +$_['text_seo_redirect_mode'] = 'Url redirection:<span class="help">Automatically insert a redirection for old urls</span>'; | ||
| 353 | +$_['text_image_name_lang'] = 'Image names can be set in only one language, please choose one and click on generate again'; | ||
| 354 | +$_['text_enable'] = 'Enable'; | ||
| 355 | +$_['text_deleted'] = 'Deleted'; | ||
| 356 | + | ||
| 357 | +// Tab cron | ||
| 358 | +$_['tab_seo_cron'] = 'Cron'; | ||
| 359 | +$_['text_info_cron'] = 'You can make mass update using cron jobs, copy the file <b>seo_package_cli.php</b> from "_extra files" folder (preferably into a directory outside of web root) and configure your cron with the path to that file.<br/>The script will use the settings configured on this page.<br/>Warning: cron jobs may not be able generate unlimited items depending on your server limitations and number of items you have you may face error on using cron, it is recommended to use the "empty only" parameter to limit the number of items you are going to update using cron.<br/><br/>Use this cron command (must be adapted to your server php path):<br/>/[path_to_php]/php [path_to_your_root_folder]/seo_package_cli.php<br/><br/>Or this one for substores:<br/>/[path_to_php]/php [path_to_your_root_folder]/seo_package_cli.php store=X (replace X by the store ID)'; | ||
| 360 | +$_['text_seo_cron_update'] = 'Update:'; | ||
| 361 | +$_['text_clear_logs'] = 'Clear logs'; | ||
| 362 | +$_['text_tab_cron_1'] = 'Configuration'; | ||
| 363 | +$_['text_tab_cron_2'] = 'Report'; | ||
| 364 | +$_['text_cli_log_save'] = 'Save log file'; | ||
| 365 | +$_['text_cli_log_too_big'] = 'Your log file is too big (%s) to be displayed here - you can download it or clear it with buttons below'; | ||
| 366 | + | ||
| 367 | +// Tab about | ||
| 368 | +$_['tab_seo_about'] = 'About'; | ||
| 369 | + | ||
| 370 | +$_['text_nothing_changed'] = 'Zero items'; | ||
| 371 | +$_['text_seo_no_language'] = 'No language selected'; | ||
| 372 | +$_['text_seo_fullscreen'] = 'Fullscreen'; | ||
| 373 | +$_['text_seo_show_old'] = 'Display old value'; | ||
| 374 | +$_['text_seo_change_count'] = 'entries changed'; | ||
| 375 | +$_['text_seo_old_value'] = 'Old value'; | ||
| 376 | +$_['text_seo_new_value'] = 'New value'; | ||
| 377 | +$_['text_seo_item'] = 'Item'; | ||
| 378 | +$_['text_simulation'] = 'Simulation mode'; | ||
| 379 | +$_['text_write'] = 'Write mode'; | ||
| 380 | +$_['text_empty_only'] = 'Empty values only'; | ||
| 381 | +$_['text_all_values'] = 'All values'; | ||
| 382 | +$_['text_seo_update_info'] = '1. Enable or disable simulation mode<br/>2. Select if you want to update only empty items or all items<br/>3. Click on the Generate button of your choice<br/>4. Results will be displayed here'; | ||
| 383 | +$_['text_seo_simulation_mode'] = '<span>SIMULATION MODE</span><br/>No changes will be made to database'; | ||
| 384 | +$_['text_seo_write_mode'] = '<span>WRITE MODE</span><br/>Modifications will be saved'; | ||
| 385 | +$_['text_seo_product'] = 'Product'; | ||
| 386 | +$_['text_seo_category'] = 'Category'; | ||
| 387 | +$_['text_seo_manufacturer'] = 'Manufacturer'; | ||
| 388 | +$_['text_seo_information'] = 'Information'; | ||
| 389 | +$_['text_seo_cache'] = 'Name'; | ||
| 390 | +$_['text_seo_cleanup'] = 'Entry (url)'; | ||
| 391 | +$_['text_seo_type_product'] = 'Products'; | ||
| 392 | +$_['text_seo_type_category'] = 'Categories'; | ||
| 393 | +$_['text_seo_type_manufacturer'] = 'Manufacturers'; | ||
| 394 | +$_['text_seo_type_information'] = 'Informations'; | ||
| 395 | +$_['text_seo_type_redirect'] = 'Dynamic redirection'; | ||
| 396 | +$_['text_seo_mode_product'] = 'Products'; | ||
| 397 | +$_['text_seo_mode_category'] = 'Categories'; | ||
| 398 | +$_['text_seo_mode_manufacturer'] = 'Manufacturers'; | ||
| 399 | +$_['text_seo_mode_information'] = 'Informations'; | ||
| 400 | +$_['text_seo_mode_url_alias'] = 'Url Alias'; | ||
| 401 | +$_['text_seo_mode_duplicate'] = 'Remove duplicate'; | ||
| 402 | +$_['text_seo_type_redirection'] = 'Dynamic redirection'; | ||
| 403 | +$_['text_seo_type_report'] = 'Report'; | ||
| 404 | +$_['text_seo_type_cache'] = 'Cache'; | ||
| 405 | +$_['text_seo_type_cleanup'] = 'Clean up'; | ||
| 406 | +$_['text_seo_generator_product'] = 'Products:'; | ||
| 407 | +$_['text_seo_generator_product_desc'] = '<span class="help">Available patterns:<br/><b>[name]</b> : Product name<br/><b>[model]</b> : Model<br/><b>[category]</b> : Category name<br/><b>[brand]</b> : Brand name<br/><b>[desc]</b> : Description extract<br/><b>[desc_sentence]</b> : 1st sentence<br/><b>[current]</b> : Current value<br/><b>{aa|bb|cc}</b> : Random values<br/><b>{en}..{/en}</b> : Only for lang<br/><br/>Other : <b>[parent_category]</b> <b>[upc]</b> <b>[sku]</b> <b>[ean]</b> <b>[jan]</b> <b>[isbn]</b> <b>[mpn]</b> <b>[location]</b> <b>[price]</b> <b>[lang]</b> <b>[lang_id]</b> <b>[prod_id]</b> <b>[cat_id]</b></span>'; | ||
| 408 | +$_['text_seo_generator_category'] = 'Categories:'; | ||
| 409 | +$_['text_seo_generator_category_desc'] = '<span class="help">Available patterns:<br/><b>[name]</b> : Category name<br/><b>[desc]</b> : Description extract<br/><b>[current]</b> : Current value<br/><b>{aa|bb|cc}</b> : Random values<br/><b>{en}..{/en}</b> : Only for lang<br/><br/><b>[parent]</b> : Parent category name<br/><b>[lowest_price]</b> : Lowest product price<br/><b>[highest_price]</b> : Highest product price<br/><br/>Other : <b>[lang]</b> <b>[lang_id]</b> <b>[cat_id]</b></span>'; | ||
| 410 | +$_['text_seo_generator_information'] = 'Informations pages:'; | ||
| 411 | +$_['text_seo_generator_information_desc']= '<span class="help">Available patterns:<br/><b>[name]</b> : Information title<br/><b>[desc]</b> : Description extract<br/><b>[current]</b> : Current value<br/><b>{aa|bb|cc}</b> : Random values<br/><b>{en}..{/en}</b> : Only for lang<br/><br/>Other : <b>[lang]</b> <b>[lang_id]</b></span>'; | ||
| 412 | +$_['text_seo_generator_manufacturer'] = 'Manufacturers:'; | ||
| 413 | +$_['text_seo_generator_manufacturer_desc']= '<span class="help">Available patterns:<br/><b>[name]</b> : Manufacturer name<br/><b>[current]</b> : Current value<br/><b>{aa|bb|cc}</b> : Random values<br/><b>{en}..{/en}</b> : Only for lang</span>'; | ||
| 414 | +$_['text_seo_mode_url'] = 'SEO URLs'; | ||
| 415 | +$_['text_seo_generator_redirect'] = 'Generate dynamic redirections'; | ||
| 416 | +$_['text_seo_mode_title'] = 'Meta Title'; | ||
| 417 | +$_['seo_title_prefix'] = 'Prefix'; | ||
| 418 | +$_['seo_title_suffix'] = 'Suffix'; | ||
| 419 | +$_['text_seo_mode_h1'] = 'SEO H1'; | ||
| 420 | +$_['text_seo_mode_h2'] = 'SEO H2'; | ||
| 421 | +$_['text_seo_mode_h3'] = 'SEO H3'; | ||
| 422 | +$_['text_seo_mode_image_name'] = 'Image name'; | ||
| 423 | +$_['text_seo_mode_image_alt'] = 'Image alt'; | ||
| 424 | +$_['text_seo_mode_image_title'] = 'Image title'; | ||
| 425 | +$_['text_seo_mode_keyword'] = 'Meta Keywords'; | ||
| 426 | +$_['text_seo_mode_description'] = 'Meta Description'; | ||
| 427 | +$_['text_seo_mode_related'] = 'Related products'; | ||
| 428 | +$_['text_seo_mode_tag'] = 'Tags'; | ||
| 429 | +$_['text_seo_mode_create'] = 'Generate'; | ||
| 430 | +$_['text_seo_mode_delete'] = 'Delete'; | ||
| 431 | +$_['text_seo_report'] = 'Report'; | ||
| 432 | +$_['text_seo_generator_url'] = 'Generate URLs'; | ||
| 433 | +$_['text_seo_generator_title'] = 'Generate Meta Title'; | ||
| 434 | +$_['text_seo_generator_keywords'] = 'Generate Meta Keywords'; | ||
| 435 | +$_['text_seo_generator_desc'] = 'Generate Meta Description'; | ||
| 436 | +$_['text_seo_generator_full_desc'] = 'Generate Description'; | ||
| 437 | +$_['text_seo_generator_store_copy_i'] = 'Copy store data from default store'; | ||
| 438 | +$_['text_seo_generator_store_copy'] = 'Copy store SEO data'; | ||
| 439 | +$_['text_seo_generator_tag'] = 'Generate Tags'; | ||
| 440 | +$_['text_seo_generator_h1'] = 'Generate SEO H1'; | ||
| 441 | +$_['text_seo_generator_h2'] = 'Generate SEO H2'; | ||
| 442 | +$_['text_seo_generator_h3'] = 'Generate SEO H3'; | ||
| 443 | +$_['text_seo_generator_imgalt'] = 'Generate Image Alt'; | ||
| 444 | +$_['text_seo_generator_imgtitle'] = 'Generate Image Title'; | ||
| 445 | +$_['text_seo_generator_imgname'] = 'Generate Image Name'; | ||
| 446 | +$_['text_seo_generator_related'] = 'Generate Related Products'; | ||
| 447 | +$_['text_seo_generator_related_no'] = 'Qty:'; | ||
| 448 | +$_['text_seo_generator_related_relevance'] = 'Relevance (0-10):'; | ||
| 449 | +$_['text_seo_generator_related_samecat'] = 'Same category'; | ||
| 450 | +$_['text_query'] = 'Query'; | ||
| 451 | +$_['text_keyword'] = 'Keyword'; | ||
| 452 | +$_['text_status'] = 'Status'; | ||
| 453 | +$_['text_empty'] = 'Empty'; | ||
| 454 | +$_['text_duplicate'] = 'Duplicate'; | ||
| 455 | +$_['text_report'] = 'Report'; | ||
| 456 | +$_['text_url_alias_report_btn'] = 'Url alias report'; | ||
| 457 | + | ||
| 458 | +$_['text_seo_result'] = 'Result:'; | ||
| 459 | + | ||
| 460 | +$_['text_module'] = 'Modules'; | ||
| 461 | +$_['text_success'] = 'Success: You have modified module SEO module!'; | ||
| 462 | + | ||
| 463 | +$_['text_man_ext'] = 'Manufacturer extended'; | ||
| 464 | + | ||
| 465 | +$_['text_seo_confirm'] = 'Are you sure ?'; | ||
| 466 | +$_['text_description'] = 'Description'; | ||
| 467 | + | ||
| 468 | + | ||
| 469 | +// Full product path | ||
| 470 | + | ||
| 471 | +// Help sections | ||
| 472 | + | ||
| 473 | +$_['tab_info_request'] = 'Request headers'; | ||
| 474 | +$_['title_common_overview'] = 'Url components'; | ||
| 475 | +$_['text_info_common_overview'] = ' | ||
| 476 | +<p><b>Url components quick description, check dedicated section for more information.</b></p> | ||
| 477 | +<h4>Absolute url</h4> | ||
| 478 | +<p>Use this component to set friendly url to any custom module, works with full url instead of url keyword.</p> | ||
| 479 | +<p>http://website.com/index.php?<b>route=blog/blog&path=12&post=32</b> > http://website.com/<b>blog/blog-cat/this-is-a-blog-post</b></p> | ||
| 480 | +<h4>Common Page Url</h4> | ||
| 481 | +<p>Use this component to set friendly url to default opencart pages (account, contact, checkout, ...), handles only the route= parameter.</p> | ||
| 482 | +<p>http://website.com/index.php?<b>route=account/register</b> > http://website.com/<b>my-account/register</b></p> | ||
| 483 | +<h4>Param url</h4> | ||
| 484 | +<p>This component lists the seo url parameters from custom modules, so you can quick check them, you can create new parameters but it may not work on some modules so absolute url is recommended because it will work in any case.</p> | ||
| 485 | +<p>http://website.com/some-category?<b>super_filter=42</b> > http://website.com/some-category/<b>filter-blue</b></p> | ||
| 486 | +</ul>'; | ||
| 487 | +$_['text_info_absolute'] = ' | ||
| 488 | +<h4>Absolute Url - Handle any custom module url</h4> | ||
| 489 | +<p>Opencart is working by default with url keywords, for example <b>/desktop/pc/some-computer</b>, from this url opencart is searching in database each part to determine to what it relates (category, product, information, etc), then it will compute this link to an understandable one for the system which will look like <b>index.php?route=product/product&path=12_31&product_id=54</b>.</p> | ||
| 490 | +<p>With absolute url component you can define an url not using the keyword part but the full url itself, it is no use for product/information/categories etc but it can be very handy for making to work with any custom module.</p> | ||
| 491 | +<p>It is working with unlimited parameters in source url and unlimited levels in seo url.</p> | ||
| 492 | +<h4>Set up a new absolute url</h4> | ||
| 493 | +<p>Example, transform <b>http://website.com/index.php?route=blog/blog&post=32</b> into <b>http://website.com/blog/this-is-a-blog-post</b>.</p> | ||
| 494 | +<ol> | ||
| 495 | +<li>Click on <span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span></li> | ||
| 496 | +<li>Insert in query field <b>blog/blog&post=32</b> (do not insert index.php?route=)</li> | ||
| 497 | +<li>in Full seo url field <b>blog/this-is-a-blog-post</b></li> | ||
| 498 | +</ol> | ||
| 499 | +</ul>'; | ||
| 500 | +$_['text_info_common'] = ' | ||
| 501 | +<h4>Common Page Url - Give friendly url to default opencart pages (account, contact, checkout, ...)</h4> | ||
| 502 | +<p>By default opencart is not rewritting the common page urls, they remain this way <b>index.php?route=account/login</b>.</p> | ||
| 503 | +<p>With common page url component you can define an seo url for all these pages </p> | ||
| 504 | +<p>For example you can rewrite <b>index.php?route=account/register</b> to <b>register</b>, just put <b>account/register</b> in query (do not insert index.php?route=), and put <b>register</b> in seo url field.</p> | ||
| 505 | +<p>Here you can not insert any parameter, for example <b>account/register&param=value</b> won\'t work, you have to use absolute url for such link or insert the parameter into parameter url</p> | ||
| 506 | +<h4>Get predefined urls</h4> | ||
| 507 | +<p>Complete SEO comes with predefined urls for all common opencart pages, there various languages available and they will be automatically retrieved for current selected language if exists, if not it will get english urls instead.</p> | ||
| 508 | +<p>Warning: using restore default urls will replace all existent common page urls listed for current language.</p> | ||
| 509 | +<ol> | ||
| 510 | +<li>Click on <span class="gkd-badge"><i class="fa fa-caret-down"></i></span> on the bottom button to get access to advanced options.</li> | ||
| 511 | +<li>Then click on <span class="gkd-badge"><i class="fa fa-magic" style="color:#FB7C00"></i> Restore default URLs</span></li> | ||
| 512 | +<li>If the keywords are available for current language they will be displayed, if not english language will be displayed and you will have to translate.</li> | ||
| 513 | +<li>You translated a new language and want us to integrate in main package? then click on <span class="gkd-badge"><i class="fa fa-save" style="color:#4276D2"></i> Export URLs</span> and send us export file at support@geekodev.com</li> | ||
| 514 | +</ol> | ||
| 515 | +<h4>Set up a new common page url</h4> | ||
| 516 | +<p>Example, transform <b>http://website.com/index.php?route=account/register</b> into <b>http://website.com/my-account/register</b>.</p> | ||
| 517 | +<ol> | ||
| 518 | +<li>Click on <span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span></li> | ||
| 519 | +<li>Insert in query field <b>account/register</b> (do not insert route=)</li> | ||
| 520 | +<li>in Full seo url field <b>my-account/register</b></li> | ||
| 521 | +</ol> | ||
| 522 | +</ul>'; | ||
| 523 | +$_['text_info_special'] = ' | ||
| 524 | +<h4>Param url - Manage seo keywords of parameters in url</h4> | ||
| 525 | +<p>If you have a custom module which is handling seo keywords, its keywords will generally appear there, so you can easily give a look on them and change if necessary.</p> | ||
| 526 | +<p>If your custom module does not manage seo url automatically then it is recommended to use Absolute Url component to handle the urls. You can also use a combination of Common Page and Param url to handle it but Absolute url is easier for that, so this component is recommended only for view and not for url creation.</p> | ||
| 527 | +<h4>Set up a new redirection</h4> | ||
| 528 | +<p><span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span> click on this button and follow the instructions to set your url redirection.</p> | ||
| 529 | +</ul>'; | ||
| 530 | +$_['text_info_404'] = ' | ||
| 531 | +<h4>Not found (404) manager</h4> | ||
| 532 | +<p>This section lists all url accessed on your website that are actually not existant or that opencart system have not been able to forward to any content. For example when you arrive on such page:</p> | ||
| 533 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/not_found.png" alt=""/></p> | ||
| 534 | +<p>In such case Complete SEO Package will automatically save this url so you will be able to easily check all not found urls in this table and how many times they have been requested.</p> | ||
| 535 | +<h4>Create a redirection from a not found url</h4> | ||
| 536 | +<p>Click on the button <img src="view/seo_package/img/help/btn_plus.png"/> to a easily add a redirection for this url, once added your redirection will appear into "Url redirection" tab, and here the url will appear in <span class="text-success">green color</span> to indicate that this url already have a redirection.</p> | ||
| 537 | +<h4>Remove actual entries</h4> | ||
| 538 | +<p>These entries are for your information only, there is no impact to remove them, to do so just click on one of the following buttons:</p> | ||
| 539 | +<ul class="list-unstyled"> | ||
| 540 | +<li style="margin-top:12px"><span class="gkd-badge"><i class="fa fa-minus" style="color:#ED5555"></i> Remove redirected entries</span> this will remove all urls marked as <span class="text-success">green</span> which means any url that already have his redirection set</li> | ||
| 541 | +<li style="margin-top:12px"><span class="gkd-badge"><i class="fa fa-close" style="color:#ED5555"></i> Remove all entries</span> this will remove all urls in this table, marked green or not, don\'t worry this is not deleting the redirections made on these urls</li> | ||
| 542 | +</ul>'; | ||
| 543 | +$_['text_info_redirections'] = ' | ||
| 544 | +<h4>Url redirection</h4> | ||
| 545 | +<p>Here you can define your own URL redirections, this is using the redirection 301, it means search engines will consider the new url as the valid one.</p> | ||
| 546 | +<p>If you need to change the URL of a page as it is shown in search engine results, we recommend that you use a server-side 301 redirect. This is the best way to ensure that users and search engines are directed to the correct page. The 301 status code means that a page has permanently moved to a new location.</p> | ||
| 547 | +<p>301 redirects are particularly useful if you have any url not found on your website.</p> | ||
| 548 | +<h4>Set up a new redirection</h4> | ||
| 549 | +<p><span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span> click on this button and follow the instructions to set your url redirection.</p>'; | ||
| 550 | +$_['text_info_request'] = '<h4>Request headers</h4> | ||
| 551 | +<p>Request headers are part of the HTTP protocol, they are sent on each request made to the server.<br/>Here you will be able to change some parameters related to request headers, such optimizations can improve performance for the end user and also for search engine crawling robots.</p> | ||
| 552 | +<h5>Last-Modified</h5> | ||
| 553 | +<p>Include the last modified date of the actual item, improves performance for user (browser will fetch page from cache if not updated) and for crawling robots. For products the date will be the one of the last edit of product or the one of the last review if any. It is highly recommended to activate this setting.</p><p><img class="img-thumbnail" src="view/seo_package/img/help/headers-last-modified.png" alt=""/></p>'; | ||
| 554 | +$_['help_fb_appid_tab'] = 'Facebook App ID'; | ||
| 555 | +$_['help_microdata'] = ' | ||
| 556 | +<h4>Google microdata</h4> | ||
| 557 | +<p>Microdata is widely used by search engines to format the search result in better way, for example a product can display the price and review rating directly in search results : </p> | ||
| 558 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/microdata-product.jpg" alt=""/></p> | ||
| 559 | +<p>Complete SEO Package is using the latest JSON-LD format to include the microdata on your website. Basic informations are included (category, description, image, price, stock) and you can select extra data you want to display.</p> | ||
| 560 | +<h4>Benefits of using microdata</h4> | ||
| 561 | +<p><ul> | ||
| 562 | + <li>Eye catching results - Drawing a search users attention from your competitors and to your own result.</li> | ||
| 563 | + <li>Potential CTR increase - Possibly increasing click through rates and lowering the chance of the user bouncing as they have more information on the page before clicking through.</li> | ||
| 564 | + <li>Providing quality results - Offering results that are closer to user specifications.</li> | ||
| 565 | +</ul></p> | ||
| 566 | +<h4>Testing tool</h4> | ||
| 567 | +<p>Use the following testing tool to check your actual microdata: <a href="https://search.google.com/structured-data/testing-tool" target="_blank">Google structured data testing tool</a></p> | ||
| 568 | +'; | ||
| 569 | +$_['help_fb_appid'] = ' | ||
| 570 | +<h4>Facebook App ID</h4> | ||
| 571 | +<p>You must fill your facebook App ID in order to get this feature working, you will find it in the settings of your developper panel: <a href="http://facebook.com/developers">http://facebook.com/developers</a>.</p> | ||
| 572 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/settings_app-id.gif" alt=""/></p> | ||
| 573 | +'; | ||
| 574 | +$_['help_fb_setup_tab'] = 'How to use Facebook Opengraph'; | ||
| 575 | +$_['help_fb_setup'] = ' | ||
| 576 | +<h4>Install the Facebook Developer Application</h4> | ||
| 577 | +<p>The first step in creating an application in Facebok is to install the Facebook Developer application.</p> | ||
| 578 | +<p>To do that, log in to Facebook and then visit the URL <a href="http://facebook.com/developers">http://facebook.com/developers</a>.</p> | ||
| 579 | +<p>If this is the first time you’ve installed the Developer Application, you will see the Request for Permission dialog show below:</p> | ||
| 580 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/permission.jpg" alt="" /></p> | ||
| 581 | +<p>Click the <b>Allow</b> button to proceed.</p> | ||
| 582 | +<h4>Creating the Facebook Application for your Website</h4> | ||
| 583 | +<p>Now that you have the Developer App installed, click on the<b> Create New App</b> button.<br/><img class="img-thumbnail" src="view/seo_package/img/help/create-new-app.gif" alt=""/></p> | ||
| 584 | +<p>Give your application an "App Display Name" (the name displayed to users).</p> | ||
| 585 | +<p>For purposes of this tutorial, you don’t need to have a "Namespace".</p> | ||
| 586 | +<p>Click the "I agree to Facebook Platform Policies" box; then click the <b>Continue</b> button.<br/><img class="img-thumbnail" src="view/seo_package/img/help/dialog_new-app.gif" alt=""/></p> | ||
| 587 | +<p>On the next screen, enter the security phrase and then click <b>Submit</b>.</p> | ||
| 588 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/new-app_captcha.gif" alt=""/></p> | ||
| 589 | +<p>There are a lot of options you can tweak related to your application. In this post, we are going to focus on the basics needed to get your website set up with a Facebook App ID.</p> | ||
| 590 | +<h4>The Settings Tab</h4> | ||
| 591 | +<p>This is where you do the basic set up for your app</p> | ||
| 592 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/settings_app-id.gif" alt=""/></p> | ||
| 593 | +<p>App ID is now set up. Your App ID is the value you’ll be using to integrate your website with Facebook’s APIs so you can add the Social Plugins (Like Button, Send Button, Comments Box, etc.).</p> | ||
| 594 | +<p>You don’t need to add an icon. If your website has a favicon, it will be displayed next to your site’s URL in Facebook Insights.</p> | ||
| 595 | +<p><b>Basic info:</b></p> | ||
| 596 | +<p><ul> | ||
| 597 | +<li><b>App Display Name:</b> Make this the same as the original value you provided</li> | ||
| 598 | +<li><b>App Namespace:</b> Leave blank</li> | ||
| 599 | +<li><b>Contact Email:</b> Where you want Facebook to send emails regarding your app</li> | ||
| 600 | +<li><b>App Domain:</b> just put “mydomain.com” where “mydomain.com” is your website’s domain URL (TLD)</li> | ||
| 601 | +<li><b>Category:</b> Select a category from the pulldown list (optional)</li> | ||
| 602 | +</ul></p> | ||
| 603 | +<p>Your website is now an “object” in Facebook’s Open Graph, with its own App ID.</p> | ||
| 604 | +'; | ||
| 605 | +$_['help_flag_mode'] = ' | ||
| 606 | +<h4>Tag after domain</h4> | ||
| 607 | +<p>Language prefix mode permits to add the language code just after the domain name:</p> | ||
| 608 | +<p><code>http://example.com/<b>en</b></code><br/><code>http://example.com/<b>fr</b></code> | ||
| 609 | +<p>It can be useful to have a good separation between each language in multilingual websites.</p> | ||
| 610 | +<p>This parameter can be enabled anytime and take effect immediately, there is no need to re-generate the urls.</p> | ||
| 611 | +<h4>Extra options</h4> | ||
| 612 | +<table class="table table-bordered"> | ||
| 613 | +<tr><th style="width:220px">Option</th><th>Effect</th></tr> | ||
| 614 | +<tr><td><code>Short tag</code></td><td>Display <b>/en</b> instead of <b>/en-gb</b> in case you have full format defined</td></tr> | ||
| 615 | +<tr><td><code>No tag for default</code></td><td>Default language won\'t display the language tag</td></tr> | ||
| 616 | +<tr><td><code>Tag in uppercase</code></td><td>Display tag in uppercase <b>/EN, /FR</b></td></tr> | ||
| 617 | +</table> | ||
| 618 | +'; | ||
| 619 | +$_['help_store_mode'] = ' | ||
| 620 | +<h4>Tag as subdomain</h4> | ||
| 621 | +<p>Enable this option if you want your links to be written with specific store depending the language. For example if you have 2 stores defined like this :</p> | ||
| 622 | +<p><code>http://<b>en</b>.domain.com</code><br/><code>http://<b>fr</b>.domain.com</code></p> | ||
| 623 | +<p>By default opencart allows to change language but stay on same domain, if you enable this option and change the language, you will be redirected to the other domain. Also the hreflang links will be correctly updated with corresponding store url.</p> | ||
| 624 | +<p>This setting is using your stores configuration, so you have to configure the stores correctly to get this working, also note that this is not limited to subdomains, you could also use separate domains names for each language:</p> | ||
| 625 | +<p><code>http://<b>english-store</b>.com</code><br/><code>http://<b>french-store</b>.com</code></p> | ||
| 626 | +<p>If you make any modification on configuration in Settings > Stores, come back here and save settings again.</p> | ||
| 627 | +<h5>Actual configuration</h5> | ||
| 628 | +<p>In this section you can see how are actually binded your stores to each language, you must have only one store for each language in order to get this option working properly, if a store have no defined language you will get the message "<span class="text-danger">No language defined</span>", in this case it is necessary you define a language for this store in Settings > Stores.</p> | ||
| 629 | +'; | ||
| 630 | + | ||
| 631 | + | ||
| 632 | +// Error | ||
| 633 | +$_['error_permission'] = 'Warning: You do not have permission to modify this module!'; | ||
| 634 | +$_['error_module_disabled'] = 'Complete SEO Package is currently disabled, you can enable it in SEO Configuration tab.'; | ||
| 635 | +$_['error_friendly_disabled'] = 'Warning: Common Page Url component is disabled, you can edit all values but they will be active on front only when you activate this component in SEO Configuration'; | ||
| 636 | +$_['error_404_disabled'] = 'Warning: 404 Manager component is disabled, the logging of not found pages will be active only when you activate this component in SEO Configuration'; | ||
| 637 | +$_['error_absolute_disabled'] = 'Warning: Absolute Url component is disabled, you can edit all values but they will be active on front only when you activate this component in SEO Configuration'; | ||
| 638 | +$_['error_redirect_disabled'] = 'Warning: Url Redirection component is disabled, you can edit all values but they will be active on front only when you activate this component in SEO Configuration'; | ||
| 639 | +?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php | ||
| 2 | +// Heading | ||
| 3 | +if (file_exists(DIR_APPLICATION . 'model/tool/seo_package.php')) { | ||
| 4 | + $_['heading_title'] = '<img src="view/seo_package/img/icon.png" style="vertical-align:top;padding-right:4px"/> <b style="color:#11b209">SEO Package</b> <b style="color:#555">Sitemap</b>'; | ||
| 5 | +} else { | ||
| 6 | + $_['heading_title'] = '<i class="fa fa-sitemap" style="color:#11b209"></i> <b>Advanced</b> <b style="color:#11b209">Sitemap Generator</b>'; | ||
| 7 | +} | ||
| 8 | + | ||
| 9 | +// Text | ||
| 10 | +$_['text_feed'] = 'Product Feeds'; | ||
| 11 | +$_['text_add_feed'] = 'New feed'; | ||
| 12 | +$_['text_success'] = 'Success: options have been saved'; | ||
| 13 | +$_['text_info'] = 'This sitemap does not contains duplicates and integrates the hreflang tag if enabled in seo package options.'; | ||
| 14 | +$_['text_minute'] = 'Minute(s)'; | ||
| 15 | +$_['text_hour'] = 'Hour(s)'; | ||
| 16 | +$_['text_day'] = 'Day(s)'; | ||
| 17 | +$_['entry_data_feed'] = 'Full Feed:<span class="help">Feed containing all languages using hreflang tag (hreflang will be displayed in case of more than one language)</span>'; | ||
| 18 | +$_['entry_lang_feed'] = 'Lang based feeds:<span class="help">Use these if you prefer separate language version</span>'; | ||
| 19 | +$_['entry_grid_feed'] = 'Grid product feeds:<span class="help">A grid of product thumbnails</span>'; | ||
| 20 | + | ||
| 21 | +// Tabs | ||
| 22 | +$_['text_tab_0'] = 'Sitemaps'; | ||
| 23 | +$_['tab_opt_1'] = 'Feed configuration'; | ||
| 24 | +$_['tab_opt_2'] = 'Advanced options'; | ||
| 25 | +$_['entry_feed_title'] = 'Name:'; | ||
| 26 | +$_['entry_cache_delay'] = 'Cache Delay'; | ||
| 27 | +$_['entry_cache_delay_help'] = 'How many time to display generated file until re-generation ?'; | ||
| 28 | +$_['entry_language'] = 'Language:<span class="help"></span>'; | ||
| 29 | +$_['entry_feed_url'] = 'Sitemap Url:<span class="help">Give this url to google or bing</span>'; | ||
| 30 | + | ||
| 31 | +$_['text_tab_1'] = 'Custom links'; | ||
| 32 | + | ||
| 33 | +// Configuration | ||
| 34 | +$_['text_tab_2'] = 'Configuration'; | ||
| 35 | + | ||
| 36 | +$_['text_link_type'] = 'Link type'; | ||
| 37 | +$_['text_type_product'] = 'Product'; | ||
| 38 | +$_['text_type_category'] = 'Category'; | ||
| 39 | +$_['text_type_manufacturer'] = 'Brand'; | ||
| 40 | +$_['text_type_information'] = 'Information'; | ||
| 41 | +$_['text_type_custom'] = 'Custom link'; | ||
| 42 | +$_['text_type_journal'] = 'Journal blog'; | ||
| 43 | + | ||
| 44 | +$_['entry_status'] = 'Status'; | ||
| 45 | +$_['entry_priority'] = 'Priority'; | ||
| 46 | +$_['entry_freq'] = 'Change frenquency'; | ||
| 47 | +$_['entry_in_stock'] = 'Include only in stock products:<span class="help">If disabled all products are included, if enabled only product with quantity >= 1</span>'; | ||
| 48 | +$_['entry_item_no'] = 'Number of items per xml:<span class="help">How many urls do you want to display in each xml file, default is 500'; | ||
| 49 | +$_['entry_friendly_url'] = 'Friendly URL:<span class="help">Display this sitemap in http://example.com/sitemap.xml instead of the default opencart sitemap</span>'; | ||
| 50 | +$_['entry_display_img'] = 'Display image thumb in feed:<span class="help">This is for viewing only, the image is still included for search engines</span>'; | ||
| 51 | +$_['entry_include_img'] = 'Include main image in feed:<span class="help">Include main product image into your feed? This is better if you want to be found via google image search</span>'; | ||
| 52 | +$_['entry_additional_img'] = 'Include additional images:<span class="help">Include additional product images into your feed? This is better if you want to be found via google image search</span>'; | ||
| 53 | + | ||
| 54 | +$_['text_freq_always'] = 'Always'; | ||
| 55 | +$_['text_freq_hourly'] = 'Hourly'; | ||
| 56 | +$_['text_freq_daily'] = 'Daily'; | ||
| 57 | +$_['text_freq_weekly'] = 'Weekly'; | ||
| 58 | +$_['text_freq_monthly'] = 'Monthly'; | ||
| 59 | +$_['text_freq_yearly'] = 'Yearly'; | ||
| 60 | +$_['text_freq_never'] = 'Never'; | ||
| 61 | + | ||
| 62 | +$_['text_tab_about'] = 'About'; | ||
| 63 | + | ||
| 64 | +// Entry | ||
| 65 | + | ||
| 66 | +// Error | ||
| 67 | +$_['error_permission'] = 'Warning: You do not have permission to modify SEO Package Sitemap feed!'; | ||
| 68 | +?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php | ||
| 2 | +// Русский перевод модуля от Alexius http://alexius.esy.es/ | ||
| 3 | +// Заголовок | ||
| 4 | +$_['heading_title'] = '<strong style="color:#41637d">DEV-OPENCART.COM —</strong> <b>Complete SEO Package</b> <a href="https://dev-opencart.com" target="_blank" title="Dev-opencart.com - Модули и шаблоны для Opencart"><img style="margin-left:15px;height:35px;margin-top:10px;margin-bottom:10px;" src="https://dev-opencart.com/logob.svg" alt="Dev-opencart.com - Модули и шаблоны для Opencart"/></a>'; | ||
| 5 | +$_['module_title'] = 'Complete SEO <span>Package</span>'; | ||
| 6 | + | ||
| 7 | + | ||
| 8 | +$_['text_store_select'] = 'Магазин'; | ||
| 9 | + | ||
| 10 | +// Dashboard | ||
| 11 | +$_['tab_seo_dashboard'] = 'Панель состояния'; | ||
| 12 | +$_['text_seo_score'] = 'SEO Мощность'; | ||
| 13 | +$_['text_dashboard_config'] = 'SEO Обзор'; | ||
| 14 | + | ||
| 15 | +// Таб seo эдитор | ||
| 16 | +$_['tab_seo_editor'] = 'SEO Редактор'; | ||
| 17 | +$_['tab_seo_editor_product'] = 'Товар'; | ||
| 18 | +$_['tab_seo_editor_category'] = 'Категория'; | ||
| 19 | +$_['tab_seo_editor_information'] = 'Информация'; | ||
| 20 | +$_['tab_seo_editor_manufacturer'] = 'Производитель'; | ||
| 21 | +$_['tab_seo_editor_image'] = 'Картинка'; | ||
| 22 | +$_['tab_seo_editor_absolute'] = 'Абсолютная ссылка'; | ||
| 23 | +$_['tab_seo_editor_common'] = 'Простая страница'; | ||
| 24 | +$_['tab_seo_editor_special'] = 'Специальные страницы'; | ||
| 25 | +$_['tab_seo_editor_redirect'] = 'Url переадресация'; | ||
| 26 | +$_['tab_seo_editor_404'] = 'Менеджер 404'; | ||
| 27 | +$_['text_multistore'] = 'Мультимагазинное SEO'; | ||
| 28 | +$_['info_multistore'] = 'Предоставляйте различные сведения о SEO (ключевое слово, мета и т. Д.) По продуктам и категориям для каждого магазина'; | ||
| 29 | +$_['text_editor_count'] = 'Счетчик'; | ||
| 30 | +$_['text_editor_query'] = 'Запрос'; | ||
| 31 | +$_['text_editor_query_redirect'] = 'Запрос'; | ||
| 32 | +$_['text_editor_query_absolute'] = 'Полный запрос (значение после route=)'; | ||
| 33 | +$_['text_editor_query_common'] = 'Запрос (значение после route=)'; | ||
| 34 | +$_['text_editor_query_special'] = 'Запрос (прим: custom_id=1)'; | ||
| 35 | +$_['text_editor_image'] = 'Какртинка'; | ||
| 36 | +$_['text_editor_name'] = 'Имя'; | ||
| 37 | +$_['text_editor_title'] = 'Тайтл'; | ||
| 38 | +$_['text_editor_meta_title'] = 'Мета Тайтл'; | ||
| 39 | +$_['text_editor_meta_keyword'] = 'Мета кейворд'; | ||
| 40 | +$_['text_editor_meta_description'] = 'Мета описание'; | ||
| 41 | +$_['text_editor_url'] = 'ЧПУ'; | ||
| 42 | +$_['text_editor_url_absolute'] = 'Полная СЕО ссылка'; | ||
| 43 | +$_['text_editor_url_redirect'] = 'Переадресация в'; | ||
| 44 | +$_['text_editor_tag'] = 'Теги'; | ||
| 45 | +$_['text_editor_h1'] = 'СЕО H1'; | ||
| 46 | +$_['text_editor_item_name'] = 'Название товара'; | ||
| 47 | +$_['text_editor_image_name'] = 'Название'; | ||
| 48 | +$_['text_editor_image_alt'] = 'Альт'; | ||
| 49 | +$_['text_editor_image_title'] = 'Тайтл'; | ||
| 50 | +$_['text_editor_related'] = 'Рекомендуемое'; | ||
| 51 | +$_['text_seo_new_alias_title'] = 'Новая ссылка'; | ||
| 52 | +$_['text_seo_new_absolute_alias_info'] = 'Переписать все ссылки на абсолютный путь, например index.php?route=<b>blog/blog&post_id=123</b><br/>В поле запроса вставьте <b>blog/blog&post_id=123</b> (вставляйте только значение после index.php?route=)<br/>В поле СЕО ссылки вставляйте только значение, котрое вы хотите: <b>blog/this-is-a-blog-post</b>'; | ||
| 53 | +$_['text_seo_new_alias_info'] = 'Переписать ссылку использующие параметр маршрута (rout), например index.php?route=<b>account/account</b><br/>В запросе вставьте <b>account/account</b> | ||
| 54 | +(нет необходимости вставлять route=)<br/>В поле ЧПУ вставьте нужное значение: <b>my-account</b>'; | ||
| 55 | +$_['text_seo_new_spec_alias_info'] = 'Переписывайте URL-адреса, относящиеся к любому настраиваемому модулю, даже если он не предназначен для обработки дружественных URL-адресов.<br/>Например index.php?<b>blog_news_id=123</b> | ||
| 56 | +<br/>В поле запроса пишите <b>blog_news_id=123</b><br/>В поле ЧПУ нужный параметр: <b>a-great-url-for-my-great-news</b>'; | ||
| 57 | +$_['text_seo_new_redirect'] = 'Это генерирует 301 переадресацию, чтобы указать поисковым машинам, что текущий URL-адрес был перенесен на новый. Используйте эту функцию, чтобы исправить ошибки сканирования с веб-мастера google.<br/> | ||
| 58 | +<br/>В поле запроса полная ссылка: <b>http://example.com/broken-url</b><br/>В поле переадресации новая ссылка: <b>http://example.com/fixed-url</b><br/><br/>Или без имени домена (не зубудьте в начале слеш: /)<br/> | ||
| 59 | +В запросе: <b>/broken-url</b><br/>В переадресации: <b>/fixed-url</b><br/><br/>Динамическое перенаправление<br/>Если вы хотите, чтобы он работал даже с дополнительными обновлениями URL-адресов, заполните поле перенаправления таким образом:<br/> | ||
| 60 | +<b>product/product&product_id=42</b> (где 42 это актуальный айди товара)'; | ||
| 61 | +$_['text_info_limits_tab'] = 'Пределы метаданных'; | ||
| 62 | +$_['text_info_limits_title'] = 'Пределы тайтлов и описания'; | ||
| 63 | +$_['text_info_robots'] = '<h4>Мета-роботы</h4> | ||
| 64 | +<p>Метатег роботов позволяет использовать гранулированный, зависящий от страницы подход к управлению тем, как индивидуальная страница должна индексироваться и обслуживаться пользователям в результатах поиска.<br/> | ||
| 65 | +Установленный здесь параметр будет по умолчанию для всех страниц вашего магазина, тогда вы можете отредактировать конкретный продукт, чтобы изменить значение робота (на вкладке данных) только для этого продукта.<br/> | ||
| 66 | +Параметр meta robots будет установлен на вашей странице как метатег в разделе главы: <meta name="robots" /></p> | ||
| 67 | +<table class="table table-bordered"> | ||
| 68 | + <tbody><tr><th>Значение</th><th>Директивы</th></tr> | ||
| 69 | + <tr><td><code><span>all</span></code></td> | ||
| 70 | + <td>Нет никаких ограничений на индексацию или обслуживание. Примечание: эта директива является значением по умолчанию и не имеет никакого эффекта, если явно указано, поэтому, когда вы выберете это значение, | ||
| 71 | + метка мета-роботов не будет отображаться</td></tr> | ||
| 72 | + <tr><td><code><span>noindex</span></code></td> | ||
| 73 | + <td>Не показывать эту сраницу в поиске</td></tr> | ||
| 74 | + <tr><td><code><span>nofollow</span></code></td> | ||
| 75 | + <td>Не переходить по ссылкам на этой странице</td></tr> | ||
| 76 | + <tr><td><code><span>none</span></code></td> | ||
| 77 | + <td>Эквивалент <code><span>noindex,<wbr> nofollow</span></code></td></tr> | ||
| 78 | + <tr><td><code><span>noimageindex</span></code></td> | ||
| 79 | + <td>Не индексировать картинки на этой старнице.</td></tr> | ||
| 80 | +</tbody></table> | ||
| 81 | +<h4>Автоматические настройки</h4> | ||
| 82 | +<p>После включения вы сможете определить значение по умолчанию для мета-роботов, и модуль автоматически применит лучший параметр для некоторых конкретных страниц, см. Следующий список, чтобы узнать, какие параметры автоматически устанавливаются на вашем веб-сайте:</p> | ||
| 83 | +<table class="table table-bordered"> | ||
| 84 | +<tr><th style="width:220px">Тип</th><th>Значения мета роботс</th></tr> | ||
| 85 | +<tr><td>Пагинация pages</td><td><code>noindex, follow</code></td></tr> | ||
| 86 | +<tr><td>Страницы с ограниченными параметрами</td><td><code>noindex, follow</code></td></tr> | ||
| 87 | +<tr><td>Страница поиска</td><td><code>none</code> (noindex, nofollow)</td></tr> | ||
| 88 | +</table> | ||
| 89 | +'; | ||
| 90 | +$_['text_info_limits'] = '<h4>Лимиты мета тайтлов и описания</h4> | ||
| 91 | +<p>Мета-заголовок и описание очень важны, так как они видят, что пользователь увидит при запросе на поисковые системы, заголовок в качестве основной ссылки и описание небольшого текста ниже..</p> | ||
| 92 | +<p><img src="view/seo_package/img/help/meta_title_desc.png" alt="" class="img-thumbnail"/></p> | ||
| 93 | +<p>Google урезает ваш заголовок после 67 символов, но будет индексировать еще несколько, чтобы это было легко визуализировать, поле заголовка станет оранжевым в случае обхода 67 символов и красного цвета в случае обхода 85 символов.<br/> | ||
| 94 | +Пределы для описания - 155 символов для урезания и 200 для индексации.</p> | ||
| 95 | +<p><span style="color:#fc7402">Оранжевый</span> означает, что ваш текст обязательно будет усечен, но будет полностью проиндексирован.<br /> | ||
| 96 | +<span style="color:#f23333">Красный</span> Означает, что некоторые слова в конце вашего текста не индексируются.</p>'; | ||
| 97 | +$_['entry_analytics_code'] = 'Код Google Аналитики:'; | ||
| 98 | +$_['text_info_analytics_tab'] = 'Google Аналитика'; | ||
| 99 | +$_['text_info_analytics'] = '<h4>Проверьте свой сайт в Google Analytics</h4> | ||
| 100 | +<p>Вы можете получить подробную информацию о своем веб-сайте с помощью Google Analytics, для этого перейдите по ссылке <a href="https://www.google.com/webmasters/">https://www.google.com/webmasters/</a> | ||
| 101 | +И нажмите «ДОБАВИТЬ СОБСТВЕННОСТЬ», затем выберите способ проверки HTML-тегов, например, на изображении ниже.</p> | ||
| 102 | +<p><img src="view/seo_package/img/help/gg_analytics.png" alt="" class="img-thumbnail"/></p> | ||
| 103 | +<p>Скопируйте код, указанный Google, чтобы активировать проверку вашего веб-сайта. Теперь вы можете проверить страницу google.</p>'; | ||
| 104 | + | ||
| 105 | +// Таб seo конфигурации | ||
| 106 | +$_['tab_seo_options'] = 'SEO Конфигурация'; | ||
| 107 | +$_['text_seo_package_status'] = 'SEO Package статус:'; | ||
| 108 | +$_['text_seo_components'] = 'Компоненты:'; | ||
| 109 | +$_['text_seo_tab_general_1'] = 'Главные опции'; | ||
| 110 | +$_['text_seo_tab_general_2'] = 'Теги языка'; | ||
| 111 | +$_['text_seo_tab_general_3'] = 'Hreflang'; | ||
| 112 | +$_['text_seo_tab_general_4'] = 'Опции кейвордов'; | ||
| 113 | +$_['text_seo_tab_general_5'] = 'Автообновление'; | ||
| 114 | +$_['text_seo_tab_general_6'] = 'Пагинация'; | ||
| 115 | +$_['text_seo_tab_general_7'] = 'Кеш'; | ||
| 116 | +$_['text_seo_tab_general_8'] = 'Канонические ссылки'; | ||
| 117 | +$_['text_seo_tab_general_9'] = ''; | ||
| 118 | +$_['text_seo_tab_general_10'] = 'Отзывы'; | ||
| 119 | +$_['text_seo_tab_general_11'] = 'Запросить заголовки'; | ||
| 120 | +$_['text_seo_tab_general_12'] = 'Карта сайта'; | ||
| 121 | +$_['text_seo_tab_general_13'] = 'Мета роботс'; | ||
| 122 | +$_['text_seo_tab_general_14'] = 'Переадресация'; | ||
| 123 | +$_['text_seo_tab_general_16'] = 'Модули СЕО'; | ||
| 124 | +$_['text_info_general'] = 'Эти настройки влияют на глобальное функционирование оптимизаторов, они вступают в силу немедленно и могут быть изменены в любое время.'; | ||
| 125 | +$_['text_info_general_3'] = 'Тег Hreflang позволяет поисковым системам знать URL текущей страницы для других языков.<br/> | ||
| 126 | +После активации он будет включен во все страницы вашего сайта, а также в карту сайта seo (feed> seo package карта сайта).<br/> | ||
| 127 | +Подробнее : <a href="https://support.google.com/webmasters/answer/189077?hl=en" target="new">здесь</a>'; | ||
| 128 | +$_['text_info_general_6'] = 'Перезапись пагинации на дружественную, например website.com/category?page=3 станет website.com/category/page-3'; | ||
| 129 | +$_['text_info_general_7'] = 'Функция кеша ускорит ваш сайт, кэшируя все URL-ссылки, а не вычисляя их каждый раз'; | ||
| 130 | +$_['text_info_general_8'] = 'Канонические ссылки информируют поисковые системы, что если он найдет одну и ту же страницу в другом месте на веб-сайте, она должна рассматривать только одну ссылку, это важно для того, чтобы избежать дублирования контента'; | ||
| 131 | +$_['text_info_general_10'] = 'В обзорах opensart по умолчанию загружаются динамически с помощью ajax, что заставляет поисковые системы не видеть контент отзывов, который был бы ценным контентом для вашего веб-сайта, включите этот параметр, чтобы он мог вставить блок, содержащий отзывы пользователей в HTML, чтобы сделать Чтобы их можно было увидеть.<br /> | ||
| 132 | +<br />Вы должны вручную вставить этот код в product/product.tpl шаблон : <b><?php echo $seo_reviews; ?></b><br /> | ||
| 133 | +<br /> Затем вы можете стилизовать его так, как хотите, контейнерный класс <b>.seo_reviews</b>, класс позиции <b>.seo_review</b>'; | ||
| 134 | +$_['text_info_general_12'] = 'Карта сайта должна быть настроена в разделе фидов, пожалуйста, нажмите на кнопку ниже, чтобы настроить ее.'; | ||
| 135 | +$_['text_seopackage_sitemap'] = 'SEO Package Карта сайта'; | ||
| 136 | +$_['text_seo_pagination'] = 'Включить СЕО пагинацию<span class="help">Предупреждение: это несовместимо с ajax пагинацией, включающей некоторые темы, если это не работает, вам придется отключить разбиение на страницы или ajax разбиение на страницы темы</span>'; | ||
| 137 | +$_['text_seo_pagination_fix'] = 'Предыдущий/следующий фикс:<span class="help">Фикс opencart 2.2+ проблемы с предыдущий/следующий в подкатегориях</span>'; | ||
| 138 | +$_['text_seo_pagination_canonical'] = 'Канонические с разбивкой на страницы:<span class="help">Установите каноническую ссылку страниц страницы, чтобы указать номер страницы (не рекомендуется)</span>'; | ||
| 139 | +$_['text_seo_canonical'] = 'Канонические:<span class="help">Включить каноникал для всех страниц</span>'; | ||
| 140 | +$_['text_seo_absolute'] = 'Абсолютная категория:<span class="help">Разрешить использовать одно и то же ключевое слово для подкатегорий и что-то еще (прим: <br/>/laptop/apple<br/>/desktop/apple<br/>/apple (производитель))<br/>Если вы укажете ключевое слово для производителя, его нельзя использовать для верхней категории (/apple and /apple), только подкатегория</span>'; | ||
| 141 | +$_['text_seo_absolute_help'] = 'Позвольте использовать одно и то же ключевое слово для подкатегорий и что-то еще (например: <br/> / laptop / apple <br/> / desktop / apple <br/> / apple (производитель)) <br/> Если вы укажете ключевое слово для Производитель, он не может использоваться для верхней категории (/apple и /apple), только подкатегории'; | ||
| 142 | +$_['text_seo_reviews'] = 'SEO отзывы:<span class="help">Вставить отзывы в HTML-контент</span>'; | ||
| 143 | +$_['text_seo_extension'] = 'Пример:<span class="help">Добавьте расширение по вашему выбору в конце ключевого слова продукта (прим: .html)</span>'; | ||
| 144 | +$_['text_seo_flag_tag'] = 'Тег после домена'; | ||
| 145 | +$_['text_seo_flag_store'] = 'Тег как поддомен'; | ||
| 146 | +$_['text_seo_flag'] = 'Режим языковых тегов:'; | ||
| 147 | +$_['text_seo_flag_short'] = 'Короткий тег:'; | ||
| 148 | +$_['text_seo_flag_upper'] = 'Тег в верхнем регистре:'; | ||
| 149 | +$_['text_seo_flag_default'] = 'Без тегов по умолчанию:'; | ||
| 150 | +$_['text_seo_urlcache'] = 'URL Кеш:<span class="help">Ускорить загрузку страницы с помощью кэширования URL-адресов</span>'; | ||
| 151 | +$_['text_seo_redirect_dynamic'] = 'Переадресация динамических ссылок:<span class="help">Динамические ссылки (route=product/product&product_id=32) будут автоматически перенаправлены на их дружественные URL-адреса, если они существуют. Перенаправление - 301, поэтому поисковая система остановится, чтобы индексировать его и использовать только дружественный URL-адрес в качестве ссылки.</span>'; | ||
| 152 | +$_['text_seo_redirect_canonical'] = 'Переадресация на каноникал:<span class="help">Это для дружественных URL-адресов, он проверяет, является ли текущая ссылка канонической ссылкой, если она не будет перенаправлена на каноническую. Это позволяет не использовать несколько URL-адресов для одного элемента. Перенаправление - 301.</span>'; | ||
| 153 | +$_['text_seo_redirect_canonical_1'] = 'Перенаправить все ссылки, кроме ссылок категории'; | ||
| 154 | +$_['text_seo_redirect_canonical_2'] = 'Redirect all links including category links'; | ||
| 155 | +$_['text_seo_redirect_http'] = 'HTTP режим:<span class="help">Используйте это, чтобы заставить веб-сайт использовать SSL или www, если URL неверен, будет выполнено 301 переадресация.</span>'; | ||
| 156 | +$_['text_seo_redirect_ssl'] = 'Режим SSL значения, не изменяя WWW'; | ||
| 157 | +$_['text_seo_redirect_www'] = 'Режим WWW значения, не изменяя SSL'; | ||
| 158 | +$_['text_seo_redirect_sslwww'] = 'Режим обоих SSL и WWW значений'; | ||
| 159 | +$_['text_seo_redirect_http_1'] = 'Без-SSL, Без-WWW - http://example.com'; | ||
| 160 | +$_['text_seo_redirect_http_2'] = 'Без-SSL, WWW - http://www.example.com'; | ||
| 161 | +$_['text_seo_redirect_http_3'] = 'SSL, Без-WWW - https://example.com'; | ||
| 162 | +$_['text_seo_redirect_http_4'] = 'SSL, WWW - https://www.example.com'; | ||
| 163 | +$_['text_seo_redirect_http_5'] = 'SSL - https://(www.)example.com'; | ||
| 164 | +$_['text_seo_redirect_http_6'] = 'Без-SSL - http://(www.)example.com'; | ||
| 165 | +$_['text_seo_redirect_http_7'] = 'WWW - http(s)://www.example.com'; | ||
| 166 | +$_['text_seo_redirect_http_8'] = 'Без-WWW - http(s)://example.com'; | ||
| 167 | +$_['text_seo_special_group'] = 'Специальная ценовая группа:<span class="help">[price] тег может рассчитать специальную цену, определите здесь, какую группу клиентов вы хотите использовать для ее расчета, если отключено, тогда будет отображаться только цена по умолчанию</span>'; | ||
| 168 | +$_['text_seo_format_tag'] = 'Форматирование тегов:<span class="help">Добавление запятых между каждым словом к тегам продукта при генерации при массовом обновлении или автоматическом обновлении</span>'; | ||
| 169 | +$_['text_seo_banner'] = 'Перезапись ссылок банеров:<span class="help">Динамически создавать seo-ссылку на баннеры (используется в баннерах, каруселях, модулях слайд-шоу)</span>'; | ||
| 170 | +$_['text_seo_banner_help'] = 'В разделе баннеров не вводите ссылку seo(/category/product_name) но вместо этого введите ссылку по умолчанию opencart: <b>index.php?route=product/product&path=10_21&product_id=54</b>.<br /> | ||
| 171 | +Вы также можете index.php, like this : <b>product/product&path=23&product_id=48</b>'; | ||
| 172 | +$_['text_seo_hreflang'] = 'Включить тег hreflang:'; | ||
| 173 | +$_['text_seo_substore'] = 'Включить многозадачную перезапись:'; | ||
| 174 | +$_['text_seo_substore_config'] = 'Актуальная конфигурация:'; | ||
| 175 | +$_['text_no_language_defined'] = 'Язык не определен'; | ||
| 176 | +$_['text_info_transform'] = 'Все эти параметры определяют способ генерации ключевого слова при сохранении элемента или использовании массового обновления.'; | ||
| 177 | +$_['text_seo_whitespace'] = 'Пробелы:<span class="help">Замените символы пробела ...</span>'; | ||
| 178 | +$_['text_seo_lowercase'] = 'Строчные:<span class="help">QWERTY => qwerty</span>'; | ||
| 179 | +$_['text_seo_remove'] = 'Удалить слова:<span class="help">Удалите некоторые слова при создании URL-адресов, их можно использовать для удаления общих слов типа «о, a, ...», поместить запятую между каждой</span>'; | ||
| 180 | +$_['text_seo_duplicate'] = 'Дубли:<span class="help">Разрешить использовать одно и то же ключевое слово для отдельной языковой версии элемента</span>'; | ||
| 181 | +$_['text_seo_ascii'] = 'ASCII режим:<span class="help">Замените акцентированные символы их эквивалентом ascii<br/>"éàôï" => "eaoi"<br/>Поддерживаемые языки: All latin (French, Italian, Spanish, etc), Arabic, Bulgarian, Croatian, Czech, German, Greek, Latvian, Lithunanian, Polish, Romanian, Русский, Serbian, Slovenian, Turkish, Украинский</span>'; | ||
| 182 | +$_['text_seo_autofill'] = 'Автозаполнение'; | ||
| 183 | +$_['text_seo_autofill_on'] = 'вкл:'; | ||
| 184 | +$_['text_seo_autofill_desc'] = 'Автозаполнение:<span class="help">Если оставить поле пустым при вставке или редактировании, значение будет создано автоматически на основе шаблона на вкладке массового обновления.<br/> | ||
| 185 | +<br/>Работает с : <br/>- товар<br/>- категории<br/>- инфомация</span>'; | ||
| 186 | +$_['text_seo_autourl'] = 'Авто URL:<span class="help">Если оставить пустым, ключевое слово seo url будет сгенерировано автоматически, используя параметр, установленный на вкладке «Массовое обновление»<br/> | ||
| 187 | +Работает с товаром, категориями и информацией</span>'; | ||
| 188 | +$_['text_seo_autotitle'] = 'Автоматическое название и описание для других языков:<span class="help">Если они оставлены пустыми при вставке или редактировании, названия и описания других языков будут копировать заголовок и описание языка по умолчанию<br/> | ||
| 189 | +Работает с товаром, категориями и информацией</span>'; | ||
| 190 | +$_['text_headers_lastmod'] = 'Последнее редактирование:<span class="help">Добавить последнюю измененную дату в шапку</span>'; | ||
| 191 | +$_['text_all'] = 'Все'; | ||
| 192 | +$_['text_insert'] = 'Вставить'; | ||
| 193 | +$_['text_edit'] = 'Редактировать'; | ||
| 194 | + | ||
| 195 | +$_['text_fix_search'] = 'Фикс поисковых ссылок:'; | ||
| 196 | +$_['text_fix_search_help'] = '<span class="help">Поисковые урлы могут быть некрасивые, потому что URL-адрес жестко закодирован в javascript, включите эту опцию, если вы хотите, чтобы URL-адрес поиска был заменен.</span>'; | ||
| 197 | +$_['text_fix_cart'] = 'Исправить ошибку удаления корзины:'; | ||
| 198 | +$_['text_fix_cart_help'] = '<span class="help">Когда есть дружественный url для checkout/cart, удаление продукта не обновляет текущий экран, включите это, чтобы исправить эту проблему.</span>'; | ||
| 199 | + | ||
| 200 | +// Таб магазинного seo | ||
| 201 | +$_['tab_seo_store'] = 'Магазинное SEO'; | ||
| 202 | +$_['text_info_store'] = '<h4>Магазинное SEO</h4> | ||
| 203 | +<p>В этом разделе вы можете настроить мета-заголовок, h1, мета ключевые слова и описание на домашней странице для каждого магазина и на каждом языке! <br/> Все, что вводится здесь, будет обходить значения, введенные в настройках opencart.</p> | ||
| 204 | +<p>Значения заголовков могут не применяться автоматически в зависимости от темы, чтобы вставить их, вы должны отредактировать свой обычный / домашний шаблон (и то же самое в шаблонах прод / кат / инфо) и использовать эти коды: <br/><code style="padding:0"><h1><?php echo $seo_h1; ?></h1><br/><h2><?php echo $seo_h2; ?></h2><br/><h3><?php echo $seo_h3; ?></h3></code></p> | ||
| 205 | +<p>Учтите, что элементы с дисплеем: ни один из них не может быть рассмотрен поисковыми системами, поэтому вы можете захотеть вставить только некоторые из них в зависимости от вашего шаблона (h1 является самым важным).</p> | ||
| 206 | +<h4>Префикс и суффикс заголовка Мета</h4> | ||
| 207 | +<p>Используйте этот параметр, чтобы добавить текст до или после всех названий вашего сайта, они могут быть определены для каждого магазина и каждого языка.</p> | ||
| 208 | +<p>Например, если вы хотите, чтобы ваш заголовок <b>"Название товара | Мой магазин"</b> просто вставьте <b>" | Мой магазин"</b> в суффикс.</p>'; | ||
| 209 | +$_['text_info_seo_titles_tab'] = 'SEO Тайтлы (H1, H2, H3)'; | ||
| 210 | +$_['text_info_seo_titles'] = '<h4>SEO тайтлы (H1, H2, H3)</h4> | ||
| 211 | +<p>Заголовки SEO не применяются автоматически к вашей теме, потому что это изменит ваш дизайн, поэтому вам придется вручную вставлять их в свои шаблоны.<br/><br/>Файлы для изменения | ||
| 212 | +(.tpl or .twig):<br/><code style="padding:0">/catalog/view/theme/[theme]/template/common/home<br/>/catalog/view/theme/[theme]/template/product/product<br/>/catalog/view/theme/[theme]/template/product/category<br/> | ||
| 213 | +/catalog/view/theme/[theme]/template/product/information</code><br/><br/> | ||
| 214 | +Вставьте этот код для .tpl: <br/><code style="padding:0"><h1><?php echo $seo_h1; ?></h1><br/><h2><?php echo $seo_h2; ?></h2><br/><h3><?php echo $seo_h3; ?></h3></code><br/><br/> | ||
| 215 | +Или этот для .twig: <br/><code style="padding:0"><h1>{{ seo_h1 }}</h1><br/><h2>{{ seo_h2 }}</h2><br/><h3>{{ seo_h3 }}</h3></code><br/></p> | ||
| 216 | +<p>Учтите, что элементы с отображением: ни один из них не может быть рассмотрен поисковыми системами, поэтому вы можете захотеть вставить только некоторые из них в зависимости от вашего шаблона (h1 является самым важным).</p>'; | ||
| 217 | + | ||
| 218 | +$_['entry_robots'] = 'Включить мета роботс'; | ||
| 219 | +$_['store_seo_global'] = 'Глобальные настройки'; | ||
| 220 | +$_['store_seo_home'] = 'Только главная страница'; | ||
| 221 | +$_['entry_robots_default'] = 'Значение по умолчанию'; | ||
| 222 | +$_['entry_store_seo_title'] = 'Мета тайтл:'; | ||
| 223 | +$_['entry_store_seo_title_extra'] = 'Мета тайтл префикс и суффикс:'; | ||
| 224 | +$_['entry_store_title'] = 'Тайтл H1:'; | ||
| 225 | +$_['entry_store_h2'] = 'Тайтл H2:'; | ||
| 226 | +$_['entry_store_h3'] = 'Тайтл H3:'; | ||
| 227 | +$_['entry_store_desc'] = 'Мета описание:'; | ||
| 228 | +$_['entry_store_keywords'] = 'Мета кейворды:'; | ||
| 229 | + | ||
| 230 | +// Таб расширенных описаний | ||
| 231 | +$_['tab_seo_snippets'] = 'Расширенные описания'; | ||
| 232 | +$_['text_seo_tab_snippet_1'] = 'Google Микроданные (Rich Cards)'; | ||
| 233 | +$_['text_seo_tab_snippet_2'] = 'Facebook Open Graph'; | ||
| 234 | +$_['text_seo_tab_snippet_3'] = 'Twitter Card'; | ||
| 235 | +$_['text_seo_tab_snippet_3'] = 'Twitter Card'; | ||
| 236 | +$_['text_seo_tab_snippet_4'] = 'Google Publisher'; | ||
| 237 | +$_['tab_microdata_1'] = 'Товар'; | ||
| 238 | +$_['tab_microdata_2'] = 'Организация'; | ||
| 239 | +$_['tab_microdata_3'] = 'Магазин'; | ||
| 240 | +$_['tab_microdata_4'] = 'Вебсайт'; | ||
| 241 | +$_['tab_microdata_5'] = 'Место'; | ||
| 242 | +$_['tab_microdata_6'] = 'Хлебные крошки'; | ||
| 243 | +$_['entry_snippet_pricerange'] = 'Ценовой диапозон:'; | ||
| 244 | +$_['entry_snippet_same_as'] = 'Такой как:'; | ||
| 245 | +$_['entry_enable_microdata'] = 'Включить Google Microdata:'; | ||
| 246 | +$_['entry_microdata_search'] = 'Поисковая строка'; | ||
| 247 | +$_['entry_microdata_logo'] = 'Лого'; | ||
| 248 | +$_['entry_microdata_address'] = 'Адрес'; | ||
| 249 | +$_['entry_snippet_contact'] = 'Контакты'; | ||
| 250 | +$_['entry_microdata_gps'] = 'GPS координаты'; | ||
| 251 | +$_['entry_gps_lat'] = 'Широта'; | ||
| 252 | +$_['entry_gps_long'] = 'Долгота'; | ||
| 253 | +$_['entry_address_street'] = 'Улица'; | ||
| 254 | +$_['entry_address_city'] = 'Местонахождение'; | ||
| 255 | +$_['entry_address_region'] = 'Регион'; | ||
| 256 | +$_['entry_address_code'] = 'Почтовый код'; | ||
| 257 | +$_['entry_address_country'] = 'Страна'; | ||
| 258 | +$_['entry_email'] = 'Email'; | ||
| 259 | +$_['entry_phone'] = 'Телефон'; | ||
| 260 | +$_['entry_product_data'] = 'Включить данные о продукте:'; | ||
| 261 | +$_['entry_snippet_data'] = 'Включить данные:'; | ||
| 262 | +$_['entry_model'] = 'Модель'; | ||
| 263 | +$_['entry_description'] = 'Описание (основано на метадескрипшине)'; | ||
| 264 | +$_['entry_reviews'] = 'Отзывы'; | ||
| 265 | +$_['entry_upc'] = 'UPC'; | ||
| 266 | +$_['entry_mpn'] = 'MPN'; | ||
| 267 | +$_['entry_ean'] = 'EAN'; | ||
| 268 | +$_['entry_isbn'] = 'ISBN'; | ||
| 269 | +$_['entry_rating'] = 'Средний рейтинг'; | ||
| 270 | +$_['entry_manufacturer'] = 'Производитель'; | ||
| 271 | +$_['entry_brand'] = 'Бренд'; | ||
| 272 | +$_['entry_enable_opengraph'] = 'Включить Facebook Open Graph:'; | ||
| 273 | +$_['entry_opengraph_id'] = 'Facebook App ID:'; | ||
| 274 | +$_['entry_enable_tcard'] = 'Включить Twitter Card:'; | ||
| 275 | +$_['entry_twitter_nick'] = 'Twitter никнейм (опционально):'; | ||
| 276 | +$_['entry_twitter_home_type'] = 'Тип главной:'; | ||
| 277 | +$_['entry_twitter_summary'] = 'Сводка'; | ||
| 278 | +$_['entry_twitter_summary_large'] = 'Сводка с большим изображением'; | ||
| 279 | +$_['entry_enable_gpublisher'] = 'Включить Google Publisher:'; | ||
| 280 | +$_['entry_gpublisher_url'] = 'Google+ url:'; | ||
| 281 | + | ||
| 282 | + | ||
| 283 | +// Таб дружественных УРЛ | ||
| 284 | +$_['tab_seo_friendly'] = 'Дружественные URLs'; | ||
| 285 | +$_['text_seo_export_urls'] = 'Экспорт URLs'; | ||
| 286 | +$_['text_seo_export_urls_tooltip'] = 'Экспорт дружественных URL-адресов и отправка их разработчику для интеграции в официальный пакет'; | ||
| 287 | +$_['text_seo_reset_urls'] = 'Восстановить дефолтные URLs'; | ||
| 288 | +$_['text_seo_reset_urls_tooltip'] = 'Если текущий язык не имеет предопределенных URL-адресов, модуль загрузит английскую версию'; | ||
| 289 | +$_['text_info_friendly'] = 'Здесь вы можете управлять дружественными URL-адресами, редактировать их по своему усмотрению.<br/> | ||
| 290 | +У вас также есть возможность добавить новый URL-адрес, он работает, например, для любого настраиваемого модуля, который вы установили, просто заполните 1-е поле значением в маршруте (?route=mymodule/action) и вторым полем с ключевым словом, которое вы хотите отобразить В URL.'; | ||
| 291 | +$_['text_seo_friendly'] = 'Дружественные URL-адреса для общих страниц:<span class="help">Включите эту опцию, чтобы использовать дружественные URL-адреса для общих страниц и специальных страниц (отредактируйте их на вкладке редактора SEO)</span>'; | ||
| 292 | +$_['info_seo_friendly'] = 'Включите этот компонент, чтобы переписать URL-адреса для общих URL-адресов страниц и параметров'; | ||
| 293 | +$_['info_seo_absolute'] = 'Включите этот компонент, чтобы использовать абсолютные URL-адреса'; | ||
| 294 | +$_['info_seo_404'] = 'Включите этот компонент, чтобы активировать протоколирование 404 страниц ошибок'; | ||
| 295 | +$_['info_seo_redirect'] = 'Включить этот компонент для активации 301 перенаправления'; | ||
| 296 | +$_['text_seo_cat_slash'] = 'Слеш в конце в категорий'; | ||
| 297 | +$_['text_seo_cat_slash_help'] = 'Вставить окончательный слеш в конце URL-адресов категорий'; | ||
| 298 | +$_['text_seo_redir_reviews'] = 'Перенаправление битых отзывов:<span class="help">Если на странице обзора index.php?route=product/product/review не открывается через ajax-запрос, то перенаправление 301 на страницу продукта. Это предотвратит индексирование этого фрагмента обзора.</span>'; | ||
| 299 | +$_['text_seo_remove_urls'] = 'Удалить все записи'; | ||
| 300 | +$_['text_seo_remove_redirected'] = 'Удалить перенаправленные записи'; | ||
| 301 | +$_['text_seo_add_url'] = 'Добавить новую запись'; | ||
| 302 | + | ||
| 303 | +// Таб полного пути товараh | ||
| 304 | +$_['tab_seo_fpp'] = 'Менеджер путей'; | ||
| 305 | +// Текст | ||
| 306 | +$_['tab_fpp_product'] = 'Товар'; | ||
| 307 | +$_['tab_fpp_category'] = 'Категория'; | ||
| 308 | +$_['tab_fpp_manufacturer'] = 'Производитель'; | ||
| 309 | +$_['tab_fpp_search'] = 'Поиск'; | ||
| 310 | +$_['tab_fpp_common'] = 'Общее'; | ||
| 311 | +$_['text_fpp_cat_canonical'] = 'Каноникал категории:'; | ||
| 312 | +$_['text_fpp_cat_mode_0'] = 'Прямая ссылка'; | ||
| 313 | +$_['text_fpp_cat_mode_1'] = 'Полный путь'; | ||
| 314 | +$_['text_fpp_cat_canonical_help'] = 'Какую ссылку вы хотите показать поисковым системам? <br/><b>Прямая ссылка</b>: /category (default)<br/><b>Полный путь</b>: /cat1/cat2/category<br/> | ||
| 315 | +<br/>В режиме прямой ссылки связи каноникал автоматически устанавливается также по прямой ссылке'; | ||
| 316 | +$_['text_fpp_mode'] = 'Режим пути товара:'; | ||
| 317 | +$_['text_fpp_mode_0'] = 'Прямая ссылка'; | ||
| 318 | +$_['text_fpp_mode_1'] = 'Короткий путь'; | ||
| 319 | +$_['text_fpp_mode_2'] = 'Длинный путь'; | ||
| 320 | +$_['text_fpp_mode_3'] = 'С производителем'; | ||
| 321 | +$_['text_fpp_mode_4'] = 'Последняя категория'; | ||
| 322 | + | ||
| 323 | +$_['text_fpp_slash'] = 'Слеш в конце'; | ||
| 324 | +$_['text_fpp_slash_mode_0'] = 'Без Слеша в конце'; | ||
| 325 | +$_['text_fpp_slash_mode_1'] = 'Слеш в конце категорий'; | ||
| 326 | +$_['text_fpp_slash_mode_2'] = 'Слеш в конце на всех ссылках'; | ||
| 327 | +$_['text_fpp_slash_help'] = 'Добавляет слеш в конце. Ника не влияет на СЕО'; | ||
| 328 | + | ||
| 329 | +$_['text_fpp_bc_mode'] = 'Режим хлебных крошек:'; | ||
| 330 | +$_['text_fpp_breadcrumbs_fix'] = 'Генератор хлебных крошек:'; | ||
| 331 | +$_['text_fpp_breadcrumbs_0'] = 'По умолчанию'; | ||
| 332 | +$_['text_fpp_breadcrumbs_1'] = 'Генерировать если пустое'; | ||
| 333 | +$_['text_fpp_breadcrumbs_2'] = 'Всегда генерировать'; | ||
| 334 | + | ||
| 335 | +$_['text_fpp_mode_help'] = '<span class="help"><b>Прямая ссылка:</b> Прямая ссылка на продукт, категория не включена (прим: /product_name), это станадртное значение опенкарта<br/> | ||
| 336 | + <b>Короткий путь:</b> Короткий путь по умолчанию, может быть изменен запрещенными категориями (прим: /category/product_name)<br/> | ||
| 337 | + <b>Длинный путь:</b> Длинный путь по умолчанию, может быть изменен запрещенными категориями (ex: /category/sub-category/product_name)<br/> | ||
| 338 | + <b>Последняя категория:</b> только последняя категория будет отображена. Если у вас /category/sub-category/product_name ссылка будет /sub-category/product_name<br/> | ||
| 339 | + <b>С производителем:</b> Производитель вместо категорий (ex: /manufacturer/product_name)</span>'; | ||
| 340 | +$_['text_fpp_breadcrumbs_help'] = '<span class="help"><b>По умолчанию:</b> отобображение опенкарта по умолчанию: отображение хлебных крошек исходя из категорий<br/> | ||
| 341 | + <b>Геренрировать если пусто:</b> генерирует хлебные крошки только если их нет,по этому категория хлебных крошек сохраняется (рекомендуется)<br/> | ||
| 342 | + <b>Всегда генерировать:</b> перезаписывает хлебные крошки, по этому на выходе только те, котрые генерирует модуль<br/></span>'; | ||
| 343 | +$_['text_fpp_bypasscat'] = 'Перезаписываьт пути товара в категориях:'; | ||
| 344 | +$_['text_fpp_bypasscat_help'] = '<span class="help">Если отключено, ссылка продукта из категорий остается неизменной, чтобы сохранить нормальные хлебные крошки.<br/> | ||
| 345 | +Если включено, ссылка продукта из категорий будет перезаписана путём, сгенерированным модулем. <br> В любом случае каноническая ссылка обновляется с хорошим значением, поэтому google будет видеть только URL-адрес, сгенерированный модулем для данного продукта.</span>'; | ||
| 346 | +$_['text_fpp_directcat'] = 'Режим пути категории:'; | ||
| 347 | +$_['text_fpp_directcat_help'] = 'Какую ссылку вы хотите отображать на своем веб-сайте?<br/><b>Прямая ссылка</b>: /category<br/><b>Полная ссылка</b>: /cat1/cat2/category (default)'; | ||
| 348 | +$_['text_fpp_homelink'] = 'Перезаписать ссылку на главную:'; | ||
| 349 | +$_['text_fpp_homelink_help'] = '<span class="help">Установить ссылку на главную вида mystore.com из mystore.com/index.php?route=common/home</span>'; | ||
| 350 | +$_['text_fpp_depth'] = 'Максимально уровней:'; | ||
| 351 | +$_['text_fpp_depth_help'] = '<span class="help">Максимальная глубина категории, которую вы хотите отобразить, например, если у вас есть продукт в /cat/subcat/subcat/product установите эту опцию на 2, ссылка станет /cat/subcat/product<br/>Эта опция работает в режиме наибольшего и кратчайшего пути</span>'; | ||
| 352 | +$_['text_fpp_unlimited'] = 'Безлимитно'; | ||
| 353 | +$_['text_fpp_brand_parent'] = 'Производитель родитель:'; | ||
| 354 | +$_['text_fpp_brand_parent_help'] = '<span class="help">Включите производителей в URL-адрес списка производителя.<br/>Например, если ваш список производителей /brand, apple производителя появится таким образом /brand/apple а было /apple</span>'; | ||
| 355 | +$_['text_fpp_remove_search'] = 'Удалить параметры поиска/тегов:'; | ||
| 356 | +$_['text_fpp_remove_search_help'] = '<span class="help">Удалить параметр поиска или тега (?search=something, ?tag=something) из URL-адресов продукта в результатах поиска (только для URL-адресов продуктов, а не для самого URL-адреса страницы поиска)</span>'; | ||
| 357 | +$_['text_fpp_seo_tag'] = 'СЕО тег:<span class="help">для ссылок тегов (route=product/search&tag=something) определяет ключевое слово для использования для хорошего URL-адреса, например, если вы установите «тег», то результатом будет URL-адрес /tag/something</span>, оставьте пустым для отключения'; | ||
| 358 | +$_['entry_category'] = 'Запрещенные категории:<span class="help">Выберите категории, которые никогда не будут отображаться в случае нескольких путей</span>'; | ||
| 359 | + | ||
| 360 | +// Таб массового обновления | ||
| 361 | +$_['tab_seo_update'] = 'Массовое обновление'; | ||
| 362 | +$_['text_info_update'] = 'Будьте осторожны при использовании этой функции, так как она перезапишет все ваши ключевые слова.<br/> | ||
| 363 | +Вы можете использовать функцию имитации, чтобы проверить результат до фактического обновления. <br/> Выберите флаги языка для обновления только этих языков.'; | ||
| 364 | +$_['text_cleanup'] = 'Очистить:<span class="help">Удалите старые URL-адреса в базе данных, сделайте очистку, если у вас возникли проблемы с некоторыми URL-адресами</span>'; | ||
| 365 | +$_['text_cache'] = 'ЧПУ кеш:<span class="help">Генерировать или очистить ЧПУ кеш</span>'; | ||
| 366 | +$_['text_redirection'] = 'Динамическая переадресация:<span class="help">Сохраните все фактические URL для дальнейшего перенаправления, затем вы можете изменить ключевое слово СЕО, google сохранит путь.</span>'; | ||
| 367 | +$_['text_cache_create_btn'] = 'Генерировать кеш'; | ||
| 368 | +$_['text_redirect_create_btn'] = 'Генерировать переадресации'; | ||
| 369 | +$_['text_cache_delete_btn'] = 'Очистить кеш'; | ||
| 370 | +$_['text_cleanup_btn'] = 'Очистить'; | ||
| 371 | +$_['text_cleanup_duplicate_btn'] = 'Удалить дубли ссылок'; | ||
| 372 | +$_['text_cleanup_done'] = 'Очистка завершена, %d записей удалено'; | ||
| 373 | +$_['text_seo_languages'] = 'Выберите язык'; | ||
| 374 | +$_['text_seo_simulate'] = 'Симуляция:<span class="help">Никаких изменений не будет, пока включяен этот режим</span>'; | ||
| 375 | +$_['text_seo_empty_only'] = 'Заполнить только пустые значения:<span class="help">Отключите для перезаписи всех значений</span>'; | ||
| 376 | +$_['text_seo_redirect'] = 'Переадресация'; | ||
| 377 | +$_['text_seo_redirect_mode'] = 'ЧПУ переадресайия:<span class="help">Автоматически вставляет переадресацию для старых ссылок</span>'; | ||
| 378 | +$_['text_image_name_lang'] = 'Имена изображений могут быть установлены только на одном языке, выберите один из них и нажмите «Создать» снова.'; | ||
| 379 | +$_['text_enable'] = 'Включить'; | ||
| 380 | +$_['text_deleted'] = 'Удалено'; | ||
| 381 | + | ||
| 382 | +// Tab cron | ||
| 383 | +$_['tab_seo_cron'] = 'Cron'; | ||
| 384 | +$_['text_info_cron'] = 'Вы можете сделать массовое обновление с помощью заданий cron, скопируйте файл <b>seo_package_cli.php</b> | ||
| 385 | +из "_extra files" (желательно в каталог за пределами корня веб-сервера) и сконфигурируйте свой cron с помощью пути к этому файлу.<br/> | ||
| 386 | +Сценарий будет использовать настройки, настроенные на этой странице.<br/> | ||
| 387 | +Ахтунг!!!: Задачи cron не могут генерировать неограниченные элементы (только массовые средства обновления), поэтому в зависимости от ограничений вашего сервера и количества элементов, которые у вас есть, | ||
| 388 | +вы можете столкнуться с ошибкой при использовании cron, рекомендуется использовать параметр «только пустой», чтобы ограничить количество элементов, котрые вы собираетесь обновлять с помощью cron.'; | ||
| 389 | +$_['text_seo_cron_update'] = 'Обновить:'; | ||
| 390 | +$_['text_clear_logs'] = 'Очистить логи'; | ||
| 391 | +$_['text_tab_cron_1'] = 'Конфигурация'; | ||
| 392 | +$_['text_tab_cron_2'] = 'Отчет'; | ||
| 393 | +$_['text_cli_log_save'] = 'Сохранить лог файл'; | ||
| 394 | +$_['text_cli_log_too_big'] = 'Ваш файл логов слишком большой (%s) для отображения здесь - вы можете загрузить его или очистить с помощью кнопок ниже'; | ||
| 395 | + | ||
| 396 | +// Tab about | ||
| 397 | +$_['tab_seo_about'] = 'О модуле'; | ||
| 398 | + | ||
| 399 | +$_['text_nothing_changed'] = 'Нулевое значение'; | ||
| 400 | +$_['text_seo_no_language'] = 'Язвк не выбран'; | ||
| 401 | +$_['text_seo_fullscreen'] = 'Полный экран'; | ||
| 402 | +$_['text_seo_show_old'] = 'Показать старые значения'; | ||
| 403 | +$_['text_seo_change_count'] = 'Pfgbcb bpvtytys'; | ||
| 404 | +$_['text_seo_old_value'] = 'Старые значения'; | ||
| 405 | +$_['text_seo_new_value'] = 'Новые значения'; | ||
| 406 | +$_['text_seo_item'] = 'Пункт'; | ||
| 407 | +$_['text_simulation'] = 'Режим симуляции'; | ||
| 408 | +$_['text_write'] = 'Режим записи'; | ||
| 409 | +$_['text_empty_only'] = 'Только пустые значения'; | ||
| 410 | +$_['text_all_values'] = 'Все значения'; | ||
| 411 | +$_['text_seo_update_info'] = '1. Включить или отключить режим симуляции<br/> | ||
| 412 | +2. Выберите, если вы хотите обновлять только пустые элементы или все элементы<br/> | ||
| 413 | +3. После выбора нажмите на кнопку Генерировать<br/> | ||
| 414 | +4. Результаты отобразятся здесь'; | ||
| 415 | +$_['text_seo_simulation_mode'] = '<span>РЕЖИМ СИМУЛЯЦИИ</span><br/>Никаких изменений не будет в базе данных'; | ||
| 416 | +$_['text_seo_write_mode'] = '<span>РЕЖИМ ЗАПИСИ</span><br/>Изменения сохранятся'; | ||
| 417 | +$_['text_seo_product'] = 'Товар'; | ||
| 418 | +$_['text_seo_category'] = 'Категория'; | ||
| 419 | +$_['text_seo_manufacturer'] = 'Производитель'; | ||
| 420 | +$_['text_seo_information'] = 'Информация'; | ||
| 421 | +$_['text_seo_cache'] = 'Имя'; | ||
| 422 | +$_['text_seo_cleanup'] = 'Пустая (ссылка)'; | ||
| 423 | +$_['text_seo_type_product'] = 'Товары'; | ||
| 424 | +$_['text_seo_type_category'] = 'Категории'; | ||
| 425 | +$_['text_seo_type_manufacturer'] = 'Производители'; | ||
| 426 | +$_['text_seo_type_information'] = 'Информация'; | ||
| 427 | +$_['text_seo_type_redirect'] = 'Динамическая переадресация'; | ||
| 428 | +$_['text_seo_mode_product'] = 'Товары'; | ||
| 429 | +$_['text_seo_mode_category'] = 'Категории'; | ||
| 430 | +$_['text_seo_mode_manufacturer'] = 'Производители'; | ||
| 431 | +$_['text_seo_mode_information'] = 'Информация'; | ||
| 432 | +$_['text_seo_mode_url_alias'] = 'Псевдонимы URL-адресов'; | ||
| 433 | +$_['text_seo_mode_duplicate'] = 'Удалить дубли'; | ||
| 434 | +$_['text_seo_type_redirection'] = 'Динамическая переадресация'; | ||
| 435 | +$_['text_seo_type_report'] = 'Отчет'; | ||
| 436 | +$_['text_seo_type_cache'] = 'Кеш'; | ||
| 437 | +$_['text_seo_type_cleanup'] = 'Очистить'; | ||
| 438 | +$_['text_seo_generator_product'] = 'Товары:'; | ||
| 439 | +$_['text_seo_generator_product_desc'] = '<span class="help">Доступные шаблоны:<br/><b>[name]</b> : Название товара<br/><b>[model]</b> : Модель<br/><b>[category]</b> : Название категории<br/><b>[brand]</b> : Название бренда<br/><b>[desc]</b> : Описание<br/><b>[current]</b> : Текущее значение<br/><b>{aa|bb|cc}</b> : Рандомное значение<br/><b>{en}..{/en}</b> : Только для яз<br/><br/>Другие : <b>[parent_category]</b> <b>[upc]</b> <b>[sku]</b> <b>[ean]</b> <b>[jan]</b> <b>[isbn]</b> <b>[mpn]</b> <b>[location]</b> <b>[price]</b> <b>[lang]</b> <b>[lang_id]</b> <b>[prod_id]</b> <b>[cat_id]</b></span>'; | ||
| 440 | +$_['text_seo_generator_category'] = 'Категории:'; | ||
| 441 | +$_['text_seo_generator_category_desc'] = '<span class="help">Доступные шаблоны:<br/><b>[name]</b> : Название категории<br/><b>[desc]</b> : Описание<br/><b>[current]</b> : Текуущее значение<br/><b>{aa|bb|cc}</b> : Рандомное значение<br/><b>{en}..{/en}</b> : Только для яз<br/><br/><b>[parent]</b> : Раотельское название категории<br/><b>[lowest_price]</b> : Наименьшая цена товара<br/><b>[highest_price]</b> : Наибольшая цена товара<br/><br/>Другие : <b>[lang]</b> <b>[lang_id]</b> <b>[cat_id]</b></span>'; | ||
| 442 | +$_['text_seo_generator_information'] = 'Информационный страницы:'; | ||
| 443 | +$_['text_seo_generator_information_desc'] = '<span class="help">Доступные шаблоны:<br/><b>[name]</b> : Информационный тайтл<br/><b>[desc]</b> : Описание<br/><b>[current]</b> : Текущее значение<br/><b>{aa|bb|cc}</b> : Рандомное значение<br/><b>{en}..{/en}</b> : Только для яз<br/><br/>Другие : <b>[lang]</b> <b>[lang_id]</b></span>'; | ||
| 444 | +$_['text_seo_generator_manufacturer'] = 'Производители:'; | ||
| 445 | +$_['text_seo_generator_manufacturer_desc'] = '<span class="help">Доступные шаблоны:<br/><b>[name]</b> : Название производителя<br/><b>[current]</b> : Текукщее значение<br/><b>{aa|bb|cc}</b> : Рандомное значение<br/><b>{en}..{/en}</b> : Только для языка</span>'; | ||
| 446 | +$_['text_seo_mode_url'] = 'СЕО УРЛы'; | ||
| 447 | +$_['text_seo_generator_redirect'] = 'Генерировать динамические редиректы'; | ||
| 448 | +$_['text_seo_mode_title'] = 'Мета тайтлы'; | ||
| 449 | +$_['seo_title_prefix'] = 'Префикс'; | ||
| 450 | +$_['seo_title_suffix'] = 'Суффикс'; | ||
| 451 | +$_['text_seo_mode_h1'] = 'СЕО H1'; | ||
| 452 | +$_['text_seo_mode_h2'] = 'СЕО H2'; | ||
| 453 | +$_['text_seo_mode_h3'] = 'СЕО H3'; | ||
| 454 | +$_['text_seo_mode_image_name'] = 'Имя картинки'; | ||
| 455 | +$_['text_seo_mode_image_alt'] = 'Альт картинки'; | ||
| 456 | +$_['text_seo_mode_image_title'] = 'Тайтл картинки'; | ||
| 457 | +$_['text_seo_mode_keyword'] = 'Мета ключевое слово'; | ||
| 458 | +$_['text_seo_mode_description'] = 'Мета описание'; | ||
| 459 | +$_['text_seo_mode_related'] = 'Рекомендуемые товары'; | ||
| 460 | +$_['text_seo_mode_tag'] = 'Теги'; | ||
| 461 | +$_['text_seo_mode_create'] = 'Генерировать'; | ||
| 462 | +$_['text_seo_mode_delete'] = 'Удалить'; | ||
| 463 | +$_['text_seo_report'] = 'Отчет'; | ||
| 464 | +$_['text_seo_generator_url'] = 'Геренировать УРЛы'; | ||
| 465 | +$_['text_seo_generator_title'] = 'Геренировать Мета тайтлы'; | ||
| 466 | +$_['text_seo_generator_keywords'] = 'Геренировать Мета ключевые слова'; | ||
| 467 | +$_['text_seo_generator_desc'] = 'Геренировать Мета описание'; | ||
| 468 | +$_['text_seo_generator_full_desc'] = 'Геренировать Описание'; | ||
| 469 | +$_['text_seo_generator_tag'] = 'Геренировать Теги'; | ||
| 470 | +$_['text_seo_generator_h1'] = 'Геренировать СЕО H1'; | ||
| 471 | +$_['text_seo_generator_h2'] = 'Геренировать СЕО H2'; | ||
| 472 | +$_['text_seo_generator_h3'] = 'Геренировать СЕО H3'; | ||
| 473 | +$_['text_seo_generator_imgalt'] = 'Геренировать Альт картинок'; | ||
| 474 | +$_['text_seo_generator_imgtitle'] = 'Геренировать Тайтл картинок'; | ||
| 475 | +$_['text_seo_generator_imgname'] = 'Геренировать Названия картинок'; | ||
| 476 | +$_['text_seo_generator_related'] = 'Геренировать Рекомендуемые товары'; | ||
| 477 | +$_['text_seo_generator_related_no'] = 'Кол-во:'; | ||
| 478 | +$_['text_seo_generator_related_relevance'] = 'Релевантность (0-10):'; | ||
| 479 | +$_['text_seo_generator_related_samecat'] = 'Некотрые категории'; | ||
| 480 | +$_['text_query'] = 'Запрос'; | ||
| 481 | +$_['text_keyword'] = 'Ключевое слово'; | ||
| 482 | +$_['text_status'] = 'Статус'; | ||
| 483 | +$_['text_empty'] = 'Пусто'; | ||
| 484 | +$_['text_duplicate'] = 'Дубликат'; | ||
| 485 | +$_['text_report'] = 'Отчет'; | ||
| 486 | +$_['text_url_alias_report_btn'] = 'Отчет псевдонима Url'; | ||
| 487 | + | ||
| 488 | +$_['text_seo_result'] = 'Результат:'; | ||
| 489 | + | ||
| 490 | +$_['text_module'] = 'Модули'; | ||
| 491 | +$_['text_success'] = 'Отлично: Вы изменили значения СЕО модуля!'; | ||
| 492 | + | ||
| 493 | +$_['text_man_ext'] = 'Расширение производителей'; | ||
| 494 | + | ||
| 495 | +$_['text_seo_confirm'] = 'Вы уверены?'; | ||
| 496 | +$_['text_description'] = 'Описания'; | ||
| 497 | + | ||
| 498 | + | ||
| 499 | +// Full product path | ||
| 500 | + | ||
| 501 | +// Help sections | ||
| 502 | + | ||
| 503 | +$_['tab_info_request'] = 'Запросить заголовки'; | ||
| 504 | +$_['title_common_overview'] = 'ЧПУ компоненты'; | ||
| 505 | +$_['text_info_common_overview'] = ' | ||
| 506 | +<p><b>Краткие описания компонентов ЧПУ.</b></p> | ||
| 507 | +<h4>Абсолютные ссылки</h4> | ||
| 508 | +<p>Используйте этот компонент, чтобы установить дружественный URL-адрес для любого настраиваемого модуля, работает с полным URL-адресом вместо ссылки ключевого слова.</p> | ||
| 509 | +<p>http://website.com/index.php?<b>route=blog/blog&path=12&post=32</b> > http://website.com/<b>blog/blog-cat/this-is-a-blog-post</b></p> | ||
| 510 | +<h4>Common Page Url</h4> | ||
| 511 | +<p>Use this component to set friendly url to default opencart pages (account, contact, checkout, ...), handles only the route= parameter.</p> | ||
| 512 | +<p>http://website.com/index.php?<b>route=account/register</b> > http://website.com/<b>my-account/register</b></p> | ||
| 513 | +<h4>Param url</h4> | ||
| 514 | +<p>This component lists the seo url parameters from custom modules, so you can quick check them, you can create new parameters but it may not work on some modules so absolute url is recommended because it will work in any case.</p> | ||
| 515 | +<p>http://website.com/some-category?<b>super_filter=42</b> > http://website.com/some-category/<b>filter-blue</b></p> | ||
| 516 | +</ul>'; | ||
| 517 | +$_['text_info_absolute'] = ' | ||
| 518 | +<h4>Absolute Url - Handle any custom module url</h4> | ||
| 519 | +<p>Opencart is working by default with url keywords, for example <b>/desktop/pc/some-computer</b>, from this url opencart is searching in database each part to determine to what it relates (category, product, information, etc), then it will compute this link to an understandable one for the system which will look like <b>index.php?route=product/product&path=12_31&product_id=54</b>.</p> | ||
| 520 | +<p>With absolute url component you can define an url not using the keyword part but the full url itself, it is no use for product/information/categories etc but it can be very handy for making to work with any custom module.</p> | ||
| 521 | +<p>It is working with unlimited parameters in source url and unlimited levels in seo url.</p> | ||
| 522 | +<h4>Set up a new absolute url</h4> | ||
| 523 | +<p>Example, transform <b>http://website.com/index.php?route=blog/blog&post=32</b> into <b>http://website.com/blog/this-is-a-blog-post</b>.</p> | ||
| 524 | +<ol> | ||
| 525 | +<li>Click on <span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span></li> | ||
| 526 | +<li>Insert in query field <b>blog/blog&post=32</b> (do not insert index.php?route=)</li> | ||
| 527 | +<li>in Full seo url field <b>blog/this-is-a-blog-post</b></li> | ||
| 528 | +</ol> | ||
| 529 | +</ul>'; | ||
| 530 | +$_['text_info_common'] = ' | ||
| 531 | +<h4>Common Page Url - Give friendly url to default opencart pages (account, contact, checkout, ...)</h4> | ||
| 532 | +<p>By default opencart is not rewritting the common page urls, they remain this way <b>index.php?route=account/login</b>.</p> | ||
| 533 | +<p>With common page url component you can define an seo url for all these pages </p> | ||
| 534 | +<p>For example you can rewrite <b>index.php?route=account/register</b> to <b>register</b>, just put <b>account/register</b> in query (do not insert index.php?route=), and put <b>register</b> in seo url field.</p> | ||
| 535 | +<p>Here you can not insert any parameter, for example <b>account/register&param=value</b> won\'t work, you have to use absolute url for such link or insert the parameter into parameter url</p> | ||
| 536 | +<h4>Get predefined urls</h4> | ||
| 537 | +<p>Complete SEO comes with predefined urls for all common opencart pages, there various languages available and they will be automatically retrieved for current selected language if exists, if not it will get english urls instead.</p> | ||
| 538 | +<p>Warning: using restore default urls will replace all existent common page urls listed for current language.</p> | ||
| 539 | +<ol> | ||
| 540 | +<li>Click on <span class="gkd-badge"><i class="fa fa-caret-down"></i></span> on the bottom button to get access to advanced options.</li> | ||
| 541 | +<li>Then click on <span class="gkd-badge"><i class="fa fa-magic" style="color:#FB7C00"></i> Restore default URLs</span></li> | ||
| 542 | +<li>If the keywords are available for current language they will be displayed, if not english language will be displayed and you will have to translate.</li> | ||
| 543 | +<li>You translated a new language and want us to integrate in main package? then click on <span class="gkd-badge"><i class="fa fa-save" style="color:#4276D2"></i> Export URLs</span> and send us export file at support@geekodev.com</li> | ||
| 544 | +</ol> | ||
| 545 | +<h4>Set up a new common page url</h4> | ||
| 546 | +<p>Example, transform <b>http://website.com/index.php?route=account/register</b> into <b>http://website.com/my-account/register</b>.</p> | ||
| 547 | +<ol> | ||
| 548 | +<li>Click on <span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span></li> | ||
| 549 | +<li>Insert in query field <b>account/register</b> (do not insert route=)</li> | ||
| 550 | +<li>in Full seo url field <b>my-account/register</b></li> | ||
| 551 | +</ol> | ||
| 552 | +</ul>'; | ||
| 553 | +$_['text_info_special'] = ' | ||
| 554 | +<h4>Param url - Manage seo keywords of parameters in url</h4> | ||
| 555 | +<p>If you have a custom module which is handling seo keywords, its keywords will generally appear there, so you can easily give a look on them and change if necessary.</p> | ||
| 556 | +<p>If your custom module does not manage seo url automatically then it is recommended to use Absolute Url component to handle the urls. You can also use a combination of Common Page and Param url to handle it but Absolute url is easier for that, so this component is recommended only for view and not for url creation.</p> | ||
| 557 | +<h4>Set up a new redirection</h4> | ||
| 558 | +<p><span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span> click on this button and follow the instructions to set your url redirection.</p> | ||
| 559 | +</ul>'; | ||
| 560 | +$_['text_info_404'] = ' | ||
| 561 | +<h4>Not found (404) manager</h4> | ||
| 562 | +<p>This section lists all url accessed on your website that are actually not existant or that opencart system have not been able to forward to any content. For example when you arrive on such page:</p> | ||
| 563 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/not_found.png" alt=""/></p> | ||
| 564 | +<p>In such case Complete SEO Package will automatically save this url so you will be able to easily check all not found urls in this table and how many times they have been requested.</p> | ||
| 565 | +<h4>Create a redirection from a not found url</h4> | ||
| 566 | +<p>Click on the button <img src="view/seo_package/img/help/btn_plus.png"/> to a easily add a redirection for this url, once added your redirection will appear into "Url redirection" tab, and here the url will appear in <span class="text-success">green color</span> to indicate that this url already have a redirection.</p> | ||
| 567 | +<h4>Remove actual entries</h4> | ||
| 568 | +<p>These entries are for your information only, there is no impact to remove them, to do so just click on one of the following buttons:</p> | ||
| 569 | +<ul class="list-unstyled"> | ||
| 570 | +<li style="margin-top:12px"><span class="gkd-badge"><i class="fa fa-minus" style="color:#ED5555"></i> Remove redirected entries</span> this will remove all urls marked as <span class="text-success">green</span> which means any url that already have his redirection set</li> | ||
| 571 | +<li style="margin-top:12px"><span class="gkd-badge"><i class="fa fa-close" style="color:#ED5555"></i> Remove all entries</span> this will remove all urls in this table, marked green or not, don\'t worry this is not deleting the redirections made on these urls</li> | ||
| 572 | +</ul>'; | ||
| 573 | +$_['text_info_redirections'] = ' | ||
| 574 | +<h4>Url redirection</h4> | ||
| 575 | +<p>Here you can define your own URL redirections, this is using the redirection 301, it means search engines will consider the new url as the valid one.</p> | ||
| 576 | +<p>If you need to change the URL of a page as it is shown in search engine results, we recommend that you use a server-side 301 redirect. This is the best way to ensure that users and search engines are directed to the correct page. The 301 status code means that a page has permanently moved to a new location.</p> | ||
| 577 | +<p>301 redirects are particularly useful if you have any url not found on your website.</p> | ||
| 578 | +<h4>Set up a new redirection</h4> | ||
| 579 | +<p><span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span> click on this button and follow the instructions to set your url redirection.</p>'; | ||
| 580 | +$_['text_info_request'] = '<h4>Request headers</h4> | ||
| 581 | +<p>Request headers are part of the HTTP protocol, they are sent on each request made to the server.<br/>Here you will be able to change some parameters related to request headers, such optimizations can improve performance for the end user and also for search engine crawling robots.</p> | ||
| 582 | +<h5>Last-Modified</h5> | ||
| 583 | +<p>Include the last modified date of the actual item, improves performance for user (browser will fetch page from cache if not updated) and for crawling robots. For products the date will be the one of the last edit of product or the one of the last review if any. It is highly recommended to activate this setting.</p><p><img class="img-thumbnail" src="view/seo_package/img/help/headers-last-modified.png" alt=""/></p>'; | ||
| 584 | +$_['help_fb_appid_tab'] = 'Facebook App ID'; | ||
| 585 | +$_['help_microdata'] = ' | ||
| 586 | +<h4>Google microdata</h4> | ||
| 587 | +<p>Microdata is widely used by search engines to format the search result in better way, for example a product can display the price and review rating directly in search results : </p> | ||
| 588 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/microdata-product.jpg" alt=""/></p> | ||
| 589 | +<p>Complete SEO Package is using the latest JSON-LD format to include the microdata on your website. Basic informations are included (category, description, image, price, stock) and you can select extra data you want to display.</p> | ||
| 590 | +<h4>Benefits of using microdata</h4> | ||
| 591 | +<p><ul> | ||
| 592 | + <li>Eye catching results - Drawing a search users attention from your competitors and to your own result.</li> | ||
| 593 | + <li>Potential CTR increase - Possibly increasing click through rates and lowering the chance of the user bouncing as they have more information on the page before clicking through.</li> | ||
| 594 | + <li>Providing quality results - Offering results that are closer to user specifications.</li> | ||
| 595 | +</ul></p> | ||
| 596 | +<h4>Testing tool</h4> | ||
| 597 | +<p>Use the following testing tool to check your actual microdata: <a href="https://search.google.com/structured-data/testing-tool" target="_blank">Google structured data testing tool</a></p> | ||
| 598 | +'; | ||
| 599 | +$_['help_fb_appid'] = ' | ||
| 600 | +<h4>Facebook App ID</h4> | ||
| 601 | +<p>You must fill your facebook App ID in order to get this feature working, you will find it in the settings of your developper panel: <a href="http://facebook.com/developers">http://facebook.com/developers</a>.</p> | ||
| 602 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/settings_app-id.gif" alt=""/></p> | ||
| 603 | +'; | ||
| 604 | +$_['help_fb_setup_tab'] = 'How to use Facebook Opengraph'; | ||
| 605 | +$_['help_fb_setup'] = ' | ||
| 606 | +<h4>Install the Facebook Developer Application</h4> | ||
| 607 | +<p>The first step in creating an application in Facebok is to install the Facebook Developer application.</p> | ||
| 608 | +<p>To do that, log in to Facebook and then visit the URL <a href="http://facebook.com/developers">http://facebook.com/developers</a>.</p> | ||
| 609 | +<p>If this is the first time you’ve installed the Developer Application, you will see the Request for Permission dialog show below:</p> | ||
| 610 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/permission.jpg" alt="" /></p> | ||
| 611 | +<p>Click the <b>Allow</b> button to proceed.</p> | ||
| 612 | +<h4>Creating the Facebook Application for your Website</h4> | ||
| 613 | +<p>Now that you have the Developer App installed, click on the<b> Create New App</b> button.<br/><img class="img-thumbnail" src="view/seo_package/img/help/create-new-app.gif" alt=""/></p> | ||
| 614 | +<p>Give your application an "App Display Name" (the name displayed to users).</p> | ||
| 615 | +<p>For purposes of this tutorial, you don’t need to have a "Namespace".</p> | ||
| 616 | +<p>Click the "I agree to Facebook Platform Policies" box; then click the <b>Continue</b> button.<br/><img class="img-thumbnail" src="view/seo_package/img/help/dialog_new-app.gif" alt=""/></p> | ||
| 617 | +<p>On the next screen, enter the security phrase and then click <b>Submit</b>.</p> | ||
| 618 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/new-app_captcha.gif" alt=""/></p> | ||
| 619 | +<p>There are a lot of options you can tweak related to your application. In this post, we are going to focus on the basics needed to get your website set up with a Facebook App ID.</p> | ||
| 620 | +<h4>The Settings Tab</h4> | ||
| 621 | +<p>This is where you do the basic set up for your app</p> | ||
| 622 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/settings_app-id.gif" alt=""/></p> | ||
| 623 | +<p>App ID is now set up. Your App ID is the value you’ll be using to integrate your website with Facebook’s APIs so you can add the Social Plugins (Like Button, Send Button, Comments Box, etc.).</p> | ||
| 624 | +<p>You don’t need to add an icon. If your website has a favicon, it will be displayed next to your site’s URL in Facebook Insights.</p> | ||
| 625 | +<p><b>Basic info:</b></p> | ||
| 626 | +<p><ul> | ||
| 627 | +<li><b>App Display Name:</b> Make this the same as the original value you provided</li> | ||
| 628 | +<li><b>App Namespace:</b> Leave blank</li> | ||
| 629 | +<li><b>Contact Email:</b> Where you want Facebook to send emails regarding your app</li> | ||
| 630 | +<li><b>App Domain:</b> just put “mydomain.com” where “mydomain.com” is your website’s domain URL (TLD)</li> | ||
| 631 | +<li><b>Category:</b> Select a category from the pulldown list (optional)</li> | ||
| 632 | +</ul></p> | ||
| 633 | +<p>Your website is now an “object” in Facebook’s Open Graph, with its own App ID.</p> | ||
| 634 | +'; | ||
| 635 | +$_['help_flag_mode'] = ' | ||
| 636 | +<h4>Tag after domain</h4> | ||
| 637 | +<p>Language prefix mode permits to add the language code just after the domain name:</p> | ||
| 638 | +<p><code>http://example.com/<b>en</b></code><br/><code>http://example.com/<b>fr</b></code> | ||
| 639 | +<p>It can be useful to have a good separation between each language in multilingual websites.</p> | ||
| 640 | +<p>This parameter can be enabled anytime and take effect immediately, there is no need to re-generate the urls.</p> | ||
| 641 | +<h4>Extra options</h4> | ||
| 642 | +<table class="table table-bordered"> | ||
| 643 | +<tr><th style="width:220px">Option</th><th>Effect</th></tr> | ||
| 644 | +<tr><td><code>Short tag</code></td><td>Display <b>/en</b> instead of <b>/en-gb</b> in case you have full format defined</td></tr> | ||
| 645 | +<tr><td><code>No tag for default</code></td><td>Default language won\'t display the language tag</td></tr> | ||
| 646 | +<tr><td><code>Tag in uppercase</code></td><td>Display tag in uppercase <b>/EN, /FR</b></td></tr> | ||
| 647 | +</table> | ||
| 648 | +'; | ||
| 649 | +$_['help_store_mode'] = ' | ||
| 650 | +<h4>Tag as subdomain</h4> | ||
| 651 | +<p>Enable this option if you want your links to be written with specific store depending the language. For example if you have 2 stores defined like this :</p> | ||
| 652 | +<p><code>http://<b>en</b>.domain.com</code><br/><code>http://<b>fr</b>.domain.com</code></p> | ||
| 653 | +<p>By default opencart allows to change language but stay on same domain, if you enable this option and change the language, you will be redirected to the other domain. Also the hreflang links will be correctly updated with corresponding store url.</p> | ||
| 654 | +<p>This setting is using your stores configuration, so you have to configure the stores correctly to get this working, also note that this is not limited to subdomains, you could also use separate domains names for each language:</p> | ||
| 655 | +<p><code>http://<b>english-store</b>.com</code><br/><code>http://<b>french-store</b>.com</code></p> | ||
| 656 | +<p>If you make any modification on configuration in Settings > Stores, come back here and save settings again.</p> | ||
| 657 | +<h5>Actual configuration</h5> | ||
| 658 | +<p>In this section you can see how are actually binded your stores to each language, you must have only one store for each language in order to get this option working properly, if a store have no defined language you will get the message "<span class="text-danger">No language defined</span>", in this case it is necessary you define a language for this store in Settings > Stores.</p> | ||
| 659 | +'; | ||
| 660 | + | ||
| 661 | + | ||
| 662 | +// Error | ||
| 663 | +$_['error_permission'] = 'Ахтунг!!!: У вас нет прав для редактирования этого модуля!'; | ||
| 664 | +$_['error_module_disabled'] = 'Complete SEO Package полностью отключен, вы можете включить его в вкладке СЕО конфигурации.'; | ||
| 665 | +$_['error_friendly_disabled'] = 'Ахтунг!!!:: Компонент ЧПУ специальных страниц отключен, вы можете редактировать все значения, но они будут активны только тогда, когда вы активируете этот компонент в настройке СЕО'; | ||
| 666 | +$_['error_404_disabled'] = 'Ахтунг!!!:: Менеджер компонента 404 отключен, запись не найденных страниц будет активна только при активации этого компонента в настройке СЕО'; | ||
| 667 | +$_['error_absolute_disabled'] = 'Ахтунг!!!:: Абсолютный URL-адрес отключен, вы можете редактировать все значения, но они будут активны только при активации этого компонента в настройке СЕО'; | ||
| 668 | +$_['error_redirect_disabled'] = 'Ахтунг!!!:: Компонент перенаправления УРЛ отключен, вы можете редактировать все значения, но они будут активны только тогда, когда вы активируете этот компонент в настройке СЕО'; | ||
| 669 | +?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php | ||
| 2 | +// English Multilingual SEO Author: Sirius Dev | ||
| 3 | +// Heading | ||
| 4 | +$_['heading_title'] = '<img src="view/seo_package/img/icon.png" style="vertical-align:top;padding-right:4px"/><b style="color:#555">Complete</b> <b style="color:#11b209">SEO Package</b>'; | ||
| 5 | +$_['module_title'] = 'Complete SEO <span>Package</span>'; | ||
| 6 | + | ||
| 7 | +$_['text_store_select'] = 'Store'; | ||
| 8 | + | ||
| 9 | +// Dashboard | ||
| 10 | +$_['tab_seo_dashboard'] = 'Dashboard'; | ||
| 11 | +$_['text_seo_score'] = 'SEO Power'; | ||
| 12 | +$_['text_dashboard_config'] = 'SEO Overview'; | ||
| 13 | + | ||
| 14 | +// Tab multistore | ||
| 15 | +$_['tab_seo_multistore'] = 'Multistore'; | ||
| 16 | +$_['info_multistore_dashboard'] = 'Here you can define specific parameters each store.<br/><br/>If Multistore SEO component is enabled you can also set specific urls for each store products/categories/informations and the mass update tab will be available here.<br/><br/>Enabling Multistore component will insert new tables in your database to handle the multistore urls and seo data (titles, metas, etc.).'; | ||
| 17 | + | ||
| 18 | +// Tab seo editor | ||
| 19 | +$_['tab_seo_editor'] = 'SEO Editor'; | ||
| 20 | +$_['tab_seo_editor_product'] = 'Product'; | ||
| 21 | +$_['tab_seo_editor_category'] = 'Category'; | ||
| 22 | +$_['tab_seo_editor_information'] = 'Information'; | ||
| 23 | +$_['tab_seo_editor_manufacturer'] = 'Manufacturer'; | ||
| 24 | +$_['tab_seo_editor_image'] = 'Image'; | ||
| 25 | +$_['tab_seo_editor_absolute'] = 'Absolute Url'; | ||
| 26 | +$_['tab_seo_editor_common'] = 'Common Page Url'; | ||
| 27 | +$_['tab_seo_editor_special'] = 'Param Url'; | ||
| 28 | +$_['tab_seo_editor_redirect'] = 'Url Redirection'; | ||
| 29 | +$_['tab_seo_editor_404'] = '404 Manager'; | ||
| 30 | +$_['text_multistore'] = 'Multistore SEO'; | ||
| 31 | +$_['info_multistore'] = 'Give different SEO information (keyword, metas, etc) on products and categories for each store'; | ||
| 32 | +$_['text_editor_count'] = 'Count'; | ||
| 33 | +$_['text_editor_query'] = 'Query'; | ||
| 34 | +$_['text_editor_query_redirect'] = 'Query'; | ||
| 35 | +$_['text_editor_query_absolute'] = 'Full Query (value after route=)'; | ||
| 36 | +$_['text_editor_query_common'] = 'Query (value after route=)'; | ||
| 37 | +$_['text_editor_query_special'] = 'Query (ex: custom_id=1)'; | ||
| 38 | +$_['text_editor_image'] = 'Image'; | ||
| 39 | +$_['text_editor_name'] = 'Name'; | ||
| 40 | +$_['text_editor_title'] = 'Title'; | ||
| 41 | +$_['text_editor_meta_title'] = 'Meta title'; | ||
| 42 | +$_['text_editor_meta_keyword'] = 'Meta keyword'; | ||
| 43 | +$_['text_editor_meta_description'] = 'Meta description'; | ||
| 44 | +$_['text_editor_url'] = 'SEO url'; | ||
| 45 | +$_['text_editor_url_absolute'] = 'Full seo url'; | ||
| 46 | +$_['text_editor_url_redirect'] = 'Redirect to'; | ||
| 47 | +$_['text_editor_tag'] = 'Tags'; | ||
| 48 | +$_['text_editor_h1'] = 'Seo H1'; | ||
| 49 | +$_['text_editor_item_name'] = 'Product name'; | ||
| 50 | +$_['text_editor_image_name'] = 'Name'; | ||
| 51 | +$_['text_editor_image_alt'] = 'Alt'; | ||
| 52 | +$_['text_editor_image_title'] = 'Title'; | ||
| 53 | +$_['text_editor_related'] = 'Related'; | ||
| 54 | +$_['text_seo_new_alias_title'] = 'Insert new url alias'; | ||
| 55 | +$_['text_seo_new_absolute_alias_info'] = 'Rewrite an url in absolute way, for example index.php?route=<b>blog/blog&post_id=123</b><br/>In query field put <b>blog/blog&post_id=123</b> (insert only the value after index.php?route=)<br/>In SEO url field put the url you want: <b>blog/this-is-a-blog-post</b>'; | ||
| 56 | +$_['text_seo_new_alias_info'] = 'Rewrite an url that use the route parameter, for example index.php?route=<b>account/account</b><br/>In query field put <b>account/account</b> (it is not necessary to insert route=)<br/>In SEO url field put the url you want: <b>my-account</b>'; | ||
| 57 | +$_['text_seo_new_spec_alias_info'] = 'Rewrite urls that belongs to any custom module even if it is not made to handle friendly urls.<br/>For example index.php?<b>blog_news_id=123</b><br/>In query field put <b>blog_news_id=123</b><br/>In SEO url field put the url you want: <b>a-great-url-for-my-great-news</b>'; | ||
| 58 | +$_['text_seo_new_redirect'] = 'This generates a 301 redirection to indicate to search engines that the current url has been moved permanently to a new one. Use this feature to fix crawling errors from google webmaster.<br/><br/>In query type the full url <b>http://example.com/broken-url</b><br/>In redirect field put new url <b>http://example.com/fixed-url</b><br/><br/>Or without the domain name (don\'t forget the initial /)<br/>In query: <b>/broken-url</b><br/>In redirect field: <b>/fixed-url</b><br/><br/>Dynamic redirection<br/>If you want to make it work even with further url updates fill the redirect field that way:<br/><b>product/product&product_id=42</b> (where 42 is your actual product id)'; | ||
| 59 | +$_['text_info_limits_tab'] = 'Meta fields limits'; | ||
| 60 | +$_['text_info_limits_title'] = 'Meta title and description limits'; | ||
| 61 | +$_['text_info_robots'] = '<h4>Meta Robots</h4> | ||
| 62 | +<p>The robots meta tag lets you utilize a granular, page-specific approach to controlling how an individual page should be indexed and served to users in search results.<br/>The setting defined here will be the default one for all pages of your store, then you can edit a specific product to change the robots value (in data tab) for this product only.<br/>The meta robots parameter will be set in your page as meta tag in head section: <meta name="robots" /></p> | ||
| 63 | +<table class="table table-bordered"> | ||
| 64 | + <tbody><tr><th>Directive</th><th>Meaning</th></tr> | ||
| 65 | + <tr><td><code><span>all</span></code></td> | ||
| 66 | + <td>There are no restrictions for indexing or serving. Note: this | ||
| 67 | + directive is the default value and has no effect if explicitly | ||
| 68 | + listed, so when you choose this value the meta robots tag won\'t be displayed</td></tr> | ||
| 69 | + <tr><td><code><span>noindex</span></code></td> | ||
| 70 | + <td>Do not show this page in search results</td></tr> | ||
| 71 | + <tr><td><code><span>nofollow</span></code></td> | ||
| 72 | + <td>Do not follow the links on this page</td></tr> | ||
| 73 | + <tr><td><code><span>none</span></code></td> | ||
| 74 | + <td>Equivalent to <code><span>noindex,<wbr> nofollow</span></code></td></tr> | ||
| 75 | + <tr><td><code><span>noimageindex</span></code></td> | ||
| 76 | + <td>Do not index images on this page.</td></tr> | ||
| 77 | +</tbody></table> | ||
| 78 | +<h4>Automatic settings</h4> | ||
| 79 | +<p>Once enabled you will be able to define the default value for meta robots, and the module will automatically apply the best parameter for some specific pages, please see the following list to know which parameters are automatically set on your website:</p> | ||
| 80 | +<table class="table table-bordered"> | ||
| 81 | +<tr><th style="width:220px">Type</th><th>Meta robots value</th></tr> | ||
| 82 | +<tr><td>Pagination pages</td><td><code>noindex, follow</code></td></tr> | ||
| 83 | +<tr><td>Page with limit parameter</td><td><code>noindex, follow</code></td></tr> | ||
| 84 | +<tr><td>Search pages</td><td><code>none</code> (noindex, nofollow)</td></tr> | ||
| 85 | +</table> | ||
| 86 | +'; | ||
| 87 | +$_['text_info_limits'] = '<h4>Meta title and description limits</h4> | ||
| 88 | +<p>Meta title and description are very important since they are what the user will see when making a request on search engines, title as the main link and description the little text below.</p> | ||
| 89 | +<p><img src="view/seo_package/img/help/meta_title_desc.png" alt="" class="img-thumbnail"/></p> | ||
| 90 | +<p>Google is truncating your title after 67 characters but will index a few more, to get this easy to visualise the title field will become orange in case of bypassing 67 chars and red in case of bypassing 85 chars.<br/>The limit for description are ~300 chars for truncating and a bit more for indexing.</p> | ||
| 91 | +<p><span style="color:#fc7402">Orange color</span> means your text will surely be truncated but will be fully indexed anyway.<br /><span style="color:#f23333">Red color</span> means some words at the end of your text won\'t be indexed.</p> | ||
| 92 | +<p><b>Important:</b> default database field of opencart for meta description is limited to 255 chars, so if you want to have meta descriptions for 300 chars you should change the actual limit. To do so go into PHPMyAdmin > table oc_product_description > edit meta_description field and set 350 as the limit instead of 255.</p>'; | ||
| 93 | +$_['entry_analytics_code'] = 'Google Analytics code:'; | ||
| 94 | +$_['text_info_analytics_tab'] = 'Google Analytics'; | ||
| 95 | +$_['text_info_analytics'] = '<h4>Verify your website on Google Analytics</h4> | ||
| 96 | +<p>You can have detailled information of your website SEO using google analytics, for that connect to <a href="https://www.google.com/webmasters/">https://www.google.com/webmasters/</a> and click on ADD A PROPERTY, then choose the HTML tag verification method like on the image below.</p> | ||
| 97 | +<p><img src="view/seo_package/img/help/gg_analytics.png" alt="" class="img-thumbnail"/></p> | ||
| 98 | +<p>Copy the code given by google here to activate the verification of your website. Now you should be able to verify on google page.</p>'; | ||
| 99 | + | ||
| 100 | +// Tab seo configuration | ||
| 101 | +$_['tab_seo_options'] = 'SEO Configuration'; | ||
| 102 | +$_['text_seo_package_status'] = 'SEO Package status:'; | ||
| 103 | +$_['text_seo_components'] = 'Components:'; | ||
| 104 | +$_['text_seo_tab_general_1'] = 'Components'; | ||
| 105 | +$_['text_seo_tab_general_2'] = 'Language tag'; | ||
| 106 | +$_['text_seo_tab_general_3'] = 'Hreflang'; | ||
| 107 | +$_['text_seo_tab_general_4'] = 'Keyword options'; | ||
| 108 | +$_['text_seo_tab_general_5'] = 'Auto update'; | ||
| 109 | +$_['text_seo_tab_general_6'] = 'Pagination'; | ||
| 110 | +$_['text_seo_tab_general_7'] = 'Cache'; | ||
| 111 | +$_['text_seo_tab_general_8'] = 'Canonical links'; | ||
| 112 | +$_['text_seo_tab_general_9'] = ''; | ||
| 113 | +$_['text_seo_tab_general_10'] = 'Reviews'; | ||
| 114 | +$_['text_seo_tab_general_11'] = 'Request headers'; | ||
| 115 | +$_['text_seo_tab_general_12'] = 'Sitemap'; | ||
| 116 | +$_['text_seo_tab_general_13'] = 'Meta robots'; | ||
| 117 | +$_['text_seo_tab_general_14'] = 'Redirections'; | ||
| 118 | +$_['text_seo_tab_general_16'] = 'Modules SEO'; | ||
| 119 | +$_['text_info_general'] = 'These settings impact the global functioning of SEOs, they take effect immediately and can be changed at any time.'; | ||
| 120 | +$_['text_info_general_3'] = 'Hreflang tag allow search engines to know the url of current page for other languages.<br/>Once activated it will be included in all pages of your website, and also into the seo package sitemap (feed > seo package sitemap).<br/> More information : <a href="https://support.google.com/webmasters/answer/189077?hl=en" target="new">here</a>'; | ||
| 121 | +$_['text_info_general_6'] = 'Rewrite pagination links SEO friendly, for example website.com/category?page=3 will become website.com/category/page-3'; | ||
| 122 | +$_['text_info_general_7'] = 'The cache feature will speed up your website by caching all url links instead of calculating them each time.<br/>Warning: this feature is experimental and may not work on all configurations, if you have another cache module or cache integrated with your theme disable this option.'; | ||
| 123 | +$_['text_info_general_8'] = 'Canonical links are informing search engines that if it find a same page elsewhere on the website it have to only consider one link, this is important in order to avoid duplicate content penalties'; | ||
| 124 | +$_['text_info_general_10'] = 'In default opencart reviews are loaded dynamically by ajax, that make search engines to not see the content of reviews which would be valuable content for your website, enable this option to be able to insert a block containing the user reviews in HTML in order to make search engines to be able to see them.<br /><br />You have to insert manually this code in your product/product.tpl template : <b><?php echo $seo_reviews; ?></b><br /><br /> Then you can style it as you want, container class is <b>.seo_reviews</b>, item class is <b>.seo_review</b>'; | ||
| 125 | +$_['text_info_general_12'] = 'The sitemap have to be configured into feeds section, please click on the button below to configure it.'; | ||
| 126 | +$_['text_seopackage_sitemap'] = 'SEO Package Sitemap'; | ||
| 127 | +$_['text_seo_pagination'] = 'Enable SEO pagination<span class="help">Warning: this is not compatible with ajax pagination included some themes, if it doesn\'t work you will have to disable seo pagination or ajax pagination of the theme</span>'; | ||
| 128 | +$_['text_seo_pagination_fix'] = 'Prev/next fix:<span class="help">Fix opencart 2.2+ issue with prev/next in subcategories</span>'; | ||
| 129 | +$_['text_seo_pagination_canonical'] = 'Canonical with pagination:<span class="help">Set canonical link of pagination pages to include the page number (not recommended)</span>'; | ||
| 130 | +$_['text_seo_canonical'] = 'Canonical:<span class="help">Enable canonical for all pages</span>'; | ||
| 131 | +$_['text_seo_absolute'] = 'Absolute category path:'; | ||
| 132 | +$_['text_seo_absolute_help'] = 'Allow to use same keyword for sub-categories and something else (ex: <br/>/laptop/apple<br/>/desktop/apple<br/>/apple (manufacturer))<br/>If you give keyword for manufacturer, it cannot be used for top category (/apple and /apple), only subcategories'; | ||
| 133 | +$_['text_seo_reviews'] = 'SEO reviews:<span class="help">Insert reviews in HTML content</span>'; | ||
| 134 | +$_['text_seo_extension'] = 'Extension:<span class="help">Add the extension of your choice at the end of a product keyword (ex: .html)</span>'; | ||
| 135 | +$_['text_seo_flag_tag'] = 'Tag after domain'; | ||
| 136 | +$_['text_seo_flag_store'] = 'Tag as subdomain'; | ||
| 137 | +$_['text_seo_flag'] = 'Language tag mode:'; | ||
| 138 | +$_['text_seo_flag_short'] = 'Short tag:'; | ||
| 139 | +$_['text_seo_flag_upper'] = 'Tag in uppercase:'; | ||
| 140 | +$_['text_seo_flag_default'] = 'No tag for default:'; | ||
| 141 | +$_['text_seo_urlcache'] = 'URL Cache:<span class="help">Speed up page loading by using url caching</span>'; | ||
| 142 | +$_['text_seo_redirect_dynamic'] = 'Redirect dynamic links:<span class="help">Dynamic links (route=product/product&product_id=32) will be automatically redirected to their friendly url if it exists. The redirection is 301 so search engine will stop to index it and take only friendly url as reference.</span>'; | ||
| 143 | +$_['text_seo_redirect_canonical'] = 'Redirect to canonical:<span class="help">This is for friendly urls, it checks if the current link is the canonical link, if not it will be redirected to the canonical. This avoid to have multiple urls active for same item. The redirection is 301.</span>'; | ||
| 144 | +$_['text_seo_redirect_canonical_1'] = 'Redirect all links except category links'; | ||
| 145 | +$_['text_seo_redirect_canonical_2'] = 'Redirect all links including category links'; | ||
| 146 | +$_['text_seo_redirect_http'] = 'HTTP mode:<span class="help">Use this to force your website to use SSL or www, if an url is not correct a 301 redirection will be made.</span>'; | ||
| 147 | +$_['text_seo_redirect_ssl'] = 'Force SSL value, don\'t change WWW'; | ||
| 148 | +$_['text_seo_redirect_www'] = 'Force WWW value, don\'t change SSL'; | ||
| 149 | +$_['text_seo_redirect_sslwww'] = 'Force both SSL and WWW values'; | ||
| 150 | +$_['text_seo_redirect_http_1'] = 'No-SSL, no-WWW - http://example.com'; | ||
| 151 | +$_['text_seo_redirect_http_2'] = 'No-SSL, WWW - http://www.example.com'; | ||
| 152 | +$_['text_seo_redirect_http_3'] = 'SSL, no-WWW - https://example.com'; | ||
| 153 | +$_['text_seo_redirect_http_4'] = 'SSL, WWW - https://www.example.com'; | ||
| 154 | +$_['text_seo_redirect_http_5'] = 'SSL - https://(www.)example.com'; | ||
| 155 | +$_['text_seo_redirect_http_6'] = 'No-SSL - http://(www.)example.com'; | ||
| 156 | +$_['text_seo_redirect_http_7'] = 'WWW - http(s)://www.example.com'; | ||
| 157 | +$_['text_seo_redirect_http_8'] = 'No-WWW - http(s)://example.com'; | ||
| 158 | +$_['text_seo_special_group'] = 'Special price group:<span class="help">[price] tag can calculate the special price, define here which customer group you want to use for calculating it, if disabled then only default price will be displayed</span>'; | ||
| 159 | +$_['text_seo_format_tag'] = 'Tag formatting:<span class="help">Add commas between each words to product tags when generating in mass update or auto-update</span>'; | ||
| 160 | +$_['text_seo_banner'] = 'Banner links rewrite:<span class="help">Dynamically generate seo link on banners (used in banner, carousel, slideshow modules)</span>'; | ||
| 161 | +$_['text_seo_banner_help'] = 'In banners section, do not enter the seo link (/category/product_name) but enter instead the default opencart link : <b>index.php?route=product/product&path=10_21&product_id=54</b>.<br />You can also strip out the index.php, like this : <b>product/product&path=23&product_id=48</b>'; | ||
| 162 | +$_['text_seo_hreflang'] = 'Enable hreflang tag:'; | ||
| 163 | +$_['text_seo_substore'] = 'Enable multi-store rewriting:'; | ||
| 164 | +$_['text_seo_substore_config'] = 'Actual configuration:'; | ||
| 165 | +$_['text_no_language_defined'] = 'No language defined'; | ||
| 166 | +$_['text_info_transform'] = 'All these settings define the way that the keyword will be generated when saving an item or using the mass update.'; | ||
| 167 | +$_['text_seo_whitespace'] = 'Spaces:<span class="help">Replace space chars by...</span>'; | ||
| 168 | +$_['text_seo_lowercase'] = 'Lowercase:<span class="help">QWERTY => qwerty</span>'; | ||
| 169 | +$_['text_seo_remove'] = 'Remove words:<span class="help">Remove some words when generating the urls, can be used to remove common words like "the, a, ...", put a comma between each one</span>'; | ||
| 170 | +$_['text_seo_duplicate'] = 'Duplicates:<span class="help">Allow to use same keyword for distinct language version of an item</span>'; | ||
| 171 | +$_['text_seo_ascii'] = 'ASCII mode:<span class="help">Replace accentuated chars by their ascii equivalent<br/>"éàôï" => "eaoi"<br/>Supported languages: All latin (French, Italian, Spanish, etc), Arabic, Bulgarian, Croatian, Czech, German, Greek, Latvian, Lithunanian, Polish, Romanian, Russian, Serbian, Slovenian, Turkish, Ukrainian</span>'; | ||
| 172 | +$_['text_seo_autofill'] = 'Auto fill'; | ||
| 173 | +$_['text_seo_autofill_on'] = 'on:'; | ||
| 174 | +$_['text_seo_autofill_desc'] = 'Auto fill:<span class="help">If left the field blank on insert or edit, a value will be created automatically based on the pattern in mass update tab.<br/><br/>This works for : <br/>- products<br/>- categories<br/>- informations</span>'; | ||
| 175 | +$_['text_seo_autourl'] = 'Auto URL:<span class="help">If left blank on insert or edit, seo url keyword will be generated automatically using the parameter set in "Mass update" tab<br/>This works for products, categories and informations</span>'; | ||
| 176 | +$_['text_seo_autotitle'] = 'Auto title and desc for other langs:<span class="help">If left blank on insert or edit, titles and descriptions of other languages will copy the default language title and description<br/>This works for products, categories and informations</span>'; | ||
| 177 | +$_['text_headers_lastmod'] = 'Last-Modified:<span class="help">Add last modified date in headers</span>'; | ||
| 178 | +$_['text_all'] = 'All'; | ||
| 179 | +$_['text_insert'] = 'Insert'; | ||
| 180 | +$_['text_edit'] = 'Edit'; | ||
| 181 | +$_['text_fix_search'] = 'Fix search url:'; | ||
| 182 | +$_['text_fix_search_help'] = '<span class="help">Search url cannot be friendly for the top search bar because the url is hardcoded in javascript, enable this option if you want to have the search url rewritten. If it is not working with your theme please contact us.</span>'; | ||
| 183 | +$_['text_fix_cart'] = 'Fix cart remove issue:'; | ||
| 184 | +$_['text_fix_cart_help'] = '<span class="help">When there is friendly url for checkout/cart the remove of a product is not updating the current screen, enable this to fix this issue.</span>'; | ||
| 185 | + | ||
| 186 | +// Tab store seo | ||
| 187 | +$_['tab_seo_store'] = 'Store SEO'; | ||
| 188 | +$_['text_info_store'] = '<h4>Store SEO</h4> | ||
| 189 | +<p>In this section you can customize the meta title, h1, meta keywords and description on home page for each store and each language!</p><p>Anything entered here will bypass the values entered in opencart settings.</p> | ||
| 190 | +<h4>Meta Title prefix and suffix</h4> | ||
| 191 | +<p>Use this parameter to add some text before or after all your website meta titles, they can be defined for each store and each language.</p> | ||
| 192 | +<p>For example if you want to have your title like <b>"Product title | My store"</b> just put <b>" | My store"</b> in suffix.</p>'; | ||
| 193 | +$_['text_info_seo_titles_tab'] = 'SEO titles (H1, H2, H3)'; | ||
| 194 | +$_['text_info_seo_titles'] = '<h4>SEO titles (H1, H2, H3)</h4> | ||
| 195 | +<p>SEO titles are not automatically applied to your theme because this will be changing your design, so you have to manually insert them in your themplates.<br/><br/>Files to modify (.tpl or .twig):<br/><code style="padding:0">/catalog/view/theme/[theme]/template/common/home<br/>/catalog/view/theme/[theme]/template/product/product<br/>/catalog/view/theme/[theme]/template/product/category<br/>/catalog/view/theme/[theme]/template/product/information</code><br/><br/>Insert these codes for .tpl (please not $heading_title is automatically containing $seo_h1, so it is generally not necessary to put seo h1, just h2 and h3): <br/><code style="padding:0"><h1><?php echo $seo_h1; ?></h1><br/><h2><?php echo $seo_h2; ?></h2><br/><h3><?php echo $seo_h3; ?></h3></code><br/><br/>Or these codes for .twig (please not {{ heading_title }} is automatically containing {{ seo_h1 }}, so it is generally not necessary to put seo h1, just h2 and h3): <br/><code style="padding:0"><h1>{{ seo_h1 }}</h1><br/><h2>{{ seo_h2 }}</h2><br/><h3>{{ seo_h3 }}</h3></code><br/></p> | ||
| 196 | +<p>Consider that elements with display:none may not be considered by search engines, so you may want to insert only some of these depending your template (h1 is the most important).</p>'; | ||
| 197 | +$_['entry_robots'] = 'Enable meta robots'; | ||
| 198 | +$_['store_seo_global'] = 'Global settings'; | ||
| 199 | +$_['store_seo_home'] = 'Homepage only'; | ||
| 200 | +$_['entry_robots_default'] = 'Default value'; | ||
| 201 | +$_['entry_store_seo_title'] = 'Meta Title:'; | ||
| 202 | +$_['entry_store_seo_title_extra'] = 'Meta Title prefix and suffix:'; | ||
| 203 | +$_['entry_store_title'] = 'Title H1:'; | ||
| 204 | +$_['entry_store_h2'] = 'Title H2:'; | ||
| 205 | +$_['entry_store_h3'] = 'Title H3:'; | ||
| 206 | +$_['entry_store_desc'] = 'Meta Description:'; | ||
| 207 | +$_['entry_store_keywords'] = 'Meta Keywords:'; | ||
| 208 | +$_['info_store_heading'] = 'See information below to include in your theme'; | ||
| 209 | + | ||
| 210 | +// Tab rich snippets | ||
| 211 | +$_['tab_seo_snippets'] = 'Rich Snippets'; | ||
| 212 | +$_['text_seo_tab_snippet_1'] = 'Google Microdata (Rich Cards)'; | ||
| 213 | +$_['text_seo_tab_snippet_2'] = 'Facebook Open Graph'; | ||
| 214 | +$_['text_seo_tab_snippet_3'] = 'Twitter Card'; | ||
| 215 | +$_['text_seo_tab_snippet_3'] = 'Twitter Card'; | ||
| 216 | +$_['text_seo_tab_snippet_4'] = 'Google Publisher'; | ||
| 217 | +$_['tab_microdata_1'] = 'Product'; | ||
| 218 | +$_['tab_microdata_2'] = 'Organization'; | ||
| 219 | +$_['tab_microdata_3'] = 'Store'; | ||
| 220 | +$_['tab_microdata_4'] = 'Website'; | ||
| 221 | +$_['tab_microdata_5'] = 'Place'; | ||
| 222 | +$_['tab_microdata_6'] = 'Breadcrumbs'; | ||
| 223 | +$_['entry_snippet_pricerange'] = 'Price range:'; | ||
| 224 | +$_['entry_snippet_same_as'] = 'Same as:'; | ||
| 225 | +$_['entry_enable_microdata'] = 'Enable Google Microdata:'; | ||
| 226 | +$_['entry_microdata_search'] = 'Search box'; | ||
| 227 | +$_['entry_microdata_logo'] = 'Logo'; | ||
| 228 | +$_['entry_microdata_address'] = 'Address'; | ||
| 229 | +$_['entry_snippet_contact'] = 'Contacts'; | ||
| 230 | +$_['entry_microdata_gps'] = 'GPS coordinates'; | ||
| 231 | +$_['entry_gps_lat'] = 'Latitude'; | ||
| 232 | +$_['entry_gps_long'] = 'Longitude'; | ||
| 233 | +$_['entry_address_street'] = 'Street'; | ||
| 234 | +$_['entry_address_city'] = 'Locality'; | ||
| 235 | +$_['entry_address_region'] = 'Region'; | ||
| 236 | +$_['entry_address_code'] = 'Postal code'; | ||
| 237 | +$_['entry_address_country'] = 'Country'; | ||
| 238 | +$_['entry_email'] = 'Email'; | ||
| 239 | +$_['entry_phone'] = 'Phone'; | ||
| 240 | +$_['entry_product_data'] = 'Include product data:'; | ||
| 241 | +$_['entry_snippet_data'] = 'Include data:'; | ||
| 242 | +$_['entry_model'] = 'Model'; | ||
| 243 | +$_['entry_description'] = 'Description (based on meta description)'; | ||
| 244 | +$_['entry_reviews'] = 'Reviews'; | ||
| 245 | +$_['entry_upc'] = 'UPC'; | ||
| 246 | +$_['entry_mpn'] = 'MPN'; | ||
| 247 | +$_['entry_ean'] = 'EAN'; | ||
| 248 | +$_['entry_isbn'] = 'ISBN'; | ||
| 249 | +$_['entry_rating'] = 'Average rating'; | ||
| 250 | +$_['entry_manufacturer'] = 'Manufacturer'; | ||
| 251 | +$_['entry_brand'] = 'Manufacturer'; | ||
| 252 | +$_['entry_enable_opengraph'] = 'Enable Facebook Open Graph:'; | ||
| 253 | +$_['entry_opengraph_id'] = 'Facebook App ID:'; | ||
| 254 | +$_['entry_enable_tcard'] = 'Enable Twitter Card:'; | ||
| 255 | +$_['entry_twitter_nick'] = 'Twitter nickname (optional):'; | ||
| 256 | +$_['entry_twitter_home_type'] = 'Home page type:'; | ||
| 257 | +$_['entry_twitter_summary'] = 'Summary'; | ||
| 258 | +$_['entry_twitter_summary_large'] = 'Summary with large image'; | ||
| 259 | +$_['entry_enable_gpublisher'] = 'Enable Google Publisher:'; | ||
| 260 | +$_['entry_gpublisher_url'] = 'Google+ url:'; | ||
| 261 | + | ||
| 262 | + | ||
| 263 | +// Tab friendly urls | ||
| 264 | +$_['tab_seo_friendly'] = 'Friendly URLs'; | ||
| 265 | +$_['text_seo_export_urls'] = 'Export URLs'; | ||
| 266 | +$_['text_seo_export_urls_tooltip'] = 'Export Friendly URLs and send them to the developer for integration in official package'; | ||
| 267 | +$_['text_seo_reset_urls'] = 'Restore default URLs'; | ||
| 268 | +$_['text_seo_reset_urls_tooltip']= 'If the current language does not have predefined urls the module will load english version'; | ||
| 269 | +$_['text_info_friendly'] = 'Here you can manage the friendly urls, edit them as you want.<br/>You have also the possibility to add new url, it works for example for any custom module you installed, just fill the 1st field with the value in route (?route=mymodule/action) and the 2nd field with the keyword you want to appear in the url.'; | ||
| 270 | +$_['text_seo_friendly'] = 'Common Pages Urls'; | ||
| 271 | +$_['info_seo_friendly'] = 'Enable this component in order to rewrite urls for common pages urls and param urls'; | ||
| 272 | +$_['info_seo_absolute'] = 'Enable this component in order to use absolute urls'; | ||
| 273 | +$_['info_seo_404'] = 'Enable this component to activate the logging of 404 error pages'; | ||
| 274 | +$_['info_seo_redirect'] = 'Enable this component to activate 301 redirections'; | ||
| 275 | +$_['text_seo_cat_slash'] = 'Final slash on category'; | ||
| 276 | +$_['text_seo_cat_slash_help'] = 'Insert a final slash at the end of category urls'; | ||
| 277 | +$_['text_seo_redir_reviews'] = 'Redirect orhpan reviews:<span class="help">If a review page index.php?route=product/product/review is not accessed through ajax request then redirect 301 to the product page. This prevent these review snippet to be indexed.</span>'; | ||
| 278 | +$_['text_seo_remove_urls'] = 'Remove all entries'; | ||
| 279 | +$_['text_seo_remove_redirected'] = 'Remove redirected entries'; | ||
| 280 | +$_['text_seo_add_url'] = 'Add new entry'; | ||
| 281 | + | ||
| 282 | +// Tab full product path | ||
| 283 | +$_['tab_seo_fpp'] = 'Path Manager'; | ||
| 284 | +// Text | ||
| 285 | +$_['tab_fpp_product'] = 'Product'; | ||
| 286 | +$_['tab_fpp_category'] = 'Category'; | ||
| 287 | +$_['tab_fpp_manufacturer'] = 'Manufacturer'; | ||
| 288 | +$_['tab_fpp_search'] = 'Search/Tag'; | ||
| 289 | +$_['tab_fpp_common'] = 'Common'; | ||
| 290 | +$_['text_fpp_cat_canonical'] = 'Category canonical:'; | ||
| 291 | +$_['text_fpp_cat_mode_0'] = 'Direct link'; | ||
| 292 | +$_['text_fpp_cat_mode_1'] = 'Full path'; | ||
| 293 | +$_['text_fpp_cat_canonical_help'] = 'What kind of link you want to give to search engines ?<br/><b>Direct link</b>: /category (default)<br/><b>Full path</b>: /cat1/cat2/category<br/><br/>With direct link path mode the canonical is automatically set on directl link too'; | ||
| 294 | +$_['text_fpp_mode'] = 'Product path mode:'; | ||
| 295 | +$_['text_fpp_mode_0'] = 'Direct link'; | ||
| 296 | +$_['text_fpp_mode_1'] = 'Shortest path'; | ||
| 297 | +$_['text_fpp_mode_2'] = 'Largest path'; | ||
| 298 | +$_['text_fpp_mode_3'] = 'Manufacturer path'; | ||
| 299 | +$_['text_fpp_mode_4'] = 'Last category'; | ||
| 300 | +$_['text_fpp_slash'] = 'Final slash'; | ||
| 301 | +$_['text_fpp_slash_mode_0'] = 'No final slash'; | ||
| 302 | +$_['text_fpp_slash_mode_1'] = 'Final slash on categories'; | ||
| 303 | +$_['text_fpp_slash_mode_2'] = 'Final slash on all urls'; | ||
| 304 | +$_['text_fpp_slash_help'] = 'Insert a final slash on urls, this is matter of preference, there is no SEO impact.'; | ||
| 305 | + | ||
| 306 | +$_['text_fpp_bc_mode'] = 'Breadcrumbs mode:'; | ||
| 307 | +$_['text_fpp_breadcrumbs_fix'] = 'Breadcrumbs generator:'; | ||
| 308 | +$_['text_fpp_breadcrumbs_0'] = 'Default'; | ||
| 309 | +$_['text_fpp_breadcrumbs_1'] = 'Generate if empty'; | ||
| 310 | +$_['text_fpp_breadcrumbs_2'] = 'Always generate'; | ||
| 311 | + | ||
| 312 | +$_['text_fpp_mode_help'] = '<span class="help"><b>Direct link:</b> direct link to product, no category included (ex: /product_name), this is default opencart behaviour<br/> | ||
| 313 | + <b>Shortest path:</b> shortest path by default, can be altered by banned categories (ex: /category/product_name)<br/> | ||
| 314 | + <b>Largest path:</b> largest path by default, can be altered by banned categories (ex: /category/sub-category/product_name)<br/> | ||
| 315 | + <b>Last category:</b> only the last category of the product will be displayed, if you have a product in /category/sub-category/product_name the link will be /sub-category/product_name<br/> | ||
| 316 | + <b>Manufacturer path:</b> manufacturer path instead of categories (ex: /manufacturer/product_name)</span>'; | ||
| 317 | +$_['text_fpp_breadcrumbs_help'] = '<span class="help"><b>Default:</b> default opencart behaviour: will display breadcrumbs coming from categories<br/> | ||
| 318 | + <b>Generate if empty:</b> generate breadcrumbs only when it is not already available, so category breadcrumb is preserved (recommended)<br/> | ||
| 319 | + <b>Always generate:</b> overwrite also the category breadcrumbs, so the only breadcrumbs you will get is the one generated by the module<br/></span>'; | ||
| 320 | +$_['text_fpp_bypasscat'] = 'Rewrite product path in categories:'; | ||
| 321 | +$_['text_fpp_bypasscat_help'] = '<span class="help">If disabled, the product link from categories remains the same in order to preserve normal behaviour and breadcrumbs.<br/>If enabled, the product link from categories is overwritten with path generated by the module.<br>In any case canonical link is updated with good value so google will only see the url generated by the module for a given product.</span>'; | ||
| 322 | +$_['text_fpp_directcat'] = 'Category path mode:'; | ||
| 323 | +$_['text_fpp_directcat_help'] = 'What kind of link you want to display on your website ?<br/><b>Direct link</b>: /category<br/><b>Full path</b>: /cat1/cat2/category (default)'; | ||
| 324 | +$_['text_fpp_homelink'] = 'Rewrite home link:'; | ||
| 325 | +$_['text_fpp_homelink_help'] = '<span class="help">Set homepage link to mystore.com instead of mystore.com/index.php?route=common/home</span>'; | ||
| 326 | +$_['text_fpp_depth'] = 'Max levels:'; | ||
| 327 | +$_['text_fpp_depth_help'] = '<span class="help">Maximum category depth you want to display, for example if you have a product in /cat/subcat/subcat/product and set this option to 2 the link will become /cat/subcat/product<br/>This option works in largest and shortest path modes</span>'; | ||
| 328 | +$_['text_fpp_unlimited'] = 'Unlimited'; | ||
| 329 | +$_['text_fpp_brand_parent'] = 'Manufacturer parent:'; | ||
| 330 | +$_['text_fpp_brand_parent_help'] = '<span class="help">Include the manufacturers inside the manufacturer list url.<br/>For example if your manufacturer list is /brand, the manufacturer apple will appear this way /brand/apple instead of direct /apple</span>'; | ||
| 331 | +$_['text_fpp_remove_search'] = 'Remove search/tag parameters:'; | ||
| 332 | +$_['text_fpp_remove_search_help'] = '<span class="help">Remove the search or tag parameter (?search=something, ?tag=something) from product urls in search results (products urls only, not search page url itself)</span>'; | ||
| 333 | +$_['text_fpp_seo_tag'] = 'Seo tag:<span class="help">For tag urls (route=product/search&tag=something) define the keyword to use for nice url, for example if you set "tag" the result url will be /tag/something</span>, let empty to disable'; | ||
| 334 | +$_['entry_category'] = 'Banned categories:<span class="help">Choose the categories that will never be displayed in case of multiple paths</span>'; | ||
| 335 | + | ||
| 336 | +// Tab mass update | ||
| 337 | +$_['tab_seo_update'] = 'Mass Update'; | ||
| 338 | +$_['text_info_update'] = 'Be careful when using this function since it will overwrite all your keywords.<br/>You can use the simulate function to check the result before really update.<br/>Select the language flags to update only these languages.'; | ||
| 339 | +$_['text_cleanup'] = 'Clean up:<span class="help">Remove old urls in database, make a clean up if you have troubles with some urls</span>'; | ||
| 340 | +$_['text_cache'] = 'URL cache:<span class="help">Generate or delete url cache</span>'; | ||
| 341 | +$_['text_redirection'] = 'Dynamic redirection:<span class="help">Save all actual urls for further redirection, then you can change the seo keyword, google will keep the track.</span>'; | ||
| 342 | +$_['text_cache_create_btn']= 'Generate cache'; | ||
| 343 | +$_['text_redirect_create_btn']= 'Generate redirection'; | ||
| 344 | +$_['text_cache_delete_btn']= 'Clear cache'; | ||
| 345 | +$_['text_cleanup_btn'] = 'Clean up'; | ||
| 346 | +$_['text_cleanup_duplicate_btn'] = 'Remove duplicate url alias'; | ||
| 347 | +$_['text_cleanup_done'] = 'Clean up done, %d entries deleted'; | ||
| 348 | +$_['text_seo_languages'] = 'Select languages'; | ||
| 349 | +$_['text_seo_simulate'] = 'Simulation:<span class="help">No changes are made while this button is on</span>'; | ||
| 350 | +$_['text_seo_empty_only'] = 'Update empty values only:<span class="help">Check off to overwrite all values</span>'; | ||
| 351 | +$_['text_seo_redirect'] = 'Redirection'; | ||
| 352 | +$_['text_seo_redirect_mode'] = 'Url redirection:<span class="help">Automatically insert a redirection for old urls</span>'; | ||
| 353 | +$_['text_image_name_lang'] = 'Image names can be set in only one language, please choose one and click on generate again'; | ||
| 354 | +$_['text_enable'] = 'Enable'; | ||
| 355 | +$_['text_deleted'] = 'Deleted'; | ||
| 356 | + | ||
| 357 | +// Tab cron | ||
| 358 | +$_['tab_seo_cron'] = 'Cron'; | ||
| 359 | +$_['text_info_cron'] = 'You can make mass update using cron jobs, copy the file <b>seo_package_cli.php</b> from "_extra files" folder (preferably into a directory outside of web root) and configure your cron with the path to that file.<br/>The script will use the settings configured on this page.<br/>Warning: cron jobs may not be able generate unlimited items depending on your server limitations and number of items you have you may face error on using cron, it is recommended to use the "empty only" parameter to limit the number of items you are going to update using cron.<br/><br/>Use this cron command (must be adapted to your server php path):<br/>/[path_to_php]/php [path_to_your_root_folder]/seo_package_cli.php<br/><br/>Or this one for substores:<br/>/[path_to_php]/php [path_to_your_root_folder]/seo_package_cli.php store=X (replace X by the store ID)'; | ||
| 360 | +$_['text_seo_cron_update'] = 'Update:'; | ||
| 361 | +$_['text_clear_logs'] = 'Clear logs'; | ||
| 362 | +$_['text_tab_cron_1'] = 'Configuration'; | ||
| 363 | +$_['text_tab_cron_2'] = 'Report'; | ||
| 364 | +$_['text_cli_log_save'] = 'Save log file'; | ||
| 365 | +$_['text_cli_log_too_big'] = 'Your log file is too big (%s) to be displayed here - you can download it or clear it with buttons below'; | ||
| 366 | + | ||
| 367 | +// Tab about | ||
| 368 | +$_['tab_seo_about'] = 'About'; | ||
| 369 | + | ||
| 370 | +$_['text_nothing_changed'] = 'Zero items'; | ||
| 371 | +$_['text_seo_no_language'] = 'No language selected'; | ||
| 372 | +$_['text_seo_fullscreen'] = 'Fullscreen'; | ||
| 373 | +$_['text_seo_show_old'] = 'Display old value'; | ||
| 374 | +$_['text_seo_change_count'] = 'entries changed'; | ||
| 375 | +$_['text_seo_old_value'] = 'Old value'; | ||
| 376 | +$_['text_seo_new_value'] = 'New value'; | ||
| 377 | +$_['text_seo_item'] = 'Item'; | ||
| 378 | +$_['text_simulation'] = 'Simulation mode'; | ||
| 379 | +$_['text_write'] = 'Write mode'; | ||
| 380 | +$_['text_empty_only'] = 'Empty values only'; | ||
| 381 | +$_['text_all_values'] = 'All values'; | ||
| 382 | +$_['text_seo_update_info'] = '1. Enable or disable simulation mode<br/>2. Select if you want to update only empty items or all items<br/>3. Click on the Generate button of your choice<br/>4. Results will be displayed here'; | ||
| 383 | +$_['text_seo_simulation_mode'] = '<span>SIMULATION MODE</span><br/>No changes will be made to database'; | ||
| 384 | +$_['text_seo_write_mode'] = '<span>WRITE MODE</span><br/>Modifications will be saved'; | ||
| 385 | +$_['text_seo_product'] = 'Product'; | ||
| 386 | +$_['text_seo_category'] = 'Category'; | ||
| 387 | +$_['text_seo_manufacturer'] = 'Manufacturer'; | ||
| 388 | +$_['text_seo_information'] = 'Information'; | ||
| 389 | +$_['text_seo_cache'] = 'Name'; | ||
| 390 | +$_['text_seo_cleanup'] = 'Entry (url)'; | ||
| 391 | +$_['text_seo_type_product'] = 'Products'; | ||
| 392 | +$_['text_seo_type_category'] = 'Categories'; | ||
| 393 | +$_['text_seo_type_manufacturer'] = 'Manufacturers'; | ||
| 394 | +$_['text_seo_type_information'] = 'Informations'; | ||
| 395 | +$_['text_seo_type_redirect'] = 'Dynamic redirection'; | ||
| 396 | +$_['text_seo_mode_product'] = 'Products'; | ||
| 397 | +$_['text_seo_mode_category'] = 'Categories'; | ||
| 398 | +$_['text_seo_mode_manufacturer'] = 'Manufacturers'; | ||
| 399 | +$_['text_seo_mode_information'] = 'Informations'; | ||
| 400 | +$_['text_seo_mode_url_alias'] = 'Url Alias'; | ||
| 401 | +$_['text_seo_mode_duplicate'] = 'Remove duplicate'; | ||
| 402 | +$_['text_seo_type_redirection'] = 'Dynamic redirection'; | ||
| 403 | +$_['text_seo_type_report'] = 'Report'; | ||
| 404 | +$_['text_seo_type_cache'] = 'Cache'; | ||
| 405 | +$_['text_seo_type_cleanup'] = 'Clean up'; | ||
| 406 | +$_['text_seo_generator_product'] = 'Products:'; | ||
| 407 | +$_['text_seo_generator_product_desc'] = '<span class="help">Available patterns:<br/><b>[name]</b> : Product name<br/><b>[model]</b> : Model<br/><b>[category]</b> : Category name<br/><b>[brand]</b> : Brand name<br/><b>[desc]</b> : Description extract<br/><b>[desc_sentence]</b> : 1st sentence<br/><b>[current]</b> : Current value<br/><b>{aa|bb|cc}</b> : Random values<br/><b>{en}..{/en}</b> : Only for lang<br/><br/>Other : <b>[parent_category]</b> <b>[upc]</b> <b>[sku]</b> <b>[ean]</b> <b>[jan]</b> <b>[isbn]</b> <b>[mpn]</b> <b>[location]</b> <b>[price]</b> <b>[lang]</b> <b>[lang_id]</b> <b>[prod_id]</b> <b>[cat_id]</b></span>'; | ||
| 408 | +$_['text_seo_generator_category'] = 'Categories:'; | ||
| 409 | +$_['text_seo_generator_category_desc'] = '<span class="help">Available patterns:<br/><b>[name]</b> : Category name<br/><b>[desc]</b> : Description extract<br/><b>[current]</b> : Current value<br/><b>{aa|bb|cc}</b> : Random values<br/><b>{en}..{/en}</b> : Only for lang<br/><br/><b>[parent]</b> : Parent category name<br/><b>[lowest_price]</b> : Lowest product price<br/><b>[highest_price]</b> : Highest product price<br/><br/>Other : <b>[lang]</b> <b>[lang_id]</b> <b>[cat_id]</b></span>'; | ||
| 410 | +$_['text_seo_generator_information'] = 'Informations pages:'; | ||
| 411 | +$_['text_seo_generator_information_desc']= '<span class="help">Available patterns:<br/><b>[name]</b> : Information title<br/><b>[desc]</b> : Description extract<br/><b>[current]</b> : Current value<br/><b>{aa|bb|cc}</b> : Random values<br/><b>{en}..{/en}</b> : Only for lang<br/><br/>Other : <b>[lang]</b> <b>[lang_id]</b></span>'; | ||
| 412 | +$_['text_seo_generator_manufacturer'] = 'Manufacturers:'; | ||
| 413 | +$_['text_seo_generator_manufacturer_desc']= '<span class="help">Available patterns:<br/><b>[name]</b> : Manufacturer name<br/><b>[current]</b> : Current value<br/><b>{aa|bb|cc}</b> : Random values<br/><b>{en}..{/en}</b> : Only for lang</span>'; | ||
| 414 | +$_['text_seo_mode_url'] = 'SEO URLs'; | ||
| 415 | +$_['text_seo_generator_redirect'] = 'Generate dynamic redirections'; | ||
| 416 | +$_['text_seo_mode_title'] = 'Meta Title'; | ||
| 417 | +$_['seo_title_prefix'] = 'Prefix'; | ||
| 418 | +$_['seo_title_suffix'] = 'Suffix'; | ||
| 419 | +$_['text_seo_mode_h1'] = 'SEO H1'; | ||
| 420 | +$_['text_seo_mode_h2'] = 'SEO H2'; | ||
| 421 | +$_['text_seo_mode_h3'] = 'SEO H3'; | ||
| 422 | +$_['text_seo_mode_image_name'] = 'Image name'; | ||
| 423 | +$_['text_seo_mode_image_alt'] = 'Image alt'; | ||
| 424 | +$_['text_seo_mode_image_title'] = 'Image title'; | ||
| 425 | +$_['text_seo_mode_keyword'] = 'Meta Keywords'; | ||
| 426 | +$_['text_seo_mode_description'] = 'Meta Description'; | ||
| 427 | +$_['text_seo_mode_related'] = 'Related products'; | ||
| 428 | +$_['text_seo_mode_tag'] = 'Tags'; | ||
| 429 | +$_['text_seo_mode_create'] = 'Generate'; | ||
| 430 | +$_['text_seo_mode_delete'] = 'Delete'; | ||
| 431 | +$_['text_seo_report'] = 'Report'; | ||
| 432 | +$_['text_seo_generator_url'] = 'Generate URLs'; | ||
| 433 | +$_['text_seo_generator_title'] = 'Generate Meta Title'; | ||
| 434 | +$_['text_seo_generator_keywords'] = 'Generate Meta Keywords'; | ||
| 435 | +$_['text_seo_generator_desc'] = 'Generate Meta Description'; | ||
| 436 | +$_['text_seo_generator_full_desc'] = 'Generate Description'; | ||
| 437 | +$_['text_seo_generator_store_copy_i'] = 'Copy store data from default store'; | ||
| 438 | +$_['text_seo_generator_store_copy'] = 'Copy store SEO data'; | ||
| 439 | +$_['text_seo_generator_tag'] = 'Generate Tags'; | ||
| 440 | +$_['text_seo_generator_h1'] = 'Generate SEO H1'; | ||
| 441 | +$_['text_seo_generator_h2'] = 'Generate SEO H2'; | ||
| 442 | +$_['text_seo_generator_h3'] = 'Generate SEO H3'; | ||
| 443 | +$_['text_seo_generator_imgalt'] = 'Generate Image Alt'; | ||
| 444 | +$_['text_seo_generator_imgtitle'] = 'Generate Image Title'; | ||
| 445 | +$_['text_seo_generator_imgname'] = 'Generate Image Name'; | ||
| 446 | +$_['text_seo_generator_related'] = 'Generate Related Products'; | ||
| 447 | +$_['text_seo_generator_related_no'] = 'Qty:'; | ||
| 448 | +$_['text_seo_generator_related_relevance'] = 'Relevance (0-10):'; | ||
| 449 | +$_['text_seo_generator_related_samecat'] = 'Same category'; | ||
| 450 | +$_['text_query'] = 'Query'; | ||
| 451 | +$_['text_keyword'] = 'Keyword'; | ||
| 452 | +$_['text_status'] = 'Status'; | ||
| 453 | +$_['text_empty'] = 'Empty'; | ||
| 454 | +$_['text_duplicate'] = 'Duplicate'; | ||
| 455 | +$_['text_report'] = 'Report'; | ||
| 456 | +$_['text_url_alias_report_btn'] = 'Url alias report'; | ||
| 457 | + | ||
| 458 | +$_['text_seo_result'] = 'Result:'; | ||
| 459 | + | ||
| 460 | +$_['text_module'] = 'Modules'; | ||
| 461 | +$_['text_success'] = 'Success: You have modified module SEO module!'; | ||
| 462 | + | ||
| 463 | +$_['text_man_ext'] = 'Manufacturer extended'; | ||
| 464 | + | ||
| 465 | +$_['text_seo_confirm'] = 'Are you sure ?'; | ||
| 466 | +$_['text_description'] = 'Description'; | ||
| 467 | + | ||
| 468 | + | ||
| 469 | +// Full product path | ||
| 470 | + | ||
| 471 | +// Help sections | ||
| 472 | + | ||
| 473 | +$_['tab_info_request'] = 'Request headers'; | ||
| 474 | +$_['title_common_overview'] = 'Url components'; | ||
| 475 | +$_['text_info_common_overview'] = ' | ||
| 476 | +<p><b>Url components quick description, check dedicated section for more information.</b></p> | ||
| 477 | +<h4>Absolute url</h4> | ||
| 478 | +<p>Use this component to set friendly url to any custom module, works with full url instead of url keyword.</p> | ||
| 479 | +<p>http://website.com/index.php?<b>route=blog/blog&path=12&post=32</b> > http://website.com/<b>blog/blog-cat/this-is-a-blog-post</b></p> | ||
| 480 | +<h4>Common Page Url</h4> | ||
| 481 | +<p>Use this component to set friendly url to default opencart pages (account, contact, checkout, ...), handles only the route= parameter.</p> | ||
| 482 | +<p>http://website.com/index.php?<b>route=account/register</b> > http://website.com/<b>my-account/register</b></p> | ||
| 483 | +<h4>Param url</h4> | ||
| 484 | +<p>This component lists the seo url parameters from custom modules, so you can quick check them, you can create new parameters but it may not work on some modules so absolute url is recommended because it will work in any case.</p> | ||
| 485 | +<p>http://website.com/some-category?<b>super_filter=42</b> > http://website.com/some-category/<b>filter-blue</b></p> | ||
| 486 | +</ul>'; | ||
| 487 | +$_['text_info_absolute'] = ' | ||
| 488 | +<h4>Absolute Url - Handle any custom module url</h4> | ||
| 489 | +<p>Opencart is working by default with url keywords, for example <b>/desktop/pc/some-computer</b>, from this url opencart is searching in database each part to determine to what it relates (category, product, information, etc), then it will compute this link to an understandable one for the system which will look like <b>index.php?route=product/product&path=12_31&product_id=54</b>.</p> | ||
| 490 | +<p>With absolute url component you can define an url not using the keyword part but the full url itself, it is no use for product/information/categories etc but it can be very handy for making to work with any custom module.</p> | ||
| 491 | +<p>It is working with unlimited parameters in source url and unlimited levels in seo url.</p> | ||
| 492 | +<h4>Set up a new absolute url</h4> | ||
| 493 | +<p>Example, transform <b>http://website.com/index.php?route=blog/blog&post=32</b> into <b>http://website.com/blog/this-is-a-blog-post</b>.</p> | ||
| 494 | +<ol> | ||
| 495 | +<li>Click on <span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span></li> | ||
| 496 | +<li>Insert in query field <b>blog/blog&post=32</b> (do not insert index.php?route=)</li> | ||
| 497 | +<li>in Full seo url field <b>blog/this-is-a-blog-post</b></li> | ||
| 498 | +</ol> | ||
| 499 | +</ul>'; | ||
| 500 | +$_['text_info_common'] = ' | ||
| 501 | +<h4>Common Page Url - Give friendly url to default opencart pages (account, contact, checkout, ...)</h4> | ||
| 502 | +<p>By default opencart is not rewritting the common page urls, they remain this way <b>index.php?route=account/login</b>.</p> | ||
| 503 | +<p>With common page url component you can define an seo url for all these pages </p> | ||
| 504 | +<p>For example you can rewrite <b>index.php?route=account/register</b> to <b>register</b>, just put <b>account/register</b> in query (do not insert index.php?route=), and put <b>register</b> in seo url field.</p> | ||
| 505 | +<p>Here you can not insert any parameter, for example <b>account/register&param=value</b> won\'t work, you have to use absolute url for such link or insert the parameter into parameter url</p> | ||
| 506 | +<h4>Get predefined urls</h4> | ||
| 507 | +<p>Complete SEO comes with predefined urls for all common opencart pages, there various languages available and they will be automatically retrieved for current selected language if exists, if not it will get english urls instead.</p> | ||
| 508 | +<p>Warning: using restore default urls will replace all existent common page urls listed for current language.</p> | ||
| 509 | +<ol> | ||
| 510 | +<li>Click on <span class="gkd-badge"><i class="fa fa-caret-down"></i></span> on the bottom button to get access to advanced options.</li> | ||
| 511 | +<li>Then click on <span class="gkd-badge"><i class="fa fa-magic" style="color:#FB7C00"></i> Restore default URLs</span></li> | ||
| 512 | +<li>If the keywords are available for current language they will be displayed, if not english language will be displayed and you will have to translate.</li> | ||
| 513 | +<li>You translated a new language and want us to integrate in main package? then click on <span class="gkd-badge"><i class="fa fa-save" style="color:#4276D2"></i> Export URLs</span> and send us export file at support@geekodev.com</li> | ||
| 514 | +</ol> | ||
| 515 | +<h4>Set up a new common page url</h4> | ||
| 516 | +<p>Example, transform <b>http://website.com/index.php?route=account/register</b> into <b>http://website.com/my-account/register</b>.</p> | ||
| 517 | +<ol> | ||
| 518 | +<li>Click on <span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span></li> | ||
| 519 | +<li>Insert in query field <b>account/register</b> (do not insert route=)</li> | ||
| 520 | +<li>in Full seo url field <b>my-account/register</b></li> | ||
| 521 | +</ol> | ||
| 522 | +</ul>'; | ||
| 523 | +$_['text_info_special'] = ' | ||
| 524 | +<h4>Param url - Manage seo keywords of parameters in url</h4> | ||
| 525 | +<p>If you have a custom module which is handling seo keywords, its keywords will generally appear there, so you can easily give a look on them and change if necessary.</p> | ||
| 526 | +<p>If your custom module does not manage seo url automatically then it is recommended to use Absolute Url component to handle the urls. You can also use a combination of Common Page and Param url to handle it but Absolute url is easier for that, so this component is recommended only for view and not for url creation.</p> | ||
| 527 | +<h4>Set up a new redirection</h4> | ||
| 528 | +<p><span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span> click on this button and follow the instructions to set your url redirection.</p> | ||
| 529 | +</ul>'; | ||
| 530 | +$_['text_info_404'] = ' | ||
| 531 | +<h4>Not found (404) manager</h4> | ||
| 532 | +<p>This section lists all url accessed on your website that are actually not existant or that opencart system have not been able to forward to any content. For example when you arrive on such page:</p> | ||
| 533 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/not_found.png" alt=""/></p> | ||
| 534 | +<p>In such case Complete SEO Package will automatically save this url so you will be able to easily check all not found urls in this table and how many times they have been requested.</p> | ||
| 535 | +<h4>Create a redirection from a not found url</h4> | ||
| 536 | +<p>Click on the button <img src="view/seo_package/img/help/btn_plus.png"/> to a easily add a redirection for this url, once added your redirection will appear into "Url redirection" tab, and here the url will appear in <span class="text-success">green color</span> to indicate that this url already have a redirection.</p> | ||
| 537 | +<h4>Remove actual entries</h4> | ||
| 538 | +<p>These entries are for your information only, there is no impact to remove them, to do so just click on one of the following buttons:</p> | ||
| 539 | +<ul class="list-unstyled"> | ||
| 540 | +<li style="margin-top:12px"><span class="gkd-badge"><i class="fa fa-minus" style="color:#ED5555"></i> Remove redirected entries</span> this will remove all urls marked as <span class="text-success">green</span> which means any url that already have his redirection set</li> | ||
| 541 | +<li style="margin-top:12px"><span class="gkd-badge"><i class="fa fa-close" style="color:#ED5555"></i> Remove all entries</span> this will remove all urls in this table, marked green or not, don\'t worry this is not deleting the redirections made on these urls</li> | ||
| 542 | +</ul>'; | ||
| 543 | +$_['text_info_redirections'] = ' | ||
| 544 | +<h4>Url redirection</h4> | ||
| 545 | +<p>Here you can define your own URL redirections, this is using the redirection 301, it means search engines will consider the new url as the valid one.</p> | ||
| 546 | +<p>If you need to change the URL of a page as it is shown in search engine results, we recommend that you use a server-side 301 redirect. This is the best way to ensure that users and search engines are directed to the correct page. The 301 status code means that a page has permanently moved to a new location.</p> | ||
| 547 | +<p>301 redirects are particularly useful if you have any url not found on your website.</p> | ||
| 548 | +<h4>Set up a new redirection</h4> | ||
| 549 | +<p><span class="gkd-badge"><i class="fa fa-plus" style="color:#4CBD35"></i> Add new entry</span> click on this button and follow the instructions to set your url redirection.</p>'; | ||
| 550 | +$_['text_info_request'] = '<h4>Request headers</h4> | ||
| 551 | +<p>Request headers are part of the HTTP protocol, they are sent on each request made to the server.<br/>Here you will be able to change some parameters related to request headers, such optimizations can improve performance for the end user and also for search engine crawling robots.</p> | ||
| 552 | +<h5>Last-Modified</h5> | ||
| 553 | +<p>Include the last modified date of the actual item, improves performance for user (browser will fetch page from cache if not updated) and for crawling robots. For products the date will be the one of the last edit of product or the one of the last review if any. It is highly recommended to activate this setting.</p><p><img class="img-thumbnail" src="view/seo_package/img/help/headers-last-modified.png" alt=""/></p>'; | ||
| 554 | +$_['help_fb_appid_tab'] = 'Facebook App ID'; | ||
| 555 | +$_['help_microdata'] = ' | ||
| 556 | +<h4>Google microdata</h4> | ||
| 557 | +<p>Microdata is widely used by search engines to format the search result in better way, for example a product can display the price and review rating directly in search results : </p> | ||
| 558 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/microdata-product.jpg" alt=""/></p> | ||
| 559 | +<p>Complete SEO Package is using the latest JSON-LD format to include the microdata on your website. Basic informations are included (category, description, image, price, stock) and you can select extra data you want to display.</p> | ||
| 560 | +<h4>Benefits of using microdata</h4> | ||
| 561 | +<p><ul> | ||
| 562 | + <li>Eye catching results - Drawing a search users attention from your competitors and to your own result.</li> | ||
| 563 | + <li>Potential CTR increase - Possibly increasing click through rates and lowering the chance of the user bouncing as they have more information on the page before clicking through.</li> | ||
| 564 | + <li>Providing quality results - Offering results that are closer to user specifications.</li> | ||
| 565 | +</ul></p> | ||
| 566 | +<h4>Testing tool</h4> | ||
| 567 | +<p>Use the following testing tool to check your actual microdata: <a href="https://search.google.com/structured-data/testing-tool" target="_blank">Google structured data testing tool</a></p> | ||
| 568 | +'; | ||
| 569 | +$_['help_fb_appid'] = ' | ||
| 570 | +<h4>Facebook App ID</h4> | ||
| 571 | +<p>You must fill your facebook App ID in order to get this feature working, you will find it in the settings of your developper panel: <a href="http://facebook.com/developers">http://facebook.com/developers</a>.</p> | ||
| 572 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/settings_app-id.gif" alt=""/></p> | ||
| 573 | +'; | ||
| 574 | +$_['help_fb_setup_tab'] = 'How to use Facebook Opengraph'; | ||
| 575 | +$_['help_fb_setup'] = ' | ||
| 576 | +<h4>Install the Facebook Developer Application</h4> | ||
| 577 | +<p>The first step in creating an application in Facebok is to install the Facebook Developer application.</p> | ||
| 578 | +<p>To do that, log in to Facebook and then visit the URL <a href="http://facebook.com/developers">http://facebook.com/developers</a>.</p> | ||
| 579 | +<p>If this is the first time you’ve installed the Developer Application, you will see the Request for Permission dialog show below:</p> | ||
| 580 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/permission.jpg" alt="" /></p> | ||
| 581 | +<p>Click the <b>Allow</b> button to proceed.</p> | ||
| 582 | +<h4>Creating the Facebook Application for your Website</h4> | ||
| 583 | +<p>Now that you have the Developer App installed, click on the<b> Create New App</b> button.<br/><img class="img-thumbnail" src="view/seo_package/img/help/create-new-app.gif" alt=""/></p> | ||
| 584 | +<p>Give your application an "App Display Name" (the name displayed to users).</p> | ||
| 585 | +<p>For purposes of this tutorial, you don’t need to have a "Namespace".</p> | ||
| 586 | +<p>Click the "I agree to Facebook Platform Policies" box; then click the <b>Continue</b> button.<br/><img class="img-thumbnail" src="view/seo_package/img/help/dialog_new-app.gif" alt=""/></p> | ||
| 587 | +<p>On the next screen, enter the security phrase and then click <b>Submit</b>.</p> | ||
| 588 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/new-app_captcha.gif" alt=""/></p> | ||
| 589 | +<p>There are a lot of options you can tweak related to your application. In this post, we are going to focus on the basics needed to get your website set up with a Facebook App ID.</p> | ||
| 590 | +<h4>The Settings Tab</h4> | ||
| 591 | +<p>This is where you do the basic set up for your app</p> | ||
| 592 | +<p><img class="img-thumbnail" src="view/seo_package/img/help/settings_app-id.gif" alt=""/></p> | ||
| 593 | +<p>App ID is now set up. Your App ID is the value you’ll be using to integrate your website with Facebook’s APIs so you can add the Social Plugins (Like Button, Send Button, Comments Box, etc.).</p> | ||
| 594 | +<p>You don’t need to add an icon. If your website has a favicon, it will be displayed next to your site’s URL in Facebook Insights.</p> | ||
| 595 | +<p><b>Basic info:</b></p> | ||
| 596 | +<p><ul> | ||
| 597 | +<li><b>App Display Name:</b> Make this the same as the original value you provided</li> | ||
| 598 | +<li><b>App Namespace:</b> Leave blank</li> | ||
| 599 | +<li><b>Contact Email:</b> Where you want Facebook to send emails regarding your app</li> | ||
| 600 | +<li><b>App Domain:</b> just put “mydomain.com” where “mydomain.com” is your website’s domain URL (TLD)</li> | ||
| 601 | +<li><b>Category:</b> Select a category from the pulldown list (optional)</li> | ||
| 602 | +</ul></p> | ||
| 603 | +<p>Your website is now an “object” in Facebook’s Open Graph, with its own App ID.</p> | ||
| 604 | +'; | ||
| 605 | +$_['help_flag_mode'] = ' | ||
| 606 | +<h4>Tag after domain</h4> | ||
| 607 | +<p>Language prefix mode permits to add the language code just after the domain name:</p> | ||
| 608 | +<p><code>http://example.com/<b>en</b></code><br/><code>http://example.com/<b>fr</b></code> | ||
| 609 | +<p>It can be useful to have a good separation between each language in multilingual websites.</p> | ||
| 610 | +<p>This parameter can be enabled anytime and take effect immediately, there is no need to re-generate the urls.</p> | ||
| 611 | +<h4>Extra options</h4> | ||
| 612 | +<table class="table table-bordered"> | ||
| 613 | +<tr><th style="width:220px">Option</th><th>Effect</th></tr> | ||
| 614 | +<tr><td><code>Short tag</code></td><td>Display <b>/en</b> instead of <b>/en-gb</b> in case you have full format defined</td></tr> | ||
| 615 | +<tr><td><code>No tag for default</code></td><td>Default language won\'t display the language tag</td></tr> | ||
| 616 | +<tr><td><code>Tag in uppercase</code></td><td>Display tag in uppercase <b>/EN, /FR</b></td></tr> | ||
| 617 | +</table> | ||
| 618 | +'; | ||
| 619 | +$_['help_store_mode'] = ' | ||
| 620 | +<h4>Tag as subdomain</h4> | ||
| 621 | +<p>Enable this option if you want your links to be written with specific store depending the language. For example if you have 2 stores defined like this :</p> | ||
| 622 | +<p><code>http://<b>en</b>.domain.com</code><br/><code>http://<b>fr</b>.domain.com</code></p> | ||
| 623 | +<p>By default opencart allows to change language but stay on same domain, if you enable this option and change the language, you will be redirected to the other domain. Also the hreflang links will be correctly updated with corresponding store url.</p> | ||
| 624 | +<p>This setting is using your stores configuration, so you have to configure the stores correctly to get this working, also note that this is not limited to subdomains, you could also use separate domains names for each language:</p> | ||
| 625 | +<p><code>http://<b>english-store</b>.com</code><br/><code>http://<b>french-store</b>.com</code></p> | ||
| 626 | +<p>If you make any modification on configuration in Settings > Stores, come back here and save settings again.</p> | ||
| 627 | +<h5>Actual configuration</h5> | ||
| 628 | +<p>In this section you can see how are actually binded your stores to each language, you must have only one store for each language in order to get this option working properly, if a store have no defined language you will get the message "<span class="text-danger">No language defined</span>", in this case it is necessary you define a language for this store in Settings > Stores.</p> | ||
| 629 | +'; | ||
| 630 | + | ||
| 631 | + | ||
| 632 | +// Error | ||
| 633 | +$_['error_permission'] = 'Warning: You do not have permission to modify this module!'; | ||
| 634 | +$_['error_module_disabled'] = 'Complete SEO Package is currently disabled, you can enable it in SEO Configuration tab.'; | ||
| 635 | +$_['error_friendly_disabled'] = 'Warning: Common Page Url component is disabled, you can edit all values but they will be active on front only when you activate this component in SEO Configuration'; | ||
| 636 | +$_['error_404_disabled'] = 'Warning: 404 Manager component is disabled, the logging of not found pages will be active only when you activate this component in SEO Configuration'; | ||
| 637 | +$_['error_absolute_disabled'] = 'Warning: Absolute Url component is disabled, you can edit all values but they will be active on front only when you activate this component in SEO Configuration'; | ||
| 638 | +$_['error_redirect_disabled'] = 'Warning: Url Redirection component is disabled, you can edit all values but they will be active on front only when you activate this component in SEO Configuration'; | ||
| 639 | +?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/1x_adm/model/catalog/seo_package.php
0 → 100644
| 1 | +<?php | ||
| 2 | +class ModelCatalogSeoPackage extends Model { | ||
| 3 | + | ||
| 4 | + public function __construct($registry) { | ||
| 5 | + parent::__construct($registry); | ||
| 6 | + | ||
| 7 | + if (version_compare(VERSION, '3', '>=')) { | ||
| 8 | + $this->url_alias = 'seo_url'; | ||
| 9 | + } else { | ||
| 10 | + $this->url_alias = 'url_alias'; | ||
| 11 | + } | ||
| 12 | + } | ||
| 13 | + | ||
| 14 | + public function getSeoDescriptions($type, $item_id) { | ||
| 15 | + $seo_description_data = array(); | ||
| 16 | + | ||
| 17 | + $extra_select = ''; | ||
| 18 | + | ||
| 19 | + if ($this->config->get('mlseo_enabled')) { | ||
| 20 | + if (version_compare(VERSION, '3', '>=') || ($this->config->get('mlseo_multistore') && $this->config->get('mlseo_ml_mode'))) { | ||
| 21 | + $extra_select = ",(SELECT keyword FROM " . DB_PREFIX . $this->url_alias . " u WHERE query = '".$this->db->escape($type)."_id=".$item_id."' AND (u.language_id = d.language_id) AND (u.store_id = d.store_id) LIMIT 1) AS seo_keyword"; | ||
| 22 | + } else if ($this->config->get('mlseo_multistore')) { | ||
| 23 | + $extra_select = ",(SELECT keyword FROM " . DB_PREFIX . $this->url_alias . " u WHERE query = '".$this->db->escape($type)."_id=".$item_id."' AND (u.store_id = d.store_id) LIMIT 1) AS seo_keyword"; | ||
| 24 | + } else if ($this->config->get('mlseo_ml_mode')) { | ||
| 25 | + $extra_select = ",(SELECT keyword FROM " . DB_PREFIX . $this->url_alias . " u WHERE query = '".$this->db->escape($type)."_id=".$item_id."' AND (u.language_id = d.language_id OR u.language_id = 0) LIMIT 1) AS seo_keyword"; | ||
| 26 | + } else { | ||
| 27 | + $extra_select = ",(SELECT keyword FROM " . DB_PREFIX . $this->url_alias . " WHERE query = '".$this->db->escape($type)."_id=".$item_id."' LIMIT 1) AS seo_keyword"; | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + try { | ||
| 32 | + $query = $this->db->query("SELECT * ".$extra_select." FROM " . DB_PREFIX . "seo_".$type."_description d WHERE ".$this->db->escape($type)."_id = '" . (int)$item_id . "'"); | ||
| 33 | + | ||
| 34 | + // if seo_desc does not exists at least get seo urls | ||
| 35 | + if (empty($query->rows)) { | ||
| 36 | + $query = $this->db->query("SELECT *, keyword as seo_keyword FROM " . DB_PREFIX . $this->url_alias . " u WHERE query = '".$this->db->escape($type)."_id=".$item_id."'"); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + foreach ($query->rows as $result) { | ||
| 40 | + $seo_description_data[(isset($result['store_id']) ? $result['store_id'] : 0)][$result['language_id']] = $result; | ||
| 41 | + } | ||
| 42 | + } catch (Exception $e) { | ||
| 43 | + echo '<div class="alert alert-danger" style="margin:20px"><i class="fa fa-exclamation-triangle"></i> The tables for extended SEO does not exist, please go at least once in module options in order to auto-create them</div>'; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + return $seo_description_data; | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + public function setSeoDescriptions($type, $data, $item_id = false, $method = 'edit', $currentKeywords = array()) { | ||
| 50 | + if (!$this->config->get('mlseo_enabled')) return; | ||
| 51 | + | ||
| 52 | + if (!isset($data['seo_'.$type.'_description'])) return; | ||
| 53 | + | ||
| 54 | + $this->load->model('tool/seo_package'); | ||
| 55 | + | ||
| 56 | + $this->db->query("DELETE FROM " . DB_PREFIX . "seo_".$this->db->escape($type)."_description WHERE ".$this->db->escape($type)."_id = '" . (int)$item_id . "'"); | ||
| 57 | + | ||
| 58 | + foreach ($data['seo_'.$type.'_description'] as $store_id => $languages) { | ||
| 59 | + foreach ($languages as $language_id => $value) { | ||
| 60 | + $data[$type.'_id'] = $item_id; // add item id into dataset for use with patterns | ||
| 61 | + | ||
| 62 | + $seo_kw = ''; | ||
| 63 | + $extra_fields = ''; | ||
| 64 | + | ||
| 65 | + if (empty($value['seo_keyword']) && $this->config->get('mlseo_'.$method.'autourl')) { | ||
| 66 | + $seo_kw = $this->model_tool_seo_package->{'transform'.ucfirst($type)}($this->config->get('mlseo_'.$type.'_url_pattern'), $language_id, $data, $store_id); | ||
| 67 | + } else if (!empty($value['seo_keyword'])) { | ||
| 68 | + $seo_kw = html_entity_decode($value['seo_keyword'], ENT_QUOTES, 'UTF-8'); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + if ($seo_kw) { | ||
| 72 | + $seo_kw = $this->model_tool_seo_package->filter_seo($seo_kw, $type, $item_id, $language_id); | ||
| 73 | + | ||
| 74 | + if ($this->config->get('mlseo_backup')) { | ||
| 75 | + $currentKeyword = isset($currentKeywords[$store_id][$language_id]) ? $currentKeywords[$store_id][$language_id] : ''; | ||
| 76 | + | ||
| 77 | + if ($currentKeyword && $currentKeyword != $seo_kw) { | ||
| 78 | + if ($type == 'product') { | ||
| 79 | + $this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "url_redirect SET query = '/" . $this->db->escape($currentKeyword) . "', redirect = 'product/product&product_id=" . (int) $item_id . "', language_id = '" . (int) $language_id . "'"); | ||
| 80 | + } else if ($type == 'category') { | ||
| 81 | + $this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "url_redirect SET query = '/" . $this->db->escape($currentKeyword) . "', redirect = 'product/category&category_id=" . (int) $item_id . "', language_id = '" . (int) $language_id . "'"); | ||
| 82 | + } else if ($type == 'information') { | ||
| 83 | + $this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "url_redirect SET query = '/" . $this->db->escape($currentKeyword) . "', redirect = 'information/information&information_id=" . (int) $item_id . "', language_id = '" . (int) $language_id . "'"); | ||
| 84 | + } else if ($type == 'manufacturer') { | ||
| 85 | + $this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "url_redirect SET query = '/" . $this->db->escape($currentKeyword) . "', redirect = 'product/manufacturer&manufacturer_id=" . (int) $item_id . "', language_id = '" . (int) $language_id . "'"); | ||
| 86 | + } | ||
| 87 | + } | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + if (version_compare(VERSION, '3', '>=') || ($this->config->get('mlseo_multistore') && $this->config->get('mlseo_ml_mode'))) { | ||
| 91 | + $this->db->query("INSERT INTO " . DB_PREFIX . $this->url_alias . " SET query = '".$this->db->escape($type)."_id=" . (int)$item_id . "', store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', keyword = '" . $this->db->escape($seo_kw) . "'"); | ||
| 92 | + } else if ($this->config->get('mlseo_multistore')) { | ||
| 93 | + $this->db->query("INSERT INTO " . DB_PREFIX . $this->url_alias . " SET query = '".$this->db->escape($type)."_id=" . (int)$item_id . "', store_id = '" . (int)$store_id . "', keyword = '" . $this->db->escape($seo_kw) . "'"); | ||
| 94 | + } else if ($this->config->get('mlseo_ml_mode')) { | ||
| 95 | + $this->db->query("INSERT INTO " . DB_PREFIX . $this->url_alias . " SET query = '".$this->db->escape($type)."_id=" . (int)$item_id . "', language_id = '" . (int)$language_id . "', keyword = '" . $this->db->escape($seo_kw) . "'"); | ||
| 96 | + } else { | ||
| 97 | + $this->db->query("INSERT INTO " . DB_PREFIX . $this->url_alias . " SET query = '".$this->db->escape($type)."_id=" . (int)$item_id . "', keyword = '" . $this->db->escape($seo_kw) . "'"); | ||
| 98 | + } | ||
| 99 | + /* | ||
| 100 | + } else if ($type == 'manufacturer') { | ||
| 101 | + //$this->db->query("INSERT INTO " . DB_PREFIX . $this->url_alias . " SET query = '".$this->db->escape($type)."_id=" . (int)$item_id . "', keyword = '" . $this->db->escape($seo_kw) . "'"); | ||
| 102 | + $this->db->query("INSERT INTO " . DB_PREFIX . $this->url_alias . " SET query = '".$this->db->escape($type)."_id=" . (int)$item_id . "', language_id = '" . (int)$language_id . "', keyword = '" . $this->db->escape($seo_kw) . "'"); | ||
| 103 | + } | ||
| 104 | + */ | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + foreach (array('meta_title', 'meta_description', 'meta_keyword', 'description', 'seo_h1', 'seo_h2', 'seo_h3', 'image_title', 'image_alt') as $key) { | ||
| 108 | + if (!isset($value[$key])) { | ||
| 109 | + $value[$key] = ''; | ||
| 110 | + } | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + if (empty($value['meta_title']) && $this->config->get('mlseo_'.$method.'autoseotitle')) { | ||
| 114 | + $value['meta_title'] = $this->model_tool_seo_package->{'transform'.ucfirst($type)}($this->config->get('mlseo_'.$type.'_title_pattern'), $language_id, $data, $store_id); | ||
| 115 | + } | ||
| 116 | + if (!trim(strip_tags(html_entity_decode($value['description'], ENT_QUOTES, 'UTF-8'))) && $this->config->get('mlseo_'.$method.'autodesc')) { | ||
| 117 | + $value['description'] = $this->model_tool_seo_package->{'transform'.ucfirst($type)}($this->config->get('mlseo_'.$type.'_full_desc_pattern'), $language_id, $data, $store_id); | ||
| 118 | + } | ||
| 119 | + if (empty($value['meta_description']) && $this->config->get('mlseo_'.$method.'autometadesc')) { | ||
| 120 | + $value['meta_description'] = $this->model_tool_seo_package->{'transform'.ucfirst($type)}($this->config->get('mlseo_'.$type.'_description_pattern'), $language_id, $data, $store_id); | ||
| 121 | + } | ||
| 122 | + if (empty($value['meta_keyword']) && $this->config->get('mlseo_'.$method.'autometakeyword')) { | ||
| 123 | + $value['meta_keyword'] = $this->model_tool_seo_package->{'transform'.ucfirst($type)}($this->config->get('mlseo_'.$type.'_keyword_pattern'), $language_id, $data, $store_id); | ||
| 124 | + } | ||
| 125 | + if (empty($value['seo_h1']) && $this->config->get('mlseo_'.$method.'autoh1')) { | ||
| 126 | + $value['seo_h1'] = $this->model_tool_seo_package->{'transform'.ucfirst($type)}($this->config->get('mlseo_'.$type.'_h1_pattern'), $language_id, $data, $store_id); | ||
| 127 | + } | ||
| 128 | + if (empty($value['seo_h2']) && $this->config->get('mlseo_'.$method.'autoh2')) { | ||
| 129 | + $value['seo_h2'] = $this->model_tool_seo_package->{'transform'.ucfirst($type)}($this->config->get('mlseo_'.$type.'_h2_pattern'), $language_id, $data, $store_id); | ||
| 130 | + } | ||
| 131 | + if (empty($value['seo_h3']) && $this->config->get('mlseo_'.$method.'autoh3')) { | ||
| 132 | + $value['seo_h3'] = $this->model_tool_seo_package->{'transform'.ucfirst($type)}($this->config->get('mlseo_'.$type.'_h3_pattern'), $language_id, $data, $store_id); | ||
| 133 | + } | ||
| 134 | + if ($type == 'product') { | ||
| 135 | + if (empty($value['image_title']) && $this->config->get('mlseo_'.$method.'autoimgtitle')) { | ||
| 136 | + $value['image_title'] = $this->model_tool_seo_package->{'transform'.ucfirst($type)}($this->config->get('mlseo_'.$type.'_image_title_pattern'), $language_id, $data, $store_id); | ||
| 137 | + } | ||
| 138 | + if (empty($value['image_alt']) && $this->config->get('mlseo_'.$method.'autoimgalt')) { | ||
| 139 | + $value['image_alt'] = $this->model_tool_seo_package->{'transform'.ucfirst($type)}($this->config->get('mlseo_'.$type.'_image_alt_pattern'), $language_id, $data, $store_id); | ||
| 140 | + } | ||
| 141 | + | ||
| 142 | + $extra_fields .= ", image_alt = '" . $this->db->escape($value['image_alt']) . "', image_title = '" . $this->db->escape($value['image_title']) . "'"; | ||
| 143 | + } | ||
| 144 | + // if (empty($value['tag']) && $this->config->get('mlseo_'.$method.'autotags')) { | ||
| 145 | + // $value['tag'] = $this->model_tool_seo_package->{'transform'.ucfirst($type)}($this->config->get('mlseo_'.$type.'_tag_pattern'), $language_id, $data, $store_id); | ||
| 146 | + // } | ||
| 147 | + | ||
| 148 | + if (isset($value['description'])) { | ||
| 149 | + $extra_fields .= ", description = '" . $this->db->escape($value['description']) . "'"; | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + if (isset($value['name'])) { | ||
| 153 | + $extra_fields .= ", name = '" . $this->db->escape($value['name']) . "'"; | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + | ||
| 157 | + $this->db->query("INSERT INTO " . DB_PREFIX . "seo_".$this->db->escape($type)."_description SET ".$this->db->escape($type)."_id = '" . (int)$item_id . "', store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "', seo_h2 = '" . $this->db->escape($value['seo_h2']) . "', seo_h3 = '" . $this->db->escape($value['seo_h3']) . "'" . $extra_fields); | ||
| 158 | + } | ||
| 159 | + } | ||
| 160 | + } | ||
| 161 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/1x_adm/model/setting/friendlyurls.php
0 → 100644
| 1 | +<?php | ||
| 2 | +class ModelSettingFriendlyurls extends Model { | ||
| 3 | + | ||
| 4 | + public function getAvailableLangs() { | ||
| 5 | + return array_keys($this->urls); | ||
| 6 | + } | ||
| 7 | + | ||
| 8 | + public function getFriendlyUrls($lang) { | ||
| 9 | + if (strstr($lang, '-', true)) { | ||
| 10 | + $lang = strtolower(strstr($lang, '-', true)); | ||
| 11 | + } else { | ||
| 12 | + $lang = strtolower($lang); | ||
| 13 | + } | ||
| 14 | + | ||
| 15 | + if(isset($this->urls[$lang])) | ||
| 16 | + return $this->urls[$lang]; | ||
| 17 | + return $this->urls['en']; | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + public $urls = array( | ||
| 21 | + 'en' => array( | ||
| 22 | + 'account/account' => 'account', | ||
| 23 | + 'account/address' => 'account/address', | ||
| 24 | + 'account/download' => 'account/download', | ||
| 25 | + 'account/edit' => 'account/edit', | ||
| 26 | + 'account/forgotten' => 'account/forgotten', | ||
| 27 | + 'account/login' => 'account/login', | ||
| 28 | + 'account/logout' => 'account/logout', | ||
| 29 | + 'account/newsletter' => 'account/newsletter', | ||
| 30 | + 'account/order' => 'account/order', | ||
| 31 | + 'account/password' => 'account/password', | ||
| 32 | + 'account/register' => 'account/register', | ||
| 33 | + 'account/return' => 'account/return', | ||
| 34 | + 'account/return/insert' => 'account/return/insert', | ||
| 35 | + 'account/reward' => 'account/reward', | ||
| 36 | + 'account/transaction' => 'account/transaction', | ||
| 37 | + 'account/voucher' => 'account/voucher', | ||
| 38 | + 'account/wishlist' => 'account/wishlist', | ||
| 39 | + 'information/contact' => 'contact', | ||
| 40 | + 'information/sitemap' => 'sitemap', | ||
| 41 | + 'checkout/checkout' => 'checkout', | ||
| 42 | + 'checkout/voucher' => 'voucher', | ||
| 43 | + 'product/compare' => 'compare', | ||
| 44 | + 'product/manufacturer' => 'manufacturer', | ||
| 45 | + 'product/special' => 'special', | ||
| 46 | + 'affiliate/account' => 'affiliate/account', | ||
| 47 | + 'affiliate/login' => 'affiliate/login', | ||
| 48 | + 'affiliate/logout' => 'affiliate/logout', | ||
| 49 | + 'affiliate/edit' => 'affiliate/edit', | ||
| 50 | + 'affiliate/forgotten' => 'affiliate/forgotten', | ||
| 51 | + 'affiliate/password' => 'affiliate/password', | ||
| 52 | + 'affiliate/register' => 'affiliate/register', | ||
| 53 | + 'affiliate/tracking' => 'affiliate/tracking', | ||
| 54 | + 'affiliate/transaction' => 'affiliate/transaction', | ||
| 55 | + 'checkout/cart' => 'cart', | ||
| 56 | + //'product/search' => 'search', | ||
| 57 | + ), | ||
| 58 | + | ||
| 59 | + 'fr' => array( | ||
| 60 | + 'account/account' => 'compte', | ||
| 61 | + 'account/address' => 'compte/adresse', | ||
| 62 | + 'account/download' => 'compte/telechargements', | ||
| 63 | + 'account/edit' => 'compte/profil', | ||
| 64 | + 'account/forgotten' => 'compte/oubli', | ||
| 65 | + 'account/login' => 'compte/login', | ||
| 66 | + 'account/logout' => 'compte/logout', | ||
| 67 | + 'account/newsletter' => 'compte/newsletter', | ||
| 68 | + 'account/order' => 'compte/commandes', | ||
| 69 | + 'account/password' => 'compte/password', | ||
| 70 | + 'account/register' => 'compte/enregistrement', | ||
| 71 | + 'account/return' => 'compte/retours', | ||
| 72 | + 'account/return/insert' => 'compte/retours/ajout', | ||
| 73 | + 'account/reward' => 'compte/recompense', | ||
| 74 | + 'account/transaction' => 'compte/transaction', | ||
| 75 | + 'account/voucher' => 'compte/cheque-cadeau', | ||
| 76 | + 'account/wishlist' => 'compte/wishlist', | ||
| 77 | + 'information/contact' => 'contact', | ||
| 78 | + 'information/sitemap' => 'sitemap', | ||
| 79 | + 'checkout/checkout' => 'commande', | ||
| 80 | + 'checkout/voucher' => 'cheque-cadeau', | ||
| 81 | + 'product/compare' => 'comparer', | ||
| 82 | + 'product/manufacturer' => 'marque', | ||
| 83 | + 'product/special' => 'special', | ||
| 84 | + 'affiliate/account' => 'affilié/compte', | ||
| 85 | + 'affiliate/login' => 'affilié/login', | ||
| 86 | + 'affiliate/logout' => 'affilié/logout', | ||
| 87 | + 'affiliate/edit' => 'affilié/profil', | ||
| 88 | + 'affiliate/forgotten' => 'affilié/oubli', | ||
| 89 | + 'affiliate/password' => 'affilié/password', | ||
| 90 | + 'affiliate/register' => 'affilié/enregistrement', | ||
| 91 | + 'affiliate/tracking' => 'affilié/suivi', | ||
| 92 | + 'affiliate/transaction' => 'affilié/transaction', | ||
| 93 | + 'checkout/cart' => 'panier', | ||
| 94 | + //'product/search' => 'recherche', | ||
| 95 | + ), | ||
| 96 | + | ||
| 97 | + 'pt' => array( | ||
| 98 | + 'account/account' => 'conta', | ||
| 99 | + 'account/address' => 'conta/morada', | ||
| 100 | + 'account/download' => 'conta/download', | ||
| 101 | + 'account/edit' => 'conta/editar', | ||
| 102 | + 'account/forgotten' => 'conta/recuperar-password', | ||
| 103 | + 'account/login' => 'conta/entrar', | ||
| 104 | + 'account/logout' => 'conta/sair', | ||
| 105 | + 'account/newsletter' => 'conta/newsletter', | ||
| 106 | + 'account/order' => 'conta/encomendas', | ||
| 107 | + 'account/password' => 'conta/password', | ||
| 108 | + 'account/register' => 'conta/registar', | ||
| 109 | + 'account/return' => 'conta/itens-retornados', | ||
| 110 | + 'account/return/insert' => 'conta/itens-retornados/adicionar', | ||
| 111 | + 'account/reward' => 'conta/classificacao', | ||
| 112 | + 'account/transaction' => 'conta/transacoes', | ||
| 113 | + 'account/voucher' => 'conta/voucher', | ||
| 114 | + 'account/wishlist' => 'conta/lista-desejos', | ||
| 115 | + 'information/contact' => 'contatos', | ||
| 116 | + 'information/sitemap' => 'sitemap', | ||
| 117 | + 'checkout/checkout' => 'fechar-pedido', | ||
| 118 | + 'checkout/voucher' => 'voucher', | ||
| 119 | + 'product/compare' => 'comparar', | ||
| 120 | + 'product/manufacturer' => 'fabricantes', | ||
| 121 | + 'product/special' => 'promocoes', | ||
| 122 | + 'affiliate/account' => 'afiliada/conta', | ||
| 123 | + 'affiliate/login' => 'afiliada/entrar', | ||
| 124 | + 'affiliate/logout' => 'afiliada/sair', | ||
| 125 | + 'affiliate/edit' => 'afiliada/editar', | ||
| 126 | + 'affiliate/forgotten' => 'afiliada/recuperar-password', | ||
| 127 | + 'affiliate/password' => 'afiliada/password', | ||
| 128 | + 'affiliate/register' => 'afiliada/registar', | ||
| 129 | + 'affiliate/tracking' => 'afiliada/localizar', | ||
| 130 | + 'affiliate/transaction' => 'afiliada/transacoes', | ||
| 131 | + 'checkout/cart' => 'cesto', | ||
| 132 | + //'product/search' => 'pesquisa', | ||
| 133 | + ), | ||
| 134 | + | ||
| 135 | + 'cs' => array( | ||
| 136 | + 'product/special' => 'akce', | ||
| 137 | + 'product/manufacturer' => 'vyrobce', | ||
| 138 | + 'product/compare' => 'porovnani', | ||
| 139 | + //'product/search' => 'hledej', | ||
| 140 | + 'information/contact' => 'kontakt', | ||
| 141 | + 'information/sitemap' => 'mapa-stranky', | ||
| 142 | + 'checkout/success' => 'souhlas', | ||
| 143 | + 'checkout/checkout' => 'pokladna', | ||
| 144 | + 'checkout/cart' => 'kosik', | ||
| 145 | + 'checkout/voucher' => 'kupon', | ||
| 146 | + 'common/home' => '', | ||
| 147 | + 'account/reward' => 'odmena', | ||
| 148 | + 'account/address' => 'katalog-adresa', | ||
| 149 | + 'account/password' => 'zmena-heslo', | ||
| 150 | + 'account/edit' => 'zmena-ucet', | ||
| 151 | + 'account/register' => 'registrace', | ||
| 152 | + 'account/transaction' => 'transakce', | ||
| 153 | + 'account/return' => 'reklamace', | ||
| 154 | + 'account/download' => 'download', | ||
| 155 | + 'account/forgotten' => 'konto-obnova-hesla', | ||
| 156 | + 'account/return/insert' => 'reklamace-nova', | ||
| 157 | + 'account/newsletter' => 'novinky', | ||
| 158 | + 'account/order' => 'historie-objednavok', | ||
| 159 | + 'account/logout' => 'odhlaseni', | ||
| 160 | + 'account/login' => 'prihlaseni', | ||
| 161 | + 'account/account' => 'konto', | ||
| 162 | + 'account/wishlist' => 'lista-prani', | ||
| 163 | + 'account/voucher' => 'voucher', | ||
| 164 | + 'module/ticket_system_pro' => 'pomoc', | ||
| 165 | + 'module/ticket_system_pro/open' => 'otevri-tiket', | ||
| 166 | + 'module/ticket_system_pro/view' => 'zobraz-tiket', | ||
| 167 | + 'module/tsp_tickets' => 'tikety-pomoc', | ||
| 168 | + 'account/recurring' => 'opakovani', | ||
| 169 | + 'account/success' => 'konto-uspech', | ||
| 170 | + ), | ||
| 171 | + | ||
| 172 | + 'de' => array( | ||
| 173 | + 'account/account' => 'konto', | ||
| 174 | + 'account/address' => 'konto/anschrift', | ||
| 175 | + 'account/download' => 'konto/herunterladen', | ||
| 176 | + 'account/edit' => 'konto/bearbeiten', | ||
| 177 | + 'account/forgotten' => 'konto/vergessen', | ||
| 178 | + 'account/login' => 'konto/login', | ||
| 179 | + 'account/logout' => 'konto/logout', | ||
| 180 | + 'account/newsletter' => 'konto/newsletter', | ||
| 181 | + 'account/order' => 'konto/bestellung', | ||
| 182 | + 'account/password' => 'konto/passwort', | ||
| 183 | + 'account/register' => 'konto/registrierung', | ||
| 184 | + 'account/return' => 'konto/ruckgabe', | ||
| 185 | + 'account/return/insert' => 'konto/ruckgabe/hinzufugen', | ||
| 186 | + 'account/reward' => 'konto/belohnung', | ||
| 187 | + 'account/transaction' => 'konto/geschaft', | ||
| 188 | + 'account/voucher' => 'konto/gutschein', | ||
| 189 | + 'account/wishlist' => 'konto/wishlist', | ||
| 190 | + 'information/contact' => 'ansprechpartner', | ||
| 191 | + 'information/sitemap' => 'sitemap', | ||
| 192 | + 'checkout/checkout' => 'kasse', | ||
| 193 | + 'checkout/voucher' => 'gutschein', | ||
| 194 | + 'product/compare' => 'vergleichen', | ||
| 195 | + 'product/manufacturer' => 'hersteller', | ||
| 196 | + 'product/special' => 'spezielle', | ||
| 197 | + 'affiliate/account' => 'affiliate/konto', | ||
| 198 | + 'affiliate/login' => 'affiliate/login', | ||
| 199 | + 'affiliate/logout' => 'affiliate/logout', | ||
| 200 | + 'affiliate/edit' => 'affiliate/bearbeiten', | ||
| 201 | + 'affiliate/forgotten' => 'affiliate/vergessen', | ||
| 202 | + 'affiliate/password' => 'affiliate/passwort', | ||
| 203 | + 'affiliate/register' => 'affiliate/registrierung', | ||
| 204 | + 'affiliate/tracking' => 'affiliate/verfolgung', | ||
| 205 | + 'affiliate/transaction' => 'affiliate/geschaft', | ||
| 206 | + 'checkout/cart' => 'einkaufswagen', | ||
| 207 | + //'product/search' => 'suche', | ||
| 208 | + ), | ||
| 209 | + | ||
| 210 | + 'it' => array( | ||
| 211 | + 'account/account' => 'utente', | ||
| 212 | + 'account/address' => 'utente/indirizzo', | ||
| 213 | + 'account/download' => 'utente/download', | ||
| 214 | + 'account/edit' => 'utente/modificare', | ||
| 215 | + 'account/forgotten' => 'utente/dimenticato', | ||
| 216 | + 'account/login' => 'utente/accedi', | ||
| 217 | + 'account/logout' => 'utente/esci', | ||
| 218 | + 'account/newsletter' => 'utente/newsletter', | ||
| 219 | + 'account/order' => 'utente/ordine', | ||
| 220 | + 'account/password' => 'utente/password', | ||
| 221 | + 'account/register' => 'utente/registrati', | ||
| 222 | + 'account/return' => 'utente/reso', | ||
| 223 | + 'account/return/insert' => 'utente/reso/inserisci', | ||
| 224 | + 'account/reward' => 'utente/punti-premio', | ||
| 225 | + 'account/transaction' => 'utente/transazione', | ||
| 226 | + 'account/voucher' => 'utente/buono-regalo', | ||
| 227 | + 'account/wishlist' => 'utente/lista-dei-desideri', | ||
| 228 | + 'information/contact' => 'contatto', | ||
| 229 | + 'information/sitemap' => 'sitemap', | ||
| 230 | + 'checkout/checkout' => 'ordine', | ||
| 231 | + 'checkout/voucher' => 'buono-regalo', | ||
| 232 | + 'product/compare' => 'confrontare', | ||
| 233 | + 'product/manufacturer' => 'marchi', | ||
| 234 | + 'product/special' => 'speciale', | ||
| 235 | + 'affiliate/account' => 'affiliato/conto', | ||
| 236 | + 'affiliate/login' => 'affiliato/accedi', | ||
| 237 | + 'affiliate/logout' => 'affiliato/esci', | ||
| 238 | + 'affiliate/edit' => 'affiliato/modificare', | ||
| 239 | + 'affiliate/forgotten' => 'affiliato/dimenticato', | ||
| 240 | + 'affiliate/password' => 'affiliato/password', | ||
| 241 | + 'affiliate/register' => 'affiliato/registro', | ||
| 242 | + 'affiliate/tracking' => 'affiliato/tracking', | ||
| 243 | + 'affiliate/transaction' => 'affiliato/transazione', | ||
| 244 | + 'checkout/cart' => 'carrello', | ||
| 245 | + //'product/search' => 'ricerca', | ||
| 246 | + ), | ||
| 247 | + | ||
| 248 | + 'es' => array( | ||
| 249 | + 'account/account' => 'cuenta', | ||
| 250 | + 'account/address' => 'cuenta/direccion', | ||
| 251 | + 'account/download' => 'cuenta/descargar', | ||
| 252 | + 'account/edit' => 'cuenta/editar', | ||
| 253 | + 'account/forgotten' => 'cuenta/olvidado', | ||
| 254 | + 'account/login' => 'cuenta/login', | ||
| 255 | + 'account/logout' => 'cuenta/logout', | ||
| 256 | + 'account/newsletter' => 'cuenta/newsletter', | ||
| 257 | + 'account/order' => 'cuenta/pedido', | ||
| 258 | + 'account/password' => 'cuenta/password', | ||
| 259 | + 'account/register' => 'cuenta/registro', | ||
| 260 | + 'account/return' => 'cuenta/devolucion', | ||
| 261 | + 'account/return/insert' => 'cuenta/devolucion/anadir', | ||
| 262 | + 'account/reward' => 'cuenta/recompensa', | ||
| 263 | + 'account/transaction' => 'cuenta/transaccion', | ||
| 264 | + 'account/voucher' => 'cuenta/vale', | ||
| 265 | + 'account/wishlist' => 'cuenta/wishlist', | ||
| 266 | + 'information/contact' => 'contacto', | ||
| 267 | + 'information/sitemap' => 'sitemap', | ||
| 268 | + 'checkout/checkout' => 'pedido', | ||
| 269 | + 'checkout/voucher' => 'vale', | ||
| 270 | + 'product/compare' => 'comparar', | ||
| 271 | + 'product/manufacturer' => 'marca', | ||
| 272 | + 'product/special' => 'especial', | ||
| 273 | + 'affiliate/account' => 'afiliado/cuenta', | ||
| 274 | + 'affiliate/login' => 'afiliado/login', | ||
| 275 | + 'affiliate/logout' => 'afiliado/logout', | ||
| 276 | + 'affiliate/edit' => 'afiliado/editar', | ||
| 277 | + 'affiliate/forgotten' => 'afiliado/olvidado', | ||
| 278 | + 'affiliate/password' => 'afiliado/password', | ||
| 279 | + 'affiliate/register' => 'afiliado/registro', | ||
| 280 | + 'affiliate/tracking' => 'afiliado/seguimiento', | ||
| 281 | + 'affiliate/transaction' => 'afiliado/transaccion', | ||
| 282 | + 'checkout/cart' => 'cesta', | ||
| 283 | + //'product/search' => 'buscar', | ||
| 284 | + ), | ||
| 285 | + | ||
| 286 | + 'nl' => array( | ||
| 287 | + 'account/account' => 'account', | ||
| 288 | + 'account/address' => 'account/adressen', | ||
| 289 | + 'account/download' => 'account/downloads', | ||
| 290 | + 'account/edit' => 'account/bewerken', | ||
| 291 | + 'account/edit' => 'account/bewerken', | ||
| 292 | + 'account/forgotten' => 'account/wachtwoord-vergeten', | ||
| 293 | + 'account/login' => 'account/login', | ||
| 294 | + 'account/logout' => 'account/uitloggen', | ||
| 295 | + 'account/newsletter' => 'account/nieuwsbrief', | ||
| 296 | + 'account/order' => 'account/bestellingen', | ||
| 297 | + 'account/order' => 'account/bestellingen', | ||
| 298 | + 'account/order/info' => 'account/bestellingen/info', | ||
| 299 | + 'account/password' => 'account/wachtwoord-wijzigen', | ||
| 300 | + 'account/recurring' => 'account/terugkerende-betalingen', | ||
| 301 | + 'account/register' => 'account/registreren', | ||
| 302 | + 'account/return' => 'account/retouren', | ||
| 303 | + 'account/reward' => 'account/beloningen', | ||
| 304 | + 'account/rma/addrma' => 'account/retourneren/toevoegen', | ||
| 305 | + 'account/rma/rma' => 'account/retourneren/overzicht', | ||
| 306 | + 'account/rma/rmalogin' => 'account/retourneren', | ||
| 307 | + 'account/rma/rmalogin/guest' => 'account/retourneren/gast', | ||
| 308 | + 'account/success' => 'account/aangemaakt', | ||
| 309 | + 'account/success' => 'account/aangemaakt', | ||
| 310 | + 'account/transaction' => 'account/transacties', | ||
| 311 | + 'account/voucher' => 'account/cadeaubon', | ||
| 312 | + 'account/wishlist' => 'account/verlanglijst', | ||
| 313 | + 'affiliate/account' => 'affiliate', | ||
| 314 | + 'affiliate/edit' => 'affiliate/bewerken', | ||
| 315 | + 'affiliate/edit' => 'affiliate/bewerken', | ||
| 316 | + 'affiliate/forgotten' => 'affiliate/vergeten', | ||
| 317 | + 'affiliate/login' => 'affiliate/login', | ||
| 318 | + 'affiliate/logout' => 'affiliate/logout', | ||
| 319 | + 'affiliate/password' => 'affiliate/wachtwoord', | ||
| 320 | + 'affiliate/payment' => 'affiliatebetalingen', | ||
| 321 | + 'affiliate/register' => 'affiliate/registreer', | ||
| 322 | + 'affiliate/tracking' => 'affiliate/tracking', | ||
| 323 | + 'affiliate/transaction' => 'affiliate/transacties', | ||
| 324 | + 'bundle/bundle' => 'product/bundels', | ||
| 325 | + 'checkout/cart' => 'winkelwagen', | ||
| 326 | + 'checkout/checkout' => 'afrekenen', | ||
| 327 | + 'checkout/success' => 'succes', | ||
| 328 | + 'checkout/voucher' => 'vouchers', | ||
| 329 | + 'information/contact' => 'contact', | ||
| 330 | + 'information/sitemap' => 'sitemap', | ||
| 331 | + 'journal3/blog' => 'blog', | ||
| 332 | + 'product/compare' => 'product/vergelijken', | ||
| 333 | + 'product/manufacturer' => 'product/merken', | ||
| 334 | + //'product/search' => 'product/zoeken', | ||
| 335 | + 'product/special' => 'product/aanbiedingen', | ||
| 336 | + ), | ||
| 337 | + | ||
| 338 | + 'pl' => array( | ||
| 339 | + 'journal2/blog' => 'blog', | ||
| 340 | + 'product/special' => 'promocje', | ||
| 341 | + 'product/manufacturer' => 'producent', | ||
| 342 | + 'product/compare' => 'porownaj', | ||
| 343 | + //'product/search' => 'szukaj', | ||
| 344 | + 'information/contact' => 'kontakt', | ||
| 345 | + 'information/sitemap' => 'mapa-strony', | ||
| 346 | + 'checkout/success' => 'sukces', | ||
| 347 | + 'checkout/checkout' => 'kasa', | ||
| 348 | + 'checkout/cart' => 'koszyk', | ||
| 349 | + 'checkout/voucher' => 'vouchers', | ||
| 350 | + 'common/home' => '', | ||
| 351 | + 'account/reward' => 'nagrody', | ||
| 352 | + 'account/address' => 'katalog-adres', | ||
| 353 | + 'account/password' => 'edytuj-haslo', | ||
| 354 | + 'account/edit' => 'edytuj-konto', | ||
| 355 | + 'account/register' => 'rejestracja', | ||
| 356 | + 'account/transaction' => 'transacties', | ||
| 357 | + 'account/return' => 'zwroty', | ||
| 358 | + 'account/download' => 'downloads', | ||
| 359 | + 'account/forgotten' => 'account-zapomialem-hasla', | ||
| 360 | + 'account/return/insert' => 'zwrot', | ||
| 361 | + 'account/newsletter' => 'newsletter', | ||
| 362 | + 'account/order' => 'historia-zamowien', | ||
| 363 | + 'account/logout' => 'wyloguj', | ||
| 364 | + 'account/login' => 'zaloguj', | ||
| 365 | + 'account/account' => 'konto', | ||
| 366 | + 'account/wishlist' => 'lista-zyczen', | ||
| 367 | + 'account/voucher' => 'voucher', | ||
| 368 | + 'module/ticket_system_pro' => 'pomoc', | ||
| 369 | + 'module/ticket_system_pro/open' => 'otworz-tykiet', | ||
| 370 | + 'module/ticket_system_pro/view' => 'zobacz-tykiet', | ||
| 371 | + 'module/tsp_tickets' => 'tykiety-pomoc', | ||
| 372 | + 'account/recurring' => 'platnosci-cykliczne', | ||
| 373 | + 'account/success' => 'konto-utworzone', | ||
| 374 | + ), | ||
| 375 | + | ||
| 376 | + 'no' => array( | ||
| 377 | + 'account/account' => 'konto', | ||
| 378 | + 'account/address' => 'konto/adresse', | ||
| 379 | + 'account/download' => 'konto/download', | ||
| 380 | + 'account/edit' => 'konto/redigere', | ||
| 381 | + 'account/forgotten' => 'konto/glemt', | ||
| 382 | + 'account/login' => 'konto/login', | ||
| 383 | + 'account/logout' => 'konto/logout', | ||
| 384 | + 'account/newsletter' => 'konto/newsletter', | ||
| 385 | + 'account/order' => 'konto/ordre', | ||
| 386 | + 'account/password' => 'konto/password', | ||
| 387 | + 'account/register' => 'konto/registrering', | ||
| 388 | + 'account/return' => 'konto/retur', | ||
| 389 | + 'account/return/insert' => 'konto/retur/tilsette', | ||
| 390 | + 'account/reward' => 'konto/belønning', | ||
| 391 | + 'account/transaction' => 'konto/transaksjon', | ||
| 392 | + 'account/voucher' => 'konto/bilag', | ||
| 393 | + 'account/wishlist' => 'konto/wishlist', | ||
| 394 | + 'information/contact' => 'kontakt', | ||
| 395 | + 'information/sitemap' => 'sitemap', | ||
| 396 | + 'checkout/checkout' => 'sjekk-ut', | ||
| 397 | + 'checkout/voucher' => 'bilag', | ||
| 398 | + 'product/compare' => 'sammenligne', | ||
| 399 | + 'product/manufacturer' => 'mark', | ||
| 400 | + 'product/special' => 'spesielle', | ||
| 401 | + 'affiliate/account' => 'tilsluttet/konto', | ||
| 402 | + 'affiliate/login' => 'tilsluttet/login', | ||
| 403 | + 'affiliate/logout' => 'tilsluttet/logout', | ||
| 404 | + 'affiliate/edit' => 'tilsluttet/redigere', | ||
| 405 | + 'affiliate/forgotten' => 'tilsluttet/glemt', | ||
| 406 | + 'affiliate/password' => 'tilsluttet/password', | ||
| 407 | + 'affiliate/register' => 'tilsluttet/registrering', | ||
| 408 | + 'affiliate/tracking' => 'tilsluttet/sporing', | ||
| 409 | + 'affiliate/transaction' => 'tilsluttet/transaksjon', | ||
| 410 | + 'checkout/cart' => 'handlekurven', | ||
| 411 | + //'product/search' => 'søk', | ||
| 412 | + ), | ||
| 413 | + | ||
| 414 | + 'se' => array( | ||
| 415 | + 'account/account' => 'konto', | ||
| 416 | + 'account/address' => 'konto/adress', | ||
| 417 | + 'account/download' => 'konto/nedladdning', | ||
| 418 | + 'account/edit' => 'konto/redigera', | ||
| 419 | + 'account/forgotten' => 'konto/glomt', | ||
| 420 | + 'account/login' => 'konto/login', | ||
| 421 | + 'account/logout' => 'konto/logout', | ||
| 422 | + 'account/newsletter' => 'konto/newsletter', | ||
| 423 | + 'account/order' => 'konto/order', | ||
| 424 | + 'account/password' => 'konto/password', | ||
| 425 | + 'account/register' => 'konto/registrering', | ||
| 426 | + 'account/return' => 'konto/retur', | ||
| 427 | + 'account/return/insert' => 'konto/retur/insats', | ||
| 428 | + 'account/reward' => 'konto/beloning', | ||
| 429 | + 'account/transaction' => 'konto/transaktion', | ||
| 430 | + 'account/voucher' => 'konto/voucher', | ||
| 431 | + 'account/wishlist' => 'konto/wishlist', | ||
| 432 | + 'information/contact' => 'kontakta', | ||
| 433 | + 'information/sitemap' => 'sitemap', | ||
| 434 | + 'checkout/checkout' => 'checkout', | ||
| 435 | + 'checkout/voucher' => 'voucher', | ||
| 436 | + 'product/compare' => 'jamfora', | ||
| 437 | + 'product/manufacturer' => 'marke', | ||
| 438 | + 'product/special' => 'special', | ||
| 439 | + 'affiliate/account' => 'anslutna/konto', | ||
| 440 | + 'affiliate/login' => 'anslutna/login', | ||
| 441 | + 'affiliate/logout' => 'anslutna/logout', | ||
| 442 | + 'affiliate/edit' => 'anslutna/redigera', | ||
| 443 | + 'affiliate/forgotten' => 'anslutna/glomt', | ||
| 444 | + 'affiliate/password' => 'anslutna/password', | ||
| 445 | + 'affiliate/register' => 'anslutna/registrering', | ||
| 446 | + 'affiliate/tracking' => 'anslutna/spårning', | ||
| 447 | + 'affiliate/transaction' => 'anslutna/transaktion', | ||
| 448 | + 'checkout/cart' => 'varukorgen', | ||
| 449 | + //'product/search' => 'sök', | ||
| 450 | + ), | ||
| 451 | + | ||
| 452 | + 'ru' => array( | ||
| 453 | + 'account/account' => 'счет', | ||
| 454 | + 'account/address' => 'счет/адрес', | ||
| 455 | + 'account/download' => 'счет/скачать', | ||
| 456 | + 'account/edit' => 'счет/редактировать', | ||
| 457 | + 'account/forgotten' => 'счет/забыли', | ||
| 458 | + 'account/login' => 'счет/войти', | ||
| 459 | + 'account/logout' => 'счет/выход-из-системы', | ||
| 460 | + 'account/newsletter' => 'счет/бюллетень', | ||
| 461 | + 'account/order' => 'счет/заказ', | ||
| 462 | + 'account/password' => 'счет/пароль', | ||
| 463 | + 'account/register' => 'счет/регистр', | ||
| 464 | + 'account/return' => 'счет/возврат', | ||
| 465 | + 'account/return/insert' => 'счет/возврат/добавлять', | ||
| 466 | + 'account/reward' => 'счет/вознаграждение', | ||
| 467 | + 'account/transaction' => 'счет/сделка', | ||
| 468 | + 'account/voucher' => 'счет/ваучер', | ||
| 469 | + 'account/wishlist' => 'счет/лист-желаний', | ||
| 470 | + 'information/contact' => 'контактная', | ||
| 471 | + 'information/sitemap' => 'карта-сайта', | ||
| 472 | + 'checkout/checkout' => 'выписка', | ||
| 473 | + 'checkout/voucher' => 'ваучер', | ||
| 474 | + 'product/compare' => 'сравнить', | ||
| 475 | + 'product/manufacturer' => 'знак', | ||
| 476 | + 'product/special' => 'специальные', | ||
| 477 | + 'affiliate/account' => 'аффилированным/счет', | ||
| 478 | + 'affiliate/login' => 'аффилированным/войти', | ||
| 479 | + 'affiliate/logout' => 'аффилированным/выход-из-системы', | ||
| 480 | + 'affiliate/edit' => 'аффилированным/редактировать', | ||
| 481 | + 'affiliate/forgotten' => 'аффилированным/забыли', | ||
| 482 | + 'affiliate/password' => 'аффилированным/пароль', | ||
| 483 | + 'affiliate/register' => 'аффилированным/регистр', | ||
| 484 | + 'affiliate/tracking' => 'аффилированным/слежение', | ||
| 485 | + 'affiliate/transaction' => 'аффилированным/сделка', | ||
| 486 | + 'checkout/cart' => 'поиск', | ||
| 487 | + //'product/search' => 'поиск', | ||
| 488 | + ), | ||
| 489 | + | ||
| 490 | + 'ko' => array( | ||
| 491 | + 'account/account' => 'gyejeong', | ||
| 492 | + 'account/address' => 'gyejeong/juso', | ||
| 493 | + 'account/download' => 'gyejeong/daunlodeu', | ||
| 494 | + 'account/edit' => 'gyejeong/pyeonjib', | ||
| 495 | + 'account/forgotten' => 'gyejeong/ij-eo-beolin', | ||
| 496 | + 'account/login' => 'gyejeong/logeu-in', | ||
| 497 | + 'account/logout' => 'gyejeong/logeu-aus', | ||
| 498 | + 'account/newsletter' => 'gyejeong/nyuseu-leteo', | ||
| 499 | + 'account/order' => 'gyejeong/jumun', | ||
| 500 | + 'account/password' => 'gyejeong/amho', | ||
| 501 | + 'account/register' => 'gyejeong/deunglog', | ||
| 502 | + 'account/return' => 'gyejeong/su-ig', | ||
| 503 | + 'account/return/insert' => 'gyejeong/su-ig/chuga', | ||
| 504 | + 'account/reward' => 'gyejeong/bosang', | ||
| 505 | + 'account/transaction' => 'gyejeong/geolae', | ||
| 506 | + 'account/voucher' => 'gyejeong/baucheo', | ||
| 507 | + 'account/wishlist' => 'gyejeong/wisiliseuteu', | ||
| 508 | + 'information/contact' => 'jeobchog', | ||
| 509 | + 'information/sitemap' => 'saiteu-maeb', | ||
| 510 | + 'checkout/checkout' => 'chekeu-aus', | ||
| 511 | + 'checkout/voucher' => 'baucheo', | ||
| 512 | + 'product/compare' => 'bigyohada', | ||
| 513 | + 'product/manufacturer' => 'jejo-eobche', | ||
| 514 | + 'product/special' => 'teugbyeol', | ||
| 515 | + 'affiliate/account' => 'jehyu/gyejeong', | ||
| 516 | + 'affiliate/login' => 'jehyu/logeu-in', | ||
| 517 | + 'affiliate/logout' => 'jehyu/logeu-aus', | ||
| 518 | + 'affiliate/edit' => 'jehyu/pyeonjib', | ||
| 519 | + 'affiliate/forgotten' => 'jehyu/ij-eo-beolin', | ||
| 520 | + 'affiliate/password' => 'jehyu/amho', | ||
| 521 | + 'affiliate/register' => 'jehyu/deunglog', | ||
| 522 | + 'affiliate/tracking' => 'jehyu/chujeog', | ||
| 523 | + 'affiliate/transaction' => 'jehyu/geolae', | ||
| 524 | + 'checkout/cart' => 'jangbaguni', | ||
| 525 | + //'product/search' => 'geomsaeg', | ||
| 526 | + ), | ||
| 527 | + | ||
| 528 | + 'jp' => array( | ||
| 529 | + 'account/account' => 'akaunto', | ||
| 530 | + 'account/address' => 'akaunto/jusho', | ||
| 531 | + 'account/download' => 'akaunto/daunrodo', | ||
| 532 | + 'account/edit' => 'akaunto/henshu', | ||
| 533 | + 'account/forgotten' => 'akaunto/wasureta', | ||
| 534 | + 'account/login' => 'akaunto/roguin', | ||
| 535 | + 'account/logout' => 'akaunto/roguauto', | ||
| 536 | + 'account/newsletter' => 'akaunto/nyusureta', | ||
| 537 | + 'account/order' => 'akaunto/chumon', | ||
| 538 | + 'account/password' => 'akaunto/pasuwado', | ||
| 539 | + 'account/register' => 'akaunto/toroku', | ||
| 540 | + 'account/return' => 'akaunto/ritan', | ||
| 541 | + 'account/return/insert' => 'akaunto/ritan/sonyu', | ||
| 542 | + 'account/reward' => 'akaunto/hoshu', | ||
| 543 | + 'account/transaction' => 'akaunto/toranzakushon', | ||
| 544 | + 'account/voucher' => 'akaunto/baucha', | ||
| 545 | + 'account/wishlist' => 'akaunto/u~isshurisuto', | ||
| 546 | + 'information/contact' => 'renrakusen', | ||
| 547 | + 'information/sitemap' => 'saito-mappu', | ||
| 548 | + 'checkout/checkout' => 'chekkuauto', | ||
| 549 | + 'checkout/voucher' => 'baucha', | ||
| 550 | + 'product/compare' => 'hikaku', | ||
| 551 | + 'product/manufacturer' => 'meka', | ||
| 552 | + 'product/special' => 'tokubetsu', | ||
| 553 | + 'affiliate/account' => 'afirieito/akaunto', | ||
| 554 | + 'affiliate/login' => 'afirieito/roguin', | ||
| 555 | + 'affiliate/logout' => 'afirieito/roguauto', | ||
| 556 | + 'affiliate/edit' => 'afirieito/henshu', | ||
| 557 | + 'affiliate/forgotten' => 'afirieito/wasureta', | ||
| 558 | + 'affiliate/password' => 'afirieito/pasuwado', | ||
| 559 | + 'affiliate/register' => 'afirieito/toroku', | ||
| 560 | + 'affiliate/tracking' => 'afirieito/torakkingu', | ||
| 561 | + 'affiliate/transaction' => 'afirieito/toranzakushon', | ||
| 562 | + 'checkout/cart' => 'kato', | ||
| 563 | + //'product/search' => 'kensaku', | ||
| 564 | + ), | ||
| 565 | + | ||
| 566 | + 'zh' => array( | ||
| 567 | + 'account/account' => 'zhanghu', | ||
| 568 | + 'account/address' => 'zhanghu/dizhi', | ||
| 569 | + 'account/download' => 'zhanghu/xiazai', | ||
| 570 | + 'account/edit' => 'zhanghu/bianji', | ||
| 571 | + 'account/forgotten' => 'zhanghu/wangji', | ||
| 572 | + 'account/login' => 'zhanghu/denglu', | ||
| 573 | + 'account/logout' => 'zhanghu/zhuxiao', | ||
| 574 | + 'account/newsletter' => 'zhanghu/tongxun', | ||
| 575 | + 'account/order' => 'zhanghu/dingdan', | ||
| 576 | + 'account/password' => 'zhanghu/mima', | ||
| 577 | + 'account/register' => 'zhanghu/zhuce', | ||
| 578 | + 'account/return' => 'zhanghu/tuihuo', | ||
| 579 | + 'account/return/insert' => 'zhanghu/tuihuo/tianjia', | ||
| 580 | + 'account/reward' => 'zhanghu/jiangli', | ||
| 581 | + 'account/transaction' => 'zhanghu/jiaoyi', | ||
| 582 | + 'account/voucher' => 'zhanghu/pingzheng', | ||
| 583 | + 'account/wishlist' => 'zhanghu/xinyuan', | ||
| 584 | + 'information/contact' => 'lianxi', | ||
| 585 | + 'information/sitemap' => 'wangzhan-ditu', | ||
| 586 | + 'checkout/checkout' => 'tui-fang', | ||
| 587 | + 'checkout/voucher' => 'daijin-quan', | ||
| 588 | + 'product/compare' => 'bijiao', | ||
| 589 | + 'product/manufacturer' => 'zhizao-shang', | ||
| 590 | + 'product/special' => 'teshu', | ||
| 591 | + 'affiliate/account' => 'guanlian/zhanghu', | ||
| 592 | + 'affiliate/login' => 'guanlian/denglu', | ||
| 593 | + 'affiliate/logout' => 'guanlian/zhuxiao', | ||
| 594 | + 'affiliate/edit' => 'guanlian/bianji', | ||
| 595 | + 'affiliate/forgotten' => 'guanlian/wangji', | ||
| 596 | + 'affiliate/password' => 'guanlian/mima', | ||
| 597 | + 'affiliate/register' => 'guanlian/zhuce', | ||
| 598 | + 'affiliate/tracking' => 'guanlian/genzong', | ||
| 599 | + 'affiliate/transaction' => 'guanlian/jiaoyi', | ||
| 600 | + 'checkout/cart' => 'gouwu che', | ||
| 601 | + //'product/search' => 'sousuo', | ||
| 602 | + ), | ||
| 603 | + | ||
| 604 | + 'my' => array( | ||
| 605 | + 'account/account' => 'akaun', | ||
| 606 | + 'account/address' => 'akaun/alamat', | ||
| 607 | + 'account/download' => 'akaun/muat turun', | ||
| 608 | + 'account/edit' => 'akaun/edit', | ||
| 609 | + 'account/forgotten' => 'akaun/dilupakan', | ||
| 610 | + 'account/login' => 'akaun/login', | ||
| 611 | + 'account/logout' => 'akaun/logout', | ||
| 612 | + 'account/newsletter' => 'akaun/surat-berita', | ||
| 613 | + 'account/order' => 'akaun/kiriman', | ||
| 614 | + 'account/password' => 'akaun/kata-laluan', | ||
| 615 | + 'account/register' => 'akaun/daftar', | ||
| 616 | + 'account/return' => 'akaun/pulangan', | ||
| 617 | + 'account/return/insert' => 'akaun/pulangan/menambah', | ||
| 618 | + 'account/reward' => 'akaun/ganjaran', | ||
| 619 | + 'account/transaction' => 'akaun/transaksi', | ||
| 620 | + 'account/voucher' => 'akaun/baucar', | ||
| 621 | + 'account/wishlist' => 'akaun/senarai-harapan', | ||
| 622 | + 'information/contact' => 'kenalan', | ||
| 623 | + 'information/sitemap' => 'sitemap', | ||
| 624 | + 'checkout/checkout' => 'checkout', | ||
| 625 | + 'checkout/voucher' => 'baucar', | ||
| 626 | + 'product/compare' => 'bandingkan', | ||
| 627 | + 'product/manufacturer' => 'pengilang', | ||
| 628 | + 'product/special' => 'khas', | ||
| 629 | + 'affiliate/account' => 'bergabung/akaun', | ||
| 630 | + 'affiliate/login' => 'bergabung/login', | ||
| 631 | + 'affiliate/logout' => 'bergabung/logout', | ||
| 632 | + 'affiliate/edit' => 'bergabung/edit', | ||
| 633 | + 'affiliate/forgotten' => 'bergabung/dilupakan', | ||
| 634 | + 'affiliate/password' => 'bergabung/kata-laluan', | ||
| 635 | + 'affiliate/register' => 'bergabung/daftar', | ||
| 636 | + 'affiliate/tracking' => 'bergabung/pengesanan', | ||
| 637 | + 'affiliate/transaction' => 'bergabung/transaksi', | ||
| 638 | + 'checkout/cart' => 'troli', | ||
| 639 | + //'product/search' => 'carian', | ||
| 640 | + ), | ||
| 641 | + | ||
| 642 | + 'sk' => array( | ||
| 643 | + 'product/special' => 'akcia', | ||
| 644 | + 'product/manufacturer' => 'vyrobca', | ||
| 645 | + 'product/compare' => 'porovnanie', | ||
| 646 | + //'product/search' => 'hladaj', | ||
| 647 | + 'information/contact' => 'kontakt', | ||
| 648 | + 'information/sitemap' => 'mapa-stranky', | ||
| 649 | + 'checkout/success' => 'suhlas', | ||
| 650 | + 'checkout/checkout' => 'pokladna', | ||
| 651 | + 'checkout/cart' => 'kosik', | ||
| 652 | + 'checkout/voucher' => 'kupon', | ||
| 653 | + 'common/home' => '', | ||
| 654 | + 'account/reward' => 'odmena', | ||
| 655 | + 'account/address' => 'katalog-adresa', | ||
| 656 | + 'account/password' => 'zmena-heslo', | ||
| 657 | + 'account/edit' => 'zmena-ucet', | ||
| 658 | + 'account/register' => 'registracia', | ||
| 659 | + 'account/transaction' => 'transakcie', | ||
| 660 | + 'account/return' => 'reklamacia', | ||
| 661 | + 'account/download' => 'download', | ||
| 662 | + 'account/forgotten' => 'konto-obnova-hesla', | ||
| 663 | + 'account/return/insert' => 'reklamacia-nova', | ||
| 664 | + 'account/newsletter' => 'novinky', | ||
| 665 | + 'account/order' => 'historia-objednavok', | ||
| 666 | + 'account/logout' => 'odhlasenie', | ||
| 667 | + 'account/login' => 'prihlasenie', | ||
| 668 | + 'account/account' => 'konto', | ||
| 669 | + 'account/wishlist' => 'lista-zelani', | ||
| 670 | + 'account/voucher' => 'voucher', | ||
| 671 | + 'module/ticket_system_pro' => 'pomoc', | ||
| 672 | + 'module/ticket_system_pro/open' => 'otvor-tiket', | ||
| 673 | + 'module/ticket_system_pro/view' => 'zobraz-tiket', | ||
| 674 | + 'module/tsp_tickets' => 'tikety-pomoc', | ||
| 675 | + 'account/recurring' => 'opakovanie', | ||
| 676 | + 'account/success' => 'konto-uspech', | ||
| 677 | + ), | ||
| 678 | + | ||
| 679 | + 'tr' => array( | ||
| 680 | + 'account/account' => 'hesap', | ||
| 681 | + 'account/address' => 'hesap/adres', | ||
| 682 | + 'account/download' => 'hesap/indirme', | ||
| 683 | + 'account/edit' => 'hesap/düzenleme', | ||
| 684 | + 'account/forgotten' => 'hesap/unutulmuş', | ||
| 685 | + 'account/login' => 'hesap/giriş', | ||
| 686 | + 'account/logout' => 'hesap/çıkış', | ||
| 687 | + 'account/newsletter' => 'hesap/bülten', | ||
| 688 | + 'account/order' => 'hesap/sipariş', | ||
| 689 | + 'account/password' => 'hesap/şifre', | ||
| 690 | + 'account/register' => 'hesap/kayıt', | ||
| 691 | + 'account/return' => 'hesap/dönüş', | ||
| 692 | + 'account/return/insert' => 'hesap/dönüş/insert', | ||
| 693 | + 'account/reward' => 'hesap/ödül', | ||
| 694 | + 'account/transaction' => 'hesap/işlem', | ||
| 695 | + 'account/voucher' => 'hesap/makbuz', | ||
| 696 | + 'account/wishlist' => 'hesap/dilek-listesi', | ||
| 697 | + 'information/contact' => 'iletişim', | ||
| 698 | + 'information/sitemap' => 'site-haritası', | ||
| 699 | + 'checkout/checkout' => 'ödeme', | ||
| 700 | + 'checkout/voucher' => 'fiş', | ||
| 701 | + 'product/compare' => 'karşılaştırma', | ||
| 702 | + 'product/manufacturer' => 'üretici', | ||
| 703 | + 'product/special' => 'özel', | ||
| 704 | + 'affiliate/account' => 'bağlı-kuruluş/hesap', | ||
| 705 | + 'affiliate/login' => 'bağlı-kuruluş/giriş', | ||
| 706 | + 'affiliate/logout' => 'bağlı-kuruluş/çıkış', | ||
| 707 | + 'affiliate/edit' => 'bağlı-kuruluş/düzenleme', | ||
| 708 | + 'affiliate/forgotten' => 'bağlı-kuruluş/unutulmuş', | ||
| 709 | + 'affiliate/password' => 'bağlı-kuruluş/şifre', | ||
| 710 | + 'affiliate/register' => 'bağlı-kuruluş/kayıt', | ||
| 711 | + 'affiliate/tracking' => 'bağlı-kuruluş/takip', | ||
| 712 | + 'affiliate/transaction' => 'bağlı-kuruluş/işlem', | ||
| 713 | + 'checkout/cart' => 'alışveriş-sepeti', | ||
| 714 | + //'product/search' => 'arama', | ||
| 715 | + ), | ||
| 716 | + | ||
| 717 | + 'bg' => array( | ||
| 718 | + 'account/account' => 'акаунт', | ||
| 719 | + 'account/address' => 'акаунт/адрес', | ||
| 720 | + 'account/download' => 'акаунт/изтегляне', | ||
| 721 | + 'account/edit' => 'акаунт/редактиране', | ||
| 722 | + 'account/forgotten' => 'акаунт/забравен', | ||
| 723 | + 'account/login' => 'акаунт/вход', | ||
| 724 | + 'account/logout' => 'акаунт/изход', | ||
| 725 | + 'account/newsletter' => 'акаунт/бюлетин', | ||
| 726 | + 'account/order' => 'акаунт/поръчка', | ||
| 727 | + 'account/password' => 'акаунт/парола', | ||
| 728 | + 'account/register' => 'акаунт/регистър', | ||
| 729 | + 'account/return' => 'акаунт/връщане', | ||
| 730 | + 'account/return/insert' => 'акаунт/връщане/вмъкване', | ||
| 731 | + 'account/reward' => 'акаунт/награда', | ||
| 732 | + 'account/transaction' => 'акаунт/транзакция', | ||
| 733 | + 'account/voucher' => 'акаунт/ваучер', | ||
| 734 | + 'account/wishlist' => 'акаунт/списък-с-желания', | ||
| 735 | + 'information/contact' => 'контакт', | ||
| 736 | + 'information/sitemap' => 'карта-на-сайта', | ||
| 737 | + 'checkout/checkout' => 'разгледайте', | ||
| 738 | + 'checkout/voucher' => 'ваучер', | ||
| 739 | + 'product/compare' => 'сравнение', | ||
| 740 | + 'product/manufacturer' => 'производител', | ||
| 741 | + 'product/special' => 'специален', | ||
| 742 | + 'affiliate/account' => 'филиал/акаунт', | ||
| 743 | + 'affiliate/login' => 'филиал/вход', | ||
| 744 | + 'affiliate/logout' => 'филиал/изход', | ||
| 745 | + 'affiliate/edit' => 'филиал/редактиране', | ||
| 746 | + 'affiliate/forgotten' => 'филиал/забравен', | ||
| 747 | + 'affiliate/password' => 'филиал/password', | ||
| 748 | + 'affiliate/register' => 'филиал/регистър', | ||
| 749 | + 'affiliate/tracking' => 'филиал/tracking', | ||
| 750 | + 'affiliate/transaction' => 'филиал/transaction', | ||
| 751 | + 'checkout/cart' => 'количка', | ||
| 752 | + //'product/search' => 'търсене', | ||
| 753 | + ), | ||
| 754 | + ); | ||
| 755 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/1x_adm/model/tool/gkd_lib.php
0 → 100644
| 1 | +<?php | ||
| 2 | +class ModelToolGkdLib extends Model { | ||
| 3 | + | ||
| 4 | + public function fetch($template, $data = array(), $snippet = false, $language = false) { | ||
| 5 | + $data['token'] = isset($this->session->data['user_token']) ? $this->session->data['user_token'] : $this->session->data['token']; | ||
| 6 | + $data['token_type'] = isset($this->session->data['user_token']) ? 'user_token' : 'token'; | ||
| 7 | + $data['full_token'] = isset($this->session->data['user_token']) ? 'user_token='.$this->session->data['user_token'] : 'token='.$this->session->data['token']; | ||
| 8 | + $data['languages'] = $this->getLanguages(); | ||
| 9 | + $data['_language'] = $this->language; | ||
| 10 | + $data['_config'] = $this->config; | ||
| 11 | + $data['_url'] = $this->url; | ||
| 12 | + $data['_user'] = $this->user; | ||
| 13 | + | ||
| 14 | + $this->load->model('setting/store'); | ||
| 15 | + | ||
| 16 | + $data['stores'] = array(); | ||
| 17 | + $data['stores'][] = array( | ||
| 18 | + 'store_id' => 0, | ||
| 19 | + 'name' => $this->config->get('config_name') | ||
| 20 | + ); | ||
| 21 | + | ||
| 22 | + $stores = $this->model_setting_store->getStores(); | ||
| 23 | + | ||
| 24 | + foreach ($stores as $store) { | ||
| 25 | + $action = array(); | ||
| 26 | + | ||
| 27 | + $data['stores'][] = array( | ||
| 28 | + 'store_id' => $store['store_id'], | ||
| 29 | + 'name' => $store['name'] | ||
| 30 | + ); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + if (!$language) { | ||
| 34 | + $languages = array(array('language_id' => $this->config->get('config_language_id'))); | ||
| 35 | + } else if ($language == 'all') { | ||
| 36 | + $this->load->model('localisation/language'); | ||
| 37 | + $languages = $this->getLanguages(); | ||
| 38 | + $return = array(); | ||
| 39 | + } else { | ||
| 40 | + $languages = array(array('language_id' => $language)); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + if ($snippet == 'all') { | ||
| 44 | + preg_match_all('#\$gkd_snippet == \'(.+)\'#', file_get_contents(DIR_TEMPLATE . $template . '.tpl'), $res); | ||
| 45 | + | ||
| 46 | + if (isset($res[1])) { | ||
| 47 | + $snippets = $res[1]; | ||
| 48 | + } | ||
| 49 | + } else { | ||
| 50 | + $snippets = array($snippet); | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + foreach ($snippets as $gkd_snippet) { | ||
| 54 | + $data['gkd_snippet'] = $gkd_snippet; | ||
| 55 | + | ||
| 56 | + foreach ($languages as $lang) { | ||
| 57 | + $data['_language_id'] = $lang['language_id']; | ||
| 58 | + | ||
| 59 | + if (version_compare(VERSION, '3', '>=')) { | ||
| 60 | + $rf = new ReflectionMethod('Template', '__construct'); | ||
| 61 | + | ||
| 62 | + $addRegistry = false; | ||
| 63 | + | ||
| 64 | + if ($rf->getNumberOfParameters() > 1) { | ||
| 65 | + foreach ($rf->getParameters() as $p) { | ||
| 66 | + if ($p->name == 'registry') { | ||
| 67 | + $addRegistry = true; | ||
| 68 | + } | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + if ($addRegistry) { | ||
| 73 | + if ($rf->getNumberOfParameters() == 2) { | ||
| 74 | + $tpl = new Template('template', $this->registry); | ||
| 75 | + } else if ($rf->getNumberOfParameters() == 3) { | ||
| 76 | + $tpl = new Template('template', false, $this->registry); | ||
| 77 | + } | ||
| 78 | + } else { | ||
| 79 | + $tpl = new Template('template'); | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + foreach ($data as $key => $value) { | ||
| 83 | + $tpl->set($key, $value); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + $rf = new ReflectionMethod('Template', 'render'); | ||
| 87 | + | ||
| 88 | + if ($rf->getNumberOfParameters() > 2) { | ||
| 89 | + $render = $tpl->render($template, $this->registry, false); | ||
| 90 | + } else { | ||
| 91 | + $render = $tpl->render($template, false); | ||
| 92 | + } | ||
| 93 | + } else if (version_compare(VERSION, '2.2', '>=')) { | ||
| 94 | + $tpl = new Template(version_compare(VERSION, '2.3', '>=') ? 'php': 'basic'); | ||
| 95 | + | ||
| 96 | + foreach ($data as $key => $value) { | ||
| 97 | + $tpl->set($key, $value); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + $render = $tpl->render($template.'.tpl', null); // null is for compatibility with fastor theme | ||
| 101 | + //} elseif (method_exists($this->load, 'view')) { | ||
| 102 | + } elseif (version_compare(VERSION, '2', '>=')) { | ||
| 103 | + $render = $this->load->view($template.'.tpl', $data); | ||
| 104 | + } else { | ||
| 105 | + $tpl = new Template(); | ||
| 106 | + $tpl->data = &$data; | ||
| 107 | + $render = $tpl->fetch($template.'.tpl'); | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + if ($snippet == 'all' && $language == 'all') { | ||
| 111 | + $return[$gkd_snippet][$lang['language_id']] = $render; | ||
| 112 | + } else if ($snippet == 'all') { | ||
| 113 | + $return[$gkd_snippet] = $render; | ||
| 114 | + } else if ($language == 'all') { | ||
| 115 | + $return[$lang['language_id']] = $render; | ||
| 116 | + } else { | ||
| 117 | + $return = $render; | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + return $return; | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + public function getLanguages() { | ||
| 126 | + $this->load->model('localisation/language'); | ||
| 127 | + $languages = $this->model_localisation_language->getLanguages(); | ||
| 128 | + | ||
| 129 | + foreach ($languages as $k => $language) { | ||
| 130 | + if (version_compare(VERSION, '2.2', '>=')) { | ||
| 131 | + $languages[$k]['image'] = 'language/'.$language['code'].'/'.$language['code'].'.png'; | ||
| 132 | + } else { | ||
| 133 | + $languages[$k]['image'] = 'view/image/flags/'. $language['image']; | ||
| 134 | + } | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + return $languages; | ||
| 138 | + } | ||
| 139 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/1x_adm/model/tool/path_manager.php
0 → 100644
| 1 | +<?php | ||
| 2 | +if (isset($vqmod)) { | ||
| 3 | + require_once($vqmod->modCheck(DIR_SYSTEM.'../catalog/model/tool/path_manager.php')); | ||
| 4 | +} else if (class_exists('VQMod')) { | ||
| 5 | + require_once(VQMod::modCheck(DIR_SYSTEM.'../catalog/model/tool/path_manager.php')); | ||
| 6 | +} else { | ||
| 7 | + require_once(DIR_SYSTEM.'../catalog/model/tool/path_manager.php'); | ||
| 8 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/1x_adm/model/tool/seo_package.php
0 → 100644
| 1 | +<?php | ||
| 2 | +class ModelToolSeoPackage extends Model { | ||
| 3 | + | ||
| 4 | + private $store_names = array(); | ||
| 5 | + private $store_countries = array(); | ||
| 6 | + | ||
| 7 | + public function __construct($registry) { | ||
| 8 | + parent::__construct($registry); | ||
| 9 | + | ||
| 10 | + if (version_compare(VERSION, '3', '>=')) { | ||
| 11 | + $this->url_alias = 'seo_url'; | ||
| 12 | + } else { | ||
| 13 | + $this->url_alias = 'url_alias'; | ||
| 14 | + } | ||
| 15 | + } | ||
| 16 | + | ||
| 17 | + public function getFriendlyUrls($lang) { | ||
| 18 | + | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + public function getProductOptions($product_id, $lang) { | ||
| 22 | + $product_option_data = array(); | ||
| 23 | + | ||
| 24 | + $product_option_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product_option` po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN `" . DB_PREFIX . "option_description` od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "'"); | ||
| 25 | + | ||
| 26 | + foreach ($product_option_query->rows as $product_option) { | ||
| 27 | + $options_values = array(); | ||
| 28 | + | ||
| 29 | + $product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON(pov.option_value_id = ov.option_value_id) WHERE pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' ORDER BY ov.sort_order ASC"); | ||
| 30 | + | ||
| 31 | + foreach ($product_option_value_query->rows as $product_option_value) { | ||
| 32 | + $opt_value = $this->db->query("SELECT pov.option_value_id, ovd.name, pov.quantity, pov.subtract, pov.price, pov.price_prefix, pov.points, pov.points_prefix, pov.weight, pov.weight_prefix FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_value_id = '" . (int)$product_option_value['product_option_value_id'] . "' AND ovd.language_id = '" . (int)$lang . "'")->row; | ||
| 33 | + | ||
| 34 | + if (isset($opt_value['name'])) { | ||
| 35 | + $options_values[] = $opt_value['name']; | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + $product_option_data[strtolower($product_option['name'])] = implode(' ', $options_values); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + return $product_option_data; | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + public function getAttributes($product_id, $lang, $asArray = false) { | ||
| 46 | + | ||
| 47 | + $product_attribute_query = $this->db->query("SELECT pa.text, ad.name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute_description ad ON ad.attribute_id = pa.attribute_id WHERE pa.product_id = '" . (int)$product_id . "' AND pa.language_id = " . (int) $lang . " AND ad.language_id = " . (int) $lang . " GROUP BY pa.attribute_id"); | ||
| 48 | + | ||
| 49 | + if ($asArray) { | ||
| 50 | + $output = array(); | ||
| 51 | + | ||
| 52 | + foreach ($product_attribute_query->rows as $product_attribute) { | ||
| 53 | + $output[strtolower($product_attribute['name'])] = $product_attribute['text']; | ||
| 54 | + } | ||
| 55 | + } else { | ||
| 56 | + $output = ''; | ||
| 57 | + | ||
| 58 | + foreach ($product_attribute_query->rows as $product_attribute) { | ||
| 59 | + $output .= ($output ? ', ': '') . $product_attribute['name'] . ': ' . $product_attribute['text']; | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + return $output; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + public function getProductCategoryName($product_id, $lang, $parent = false) { | ||
| 67 | + if ($parent) { | ||
| 68 | + $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "product_to_category pc LEFT JOIN " . DB_PREFIX . "category c ON c.category_id = pc.category_id LEFT JOIN " . DB_PREFIX . "category_path cp ON (cp.category_id = c.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd ON cd.category_id = c.parent_id WHERE pc.product_id = '" . (int)$product_id . "' AND cd.language_id = " . $lang . " ORDER BY cp.level DESC LIMIT 1")->row; | ||
| 69 | + } else { | ||
| 70 | + $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "category_description cd ON (cd.category_id = p2c.category_id) LEFT JOIN " . DB_PREFIX . "category_path cp ON (p2c.category_id = cp.category_id) WHERE p2c.product_id = '" . (int)$product_id . "' AND cd.language_id = " . $lang . " ORDER BY cp.level DESC LIMIT 1")->row; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + if (isset($query['name'])) | ||
| 74 | + return $query['name']; | ||
| 75 | + return ''; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + public function getCategoryName($category_id, $lang, $parent = false) { | ||
| 79 | + if (is_array($category_id)) { | ||
| 80 | + $cat_ids = implode(',', array_map('intval', $category_id)); | ||
| 81 | + | ||
| 82 | + if ($parent) { | ||
| 83 | + $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_path cp ON (cp.category_id = c.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd ON (cd.category_id = c.parent_id) WHERE c.category_id IN (" . $cat_ids . ") AND cd.language_id = " . $lang . " ORDER BY cp.level DESC")->row; | ||
| 84 | + } else { | ||
| 85 | + $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "category_description cd ON (cd.category_id = cp.category_id) WHERE cp.category_id IN (" . $cat_ids . ") AND cd.language_id = " . $lang . " ORDER BY cp.level DESC")->row; | ||
| 86 | + } | ||
| 87 | + } else if ($parent) { | ||
| 88 | + $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_path cp ON (cp.category_id = c.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd ON cd.category_id = c.parent_id WHERE c.category_id = '" . (int)$category_id . "' AND cd.language_id = " . $lang . " ORDER BY cp.level DESC LIMIT 1")->row; | ||
| 89 | + } else { | ||
| 90 | + $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category_path cp ON (cp.category_id = cd.category_id) WHERE cd.category_id = '" . (int)$category_id . "' AND cd.language_id = " . $lang . " ORDER BY cp.level DESC LIMIT 1")->row; | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + if (isset($query['name'])) | ||
| 94 | + return $query['name']; | ||
| 95 | + return ''; | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + public function getCategoryPrice($category_id, $type = 'lowest') { | ||
| 99 | + if(!isset($this->tax)) { | ||
| 100 | + if (version_compare(VERSION, '2.2', '>=')) { | ||
| 101 | + $this->registry->set('tax', new \Cart\Tax($this->registry)); | ||
| 102 | + } else { | ||
| 103 | + if(!class_exists('Tax')) { | ||
| 104 | + require_once(DIR_SYSTEM . 'library/tax.php'); | ||
| 105 | + } | ||
| 106 | + if(!class_exists('Customer')) { | ||
| 107 | + require_once(DIR_SYSTEM . 'library/customer.php'); | ||
| 108 | + $this->registry->set('customer', new Customer($this->registry)); | ||
| 109 | + } | ||
| 110 | + $this->tax = new Tax($this->registry); | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + // set shipping address of store for tax calculation | ||
| 114 | + $this->tax->setShippingAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id')); | ||
| 115 | + $this->tax->setPaymentAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id')); | ||
| 116 | + $this->tax->setStoreAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id')); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + $order = ($type == 'lowest') ? 'ASC' : 'DESC'; | ||
| 120 | + | ||
| 121 | + $query = $this->db->query("SELECT p.price, p.tax_class_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p2c.category_id = '" . (int)$category_id . "' ORDER BY p.price " . $order . " LIMIT 1")->row; | ||
| 122 | + | ||
| 123 | + if (!empty($query['price'])) { | ||
| 124 | + $price = $this->currency->format($this->tax->calculate($query['price'], $query['tax_class_id'], $this->config->get('config_tax')), $this->config->get('config_currency')); | ||
| 125 | + | ||
| 126 | + if (function_exists('mb_substr')) { | ||
| 127 | + if (mb_substr($price, -3) == '.00' || mb_substr($price, -3) == ',00') { | ||
| 128 | + return mb_substr($price, 0, -3); | ||
| 129 | + } | ||
| 130 | + } else { | ||
| 131 | + if (substr($price, -3) == '.00' || substr($price, -3) == ',00') { | ||
| 132 | + return substr($price, 0, -3); | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + return $price; | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + return ''; | ||
| 140 | + } | ||
| 141 | + | ||
| 142 | + public function getGrandParentCategoryName($category_id, $lang) { | ||
| 143 | + $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category ch ON (c.parent_id = ch.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd ON (cd.category_id = ch.parent_id) WHERE c.category_id = '" . (int)$category_id . "' AND cd.language_id = " . $lang . " LIMIT 1")->row; | ||
| 144 | + | ||
| 145 | + if (isset($query['name'])) | ||
| 146 | + return $query['name']; | ||
| 147 | + return ''; | ||
| 148 | + } | ||
| 149 | + | ||
| 150 | + public function getParentCategoryName($category_id, $lang) { | ||
| 151 | + //$query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON c.category_id = cd.category_id WHERE cd.category_id = '" . (int)$category_id . "' AND language_id = " . $lang . " LIMIT 1")->row; | ||
| 152 | + $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON c.parent_id = cd.category_id WHERE c.category_id = '" . (int)$category_id . "' AND cd.language_id = " . $lang . " LIMIT 1")->row; | ||
| 153 | + | ||
| 154 | + if (isset($query['name'])) | ||
| 155 | + return $query['name']; | ||
| 156 | + return ''; | ||
| 157 | + } | ||
| 158 | + | ||
| 159 | + public function getChildCategoryName($category_id, $lang) { | ||
| 160 | + //$query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON c.category_id = cd.category_id WHERE cd.category_id = '" . (int)$category_id . "' AND language_id = " . $lang . " LIMIT 1")->row; | ||
| 161 | + $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON c.category_id = cd.category_id WHERE c.parent_id = '" . (int)$category_id . "' AND cd.language_id = " . $lang . " LIMIT 1")->row; | ||
| 162 | + | ||
| 163 | + if (isset($query['name'])) | ||
| 164 | + return $query['name']; | ||
| 165 | + return ''; | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + public function getProductCategoryId($product_id) { | ||
| 169 | + $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "' LIMIT 1")->row; | ||
| 170 | + | ||
| 171 | + if (isset($query['category_id'])) | ||
| 172 | + return $query['category_id']; | ||
| 173 | + return ''; | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + public function getManufacturerData($manufacturer_id, $lang, $store_id) { | ||
| 177 | + $query = $this->db->query("SELECT m.name as orig_name, d.name, d.description as 'desc', d.meta_description as meta_desc, d.meta_title as title, d.meta_keyword as keywords, d.seo_h1 as h1, d.seo_h2 as h2, d.seo_h3 as h3 FROM " . DB_PREFIX . "manufacturer m LEFT JOIN " . DB_PREFIX . "seo_manufacturer_description d ON (m.manufacturer_id = d.manufacturer_id AND d.language_id=" . (int) $lang . " AND d.store_id = '" . (int) $store_id . "') WHERE m.manufacturer_id = '" . (int)$manufacturer_id . "' LIMIT 1")->row; | ||
| 178 | + | ||
| 179 | + if (empty($query['name']) && isset($query['orig_name'])) { | ||
| 180 | + $query['name'] = $query['orig_name']; | ||
| 181 | + } | ||
| 182 | + | ||
| 183 | + return $query; | ||
| 184 | + } | ||
| 185 | + | ||
| 186 | + public function applyFunctions($value) { | ||
| 187 | + // apply functions | ||
| 188 | + $fn = 'upcase|lowcase|ucfirst'; | ||
| 189 | + $value = preg_replace_callback('#\{('.$fn.')\}(.+?)\{\/(?:'.$fn.')\}#', array($this, 'pregFunctions'), $value); | ||
| 190 | + | ||
| 191 | + // truncate without breaking word | ||
| 192 | + if (preg_match('#{limit:(\d+)}#', $value, $limit)) { | ||
| 193 | + $value = str_replace($limit[0], '', $value); | ||
| 194 | + //$value = trim(mb_substr($value, 0, (int) $limit[1])); | ||
| 195 | + | ||
| 196 | + if (strlen($value) > (int) $limit[1]) { | ||
| 197 | + $newstr = substr($value, 0, (int) $limit[1]); | ||
| 198 | + if (substr($newstr,-1,1) != ' ') { | ||
| 199 | + $newstr = substr($newstr, 0, strrpos($newstr, ' ')); | ||
| 200 | + } | ||
| 201 | + $value = $newstr; | ||
| 202 | + } | ||
| 203 | + | ||
| 204 | + } | ||
| 205 | + | ||
| 206 | + // basic double comma removing | ||
| 207 | + $value = trim(preg_replace('/(?:,\s*,+)+/', ', ', $value), ', '); | ||
| 208 | + | ||
| 209 | + return $value; | ||
| 210 | + } | ||
| 211 | + | ||
| 212 | + public function pregFunctions($values) { | ||
| 213 | + if ($values[1] == 'upcase') { | ||
| 214 | + return mb_convert_case($values[2], MB_CASE_UPPER, 'UTF-8'); | ||
| 215 | + } else if ($values[1] == 'lowcase') { | ||
| 216 | + return mb_convert_case($values[2], MB_CASE_LOWER, 'UTF-8'); | ||
| 217 | + } else if ($values[1] == 'ucfirst') { | ||
| 218 | + return mb_convert_case($values[2], MB_CASE_TITLE, 'UTF-8'); | ||
| 219 | + } | ||
| 220 | + } | ||
| 221 | + | ||
| 222 | + public function commonTransform($pattern, $lang, $row, $store_id = 0, $get_value = false) { | ||
| 223 | + $replace = array(); | ||
| 224 | + | ||
| 225 | + if ($this->config->get('mlseo_current_lang')) { | ||
| 226 | + $lang_code = $this->config->get('mlseo_current_lang'); | ||
| 227 | + } else { | ||
| 228 | + $lang_code = $this->getLangCode($lang); | ||
| 229 | + } | ||
| 230 | + | ||
| 231 | + $replace['{'.$lang_code.'}'] = ''; | ||
| 232 | + $replace['{/'.$lang_code.'}'] = ''; | ||
| 233 | + | ||
| 234 | + if (function_exists('mb_substr')) { | ||
| 235 | + $replace['{'.mb_substr($lang_code, 0, 2).'}'] = ''; | ||
| 236 | + $replace['{/'.mb_substr($lang_code, 0, 2).'}'] = ''; | ||
| 237 | + } else { | ||
| 238 | + $replace['{'.substr($lang_code, 0, 2).'}'] = ''; | ||
| 239 | + $replace['{/'.substr($lang_code, 0, 2).'}'] = ''; | ||
| 240 | + } | ||
| 241 | + | ||
| 242 | + if (strpos($pattern, '[store]') !== false) { | ||
| 243 | + if (isset($this->store_names[$store_id])) { | ||
| 244 | + $replace['[store]'] = $this->store_names[$store_id]; | ||
| 245 | + } else { | ||
| 246 | + if (!$store_id) { | ||
| 247 | + $this->store_names[$store_id] = $replace['[store]'] = $this->config->get('config_name'); | ||
| 248 | + } else { | ||
| 249 | + $this->load->model('setting/store'); | ||
| 250 | + $store_data = $this->model_setting_store->getStore($store_id); | ||
| 251 | + $this->store_names[$store_id] = $replace['[store]'] = $store_data['name']; | ||
| 252 | + } | ||
| 253 | + } | ||
| 254 | + } | ||
| 255 | + | ||
| 256 | + /* | ||
| 257 | + if (strpos($pattern, '[store_country]') !== false) { | ||
| 258 | + if (isset($this->store_countries[$store_id])) { | ||
| 259 | + $replace['[store_country]'] = $this->store_countries[$store_id]; | ||
| 260 | + } else { | ||
| 261 | + $this->load->model('localisation/country'); | ||
| 262 | + | ||
| 263 | + if (!$store_id) { | ||
| 264 | + $country = $this->model_localisation_country->getCountry($this->config->get('config_country_id')); | ||
| 265 | + $this->store_countries[$store_id] = $replace['[store_country]'] = isset($country['name']) ? $country['name'] : ''; | ||
| 266 | + } else { | ||
| 267 | + $this->load->model('setting/store'); | ||
| 268 | + $store_data = $this->model_setting_store->getStore($store_id); | ||
| 269 | + $country = $this->model_localisation_country->getCountry($store_data['config_country_id']); | ||
| 270 | + $this->store_countries[$store_id] = $replace['[store_country]'] = isset($country['name']) ? $country['name'] : ''; | ||
| 271 | + } | ||
| 272 | + } | ||
| 273 | + } | ||
| 274 | + */ | ||
| 275 | + | ||
| 276 | + if (strpos($pattern, '[lang_id]') !== false) | ||
| 277 | + $replace['[lang_id]'] = $lang; | ||
| 278 | + if (strpos($pattern, '[lang]') !== false) | ||
| 279 | + $replace['[lang]'] = $lang_code; | ||
| 280 | + | ||
| 281 | + $pattern = preg_replace('#\[(.+?)\|(uppercase|lowercase)\]#', '{$2}[$1]{/$2}', $pattern); | ||
| 282 | + | ||
| 283 | + $pattern = str_replace(array_keys($replace), array_values($replace), $pattern); | ||
| 284 | + | ||
| 285 | + if ($this->config->get('mlseo_lang_codes')) { | ||
| 286 | + $lgCodes = array(); | ||
| 287 | + foreach ($this->config->get('mlseo_lang_codes') as $lgCode) { | ||
| 288 | + $lgCodes[] = $lgCode; | ||
| 289 | + if (function_exists('mb_substr')) { | ||
| 290 | + $lgCodes[] = mb_substr($lgCode, 0, 2); | ||
| 291 | + } else { | ||
| 292 | + $lgCodes[] = substr($lgCode, 0, 2); | ||
| 293 | + } | ||
| 294 | + } | ||
| 295 | + $lgCodes = implode('|', $lgCodes); | ||
| 296 | + | ||
| 297 | + $pattern = preg_replace('/\{('.$lgCodes.')\}(.*)\{\/('.$lgCodes.')\}/isU', '', $pattern); | ||
| 298 | + } | ||
| 299 | + | ||
| 300 | + while (preg_match_all('#\{([^\{].+\|.+)\}#U', $pattern, $results, PREG_SET_ORDER)) { | ||
| 301 | + if ($results) { | ||
| 302 | + foreach ($results as $res) { | ||
| 303 | + $rand = explode('|', $res[1]); | ||
| 304 | + | ||
| 305 | + if (is_array($rand)) { | ||
| 306 | + if ($get_value) { | ||
| 307 | + if (isset($this->session->data['gkd_seorand'][abs(crc32($pattern))]) && $this->session->data['gkd_seorand'][abs(crc32($pattern))]+1 <= count($rand)-1) { | ||
| 308 | + $this->session->data['gkd_seorand'][abs(crc32($pattern))]++; | ||
| 309 | + } else { | ||
| 310 | + $this->session->data['gkd_seorand'][abs(crc32($pattern))] = 0; | ||
| 311 | + } | ||
| 312 | + | ||
| 313 | + $pattern = str_replace($res[0], $rand[$this->session->data['gkd_seorand'][abs(crc32($pattern))]], $pattern); | ||
| 314 | + } else { | ||
| 315 | + $pattern = str_replace($res[0], $rand[array_rand($rand)], $pattern); | ||
| 316 | + } | ||
| 317 | + } | ||
| 318 | + } | ||
| 319 | + } | ||
| 320 | + } | ||
| 321 | + | ||
| 322 | + return $pattern; | ||
| 323 | + } | ||
| 324 | + | ||
| 325 | + public function transformProduct($pattern, $lang, $row, $store_id = 0, $get_value = false) { | ||
| 326 | + $pattern = $this->commonTransform($pattern, $lang, $row, $store_id, $get_value); | ||
| 327 | + | ||
| 328 | + if (!isset($row['name'])) { | ||
| 329 | + if (isset($row['orig_name'])) { | ||
| 330 | + $row['name'] = $row['orig_name']; | ||
| 331 | + } else { | ||
| 332 | + $row['name'] = isset($row['product_description'][$lang]['name']) ? $row['product_description'][$lang]['name'] : ''; | ||
| 333 | + } | ||
| 334 | + } | ||
| 335 | + | ||
| 336 | + if (!isset($row['description'])) { | ||
| 337 | + if (isset($row['orig_description'])) { | ||
| 338 | + $row['description'] = $row['orig_description']; | ||
| 339 | + } else { | ||
| 340 | + $row['description'] = isset($row['product_description'][$lang]['description']) ? $row['product_description'][$lang]['description'] : ''; | ||
| 341 | + } | ||
| 342 | + } | ||
| 343 | + | ||
| 344 | + //$this->load->model('catalog/product'); | ||
| 345 | + //$product_attributes = $this->model_catalog_product->getProductAttributes($row['product_id']); | ||
| 346 | + | ||
| 347 | + // $product_attributes = $this->db->query("SELECT ad.name, pa.text FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE pa.product_id = '" . (int)$row['product_id'] . "' AND ad.language_id = '" . (int)$lang . "' AND pa.language_id = '" . (int)$lang . "' ORDER BY a.sort_order, ad.name")->rows; | ||
| 348 | + // var_dump($product_attributes);die; | ||
| 349 | + // preg_match('#\[attribute_name:(\d)\]#', $pattern, $res); | ||
| 350 | + | ||
| 351 | + $replace = array(); | ||
| 352 | + if (strpos($pattern, '[name]') !== false) | ||
| 353 | + $replace['[name]'] = trim($row['name']); | ||
| 354 | + if (strpos($pattern, '[model]') !== false) | ||
| 355 | + $replace['[model]'] = trim($row['model']); | ||
| 356 | + if (strpos($pattern, '[upc]') !== false) | ||
| 357 | + $replace['[upc]'] = trim($row['upc']); | ||
| 358 | + if (strpos($pattern, '[sku]') !== false) | ||
| 359 | + $replace['[sku]'] = trim($row['sku']); | ||
| 360 | + if (strpos($pattern, '[ean]') !== false) | ||
| 361 | + $replace['[ean]'] = trim($row['ean']); | ||
| 362 | + if (strpos($pattern, '[jan]') !== false) | ||
| 363 | + $replace['[jan]'] = trim($row['jan']); | ||
| 364 | + if (strpos($pattern, '[isbn]') !== false) | ||
| 365 | + $replace['[isbn]'] = trim($row['isbn']); | ||
| 366 | + if (strpos($pattern, '[mpn]') !== false) | ||
| 367 | + $replace['[mpn]'] = trim($row['mpn']); | ||
| 368 | + if (strpos($pattern, '[location]') !== false) | ||
| 369 | + $replace['[location]'] = trim($row['location']); | ||
| 370 | + if (strpos($pattern, '[price_notax]') !== false) | ||
| 371 | + $replace['[price_notax]'] = (float)$row['price'] ? $this->currency->format($row['price'], $this->config->get('config_currency')) : ''; | ||
| 372 | + if (strpos($pattern, '[name_') !== false) { | ||
| 373 | + $langDescriptions = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_description WHERE product_id = ".(int) $row['product_id'])->rows; | ||
| 374 | + | ||
| 375 | + foreach ($langDescriptions as $langDesc) { | ||
| 376 | + $replace['[name_'.$langDesc['language_id'].']'] = $langDesc['name']; | ||
| 377 | + } | ||
| 378 | + } | ||
| 379 | + if (strpos($pattern, '[price]') !== false) { | ||
| 380 | + if (version_compare(VERSION, '2.2', '>=')) { | ||
| 381 | + $this->registry->set('tax', new \Cart\Tax($this->registry)); | ||
| 382 | + } else { | ||
| 383 | + if(!class_exists('Tax')) { | ||
| 384 | + require_once(DIR_SYSTEM . 'library/tax.php'); | ||
| 385 | + } | ||
| 386 | + if(!class_exists('Customer')) { | ||
| 387 | + require_once(DIR_SYSTEM . 'library/customer.php'); | ||
| 388 | + $this->registry->set('customer', new Customer($this->registry)); | ||
| 389 | + } | ||
| 390 | + $this->tax = new Tax($this->registry); | ||
| 391 | + } | ||
| 392 | + | ||
| 393 | + // set shipping address of store for tax calculation | ||
| 394 | + $this->tax->setShippingAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id')); | ||
| 395 | + $this->tax->setPaymentAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id')); | ||
| 396 | + $this->tax->setStoreAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id')); | ||
| 397 | + | ||
| 398 | + | ||
| 399 | + if (!empty($row['product_special'])) { | ||
| 400 | + foreach ($row['product_special'] as $prod_special) { | ||
| 401 | + if ($prod_special['customer_group_id'] == $this->config->get('mlseo_special_group')) { | ||
| 402 | + if ((float)$prod_special['price']) { | ||
| 403 | + $replace['[price]'] = $this->currency->format($this->tax->calculate($prod_special['price'], $row['tax_class_id'], $this->config->get('config_tax')), $this->config->get('config_currency')); | ||
| 404 | + } else { | ||
| 405 | + $replace['[price]'] = (float)$row['price'] ? $this->currency->format($this->tax->calculate($row['price'], $row['tax_class_id'], $this->config->get('config_tax')), $this->config->get('config_currency')) : ''; | ||
| 406 | + } | ||
| 407 | + } else { | ||
| 408 | + $replace['[price]'] = (float)$row['price'] ? $this->currency->format($this->tax->calculate($row['price'], $row['tax_class_id'], $this->config->get('config_tax')), $this->config->get('config_currency')) : ''; | ||
| 409 | + } | ||
| 410 | + } | ||
| 411 | + } else if (isset($row['special']) && (float)$row['special']) { | ||
| 412 | + $replace['[price]'] = (float)$row['special'] ? $this->currency->format($this->tax->calculate($row['special'], $row['tax_class_id'], $this->config->get('config_tax')), $this->config->get('config_currency')) : ''; | ||
| 413 | + } else { | ||
| 414 | + $replace['[price]'] = (float)$row['price'] ? $this->currency->format($this->tax->calculate($row['price'], $row['tax_class_id'], $this->config->get('config_tax')), $this->config->get('config_currency')) : ''; | ||
| 415 | + } | ||
| 416 | + } | ||
| 417 | + if (strpos($pattern, '[prod_id]') !== false) | ||
| 418 | + $replace['[prod_id]'] = isset($row['product_id']) ? trim($row['product_id']) : ''; | ||
| 419 | + if (strpos($pattern, '[cat_id]') !== false) | ||
| 420 | + $replace['[cat_id]'] = isset($row['product_id']) ? trim($this->getProductCategoryId($row['product_id'], $lang)) : ''; | ||
| 421 | + if (strpos($pattern, '[category]') !== false) { | ||
| 422 | + if (!empty($this->request->post['product_category'])) { | ||
| 423 | + $replace['[category]'] = trim($this->getCategoryName($this->request->post['product_category'], $lang)); | ||
| 424 | + } else if (!empty($row['product_category'])) { | ||
| 425 | + $replace['[category]'] = trim($this->getCategoryName($row['product_category'], $lang)); | ||
| 426 | + } else if (isset($row['product_id'])) { | ||
| 427 | + $replace['[category]'] = trim($this->getProductCategoryName($row['product_id'], $lang)); | ||
| 428 | + } else { | ||
| 429 | + $replace['[category]'] = ''; | ||
| 430 | + } | ||
| 431 | + } | ||
| 432 | + if (strpos($pattern, '[parent_cat]') !== false) { | ||
| 433 | + if (!empty($this->request->post['product_category'])) { | ||
| 434 | + $replace['[parent_cat]'] = $replace['[parent_category]'] = trim($this->getCategoryName($this->request->post['product_category'], $lang, true)); | ||
| 435 | + } else if (!empty($row['product_category'])) { | ||
| 436 | + $replace['[parent_cat]'] = $replace['[parent_category]'] = trim($this->getCategoryName($row['product_category'], $lang, true)); | ||
| 437 | + } else if (isset($row['product_id'])) { | ||
| 438 | + $replace['[parent_cat]'] = $replace['[parent_category]'] = trim($this->getProductCategoryName($row['product_id'], $lang, true)); | ||
| 439 | + } else { | ||
| 440 | + $replace['[parent_cat]'] = $replace['[parent_category]'] = ''; | ||
| 441 | + } | ||
| 442 | + } | ||
| 443 | + | ||
| 444 | + if (preg_match_all('/\[brand(?:_(\w+))?\]/', $pattern, $brandMatches)) { | ||
| 445 | + $brandData = !empty($row['manufacturer_id']) ? $this->getManufacturerData($row['manufacturer_id'], $lang, $store_id) : array(); | ||
| 446 | + | ||
| 447 | + if (!empty($brandMatches)) { | ||
| 448 | + foreach ($brandMatches[1] as $brandTag) { | ||
| 449 | + if (!$brandTag) { | ||
| 450 | + $replace['[brand]'] = isset($brandData['name']) ? $brandData['name'] : ''; | ||
| 451 | + } else { | ||
| 452 | + $replace['[brand_'.$brandTag.']'] = isset($brandData[$brandTag]) ? $brandData[$brandTag] : ''; | ||
| 453 | + } | ||
| 454 | + } | ||
| 455 | + } | ||
| 456 | + } | ||
| 457 | + | ||
| 458 | + if (strpos($pattern, '[desc]') !== false) { | ||
| 459 | + if (function_exists('mb_substr')) { | ||
| 460 | + $replace['[desc]'] = trim(preg_replace('/\s\s+/', ' ', mb_substr(strip_tags(str_replace(array('</p>', '</li>'), array('</p> ', '</li> '), html_entity_decode((isset($row['description']) ? $row['description'] : ''), ENT_QUOTES, 'UTF-8'))), 0, 220))); | ||
| 461 | + } else { | ||
| 462 | + $replace['[desc]'] = trim(preg_replace('/\s\s+/', ' ', substr(strip_tags(str_replace(array('</p>', '</li>'), array('</p> ', '</li> '), html_entity_decode((isset($row['description']) ? $row['description'] : ''), ENT_QUOTES, 'UTF-8'))), 0, 220))); | ||
| 463 | + } | ||
| 464 | + } | ||
| 465 | + if (strpos($pattern, '[desc_sentence]') !== false) { | ||
| 466 | + preg_match('#(.*?(?:<\/p>|\.|\!|\?))#is', strip_tags(html_entity_decode($row['description'], ENT_QUOTES, 'UTF-8')), $desc_extract); | ||
| 467 | + | ||
| 468 | + if (isset($desc_extract[1])) { | ||
| 469 | + $replace['[desc_sentence]'] = strip_tags($desc_extract[1]); | ||
| 470 | + } else { | ||
| 471 | + $replace['[desc_sentence]'] = ''; | ||
| 472 | + } | ||
| 473 | + } | ||
| 474 | + if (strpos($pattern, '[desc_sentence2]') !== false) { | ||
| 475 | + preg_match('#.*?(?:<\/p>|\.|\!|\?)(.*?(?:<\/p>|\.|\!|\?))#is', strip_tags(html_entity_decode($row['description'], ENT_QUOTES, 'UTF-8')), $desc_extract); | ||
| 476 | + | ||
| 477 | + if (isset($desc_extract[1])) { | ||
| 478 | + $replace['[desc_sentence2]'] = strip_tags($desc_extract[1]); | ||
| 479 | + } else { | ||
| 480 | + $replace['[desc_sentence2]'] = ''; | ||
| 481 | + } | ||
| 482 | + } | ||
| 483 | + if (strpos($pattern, '[desc_sentence3]') !== false) { | ||
| 484 | + preg_match('#.*?(?:<\/p>|\.|\!|\?).*?(?:<\/p>|\.|\!|\?)(.*?(?:<\/p>|\.|\!|\?))#is', strip_tags(html_entity_decode($row['description'], ENT_QUOTES, 'UTF-8')), $desc_extract); | ||
| 485 | + | ||
| 486 | + if (isset($desc_extract[1])) { | ||
| 487 | + $replace['[desc_sentence3]'] = strip_tags($desc_extract[1]); | ||
| 488 | + } else { | ||
| 489 | + $replace['[desc_sentence3]'] = ''; | ||
| 490 | + } | ||
| 491 | + } | ||
| 492 | + if (strpos($pattern, '[desc_sentence4]') !== false) { | ||
| 493 | + preg_match('#.*?(?:<\/p>|\.|\!|\?).*?(?:<\/p>|\.|\!|\?).*?(?:<\/p>|\.|\!|\?)(.*?(?:<\/p>|\.|\!|\?))#is', strip_tags(html_entity_decode($row['description'], ENT_QUOTES, 'UTF-8')), $desc_extract); | ||
| 494 | + | ||
| 495 | + if (isset($desc_extract[1])) { | ||
| 496 | + $replace['[desc_sentence4]'] = strip_tags($desc_extract[1]); | ||
| 497 | + } else { | ||
| 498 | + $replace['[desc_sentence4]'] = ''; | ||
| 499 | + } | ||
| 500 | + } | ||
| 501 | + | ||
| 502 | + if (strpos($pattern, '[attr]') !== false || strpos($pattern, '[attributes]') !== false) { | ||
| 503 | + $replace['[attr]'] = $replace['[attributes]'] = !empty($row['product_id']) ? $this->getAttributes($row['product_id'], $lang) : ''; | ||
| 504 | + } | ||
| 505 | + | ||
| 506 | + if (preg_match_all('#\[cat_(\d)\]#', $pattern, $catLevels)) { | ||
| 507 | + | ||
| 508 | + if (!empty($this->request->post['product_category'])) { | ||
| 509 | + $categories = $this->getFullProductPathNames($this->request->post['product_category'], $lang, true); | ||
| 510 | + } else if (!empty($row['product_category'])) { | ||
| 511 | + $categories = $this->getFullProductPathNames($row['product_category'], $lang, true); | ||
| 512 | + } else if (isset($row['product_id'])) { | ||
| 513 | + $categories = $this->getFullProductPathNames($row['product_id'], $lang); | ||
| 514 | + } else { | ||
| 515 | + $categories = array(); | ||
| 516 | + } | ||
| 517 | + | ||
| 518 | + foreach ($catLevels[1] as $catLevel) { | ||
| 519 | + $replace['[cat_'.$catLevel.']'] = isset($categories[$catLevel-1]) ? $categories[$catLevel-1] : ''; | ||
| 520 | + } | ||
| 521 | + } | ||
| 522 | + | ||
| 523 | + if (preg_match_all('#\[attr_(.+?)\]#', $pattern, $attrNames)) { | ||
| 524 | + $attrValues = !empty($row['product_id']) ? $this->getAttributes($row['product_id'], $lang, true) : array(); | ||
| 525 | + | ||
| 526 | + foreach ($attrNames[1] as $attrName) { | ||
| 527 | + $replace['[attr_'.$attrName.']'] = isset($attrValues[strtolower($attrName)]) ? $attrValues[strtolower($attrName)] : ''; | ||
| 528 | + } | ||
| 529 | + } | ||
| 530 | + | ||
| 531 | + if (preg_match_all('#\[opt_(.+?)\]#', $pattern, $optNames)) { | ||
| 532 | + $optValues = !empty($row['product_id']) ? $this->getProductOptions($row['product_id'], $lang) : array(); | ||
| 533 | + | ||
| 534 | + foreach ($optNames[1] as $optName) { | ||
| 535 | + $replace['[opt_'.$optName.']'] = isset($optValues[strtolower($optName)]) ? $optValues[strtolower($optName)] : ''; | ||
| 536 | + } | ||
| 537 | + } | ||
| 538 | + | ||
| 539 | + $value = str_replace(array_keys($replace), array_values($replace), $pattern); | ||
| 540 | + | ||
| 541 | + $value = html_entity_decode($value, ENT_QUOTES, 'UTF-8'); | ||
| 542 | + | ||
| 543 | + $value = $this->applyFunctions($value); | ||
| 544 | + | ||
| 545 | + return trim($value); | ||
| 546 | + } | ||
| 547 | + | ||
| 548 | + public function transformCategory($pattern, $lang, $row, $store_id = 0, $get_value = false) { | ||
| 549 | + $pattern = $this->commonTransform($pattern, $lang, $row, $store_id, $get_value); | ||
| 550 | + | ||
| 551 | + if (!isset($row['name'])) { | ||
| 552 | + if (isset($row['orig_name'])) { | ||
| 553 | + $row['name'] = $row['orig_name']; | ||
| 554 | + } else { | ||
| 555 | + $row['name'] = isset($row['category_description'][$lang]['name']) ? $row['category_description'][$lang]['name'] : ''; | ||
| 556 | + } | ||
| 557 | + } | ||
| 558 | + | ||
| 559 | + if (!isset($row['description'])) { | ||
| 560 | + if (isset($row['orig_description'])) { | ||
| 561 | + $row['description'] = $row['orig_description']; | ||
| 562 | + } else { | ||
| 563 | + $row['description'] = isset($row['category_description'][$lang]['description']) ? $row['category_description'][$lang]['description'] : ''; | ||
| 564 | + } | ||
| 565 | + } | ||
| 566 | + | ||
| 567 | + $replace = array(); | ||
| 568 | + | ||
| 569 | + if (strpos($pattern, '[name]') !== false) | ||
| 570 | + $replace['[name]'] = trim($row['name']); | ||
| 571 | + if (strpos($pattern, '[name_') !== false) { | ||
| 572 | + $langDescriptions = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_description WHERE category_id = ".(int) $row['category_id'])->rows; | ||
| 573 | + | ||
| 574 | + foreach ($langDescriptions as $langDesc) { | ||
| 575 | + $replace['[name_'.$langDesc['language_id'].']'] = $langDesc['name']; | ||
| 576 | + } | ||
| 577 | + } | ||
| 578 | + if (strpos($pattern, '[desc]') !== false) { | ||
| 579 | + if (function_exists('mb_substr')) { | ||
| 580 | + $replace['[desc]'] = trim(preg_replace('/\s\s+/', ' ', mb_substr(strip_tags(str_replace(array('</p>', '</li>'), array('</p> ', '</li> '), html_entity_decode((isset($row['description']) ? $row['description'] : ''), ENT_QUOTES, 'UTF-8'))), 0, 220))); | ||
| 581 | + } else { | ||
| 582 | + $replace['[desc]'] = trim(preg_replace('/\s\s+/', ' ', substr(strip_tags(str_replace(array('</p>', '</li>'), array('</p> ', '</li> '), html_entity_decode((isset($row['description']) ? $row['description'] : ''), ENT_QUOTES, 'UTF-8'))), 0, 220))); | ||
| 583 | + } | ||
| 584 | + } | ||
| 585 | + if (strpos($pattern, '[desc_sentence]') !== false) { | ||
| 586 | + preg_match('#<p>(.*?)(?:</p>|\.)#is', html_entity_decode($row['description'], ENT_QUOTES, 'UTF-8'), $desc_extract); | ||
| 587 | + | ||
| 588 | + if (isset($desc_extract[1])) { | ||
| 589 | + $replace['[desc_sentence]'] = strip_tags($desc_extract[1]); | ||
| 590 | + } else { | ||
| 591 | + $replace['[desc_sentence]'] = ''; | ||
| 592 | + } | ||
| 593 | + } | ||
| 594 | + | ||
| 595 | + if (strpos($pattern, '[cat_id]') !== false) | ||
| 596 | + $replace['[cat_id]'] = trim($row['category_id']); | ||
| 597 | + if (strpos($pattern, '[grandparent]') !== false) { | ||
| 598 | + if (!empty($row['category_id'])) { | ||
| 599 | + $replace['[grandparent]'] = trim($this->getGrandParentCategoryName($row['category_id'], $lang)); | ||
| 600 | + } else if (!empty($row['parent_id'])) { | ||
| 601 | + $replace['[grandparent]'] = trim($this->getParentCategoryName($row['parent_id'], $lang)); | ||
| 602 | + } else { | ||
| 603 | + $replace['[grandparent]'] = ''; | ||
| 604 | + } | ||
| 605 | + } | ||
| 606 | + if (strpos($pattern, '[parent]') !== false) { | ||
| 607 | + if (!empty($row['category_id'])) { | ||
| 608 | + $replace['[parent]'] = trim($this->getParentCategoryName($row['category_id'], $lang)); | ||
| 609 | + } else if (!empty($row['parent_id'])) { | ||
| 610 | + $replace['[parent]'] = trim($this->getCategoryName($row['parent_id'], $lang)); | ||
| 611 | + } else { | ||
| 612 | + $replace['[parent]'] = ''; | ||
| 613 | + } | ||
| 614 | + } | ||
| 615 | + if (strpos($pattern, '[child]') !== false) | ||
| 616 | + $replace['[child]'] = !empty($row['category_id']) ? trim($this->getChildCategoryName($row['category_id'], $lang)) : ''; | ||
| 617 | + if (strpos($pattern, '[lowest_price]') !== false) | ||
| 618 | + $replace['[lowest_price]'] = $this->getCategoryPrice($row['category_id'], 'lowest'); | ||
| 619 | + if (strpos($pattern, '[highest_price]') !== false) | ||
| 620 | + $replace['[highest_price]'] = $this->getCategoryPrice($row['category_id'], 'highest'); | ||
| 621 | + | ||
| 622 | + /* | ||
| 623 | + if (strpos($pattern, '[parent]') !== false) | ||
| 624 | + $replace['[parent]'] = $this->model_tool_seo_package->getParentCategoryName($row['category_id'], $lang); | ||
| 625 | + */ | ||
| 626 | + | ||
| 627 | + $value = str_replace(array_keys($replace), array_values($replace), $pattern); | ||
| 628 | + $value = html_entity_decode($value, ENT_QUOTES, 'UTF-8'); | ||
| 629 | + | ||
| 630 | + $value = $this->applyFunctions($value); | ||
| 631 | + | ||
| 632 | + return trim($value); | ||
| 633 | + } | ||
| 634 | + | ||
| 635 | + public function transformInformation($pattern, $lang, $row, $store_id = 0, $get_value = false) { | ||
| 636 | + $pattern = $this->commonTransform($pattern, $lang, $row, $store_id, $get_value); | ||
| 637 | + | ||
| 638 | + if (!isset($row['title'])) { | ||
| 639 | + if (isset($row['orig_title'])) { | ||
| 640 | + $row['title'] = $row['orig_title']; | ||
| 641 | + } else { | ||
| 642 | + $row['title'] = isset($row['information_description'][$lang]['title']) ? $row['information_description'][$lang]['title'] : ''; | ||
| 643 | + } | ||
| 644 | + } | ||
| 645 | + | ||
| 646 | + $replace = array(); | ||
| 647 | + | ||
| 648 | + if (strpos($pattern, '[name_') !== false) { | ||
| 649 | + $langDescriptions = $this->db->query("SELECT * FROM " . DB_PREFIX . "information_description WHERE information_id = ".(int) $row['information_id'])->rows; | ||
| 650 | + | ||
| 651 | + foreach ($langDescriptions as $langDesc) { | ||
| 652 | + $replace['[name_'.$langDesc['language_id'].']'] = $langDesc['title']; | ||
| 653 | + } | ||
| 654 | + } | ||
| 655 | + | ||
| 656 | + if (!isset($row['description'])) { | ||
| 657 | + if (isset($row['orig_description'])) { | ||
| 658 | + $row['description'] = $row['orig_description']; | ||
| 659 | + } else { | ||
| 660 | + $row['description'] = isset($row['information_description'][$lang]['description']) ? $row['information_description'][$lang]['description'] : ''; | ||
| 661 | + } | ||
| 662 | + } | ||
| 663 | + | ||
| 664 | + if (strpos($pattern, '[name]') !== false) | ||
| 665 | + $replace['[name]'] = trim($row['title']); | ||
| 666 | + if (strpos($pattern, '[title]') !== false) | ||
| 667 | + $replace['[title]'] = trim($row['title']); | ||
| 668 | + if (strpos($pattern, '[desc]') !== false) { | ||
| 669 | + if (function_exists('mb_substr')) { | ||
| 670 | + $replace['[desc]'] = trim(preg_replace('/\s\s+/', ' ', mb_substr(strip_tags(str_replace(array('</p>', '</li>'), array('</p> ', '</li> '), html_entity_decode((isset($row['description']) ? $row['description'] : ''), ENT_QUOTES, 'UTF-8'))), 0, 220))); | ||
| 671 | + } else { | ||
| 672 | + $replace['[desc]'] = trim(preg_replace('/\s\s+/', ' ', substr(strip_tags(str_replace(array('</p>', '</li>'), array('</p> ', '</li> '), html_entity_decode((isset($row['description']) ? $row['description'] : ''), ENT_QUOTES, 'UTF-8'))), 0, 220))); | ||
| 673 | + } | ||
| 674 | + } | ||
| 675 | + | ||
| 676 | + if (strpos($pattern, '[desc_sentence]') !== false) { | ||
| 677 | + preg_match('#<p>(.*?)(?:</p>|\.)#is', html_entity_decode($row['description'], ENT_QUOTES, 'UTF-8'), $desc_extract); | ||
| 678 | + | ||
| 679 | + if (isset($desc_extract[1])) { | ||
| 680 | + $replace['[desc_sentence]'] = strip_tags($desc_extract[1]); | ||
| 681 | + } else { | ||
| 682 | + $replace['[desc_sentence]'] = ''; | ||
| 683 | + } | ||
| 684 | + } | ||
| 685 | + | ||
| 686 | + $value = str_replace(array_keys($replace), array_values($replace), $pattern); | ||
| 687 | + $value = html_entity_decode($value, ENT_QUOTES, 'UTF-8'); | ||
| 688 | + | ||
| 689 | + $value = $this->applyFunctions($value); | ||
| 690 | + | ||
| 691 | + return trim($value); | ||
| 692 | + } | ||
| 693 | + | ||
| 694 | + public function transformManufacturer($pattern, $lang, $row, $store_id = 0, $get_value = false) { | ||
| 695 | + $pattern = $this->commonTransform($pattern, $lang, $row, $store_id, $get_value); | ||
| 696 | + | ||
| 697 | + $replace = array(); | ||
| 698 | + if (strpos($pattern, '[name]') !== false) { | ||
| 699 | + if (!empty($row['seo_manufacturer_description'][$store_id][$lang]['name'])) { | ||
| 700 | + $replace['[name]'] = trim($row['seo_manufacturer_description'][$store_id][$lang]['name']); | ||
| 701 | + } else { | ||
| 702 | + $replace['[name]'] = trim($row['name']); | ||
| 703 | + } | ||
| 704 | + } | ||
| 705 | + | ||
| 706 | + $value = str_replace(array_keys($replace), array_values($replace), $pattern); | ||
| 707 | + $value = html_entity_decode($value, ENT_QUOTES, 'UTF-8'); | ||
| 708 | + | ||
| 709 | + $value = $this->applyFunctions($value); | ||
| 710 | + | ||
| 711 | + return trim($value); | ||
| 712 | + } | ||
| 713 | + | ||
| 714 | + public function filter_seo($seo_kw, $type, $id, $lang = '', $simulate = false) { | ||
| 715 | + $whitespace = $this->config->get('mlseo_whitespace'); | ||
| 716 | + | ||
| 717 | + if ($lang) { | ||
| 718 | + $translit = $this->config->get('mlseo_ascii_'.$lang); | ||
| 719 | + $remove = $this->config->get('mlseo_remove_'.$lang); | ||
| 720 | + $replace = $this->config->get('mlseo_replace_'.$lang); | ||
| 721 | + } else { | ||
| 722 | + $translit = $this->config->get('mlseo_ascii_'.$this->config->get('config_language_id')); | ||
| 723 | + $remove = $this->config->get('mlseo_remove_'.$this->config->get('config_language_id')); | ||
| 724 | + $replace = $this->config->get('mlseo_replace_'.$this->config->get('config_language_id')); | ||
| 725 | + } | ||
| 726 | + | ||
| 727 | + if (!empty($replace)) { | ||
| 728 | + foreach (explode('|', $replace) as $rep) { | ||
| 729 | + $r = explode(':', $rep); | ||
| 730 | + | ||
| 731 | + $seo_kw = str_replace(html_entity_decode($r[0], ENT_QUOTES, 'UTF-8'), isset($r[1]) ? $r[1] : '', $seo_kw); | ||
| 732 | + } | ||
| 733 | + } | ||
| 734 | + | ||
| 735 | + if (!empty($remove)) { | ||
| 736 | + $beforeWord = "(\\b|\\s|\\.|\\,|\\!|\\?|\\(|\\)|\\'|\\\"|^)"; | ||
| 737 | + $afterWord = "(\\b|\\s|\\.|\\,|\\!|\\?|\\(|\\)|\\'|\\\"|$)"; | ||
| 738 | + $removeArray = array(); | ||
| 739 | + | ||
| 740 | + foreach (explode(',', $remove) as $rem) { | ||
| 741 | + $removeArray[] = '`'.$beforeWord.preg_quote(trim($rem)).$afterWord.'`i'; | ||
| 742 | + } | ||
| 743 | + | ||
| 744 | + if ($removeArray) { | ||
| 745 | + $seo_kw = preg_replace($removeArray, '$1$2', $seo_kw); | ||
| 746 | + } | ||
| 747 | + } | ||
| 748 | + | ||
| 749 | + if ($translit) { | ||
| 750 | + if ($this->config->get('mlseo_current_lang')) { | ||
| 751 | + $lang_code = $this->config->get('mlseo_current_lang'); | ||
| 752 | + } else { | ||
| 753 | + $lang_code = $this->getLangCode($lang); | ||
| 754 | + } | ||
| 755 | + | ||
| 756 | + include_once(DIR_SYSTEM . 'library/gkd_urlify.php'); | ||
| 757 | + | ||
| 758 | + if (function_exists('mb_substr')) { | ||
| 759 | + $seo_kw = URLify::downcode($seo_kw, mb_substr($lang_code, 0, 2)); | ||
| 760 | + } else { | ||
| 761 | + $seo_kw = URLify::downcode($seo_kw, substr($lang_code, 0, 2)); | ||
| 762 | + } | ||
| 763 | + | ||
| 764 | + // language specific tr | ||
| 765 | + /* now with urlify | ||
| 766 | + $seo_kw = $this->mb_strtr($seo_kw, array('À','Á','Â','Ã','Ä','Å','Ă','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ő','Ø','Œ','Ș','Ț','Ù','Ú','Û','Ü','Ű','Ý','Þ','ß','à','á','â','ã','ä','å','ă','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ő','ø','œ','ș','ț','ù','ú','û','ü','ű','ý','þ','ÿ'), | ||
| 767 | + array('A','A','A','A','A','A','A','AE','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','O','OE','S','T','U','U','U','U','U','Y','TH','ss','a','a','a','a','a','a','a','ae','c','e','e','e','e','i','i','i','i','d','n','o','o','o','o','o','o','o','oe','s','t','u','u','u','u','u','y','th','y')); // latin | ||
| 768 | + $seo_kw = $this->mb_strtr($seo_kw, 'αβγδεζηθικλμνξοπρστυφχψωάέίόύήώςϊΰϋΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΆΈΊΌΎΉΏΪΫ', 'abgdezh8iklmn3oprstyfxpswaeioyhwsiyyiABGDEZH8IKLMN3OPRSTYFXPSWAEIOYHWIY'); // greek | ||
| 769 | + $seo_kw = $this->mb_strtr($seo_kw, 'ÁáČčĎďĚěŇňŘřŠšŤťÚúŮůÝýŽžĐđ', 'AaCcDdEeNnRrSsTtUuUuYyZzDd'); // czech, croatian, slovenian | ||
| 770 | + $seo_kw = $this->mb_strtr($seo_kw, 'ĄČĘĖĮYŠŲŪŽąčęėįyšųūž', 'ACEEIYSUUZaceeiysuuz'); // lithunanian | ||
| 771 | + $seo_kw = $this->mb_strtr($seo_kw, 'ĀČĒĢĪĶĻŅŠŪŽāčēģīķļņšūž', 'ACEGIKLNSUZacegiklnsuz'); // latvian | ||
| 772 | + $seo_kw = $this->mb_strtr($seo_kw, 'ÇçĞğİıÖöŞşÜü', 'CcGgIiOoSsUu'); // turkish | ||
| 773 | + $seo_kw = $this->mb_strtr($seo_kw, 'ăâîșțŢţ', 'aaistTt'); // romanian | ||
| 774 | + $seo_kw = $this->mb_strtr($seo_kw, 'ąćęłńóśźżĄĆĘŁŃÓŚŹŻ', 'acelnoszzACeLNOSZZ'); // polish | ||
| 775 | + $seo_kw = $this->mb_strtr($seo_kw, array('Г','Д','Е','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ь','Ъ','щ','ш','ч','ц','ю','я','ж','а','б','в','г','д','е','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ь','ъ'), | ||
| 776 | + array('Sht','Sh','Ch','C','Yu','Ya','J','A','B','V','G','D','E','Z','I','Y','K','L','M','N','O','P','R','S','T','U','F','H','','A','sht','sh','ch','c','yu','ya','j','a','b','v','g','d','e','z','i','y','k','l','m','n','o','p','r','s','t','u','f','h','','a')); // bulgarian | ||
| 777 | + $seo_kw = $this->mb_strtr($seo_kw, array('أ','ب','ت','ث','ج','ح','خ','د','ذ','ر','ز','س','ش','ص','ض','ط','ظ','ع','غ','ف','ق','ك','ل','م','ن','ه','و','ي'), array('a','b','t','th','g','h','kh','d','th','r','z','s','sh','s','d','t','th','aa','gh','f','k','k','l','m','n','h','o','y')); // arabic | ||
| 778 | + $seo_kw = $this->mb_strtr($seo_kw, array('Ä','Ö','Ü','ä','ö','ü','ß','ẞ'), array('Ae','Oe','Ue','ae','oe','ue','ss','SS')); // german | ||
| 779 | + $seo_kw = $this->mb_strtr($seo_kw, array('ђ','ј','љ','њ','ћ','џ','đ','Ђ','Ј','Љ','Њ','Ћ','Џ','Đ'), array('dj','j','lj','nj','c','dz','dj','Dj','j','Lj','Nj','C','Dz','Dj',)); // serbian | ||
| 780 | + $seo_kw = $this->mb_strtr($seo_kw, array('а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я','№'), | ||
| 781 | + array('a','b','v','g','d','e','yo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','sh','','y','','e','yu','ya','A','B','V','G','D','E','Yo','Zh','Z','I','J','K','L','M','N','O','P','R','S','T','U','F','H','C','Ch','Sh','Sh','','Y','','E','Yu','Ya','')); // russian | ||
| 782 | + $seo_kw = $this->mb_strtr($seo_kw, array('І', 'і', 'Ї', 'ї', 'Є', 'є', 'Ґ', 'ґ'), array('I','i','Yi','yi', 'Ye', 'ye', 'G', 'g')); // ukrainian | ||
| 783 | + */ | ||
| 784 | + | ||
| 785 | + // entities autodetect method (works for western europe languages) | ||
| 786 | + // $seo_kw = preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);~i', '$1', htmlentities($seo_kw, ENT_QUOTES, 'UTF-8')); | ||
| 787 | + // $seo_kw = html_entity_decode($seo_kw, ENT_QUOTES); | ||
| 788 | + // $seo_kw = preg_replace(array('~[^0-9a-z]~i', '~[ -]+~'), $whitespace, $seo_kw); | ||
| 789 | + $seo_kw = trim($seo_kw, '_'.$whitespace); | ||
| 790 | + } | ||
| 791 | + | ||
| 792 | + if ($type != 'image' && $this->config->get('mlseo_lowercase')) { | ||
| 793 | + if (function_exists('mb_strtolower')) { | ||
| 794 | + $seo_kw = mb_strtolower($seo_kw, 'UTF-8'); | ||
| 795 | + } else { | ||
| 796 | + $seo_kw = strtolower($seo_kw); | ||
| 797 | + } | ||
| 798 | + } | ||
| 799 | + | ||
| 800 | + $seo_kw = str_replace(' ', $whitespace, $seo_kw); | ||
| 801 | + $seo_kw = preg_replace('~\x{00a0}~siu', $whitespace, $seo_kw); // unicode non-breaking space | ||
| 802 | + | ||
| 803 | + //$seo_kw = str_replace(array('"',"'",'&','(',')','.','+',',','*',':',';','=','?','@','$','/','%','#'), '', $seo_kw); | ||
| 804 | + if (!$this->config->get('mlseo_safe_url')) { | ||
| 805 | + $seo_kw = preg_replace('/([^\w\-\._~:\[\]@!\$\'()*\+,;=%]+)/u', $whitespace, $seo_kw); | ||
| 806 | + } else if ($this->config->get('mlseo_safe_url') == 'ext') { | ||
| 807 | + $seo_kw = str_replace(array('\'','`','‘','’','|','%7C', "\r\n", "\n", "\r",'/','\\',',',':','~','(', ')','.',','), $whitespace, $seo_kw); | ||
| 808 | + $seo_kw = str_replace(array('"','“','”','&','&','+','?','!','/','%','#','>','<',';','<','>','™','®','©','©','®','™'), '', $seo_kw); | ||
| 809 | + } else if ($this->config->get('mlseo_safe_url') == 'max') { | ||
| 810 | + $seo_kw = preg_replace('/(\W+)/u', $whitespace, $seo_kw); | ||
| 811 | + } | ||
| 812 | + | ||
| 813 | + if ($whitespace) { | ||
| 814 | + $seo_kw = preg_replace('/'.$whitespace.$whitespace.'+/', $whitespace, $seo_kw); | ||
| 815 | + $seo_kw = trim($seo_kw, $whitespace); | ||
| 816 | + } | ||
| 817 | + | ||
| 818 | + $exists = array(1); | ||
| 819 | + $number = ''; | ||
| 820 | + $search_kw = $seo_kw; | ||
| 821 | + | ||
| 822 | + if ($type != 'image') { | ||
| 823 | + while(count($exists)) { | ||
| 824 | + /* | ||
| 825 | + if ($simulate && isset($this->session->data['kwCountArray']) && in_array($search_kw, (array) $this->session->data['kwCountArray'])) { | ||
| 826 | + $seo_kw .= '-[x]'; | ||
| 827 | + break; | ||
| 828 | + } | ||
| 829 | + */ | ||
| 830 | + | ||
| 831 | + if ($this->config->get('mlseo_absolute') && $this->config->get('mlseo_duplicate') && ($type == 'category' || $type == 'manufacturer')) break; | ||
| 832 | + elseif ($this->config->get('mlseo_absolute') && $type == 'category') | ||
| 833 | + $sql = "SELECT * FROM " . DB_PREFIX . $this->url_alias . " WHERE query = '".$type."_id=" . (int)$id . "' AND keyword='".$this->db->escape($search_kw)."'"; | ||
| 834 | + elseif ($this->config->get('mlseo_duplicate')) | ||
| 835 | + $sql = "SELECT * FROM " . DB_PREFIX . $this->url_alias . " WHERE query != '".$type."_id=" . (int)$id . "' AND keyword='".$this->db->escape($search_kw)."'"; | ||
| 836 | + else $sql = "SELECT * FROM " . DB_PREFIX . $this->url_alias . " WHERE keyword='".$this->db->escape($search_kw)."'"; | ||
| 837 | + | ||
| 838 | + $exists = $this->db->query($sql)->row; | ||
| 839 | + | ||
| 840 | + if (count($exists)) { | ||
| 841 | + if ($simulate) { | ||
| 842 | + if (!isset($this->session->data['kwCountArray'][$seo_kw])) { | ||
| 843 | + $this->session->data['kwCountArray'][$seo_kw] = $number; | ||
| 844 | + } | ||
| 845 | + | ||
| 846 | + $this->session->data['kwCountArray'][$seo_kw]++; | ||
| 847 | + } | ||
| 848 | + | ||
| 849 | + $search_kw = $seo_kw .'-'. ++$number; | ||
| 850 | + } | ||
| 851 | + /* | ||
| 852 | + if ($this->config->get('mlseo_absolute')) break; // disable duplicate detection while absolute is enabled, todo: advanced detection of possible cases | ||
| 853 | + if ($this->config->get('mlseo_absolute') && $this->config->get('mlseo_duplicate') && $type == 'category') break; | ||
| 854 | + elseif ($this->config->get('mlseo_absolute') && $type == 'category') | ||
| 855 | + $sql = "SELECT * FROM " . DB_PREFIX . $this->url_alias . " WHERE query = '".$type."_id=" . (int)$id . "' AND keyword='".$this->db->escape($seo_kw)."'"; | ||
| 856 | + elseif ($this->config->get('mlseo_duplicate')) | ||
| 857 | + $sql = "SELECT * FROM " . DB_PREFIX . $this->url_alias . " WHERE query != '".$type."_id=" . (int)$id . "' AND keyword='".$this->db->escape($seo_kw)."'"; | ||
| 858 | + else $sql = "SELECT * FROM " . DB_PREFIX . $this->url_alias . " WHERE keyword='".$this->db->escape($seo_kw)."'"; | ||
| 859 | + $exists = $this->db->query($sql)->row; | ||
| 860 | + if (count($exists)) $seo_kw .= '_'; | ||
| 861 | + */ | ||
| 862 | + } | ||
| 863 | + | ||
| 864 | + if ($number) { | ||
| 865 | + if ($simulate && isset($this->session->data['kwCountArray'][$seo_kw])) { | ||
| 866 | + //$seo_kw .= '-[x]'; | ||
| 867 | + $seo_kw .= '-'.$this->session->data['kwCountArray'][$seo_kw]; | ||
| 868 | + } else { | ||
| 869 | + $seo_kw .= '-'.$number; | ||
| 870 | + } | ||
| 871 | + } | ||
| 872 | + } | ||
| 873 | + | ||
| 874 | + // config here the max chars (will cut after the current word) ; 0 = unlimited | ||
| 875 | + $this->config->set('multilingual_seo_wordlimit', 0); | ||
| 876 | + | ||
| 877 | + if ($this->config->get('mlseo_wordlimit')) { | ||
| 878 | + $pos = strpos($seo_kw, $whitespace, $this->config->get('mlseo_wordlimit')); | ||
| 879 | + if ($pos > $this->config->get('mlseo_wordlimit')) { | ||
| 880 | + if (function_exists('mb_substr')) { | ||
| 881 | + $seo_kw = mb_substr($seo_kw, 0, $pos); | ||
| 882 | + } else { | ||
| 883 | + $seo_kw = substr($seo_kw, 0, $pos); | ||
| 884 | + } | ||
| 885 | + } | ||
| 886 | + } | ||
| 887 | + | ||
| 888 | + return $seo_kw; | ||
| 889 | + } | ||
| 890 | + | ||
| 891 | + public function getFullProductPathNames($product_id, $lang = false, $from_category = false) { | ||
| 892 | + $categories = array(); | ||
| 893 | + | ||
| 894 | + if ($from_category) { | ||
| 895 | + if (!empty($product_id[0])) { | ||
| 896 | + $category_id = $product_id[0]; | ||
| 897 | + $category = $this->db->query("SELECT cd.name, c.category_id, c.parent_id FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE c.category_id = '" . (int)$category_id . "' AND cd.language_id = '" . (int)$lang . "'")->row; | ||
| 898 | + } | ||
| 899 | + } else { | ||
| 900 | + $category = $this->db->query("SELECT cd.name, c.category_id, c.parent_id FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "category c ON (p2c.category_id = c.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd ON (p2c.category_id = cd.category_id) WHERE product_id = '" . (int)$product_id . "' AND cd.language_id = '" . (int)$lang . "'")->row; | ||
| 901 | + } | ||
| 902 | + | ||
| 903 | + while (!empty($category['name'])) { | ||
| 904 | + $categories[] = $category['name']; | ||
| 905 | + | ||
| 906 | + $category = $this->db->query("SELECT cd.name, c.category_id, c.parent_id FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE c.category_id = '" . $category['parent_id']. "' AND cd.language_id = '" . (int)$lang . "'")->row; | ||
| 907 | + } | ||
| 908 | + | ||
| 909 | + return array_reverse($categories); | ||
| 910 | + } | ||
| 911 | + | ||
| 912 | + public function getFullProductPaths($product_id, $lang = false) { | ||
| 913 | + $path = array(); | ||
| 914 | + | ||
| 915 | + $categories = $this->db->query("SELECT c.category_id, c.parent_id FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "category c ON (p2c.category_id = c.category_id) WHERE product_id = '" . (int)$product_id . "'")->rows; | ||
| 916 | + | ||
| 917 | + foreach ($categories as $key => $category) { | ||
| 918 | + $path[$key] = ''; | ||
| 919 | + if (!$category) continue; | ||
| 920 | + | ||
| 921 | + $path[$key] = $category['category_id']; | ||
| 922 | + | ||
| 923 | + while ($category['parent_id']) { | ||
| 924 | + $path[$key] = $category['parent_id'] . '_' . $path[$key]; | ||
| 925 | + $category = $this->db->query("SELECT category_id, parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . $category['parent_id']. "'")->row; | ||
| 926 | + } | ||
| 927 | + | ||
| 928 | + $path[$key] = $path[$key]; | ||
| 929 | + } | ||
| 930 | + | ||
| 931 | + if (!count($path)) return array(); | ||
| 932 | + | ||
| 933 | + return $path; | ||
| 934 | + } | ||
| 935 | + | ||
| 936 | + public function getLangCode($lang_id) { | ||
| 937 | + $this->load->model('localisation/language'); | ||
| 938 | + $languages = $this->model_localisation_language->getLanguages(); | ||
| 939 | + | ||
| 940 | + foreach($languages as $language) { | ||
| 941 | + if ($language['language_id'] == $lang_id) { | ||
| 942 | + return $language['code']; | ||
| 943 | + } | ||
| 944 | + } | ||
| 945 | + | ||
| 946 | + return ''; | ||
| 947 | + } | ||
| 948 | + | ||
| 949 | + private function mb_strtr($str, $from, $to = null) { | ||
| 950 | + if (is_array($from) && is_array($to)) | ||
| 951 | + return str_replace($from, $to, $str); | ||
| 952 | + elseif (is_array($from)) | ||
| 953 | + return str_replace(array_keys($from), array_values($from), $str); | ||
| 954 | + return str_replace(preg_split('~~u', $from, null, PREG_SPLIT_NO_EMPTY), preg_split('~~u', $to, null, PREG_SPLIT_NO_EMPTY), $str); | ||
| 955 | + } | ||
| 956 | + | ||
| 957 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php | ||
| 2 | +class ModelToolSeoPackageEditor extends Model { | ||
| 3 | + | ||
| 4 | + public function __construct($registry) { | ||
| 5 | + parent::__construct($registry); | ||
| 6 | + | ||
| 7 | + if (version_compare(VERSION, '3', '>=')) { | ||
| 8 | + $this->url_alias = 'seo_url'; | ||
| 9 | + } else { | ||
| 10 | + $this->url_alias = 'url_alias'; | ||
| 11 | + } | ||
| 12 | + } | ||
| 13 | + | ||
| 14 | + /** | ||
| 15 | + * Create the data output array for the DataTables rows | ||
| 16 | + * | ||
| 17 | + * @param array $columns Column information array | ||
| 18 | + * @param array $data Data from the SQL get | ||
| 19 | + * @return array Formatted data in a row based format | ||
| 20 | + */ | ||
| 21 | + public function data_output ( $columns, $data, $type = '') | ||
| 22 | + { | ||
| 23 | + $out = array(); | ||
| 24 | + | ||
| 25 | + for ( $i=0, $ien=count($data) ; $i<$ien ; $i++ ) { | ||
| 26 | + $row = array(); | ||
| 27 | + | ||
| 28 | + for ( $j=0, $jen=count($columns) ; $j<$jen ; $j++ ) { | ||
| 29 | + $column = $columns[$j]; | ||
| 30 | + | ||
| 31 | + // Is there a formatter? | ||
| 32 | + | ||
| 33 | + if ($column['db'] == 'related') { | ||
| 34 | + $related = $this->db->query("SELECT pr.related_id, pd.name FROM `" . DB_PREFIX . "product_related` pr LEFT JOIN `" . DB_PREFIX . "product_description` pd ON pd.product_id = pr.related_id WHERE pr.product_id='" . $data[$i]['product_id'] . "' AND pd.language_id=" . $this->config->get('config_language_id') . " ORDER BY pd.name")->rows; | ||
| 35 | + | ||
| 36 | + $old_related = $old_related_id = array(); | ||
| 37 | + foreach ($related as $rel) { | ||
| 38 | + $old_related[] = $rel['name']; | ||
| 39 | + $old_related_id[] = $rel['related_id']; | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + $data[$i]['related']['text'] = implode(', ', $old_related); | ||
| 43 | + $data[$i]['related']['rows'] = $related; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + if ( isset( $column['formatter'] ) ) { | ||
| 47 | + $row[ $column['dt'] ] = $column['formatter']( $data[$i][ $column['db'] ], $data[$i], $type, $this ); | ||
| 48 | + } | ||
| 49 | + else { | ||
| 50 | + $row[ $column['dt'] ] = $data[$i][ $columns[$j]['db'] ]; | ||
| 51 | + } | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + $out[] = $row; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + return $out; | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + | ||
| 61 | + /** | ||
| 62 | + * Paging | ||
| 63 | + * | ||
| 64 | + * Construct the LIMIT clause for server-side processing SQL query | ||
| 65 | + * | ||
| 66 | + * @param array $request Data sent to server by DataTables | ||
| 67 | + * @param array $columns Column information array | ||
| 68 | + * @return string SQL limit clause | ||
| 69 | + */ | ||
| 70 | + public function limit ( $request, $columns ) | ||
| 71 | + { | ||
| 72 | + $limit = ''; | ||
| 73 | + | ||
| 74 | + if ( isset($request['start']) && $request['length'] != -1 ) { | ||
| 75 | + $limit = "LIMIT ".intval($request['start']).", ".intval($request['length']); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + return $limit; | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + | ||
| 82 | + /** | ||
| 83 | + * Ordering | ||
| 84 | + * | ||
| 85 | + * Construct the ORDER BY clause for server-side processing SQL query | ||
| 86 | + * | ||
| 87 | + * @param array $request Data sent to server by DataTables | ||
| 88 | + * @param array $columns Column information array | ||
| 89 | + * @return string SQL order by clause | ||
| 90 | + */ | ||
| 91 | + public function order ( $request, $columns, $default ) | ||
| 92 | + { | ||
| 93 | + $order = ''; | ||
| 94 | + | ||
| 95 | + if ( isset($request['order']) && count($request['order']) ) { | ||
| 96 | + $orderBy = array(); | ||
| 97 | + $dtColumns = self::pluck( $columns, 'dt' ); | ||
| 98 | + | ||
| 99 | + for ( $i=0, $ien=count($request['order']) ; $i<$ien ; $i++ ) { | ||
| 100 | + // Convert the column index into the column data property | ||
| 101 | + $columnIdx = intval($request['order'][$i]['column']); | ||
| 102 | + $requestColumn = $request['columns'][$columnIdx]; | ||
| 103 | + | ||
| 104 | + $columnIdx = array_search( $requestColumn['data'], $dtColumns ); | ||
| 105 | + $column = $columns[ $columnIdx ]; | ||
| 106 | + | ||
| 107 | + if ( $requestColumn['orderable'] == 'true' ) { | ||
| 108 | + $dir = $request['order'][$i]['dir'] === 'asc' ? | ||
| 109 | + 'ASC' : | ||
| 110 | + 'DESC'; | ||
| 111 | + | ||
| 112 | + $orderBy[] = '`'.$column['db'].'` '.$dir; | ||
| 113 | + } | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + if (!implode(', ', $orderBy)) return 'ORDER BY ' . $default; | ||
| 117 | + | ||
| 118 | + $order = 'ORDER BY '.implode(', ', $orderBy); | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + return $order; | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + | ||
| 125 | + /** | ||
| 126 | + * Searching / Filtering | ||
| 127 | + * | ||
| 128 | + * Construct the WHERE clause for server-side processing SQL query. | ||
| 129 | + * | ||
| 130 | + * NOTE this does not match the built-in DataTables filtering which does it | ||
| 131 | + * word by word on any field. It's possible to do here performance on large | ||
| 132 | + * databases would be very poor | ||
| 133 | + * | ||
| 134 | + * @param array $request Data sent to server by DataTables | ||
| 135 | + * @param array $columns Column information array | ||
| 136 | + * @param array $bindings Array of values for PDO bindings, used in the | ||
| 137 | + * sql_exec() function | ||
| 138 | + * @return string SQL where clause | ||
| 139 | + */ | ||
| 140 | + public function filter ( $request, $columns, &$bindings ) | ||
| 141 | + { | ||
| 142 | + $globalSearch = array(); | ||
| 143 | + $columnSearch = array(); | ||
| 144 | + $dt2Columns = self::pluck( $columns, 'dt' ); | ||
| 145 | + $dtColumns = self::pluck_ids( $columns, 'dt' ); | ||
| 146 | + | ||
| 147 | + if ( isset($request['search']) && $request['search']['value'] != '' ) { | ||
| 148 | + $str = $request['search']['value']; | ||
| 149 | + | ||
| 150 | + for ( $i=0, $ien=count($request['columns']) ; $i<$ien ; $i++ ) { | ||
| 151 | + $requestColumn = $request['columns'][$i]; | ||
| 152 | + $columnIdx = array_search( $requestColumn['data'], $dtColumns ); | ||
| 153 | + $column = $columns[ $columnIdx ]; | ||
| 154 | + | ||
| 155 | + //if ( $requestColumn['searchable'] == 'true' ) { | ||
| 156 | + if ( $requestColumn['searchable'] == 'true' && $column['db'] != 'seo_keyword' && $column['db'] != 'related') { // disable seo_keyword because not supported by the query actually, todo: change query to join instead of subquery | ||
| 157 | + $binding = '\'%'. $this->db->escape($str) .'%\''; | ||
| 158 | + $globalSearch[] = "`".$column['db']."` LIKE ".$binding; | ||
| 159 | + } | ||
| 160 | + } | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + // Individual column filtering | ||
| 164 | + for ( $i=0, $ien=count($request['columns']) ; $i<$ien ; $i++ ) { | ||
| 165 | + $requestColumn = $request['columns'][$i]; | ||
| 166 | + $columnIdx = array_search( $requestColumn['data'], $dtColumns ); | ||
| 167 | + $column = $columns[ $columnIdx ]; | ||
| 168 | + | ||
| 169 | + $str = $requestColumn['search']['value']; | ||
| 170 | + | ||
| 171 | + if ( $requestColumn['searchable'] == 'true' && | ||
| 172 | + $str != '' ) { | ||
| 173 | + $binding = '\'%'. $this->db->escape($str) .'%\''; | ||
| 174 | + $columnSearch[] = "`".$column['db']."` LIKE ".$binding; | ||
| 175 | + } | ||
| 176 | + } | ||
| 177 | + | ||
| 178 | + // Combine the filters into a single string | ||
| 179 | + $where = ''; | ||
| 180 | + | ||
| 181 | + if ( count( $globalSearch ) ) { | ||
| 182 | + $where = '('.implode(' OR ', $globalSearch).')'; | ||
| 183 | + } | ||
| 184 | + | ||
| 185 | + if ( count( $columnSearch ) ) { | ||
| 186 | + $where = $where === '' ? | ||
| 187 | + implode(' AND ', $columnSearch) : | ||
| 188 | + $where .' AND '. implode(' AND ', $columnSearch); | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + if ( $where !== '' ) { | ||
| 192 | + $where = 'WHERE ' . $where; | ||
| 193 | + | ||
| 194 | + if ($this->filter_language !== false) { | ||
| 195 | + $where .= " AND "; | ||
| 196 | + } | ||
| 197 | + } else if ($this->filter_language !== false) { | ||
| 198 | + $where .= " WHERE "; | ||
| 199 | + } | ||
| 200 | + | ||
| 201 | + if ($this->filter_language !== false) { | ||
| 202 | + $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "language` WHERE status = '1'"); | ||
| 203 | + | ||
| 204 | + foreach ($query->rows as $result) { | ||
| 205 | + if ($result['code'] == $this->config->get('config_language')) $default_lang = $result['language_id']; | ||
| 206 | + } | ||
| 207 | + | ||
| 208 | + if ($this->filter_language == $default_lang) { | ||
| 209 | + $where .= " ( language_id = '" . (int) $this->filter_language . "' OR language_id = '0' )"; | ||
| 210 | + } else { | ||
| 211 | + $where .= " language_id = '" . (int) $this->filter_language . "'"; | ||
| 212 | + } | ||
| 213 | + } | ||
| 214 | + | ||
| 215 | + if ($request['type'] == 'manufacturer') { | ||
| 216 | + $where = str_replace('WHERE (`name` LIKE ', 'WHERE (i.`name` LIKE ', $where); | ||
| 217 | + } | ||
| 218 | + | ||
| 219 | + return $where; | ||
| 220 | + } | ||
| 221 | + | ||
| 222 | + | ||
| 223 | + /** | ||
| 224 | + * Perform the SQL queries needed for an server-side processing requested, | ||
| 225 | + * utilising the helper functions of this class, limit(), order() and | ||
| 226 | + * filter() among others. The returned array is ready to be encoded as JSON | ||
| 227 | + * in response to an SSP request, or can be modified if needed before | ||
| 228 | + * sending back to the client. | ||
| 229 | + * | ||
| 230 | + * @param array $request Data sent to server by DataTables | ||
| 231 | + * @param array $sql_details SQL connection details - see sql_connect() | ||
| 232 | + * @param string $table SQL table to query | ||
| 233 | + * @param string $primaryKey Primary key of the table | ||
| 234 | + * @param array $columns Column information array | ||
| 235 | + * @return array Server-side processing response array | ||
| 236 | + */ | ||
| 237 | + public function simple ( $request, $type, $lang, $store = 0, $columns = array()) | ||
| 238 | + { | ||
| 239 | + $bindings = array(); | ||
| 240 | + | ||
| 241 | + $extra_select = ''; | ||
| 242 | + $extra_join = ''; | ||
| 243 | + $extra_where = ''; | ||
| 244 | + $primaryKey = $type . '_id'; | ||
| 245 | + | ||
| 246 | + if (in_array($type, array('product', 'category', 'information', 'manufacturer'))) { | ||
| 247 | + $select_cols = implode(', ', self::pluck_fields($columns, 'db')); | ||
| 248 | + $this->filter_language = $lang; | ||
| 249 | + | ||
| 250 | + if ($type == 'manufacturer') { | ||
| 251 | + //$select_cols = str_replace(array('`manufacturer_id`', '`name`'), array('d.`manufacturer_id`', 'COALESCE(d.`name`, i.`name`) as name'), $select_cols); | ||
| 252 | + | ||
| 253 | + $extra_select .= ", COALESCE(NULLIF(d.`name`,''), i.`name`) as name"; | ||
| 254 | + | ||
| 255 | + $select_cols = str_replace('`manufacturer_id`,', 'i.`manufacturer_id`,', $select_cols); | ||
| 256 | + $select_cols = str_replace('`name`,', '', $select_cols); | ||
| 257 | + | ||
| 258 | + $table = "`" . DB_PREFIX . $type . "` i LEFT JOIN `" . DB_PREFIX . "seo_" . $type . "_description` d ON (i.".$type."_id = d.".$type."_id AND d.store_id = '". (int) $store . "' AND d.language_id = '". (int) $lang ."') LEFT JOIN `" . DB_PREFIX . $type . "_to_store` i2s ON (i.".$type."_id = i2s.".$type."_id)"; | ||
| 259 | + | ||
| 260 | + if ($this->config->get('mlseo_multistore')) { | ||
| 261 | + $extra_where = "AND i2s.store_id = '". (int) $store . "'"; | ||
| 262 | + } | ||
| 263 | + | ||
| 264 | + $this->filter_language = false; | ||
| 265 | + } else if ($store) { | ||
| 266 | + $extra_select .= ", COALESCE(NULLIF(d.`name`,''), (SELECT name FROM `".DB_PREFIX . $type . "_description` WHERE (i.".$type."_id = ".$type."_id AND language_id = '" . (int) $lang . "'))) as name"; | ||
| 267 | + $table = " | ||
| 268 | + `" . DB_PREFIX . $type . "` i | ||
| 269 | + LEFT JOIN `".DB_PREFIX . "seo_" . $type . "_description` d ON (i.".$type."_id = d.".$type."_id AND d.store_id = '". (int) $store . "' AND d.language_id = '" . (int) $lang . "') | ||
| 270 | + LEFT JOIN `" . DB_PREFIX . $type . "_to_store` i2s ON (i.".$type."_id = i2s.".$type."_id)"; | ||
| 271 | + $extra_where = "AND i2s.store_id = '". (int) $store . "'"; | ||
| 272 | + $this->filter_language = false; | ||
| 273 | + } else { | ||
| 274 | + $table = '`'.DB_PREFIX . $type . "_description` d INNER JOIN `" . DB_PREFIX . $type . "` i USING(" . $primaryKey . ")"; | ||
| 275 | + } | ||
| 276 | + | ||
| 277 | + | ||
| 278 | + $default_order = 'd.name'; | ||
| 279 | + | ||
| 280 | + // @perf: high impact | ||
| 281 | + if (version_compare(VERSION, '3', '>=') || ($this->config->get('mlseo_multistore') && $this->config->get('mlseo_ml_mode'))) { | ||
| 282 | + $extra_select .= ",(SELECT keyword FROM `" . DB_PREFIX . $this->url_alias . "` u WHERE query = CONCAT('".$type."_id=' , i.".$type."_id) AND (language_id = '".(int) $lang."' OR language_id = 0) AND store_id = ".$store." LIMIT 1) AS seo_keyword"; | ||
| 283 | + /* Todo: | ||
| 284 | + $extra_select .= "u.seo_keyword AS seo_keyword"; | ||
| 285 | + $extra_join .= " LEFT JOIN " . DB_PREFIX . $this->url_alias . " u ON (query = CONCAT('".$type."_id=' , i.".$type."_id) AND (language_id = '".(int) $lang."' OR language_id = 0) AND store_id = ".$store.")"; | ||
| 286 | + */ | ||
| 287 | + } else if ($this->config->get('mlseo_multistore')) { | ||
| 288 | + $extra_select .= ",(SELECT keyword FROM `" . DB_PREFIX . $this->url_alias . "` u WHERE query = CONCAT('".$type."_id=' , i.".$type."_id) AND store_id = ".$store." LIMIT 1) AS seo_keyword"; | ||
| 289 | + } else if ($this->config->get('mlseo_ml_mode')) { | ||
| 290 | + $extra_select .= ",(SELECT keyword FROM `" . DB_PREFIX . $this->url_alias . "` u WHERE query = CONCAT('".$type."_id=' , i.".$type."_id) AND (language_id = '".(int) $lang."' OR language_id = 0) LIMIT 1) AS seo_keyword"; | ||
| 291 | + } else { | ||
| 292 | + $extra_select .= ",(SELECT keyword FROM `" . DB_PREFIX . $this->url_alias . "` WHERE query = CONCAT('".$type."_id=' , i.".$type."_id) LIMIT 1) AS seo_keyword"; | ||
| 293 | + } | ||
| 294 | + | ||
| 295 | + if ($type == 'information') { | ||
| 296 | + $default_order = 'd.title'; | ||
| 297 | + } | ||
| 298 | + /* | ||
| 299 | + } elseif (in_array($type, array('manufacturer'))) { | ||
| 300 | + $select_cols = "`".implode("`, `", self::pluck_fields($columns, 'db'))."`"; | ||
| 301 | + $this->filter_language = false; | ||
| 302 | + $table = DB_PREFIX . $type . ' m'; | ||
| 303 | + $default_order = 'name'; | ||
| 304 | + $extra_select = ",(SELECT keyword FROM " . DB_PREFIX . $this->url_alias . " WHERE query = CONCAT('".$type."_id=' , m.".$type."_id) LIMIT 1) AS keyword"; | ||
| 305 | + */ | ||
| 306 | + $primaryKey = 'd`.`'.$type . '_id'; | ||
| 307 | + | ||
| 308 | + } elseif (in_array($type, array('common', 'special'))) { | ||
| 309 | + $select_cols = "`query`, `keyword`, `".$this->url_alias."_id`"; | ||
| 310 | + $primaryKey = $this->url_alias.'_id'; | ||
| 311 | + $table = '`'.DB_PREFIX . $this->url_alias.'`'; | ||
| 312 | + $default_order = 'query'; | ||
| 313 | + if ($this->config->get('mlseo_ml_mode')) { | ||
| 314 | + $this->filter_language = $lang; | ||
| 315 | + if ($type == 'common') { | ||
| 316 | + $extra_where = "AND query LIKE 'route=%'"; | ||
| 317 | + } elseif ($type == 'special') { | ||
| 318 | + $extra_where = "AND query NOT LIKE 'route=%' | ||
| 319 | + AND query NOT LIKE 'product_id=%' | ||
| 320 | + AND query NOT LIKE 'category_id=%' | ||
| 321 | + AND query NOT LIKE 'information_id=%' | ||
| 322 | + AND query NOT LIKE 'manufacturer_id=%'"; | ||
| 323 | + } | ||
| 324 | + | ||
| 325 | + if (version_compare(VERSION, '3', '>=') || $this->config->get('mlseo_multistore')) { | ||
| 326 | + $extra_where .= " AND store_id = '". (int) $store . "'"; | ||
| 327 | + } | ||
| 328 | + } else { | ||
| 329 | + $this->filter_language = false; | ||
| 330 | + if ($type == 'common') { | ||
| 331 | + $extra_where = "AND query LIKE 'route=%'"; | ||
| 332 | + } elseif ($type == 'special') { | ||
| 333 | + $extra_where = "AND query NOT LIKE 'route=%' | ||
| 334 | + AND query NOT LIKE 'product_id=%' | ||
| 335 | + AND query NOT LIKE 'category_id=%' | ||
| 336 | + AND query NOT LIKE 'information_id=%' | ||
| 337 | + AND query NOT LIKE 'manufacturer_id=%'"; | ||
| 338 | + } | ||
| 339 | + | ||
| 340 | + if (version_compare(VERSION, '3', '>=') || $this->config->get('mlseo_multistore')) { | ||
| 341 | + $extra_where .= " AND store_id = '". (int) $store . "'"; | ||
| 342 | + } | ||
| 343 | + } | ||
| 344 | + $type = 'url_alias'; | ||
| 345 | + } elseif ($type == 'absolute') { | ||
| 346 | + $select_cols = "`query`, `redirect`, `url_absolute_id`"; | ||
| 347 | + $primaryKey = 'url_absolute_id'; | ||
| 348 | + $table = '`'.DB_PREFIX . 'url_absolute`'; | ||
| 349 | + $default_order = 'query'; | ||
| 350 | + $type = 'url_absolute'; | ||
| 351 | + | ||
| 352 | + if ($this->config->get('mlseo_ml_mode')) { | ||
| 353 | + $this->filter_language = $lang; | ||
| 354 | + } else { | ||
| 355 | + $this->filter_language = false; | ||
| 356 | + } | ||
| 357 | + } elseif ($type == 'redirect') { | ||
| 358 | + $select_cols = "`query`, `redirect`, `url_redirect_id`"; | ||
| 359 | + $this->filter_language = false; | ||
| 360 | + $primaryKey = 'url_redirect_id'; | ||
| 361 | + $table = '`'.DB_PREFIX . 'url_redirect`'; | ||
| 362 | + $default_order = 'query'; | ||
| 363 | + $type = 'url_redirect'; | ||
| 364 | + | ||
| 365 | + if ($this->config->get('mlseo_ml_mode')) { | ||
| 366 | + $this->filter_language = $lang; | ||
| 367 | + } else { | ||
| 368 | + $this->filter_language = false; | ||
| 369 | + } | ||
| 370 | + } elseif ($type == 'autolink') { | ||
| 371 | + $select_cols = "`query`, `redirect`, `url_autolink_id`"; | ||
| 372 | + $this->filter_language = false; | ||
| 373 | + $primaryKey = 'url_autolink_id'; | ||
| 374 | + $table = '`'.DB_PREFIX . 'url_autolink`'; | ||
| 375 | + $default_order = 'query'; | ||
| 376 | + $type = 'url_autolink'; | ||
| 377 | + | ||
| 378 | + if ($this->config->get('mlseo_ml_mode')) { | ||
| 379 | + $this->filter_language = $lang; | ||
| 380 | + } else { | ||
| 381 | + $this->filter_language = false; | ||
| 382 | + } | ||
| 383 | + } elseif ($type == '404') { | ||
| 384 | + $select_cols = "u.`query`, u.`referer`, u.`count`, u.`url_404_id`, (r.query IS NOT NULL) AS has_redirect"; | ||
| 385 | + $this->filter_language = false; | ||
| 386 | + $primaryKey = 'url_404_id'; | ||
| 387 | + //$table = DB_PREFIX . "url_404 u LEFT JOIN " . DB_PREFIX . "url_redirect r ON (u.query = r.query OR REPLACE(u.query, '".HTTP_CATALOG."', '/') = r.query)"; //too much performance cost | ||
| 388 | + $table = '`'.DB_PREFIX . "url_404` u LEFT JOIN " . DB_PREFIX . "url_redirect r ON (u.query = r.query)"; | ||
| 389 | + $default_order = 'query'; | ||
| 390 | + $type = 'url_404'; | ||
| 391 | + } else { | ||
| 392 | + $this->filter_language = false; | ||
| 393 | + $table = '`'.DB_PREFIX . $type.'`'; | ||
| 394 | + } | ||
| 395 | + | ||
| 396 | + // Build the SQL query string from the request | ||
| 397 | + $limit = self::limit( $request, $columns ); | ||
| 398 | + $order = self::order( $request, $columns, $default_order ); | ||
| 399 | + | ||
| 400 | + if ($type == 'url_404') { | ||
| 401 | + $where = self::filter( $request, array(array('db' => 'u`.`query', 'dt' => 0)), $bindings ); | ||
| 402 | + } else { | ||
| 403 | + $where = self::filter( $request, $columns, $bindings ); | ||
| 404 | + } | ||
| 405 | + | ||
| 406 | + if (!$where) { | ||
| 407 | + $where = 'WHERE 1'; | ||
| 408 | + } | ||
| 409 | + | ||
| 410 | + // Main query to actually get the data | ||
| 411 | + $data = $this->db->query("SELECT SQL_CALC_FOUND_ROWS ". $select_cols . "\n | ||
| 412 | + " . $extra_select ."\n | ||
| 413 | + FROM " . $table . "\n" | ||
| 414 | + . $extra_join . "\n" | ||
| 415 | + . $where . "\n" | ||
| 416 | + . $extra_where . "\n" | ||
| 417 | + . $order . "\n" | ||
| 418 | + . $limit)->rows; | ||
| 419 | + | ||
| 420 | + $count = $this->db->query("SELECT COUNT(*) AS `total` | ||
| 421 | + FROM " . $table . "\n" | ||
| 422 | + . $extra_join . "\n" | ||
| 423 | + . $where . "\n" | ||
| 424 | + . $extra_where . "\n")->row; | ||
| 425 | + | ||
| 426 | + $recordsFiltered = isset($count['total']) ? $count['total'] : 0; | ||
| 427 | + | ||
| 428 | + // Data set length after filtering | ||
| 429 | + //$resFilterLength = $this->db->query("SELECT FOUND_ROWS() as `rows`")->row; | ||
| 430 | + | ||
| 431 | + //$recordsFiltered = $resFilterLength['rows']; | ||
| 432 | + | ||
| 433 | + // Total data set length | ||
| 434 | + $resTotalLength = $this->db->query( | ||
| 435 | + "SELECT COUNT(`{$primaryKey}`) AS `total` | ||
| 436 | + FROM $table" | ||
| 437 | + )->row; | ||
| 438 | + | ||
| 439 | + $recordsTotal = $resTotalLength['total']; | ||
| 440 | + | ||
| 441 | + /* | ||
| 442 | + * Output | ||
| 443 | + */ | ||
| 444 | + return array( | ||
| 445 | + 'draw' => intval( $request['draw'] ), | ||
| 446 | + 'recordsTotal' => intval( $recordsTotal ), | ||
| 447 | + 'recordsFiltered' => intval( $recordsFiltered ), | ||
| 448 | + 'data' => self::data_output( $columns, $data, $type ) | ||
| 449 | + ); | ||
| 450 | + } | ||
| 451 | + | ||
| 452 | + | ||
| 453 | + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | ||
| 454 | + * Internal methods | ||
| 455 | + */ | ||
| 456 | + | ||
| 457 | + /** | ||
| 458 | + * Throw a fatal error. | ||
| 459 | + * | ||
| 460 | + * This writes out an error message in a JSON string which DataTables will | ||
| 461 | + * see and show to the user in the browser. | ||
| 462 | + * | ||
| 463 | + * @param string $msg Message to send to the client | ||
| 464 | + */ | ||
| 465 | + public function fatal ( $msg ) | ||
| 466 | + { | ||
| 467 | + echo json_encode( array( | ||
| 468 | + "error" => $msg | ||
| 469 | + ) ); | ||
| 470 | + | ||
| 471 | + exit(0); | ||
| 472 | + } | ||
| 473 | + | ||
| 474 | + /** | ||
| 475 | + * Create a PDO binding key which can be used for escaping variables safely | ||
| 476 | + * when executing a query with sql_exec() | ||
| 477 | + * | ||
| 478 | + * @param array &$a Array of bindings | ||
| 479 | + * @param * $val Value to bind | ||
| 480 | + * @param int $type PDO field type | ||
| 481 | + * @return string Bound key to be used in the SQL where this parameter | ||
| 482 | + * would be used. | ||
| 483 | + */ | ||
| 484 | + public function bind ( &$a, $val, $type ) | ||
| 485 | + { | ||
| 486 | + $key = ':binding_'.count( $a ); | ||
| 487 | + | ||
| 488 | + $a[] = array( | ||
| 489 | + 'key' => $key, | ||
| 490 | + 'val' => $val, | ||
| 491 | + 'type' => $type | ||
| 492 | + ); | ||
| 493 | + | ||
| 494 | + return $key; | ||
| 495 | + } | ||
| 496 | + | ||
| 497 | + | ||
| 498 | + /** | ||
| 499 | + * Pull a particular property from each assoc. array in a numeric array, | ||
| 500 | + * returning and array of the property values from each item. | ||
| 501 | + * | ||
| 502 | + * @param array $a Array to get data from | ||
| 503 | + * @param string $prop Property to read | ||
| 504 | + * @return array Array of property values | ||
| 505 | + */ | ||
| 506 | + public function pluck ( $a, $prop ) | ||
| 507 | + { | ||
| 508 | + $out = array(); | ||
| 509 | + | ||
| 510 | + for ( $i=0, $len=count($a) ; $i<$len ; $i++ ) { | ||
| 511 | + if (!empty($a[$i]['table_alias'])) { | ||
| 512 | + $out[] = '`'.$a[$i]['table_alias'].'`.`'.$a[$i][$prop].'`'; | ||
| 513 | + } else { | ||
| 514 | + //$out[] = '`'.$a[$i][$prop].'`'; | ||
| 515 | + $out[] = ''.$a[$i][$prop].''; | ||
| 516 | + } | ||
| 517 | + } | ||
| 518 | + | ||
| 519 | + return $out; | ||
| 520 | + } | ||
| 521 | + | ||
| 522 | + public function pluck_ids ( $a, $prop ) | ||
| 523 | + { | ||
| 524 | + $out = array(); | ||
| 525 | + | ||
| 526 | + for ( $i=0, $len=count($a) ; $i<$len ; $i++ ) { | ||
| 527 | + $out[] = ''.$a[$i][$prop].''; | ||
| 528 | + } | ||
| 529 | + | ||
| 530 | + return $out; | ||
| 531 | + } | ||
| 532 | + | ||
| 533 | + // use table alias in case of ambigous field | ||
| 534 | + public function pluck_fields ( $a, $prop ) | ||
| 535 | + { | ||
| 536 | + $out = array(); | ||
| 537 | + | ||
| 538 | + for ( $i=0, $len=count($a) ; $i<$len ; $i++ ) { | ||
| 539 | + if ($a[$i][$prop] != 'keyword' && $a[$i][$prop] != 'seo_keyword' && $a[$i][$prop] != 'related') | ||
| 540 | + if (!empty($a[$i]['table_alias'])) { | ||
| 541 | + $out[] = '`'.$a[$i]['table_alias'].'`.`'.$a[$i][$prop].'`'; | ||
| 542 | + } else { | ||
| 543 | + $out[] = '`'.$a[$i][$prop].'`'; | ||
| 544 | + } | ||
| 545 | + } | ||
| 546 | + | ||
| 547 | + return $out; | ||
| 548 | + } | ||
| 549 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +/*! | ||
| 2 | + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome | ||
| 3 | + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) | ||
| 4 | + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.0.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857142858em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-reply-all:before{content:"\f122"}.fa-mail-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
No preview for this file type
No preview for this file type
This diff could not be displayed because it is too large.
No preview for this file type
No preview for this file type
| 1 | +/*! | ||
| 2 | + * Bootstrap v3.2.0 (http://getbootstrap.com) | ||
| 3 | + * Copyright 2011-2014 Twitter, Inc. | ||
| 4 | + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| 5 | + */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-o-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#2d6ca2));background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary:disabled,.btn-primary[disabled]{background-color:#2d6ca2;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f3f3f3));background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:-o-linear-gradient(top,#222 0,#282828 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#222),to(#282828));background-image:linear-gradient(to bottom,#222 0,#282828 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-o-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3071a9));background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-o-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3278b3));background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);background-repeat:repeat-x;border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +/*! | ||
| 2 | + * Bootstrap v3.2.0 (http://getbootstrap.com) | ||
| 3 | + * Copyright 2011-2014 Twitter, Inc. | ||
| 4 | + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| 5 | + */ | ||
| 6 | + article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}#content *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;width:100% \9;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} | ||
| 7 | +.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)} | ||
| 8 | +.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}} | ||
| 9 | +.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px} | ||
| 10 | +.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.clearfix:before,.clearfix:after,.nav:before,.nav:after{content:" ";display:table}.clearfix:after,.nav:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)} | ||
| 11 | +.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:normal;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%} | ||
| 12 | +.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534} | ||
| 13 | +.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate3d(0, -25%, 0);transform:translate3d(0, -25%, 0);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)} | ||
| 14 | +.close{float:right;font-size:18px;font-weight:bold;line-height:1;color:#000;text-shadow:0px 1px 0px #FFF;opacity:0.2;} button.close { padding:0px;cursor:pointer;background:none repeat scroll 0% 0% transparent;border:0px none;} | ||
| 15 | +.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.clearfix:before,.clearfix:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.clearfix:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after{clear:both} | ||
| 16 | +.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9} | ||
| 17 | +fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}textarea.form-group-sm .form-control,select[multiple].form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;min-height:32px}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}textarea.form-group-lg .form-control,select[multiple].form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;min-height:38px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.clearfix:before,.clearfix:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +/*! | ||
| 2 | + * Bootstrap v3.2.0 (http://getbootstrap.com) | ||
| 3 | + * Copyright 2011-2014 Twitter, Inc. | ||
| 4 | + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| 5 | + */ | ||
| 6 | +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
229 Bytes
5.6 KB
26.4 KB
2.47 KB
1.32 KB
| 1 | +/*--------------- | ||
| 2 | + * jQuery iToggle Plugin by Engage Interactive | ||
| 3 | + * Examples and documentation at: http://labs.engageinteractive.co.uk/itoggle/ | ||
| 4 | + * Copyright (c) 2009 Engage Interactive | ||
| 5 | + * Version: 1.0 (10-JUN-2009) | ||
| 6 | + * Dual licensed under the MIT and GPL licenses: | ||
| 7 | + * http://www.opensource.org/licenses/mit-license.php | ||
| 8 | + * http://www.gnu.org/licenses/gpl.html | ||
| 9 | + * Version: 1.7 (30-May-2012) by pshiryaev | ||
| 10 | + * Requires: jQuery v1.7 or later | ||
| 11 | +---------------*/ | ||
| 12 | +!function(i){i.fn.iToggle=function(e){function a(e,a){1==e?"radio"==o.type?i("label[for="+a+"]").addClass("ilabel_radio"):i("label[for="+a+"]").addClass("ilabel"):i("label[for="+a+"]").remove()}function l(e,a){o.onClick.call(e),h=e.innerHeight(),t=e.prop("for"),e.hasClass("iTon")?(o.onClickOff.call(e),e.animate({backgroundPositionX:"100%",backgroundPositionY:"-"+h+"px"},o.speed,o.easing,function(){e.removeClass("iTon").addClass("iToff"),clickEnabled=!0,o.onSlide.call(this),o.onSlideOff.call(this)}),i("input#"+t).removeAttr("checked"),i("input#"+t).trigger("change")):(o.onClickOn.call(e),e.animate({backgroundPositionX:"0%",backgroundPositionY:"-"+h+"px"},o.speed,o.easing,function(){e.removeClass("iToff").addClass("iTon"),clickEnabled=!0,o.onSlide.call(this),o.onSlideOn.call(this)}),i("input#"+t).prop("checked","checked"),i("input#"+t).trigger("change")),1==a&&(name=i("#"+t).prop("name"),l(e.siblings("label[for]")))}clickEnabled=!0;var n={type:"checkbox",keepLabel:!0,easing:!1,speed:200,onClick:function(){},onClickOn:function(){},onClickOff:function(){},onSlide:function(){},onSlideOn:function(){},onSlideOff:function(){}},o=i.extend({},n,e);this.each(function(){var e=i(this);if(e.is("input")){var l=e.attr("id");if(a(o.keepLabel,l),e.attr("checked")){n=i('<label class="itoggle" for="'+l+'"><span></span></label>');e.addClass("iT_checkbox").before(n);s=i(n).innerHeight();i(n).css({"background-position-x":"0%","background-position-y":"-"+s+"px"}),e.prev("label").addClass("iTon")}else{var n=i('<label class="itoggle" for="'+l+'"><span></span></label>');e.addClass("iT_checkbox").before(n);var s=i(n).innerHeight();i(n).css({"background-position-x":"100%","background-position-y":"-"+s+"px"}),e.prev("label").addClass("iToff")}}else e.children("input:"+o.type).each(function(){var e=i(this).attr("id");if(a(o.keepLabel,e),i(this).attr("checked")){l=i('<label class="itoggle" for="'+e+'"><span></span></label>');i(this).addClass("iT_checkbox").before(l);n=i(l).innerHeight();i(l).css({"background-position-x":"0%","background-position-y":"-"+n+"px"}),i(this).prev("label").addClass("iTon")}else{var l=i('<label class="itoggle" for="'+e+'"><span></span></label>');i(this).addClass("iT_checkbox").before(l);var n=i(l).innerHeight();i(l).css({"background-position-x":"100%","background-position-y":"-"+n+"px"}),i(this).prev("label").addClass("iToff")}"radio"==o.type&&i(this).prev("label").addClass("iT_radio")})}),i("label.itoggle").click(function(){return 1==clickEnabled&&(clickEnabled=!1,i(this).hasClass("iT_radio")?i(this).hasClass("iTon")?clickEnabled=!0:l(i(this),!0):l(i(this))),!1}),i("label.ilabel").click(function(){return 1==clickEnabled&&(clickEnabled=!1,l(i(this).next("label.itoggle"))),!1})}}(jQuery); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle;}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none;}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px;}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none;}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap;}.select2-container .select2-search--inline{float:left;}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none;}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051;}.select2-results{display:block;}.select2-results__options{list-style:none;margin:0;padding:0;}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none;}.select2-results__option[aria-selected]{cursor:pointer;}.select2-container--open .select2-dropdown{left:0;}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0;}.select2-search--dropdown{display:block;padding:4px;}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box;}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none;}.select2-search--dropdown.select2-search--hide{display:none;}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0);}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px;}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px;}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999;}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px;}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0;}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left;}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto;}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default;}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none;}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px;}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%;}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left;}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px;}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px;}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333;}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder{float:right;}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto;}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto;}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0;}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default;}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none;}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0;}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0;}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa;}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto;}.select2-container--default .select2-results__option[role=group]{padding:0;}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999;}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd;}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em;}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0;}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em;}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em;}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em;}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em;}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em;}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white;}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px;}.select2-container--classic .select2-selection--single{background-color:#f6f6f6;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #ffffff 50%, #eeeeee 100%);background-image:-o-linear-gradient(top, #ffffff 50%, #eeeeee 100%);background-image:linear-gradient(to bottom, #ffffff 50%, #eeeeee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb;}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px;}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px;}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999;}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);background-image:-o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);background-image:linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#cccccc', GradientType=0);}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0;}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left;}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto;}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb;}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none;}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px;}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #ffffff 0%, #eeeeee 50%);background-image:-o-linear-gradient(top, #ffffff 0%, #eeeeee 50%);background-image:linear-gradient(to bottom, #ffffff 0%, #eeeeee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eeeeee 50%, #ffffff 100%);background-image:-o-linear-gradient(top, #eeeeee 50%, #ffffff 100%);background-image:linear-gradient(to bottom, #eeeeee 50%, #ffffff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0;}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb;}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px;}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none;}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px;}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px;}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555;}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto;}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto;}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb;}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0;}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0;}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;}.select2-container--classic .select2-dropdown{background-color:white;border:1px solid transparent;}.select2-container--classic .select2-dropdown--above{border-bottom:none;}.select2-container--classic .select2-dropdown--below{border-top:none;}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto;}.select2-container--classic .select2-results__option[role=group]{padding:0;}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey;}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:white;}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px;}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb;} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +/*! Select2 4.0.0-rc.2 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(n=n.slice(0,n.length-1),a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){return n.apply(b,v.call(arguments,0).concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n<c.length;n+=1)if(m=o(c[n],f),k=m.f,"require"===k)u[n]=p.require(a);else if("exports"===k)u[n]=p.exports(a),s=!0;else if("module"===k)h=u[n]=p.module(a);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(a+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=d?d.apply(q[a],u):void 0,a&&(h&&h.exports!==b&&h.exports!==q[a]?q[a]=h.exports:l===b&&s||(q[a]=l))}else a&&(q[a]=d)},a=c=n=function(a,c,d,e,f){if("string"==typeof a)return p[a]?p[a](c):j(o(a,c).f);if(!a.splice){if(s=a,s.deps&&n(s.deps,s.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?m(b,a,c,d):setTimeout(function(){m(b,a,c,d)},4),n},n.config=function(a){return n(a)},a._defined=q,d=function(a,b,c){b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){var e=b[d];"function"==typeof e&&"constructor"!==d&&c.push(d)}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){var a=Array.prototype.unshift;return a.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice;this.listeners=this.listeners||{},a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;d>c;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return e!==f||"hidden"!==f&&"visible"!==f?"scroll"===e||"scroll"===f?!0:d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth:!1},c.escapeMarkup=function(a){var b={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),this.$results.append(d)},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){var c=b.find(".select2-results");c.append(a)},c.prototype.sort=function(a){var b=this.options.get("sorter");return b(a)},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")});var f=e.filter("[aria-selected=true]");f.length>0?f.first().trigger("mouseenter"):e.first().trigger("mouseenter")})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";{a(h)}this.template(b,h);for(var i=[],j=0;j<b.children.length;j++){var k=b.children[j],l=this.option(k);i.push(l)}var m=a("<ul></ul>",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b){var c=this,d=b.id+"-results";this.$results.attr("id",d),b.on("results:all",function(a){c.clear(),c.append(a.data),b.isOpen()&&c.setClasses()}),b.on("results:append",function(a){c.append(a.data),b.isOpen()&&c.setClasses()}),b.on("query",function(a){c.showLoading(a)}),b.on("select",function(){b.isOpen()&&c.setClasses()}),b.on("unselect",function(){b.isOpen()&&c.setClasses()}),b.on("open",function(){c.$results.attr("aria-expanded","true"),c.$results.attr("aria-hidden","false"),c.setClasses(),c.ensureHighlightVisible()}),b.on("close",function(){c.$results.attr("aria-expanded","false"),c.$results.attr("aria-hidden","true"),c.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=c.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=c.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?c.trigger("close"):c.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=c.getHighlightedResults(),b=c.$results.find("[aria-selected]"),d=b.index(a);if(0!==d){var e=d-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=c.$results.offset().top,h=f.offset().top,i=c.$results.scrollTop()+(h-g);0===e?c.$results.scrollTop(0):0>h-g&&c.$results.scrollTop(i)}}),b.on("results:next",function(){var a=c.getHighlightedResults(),b=c.$results.find("[aria-selected]"),d=b.index(a),e=d+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=c.$results.offset().top+c.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=c.$results.scrollTop()+h-g;0===e?c.$results.scrollTop(0):h>g&&c.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){c.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=c.$results.scrollTop(),d=c.$results.get(0).scrollHeight-c.$results.scrollTop()+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&d<=c.$results.height();e?(c.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(c.$results.scrollTop(c.$results.get(0).scrollHeight-c.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var d=a(this),e=d.data("data");return"true"===d.attr("aria-selected")?void(c.options.get("multiple")?c.trigger("unselect",{originalEvent:b,data:e}):c.trigger("close")):void c.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(){var b=a(this).data("data");c.getHighlightedResults().removeClass("select2-results__option--highlighted"),c.trigger("results:focus",{data:b,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('<span class="select2-selection" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a){var b=this,d=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){b.trigger("focus",a)}),this.$selection.on("blur",function(a){b.trigger("blur",a)}),this.$selection.on("keydown",function(a){b.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){b.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){b.update(a.data)}),a.on("open",function(){b.$selection.attr("aria-expanded","true"),b.$selection.attr("aria-owns",d),b._attachCloseHandler(a)}),a.on("close",function(){b.$selection.attr("aria-expanded","false"),b.$selection.removeAttr("aria-activedescendant"),b.$selection.removeAttr("aria-owns"),b.$selection.focus(),b._detachCloseHandler(a)}),a.on("enable",function(){b.$selection.attr("tabindex",b._tabindex)}),a.on("disable",function(){b.$selection.attr("tabindex","-1")})},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c){function d(){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},d.prototype.bind=function(a){var b=this;d.__super__.bind.apply(this,arguments);var c=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",c),this.$selection.attr("aria-labelledby",c),this.$selection.on("mousedown",function(a){1===a.which&&b.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(){}),this.$selection.on("blur",function(){}),a.on("selection:update",function(a){b.update(a.data)})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a){var b=this.options.get("templateSelection"),c=this.options.get("escapeMarkup");return c(b(a))},d.prototype.selectionContainer=function(){return a("<span></span>")},d.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.display(b),d=this.$selection.find(".select2-selection__rendered");d.empty().append(c),d.prop("title",b.title||b.text)},d}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(){var b=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){b.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(c){var d=a(this),e=d.parent(),f=e.data("data");b.trigger("unselect",{originalEvent:c,data:f})})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a){var b=this.options.get("templateSelection"),c=this.options.get("escapeMarkup");return c(b(a))},d.prototype.selectionContainer=function(){var b=a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">×</span></li>');return b},d.prototype.update=function(b){if(this.clear(),0!==b.length){for(var c=a(),d=0;d<b.length;d++){var e=b[d],f=this.display(e),g=this.selectionContainer();g.append(f),g.prop("title",e.title||e.text),g.data("data",e),c=c.add(g)}this.$selection.find(".select2-selection__rendered").append(c)}},d}),b.define("select2/selection/placeholder",["../utils"],function(){function a(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},a.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id,d=b.length>1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},a}),b.define("select2/selection/allowClear",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),null==e.placeholder&&e.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(b){if(!e.options.get("disabled")){b.stopPropagation();for(var c=a(this).data("data"),d=0;d<c.length;d++){var f={data:c[d]};if(e.trigger("unselect",f),f.prevented)return}e.$element.val(e.placeholder.id).trigger("change"),e.trigger("toggle")}})},b.prototype.update=function(b,c){if(b.call(this,c),!(this.$selection.find(".select2-selection__placeholder").length>0||0===c.length)){var d=a('<span class="select2-selection__clear">×</span>');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},b}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus()}),b.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val(""),e.$search.focus()}),b.on("enable",function(){e.$search.prop("disabled",!1)}),b.on("disable",function(){e.$search.prop("disabled",!0)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e.trigger("blur",a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}}),this.$selection.on("input",".select2-search--inline",function(){e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input",".select2-search--inline",function(a){e.handleSearch(a)})},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.trigger("open"),this.$search.val(b.text+" ")},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple"))return a.selected=!1,c(a.element).is("option")?(a.element.selected=!1,void this.$element.trigger("change")):void this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})},d.prototype.bind=function(a){var b=this;this.container=a,a.on("select",function(a){b.select(a.data)}),a.on("unselect",function(a){b.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){c.removeData(this,"data")})},d.prototype.query=function(a,b){var d=[],e=this,f=this.$element.children();f.each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){this.$element.append(a)},d.prototype.option=function(a){var b;a.children?(b=document.createElement("optgroup"),b.label=a.text):(b=document.createElement("option"),void 0!==b.textContent?b.textContent=a.text:b.innerText=a.text),a.id&&(b.value=a.id),a.disabled&&(b.disabled=!0),a.selected&&(b.selected=!0),a.title&&(b.title=a.title);var d=c(b),e=this._normalizeItem(a);return e.element=b,c.data(b,"data",e),d},d.prototype.item=function(a){var b={};if(b=c.data(a[0],"data"),null!=b)return b;if(a.is("option"))b={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){b={text:a.prop("label"),children:[],title:a.prop("title")};for(var d=a.children("option"),e=[],f=0;f<d.length;f++){var g=c(d[f]),h=this.item(g);e.push(h)}b.children=e}return b=this._normalizeItem(b),b.element=a[0],c.data(a[0],"data",b),b},d.prototype._normalizeItem=function(a){c.isPlainObject(a)||(a={id:a,text:a}),a=c.extend({},{text:""},a); | ||
| 2 | +var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){var c=this.options.get("matcher");return c(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function b(a){return function(){return c(this).val()==a.id}}for(var d=this,e=this.$element.find("option"),f=e.map(function(){return d.item(c(this)).id}).get(),g=c(),h=0;h<a.length;h++){var i=this._normalizeItem(a[h]);if(c.inArray(i.id,f)>=0){var j=e.filter(b(i)),k=this.item(j),l=(c.extend(!0,{},k,i),this.option(k));j.replaceWith(l)}else{var m=this.option(i);if(i.children){var n=this.convertToOptions(i.children);m.append(n)}g=g.add(m)}}return g},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(b,c){this.ajaxOptions=this._applyDefaults(c.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),a.__super__.constructor.call(this,b,c)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return{q:a.term}},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){});e._request=d}var e=this;this._request&&(this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url(a)),"function"==typeof f.data&&(f.data=f.data(a)),this.ajaxOptions.delay&&""!==a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");if(void 0!==f&&(this.createTag=f),b.call(this,c,d),a.isArray(e))for(var g=0;g<e.length;g++){var h=e[g],i=this._normalizeItem(h),j=this.option(i);this.$element.append(j)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0),k=i.text===b.term;if(k||j)return f?!1:(a.data=g,void c(a))}if(f)return!0;var l=e.createTag(b);if(null!=l){var m=e.option(l);m.attr("data-select2-tag",!0),e.addOptions(m),e.insertTag(g,l)}a.results=g,c(a)}var e=this;return this._removeOldTags(),null==b.term||null!=b.page?void a.call(this,b,c):void a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(){var b=(this._lastTag,this.$element.find("option[data-select2-tag]"));b.each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(a,b,c){function d(a){e.select(a)}var e=this;b.term=b.term||"";var f=this.tokenizer(b,this.options,d);f.term!==b.term&&(this.$search.length&&(this.$search.val(f.term),this.$search.focus()),b.term=f.term),a.call(this,b,c)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);e(m),g=g.substr(h+1)||"",h=0}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",b.term.length<this.minimumInputLength?void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.position=function(){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a){function b(){}return b.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},b.prototype.handleSearch=function(){if(!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},b.prototype.showSearch=function(){return!0},b}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="option load-more" role="treeitem"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(a,b,c){this.$dropdownParent=c.get("dropdownParent")||document.body,a.call(this,b,c)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c){var d=this,e="scroll.select2."+c.id,f="resize.select2."+c.id,g="orientationchange.select2."+c.id,h=this.$container.parents().filter(b.hasScroll);h.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),h.on(e,function(){var b=a(this).data("select2-scroll-position");a(this).scrollTop(b.y)}),a(window).on(e+" "+f+" "+g,function(){d._positionDropdown(),d._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c){var d="scroll.select2."+c.id,e="resize.select2."+c.id,f="orientationchange.select2."+c.id,g=this.$container.parents().filter(b.hasScroll);g.off(d),a(window).off(d+" "+e+" "+f)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=(this.$container.position(),this.$container.offset());f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom};c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){this.$dropdownContainer.width(),this.$dropdown.css({width:this.$container.outerWidth(!1)+"px"})},c.prototype._showDropdown=function(){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return a(c.data.results)<this.minimumResultsForSearch?!1:b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(){d._handleSelectOnClose()})},a.prototype._handleSelectOnClose=function(){var a=this.getHighlightedResults();a.length<1||a.trigger("mouseup")},a}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close")},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){var b=a.minimum-a.input.length,c="Please enter "+b+" or more characters";return c},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}D.prototype.apply=function(l){if(l=a.extend({},this.defaults,l),null==l.dataAdapter){if(l.dataAdapter=null!=l.ajax?o:null!=l.data?n:m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter&&(l.selectionAdapter=l.multiple?e:d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),l.selectionAdapter=j.Decorate(l.selectionAdapter,i)),"string"==typeof l.language)if(l.language.indexOf("-")>0){var F=l.language.split("-"),G=F[0];l.language=[l.language,G]}else l.language=[l.language];if(a.isArray(l.language)){var H=new k;l.language.push("en");for(var I=l.language,J=0;J<I.length;J++){var K=I[J],L={};try{L=k.loadPath(K)}catch(M){try{K=this.defaults.amdLanguageBase+K,L=k.loadPath(K)}catch(N){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+K+'" could not be automatically loaded. A fallback will be used instead.');continue}}H.extend(L)}l.translations=H}else l.translations=new k(l.language);return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["jquery","./defaults","./utils"],function(a,b,c){function d(a,d){if(this.options=a,null!=d&&this.fromElement(d),this.options=b.apply(this.options),d&&d.is("input")){var e=require(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=c.Decorate(this.options.dataAdapter,e)}}return d.prototype.fromElement=function(b){var d=["select2"];null==this.options.multiple&&(this.options.multiple=b.prop("multiple")),null==this.options.disabled&&(this.options.disabled=b.prop("disabled")),null==this.options.language&&(b.prop("lang")?this.options.language=b.prop("lang").toLowerCase():b.closest("[lang]").prop("lang")&&(this.options.language=b.closest("[lang]").prop("lang"))),null==this.options.dir&&(this.options.dir=b.prop("dir")?b.prop("dir"):b.closest("[dir]").prop("dir")?b.closest("[dir]").prop("dir"):"ltr"),b.prop("disabled",this.options.disabled),b.prop("multiple",this.options.multiple),b.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),b.data("data",b.data("select2Tags")),b.data("tags",!0)),b.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),b.attr("ajax--url",b.data("ajaxUrl")),b.data("ajax--url",b.data("ajaxUrl")));var e={};e=a.fn.jquery&&"1."==a.fn.jquery.substr(0,2)&&b[0].dataset?a.extend(!0,{},b[0].dataset,b.data()):b.data();var f=a.extend(!0,{},e);f=c._convertData(f);for(var g in f)a.inArray(g,d)>-1||(a.isPlainObject(this.options[g])?a.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},d.prototype.get=function(a){return this.options[a]},d.prototype.set=function(a,b){this.options[a]=b},d}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.hide(),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this._sync=c.bind(this._syncAttributes,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._sync);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._sync)}),this._observer.observe(this.$element[0],{attributes:!0,subtree:!1})):this.$element[0].addEventListener&&this.$element[0].addEventListener("DOMAttrModified",b._sync,!1)},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("focus",function(){a.$container.addClass("select2-container--focus")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open"),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ENTER?(a.trigger("results:select"),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle"),b.preventDefault()):c===d.UP?(a.trigger("results:previous"),b.preventDefault()):c===d.DOWN?(a.trigger("results:next"),b.preventDefault()):(c===d.ESC||c===d.TAB)&&(a.close(),b.preventDefault()):(c===d.ENTER||c===d.SPACE||(c===d.DOWN||c===d.UP)&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable")):this.trigger("enable")},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||(this.trigger("query",{}),this.trigger("open"))},e.prototype.close=function(){this.isOpen()&&this.trigger("close")},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._sync),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&this.$element[0].removeEventListener("DOMAttrModified",this._sync,!1),this._sync=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.show(),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),function(c){"function"==typeof b.define&&b.define.amd?b.define("jquery.mousewheel",["jquery"],c):"object"==typeof exports?module.exports=c:c(a)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}),b.define("select2/compat/matcher",["jquery"],function(a){function b(b){function c(c,d){var e=a.extend(!0,{},d);if(null==c.term||""===a.trim(c.term))return e;if(d.children){for(var f=d.children.length-1;f>=0;f--){var g=d.children[f],h=b(c.term,g.text,g);h||e.children.splice(f,1)}if(e.children.length>0)return e}return b(c.term,d.text,d)?e:null}return c}return b}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;return this._isInitialized?void b.call(this,c):void this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery"],function(a){function b(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `<select>` element instead."),a.call(this,b,c)}return b.prototype.current=function(b,c){function d(b,c){var e=[];return b.selected||-1!==a.inArray(b.id,c)?(b.selected=!0,e.push(b)):b.selected=!1,b.children&&e.push.apply(e,d(b.children,c)),e}for(var e=[],f=0;f<this._currentData.length;f++){var g=this._currentData[f];e.push.apply(e,d(g,this.$element.val().split(this._valueSeparator)))}c(e)},b.prototype.select=function(b,c){if(this.options.get("multiple")){var d=this.$element.val();d+=this._valueSeparator+c.id,this.$element.val(d),this.$element.trigger("change")}else this.current(function(b){a.map(b,function(a){a.selected=!1 | ||
| 3 | +})}),this.$element.val(c.id),this.$element.trigger("change")},b.prototype.unselect=function(a,b){var c=this;b.selected=!1,this.current(function(a){for(var d=[],e=0;e<a.length;e++){var f=a[e];b.id!=f.id&&d.push(f.id)}c.$element.val(d.join(c._valueSeparator)),c.$element.trigger("change")})},b.prototype.query=function(a,b,c){for(var d=[],e=0;e<this._currentData.length;e++){var f=this._currentData[e],g=this.matches(b,f);null!==g&&d.push(g)}c({results:d})},b.prototype.addOptions=function(b,c){var d=a.map(c,function(b){return a.data(b,"data")});this._currentData.push.apply(this._currentData,d)},b}),b.define("select2/compat/query",[],function(){function a(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2."),a.call(this,b,c)}return a.prototype.query=function(a,b,c){b.callback=c;var d=this.options.get("query");d.call(null,b)},a}),b.define("select2/dropdown/attachContainer",[],function(){function a(a,b,c){a.call(this,b,c)}return a.prototype.position=function(a,b,c){var d=c.find(".dropdown-wrapper");d.append(b),b.addClass("select2-dropdown--below"),c.addClass("select2-container--below")},a}),b.define("select2/dropdown/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$dropdown.on(d.join(" "),function(a){a.stopPropagation()})},a}),b.define("select2/selection/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$selection.on(d.join(" "),function(a){a.stopPropagation()})},a}),b.define("jquery.select2",["jquery","./select2/core","./select2/defaults"],function(a,b,c){try{require("jquery.mousewheel")}catch(d){}return null==a.fn.select2&&(a.fn.select2=function(c){if(c=c||{},"object"==typeof c)return this.each(function(){{var d=a.extend({},c,!0);new b(a(this),d)}}),this;if("string"==typeof c){var d=this.data("select2"),e=Array.prototype.slice.call(arguments,1);return d[c](e)}throw new Error("Invalid arguments for Select2: "+c)}),null==a.fn.select2.defaults&&(a.fn.select2.defaults=c),b}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +/*old opencart style*/ | ||
| 2 | +a.button,.list a.button{text-decoration:none;color:#FFF;display:inline-block;padding:5px 15px;background:#003A88;-webkit-border-radius:10px 10px 10px 10px;-moz-border-radius:10px;-khtml-border-radius:10px 10px 10px 10px;border-radius:10px 10px 10px 10px} | ||
| 3 | +table.form{width:100%;border-collapse:collapse;margin-bottom:20px} | ||
| 4 | +table.form > tbody > tr > td:first-child{width:200px} | ||
| 5 | +table.form > tbody > tr > td{padding:10px;border-bottom:1px dotted #CCC} | ||
| 6 | +.scrollbox{border:1px solid #CCC;width:350px;height:100px;background:#FFF;overflow-y:scroll} | ||
| 7 | +.scrollbox img{float:right;cursor:pointer} | ||
| 8 | +.scrollbox div{padding:3px} | ||
| 9 | +.scrollbox div input{margin:0;padding:0;margin-right:3px} | ||
| 10 | +.scrollbox div.even{background:#FFF} | ||
| 11 | +.scrollbox div.odd{background:#F2F2F2} | ||
| 12 | +.help {color: #666;font-size: 11px;font-weight: normal;display: block; line-height:16px;} | ||
| 13 | +.buttons{float:right} | ||
| 14 | +.heading .buttons .button {margin-left:5px} | ||
| 15 | +input[type="text"]{padding: 6px 12px;} | ||
| 16 | + | ||
| 17 | +.box > .content {overflow:unset;} /* overflow fix on 1.5 */ | ||
| 18 | + | ||
| 19 | +.modColor{color:#1b809e;} | ||
| 20 | + | ||
| 21 | +/* iToggle */ | ||
| 22 | +label.ilabel{display:block;font-size:12px;padding-bottom:/*1*/0px;cursor:pointer} | ||
| 23 | +label.itoggle,label.itoggle span{display:block;width:79px;height:23px;margin-top:5px;background:url(img/itoggle.png) left bottom no-repeat;cursor:pointer;text-indent:-5000px} | ||
| 24 | +label.itoggle.iToff{background-position:right bottom} | ||
| 25 | +label.itoggle span{background-position:left top;margin:0} | ||
| 26 | +input.iT_checkbox{position:absolute;top:-9999px;left:-9999px} | ||
| 27 | + | ||
| 28 | +select option{padding:5px; font-size:12px;} | ||
| 29 | + | ||
| 30 | +/* V2 style */ | ||
| 31 | +.panel-heading h3 {font-size: 16px; font-weight: 500; display: inline-block;} | ||
| 32 | +.panel-heading .pull-right{position:relative; bottom:8px;} | ||
| 33 | +h3.panel-title{margin:0;} | ||
| 34 | +.breadcrumb{margin:0; margin-bottom:15px; margin-left:10px; background: none repeat scroll 0% 0% transparent; padding: 0px 10px;} | ||
| 35 | +.breadcrumb > li{display: inline-block;} | ||
| 36 | +.breadcrumb li + li::before {content: "/"; font-family: FontAwesome; color: #BBB; padding: 0px 5px;} | ||
| 37 | +.breadcrumb li a {color: #999; font-size: 11px; padding: 0px; margin: 0px; text-decoration:none;} | ||
| 38 | +.breadcrumb li:last-child a {color: #1E91CF;} | ||
| 39 | + | ||
| 40 | +/* Main style */ | ||
| 41 | +.nav-pills li a{background:#fafafa;} | ||
| 42 | +.nav-pills li a i{position:absolute; right:10px; font-size:14px; padding-top:2px;} | ||
| 43 | +.nav-pills li a i.fa-minus-circle:hover{color:#CC5353} | ||
| 44 | +.nav-pills li i.fa-plus-circle:hover{color:#1871A1} | ||
| 45 | + | ||
| 46 | +.modal{color:#555;} | ||
| 47 | +#modal-info .modal-body h5{border-bottom: 1px dotted #ccc; padding-bottom:5px; font-size:13px;} | ||
| 48 | +#modal-info .modal-title i.fa{color:#5C8BA5; font-size:18px; padding-right:10px;} | ||
| 49 | +#modal-info .infotags span{display:inline-block; width:287px;} | ||
| 50 | +#modal-info .tag{font-weight: normal; color: #2F7698;} | ||
| 51 | +#modal-info p{margin-bottom:20px;} | ||
| 52 | +#modal-info .img-thumbnail{box-shadow:3px 3px 4px 0px #999; border-radius: 7px;} | ||
| 53 | +#modal-info .infoblock{position:relative; padding:20px; border-radius:10px; margin-bottom:15px; background:#eee;} | ||
| 54 | +#modal-info .infoblock.indent-left{padding-left:90px;} | ||
| 55 | +#modal-info .infoblock.indent-right{padding-right:90px;} | ||
| 56 | +#modal-info .infoblock .context{position:absolute; top:27px; font-size:50px; font-family: Arial, Arial, Helvetica, sans-serif; font-style:italic; font-weight:bold; color:#D8D8D8; text-shadow: 1px 1px 0 #CCC8C8;} | ||
| 57 | +#modal-info .infoblock.indent-left .context{left:18px;} | ||
| 58 | +#modal-info .infoblock.indent-right .context{right:18px;} | ||
| 59 | +#modal-info .infotags p{margin-bottom:25px;} | ||
| 60 | +.info-btn{float:right;} | ||
| 61 | +.active a, a:focus, .btn{outline:0 !important;} | ||
| 62 | +.nav-pills li a{outline:0; font-weight:bold; color:#444; text-decoration:none;} | ||
| 63 | +.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus{color:#444;} | ||
| 64 | +.nav-tabs li.active i.fa{color:#86C440;} | ||
| 65 | +.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus{background:#444;} | ||
| 66 | + | ||
| 67 | +textarea{border-radius:5px; background:#F5EFF7; border:1px solid #ccc;} | ||
| 68 | +option{padding-right:15px;} | ||
| 69 | +.box, .box td{font-size: 13px; line-height: 15px; font-family: "PT Sans","PT Sans Narrow", sans-serif;} | ||
| 70 | +h3.panel-title{font-weight:bold; position:relative;top:2px;} | ||
| 71 | +.box h3.panel-title{float:left; padding: 9px 0px 0px; margin: 0px; font-size: 16px;} | ||
| 72 | +h3.panel-title span{color:#555;} | ||
| 73 | +h3.panel-title img{position:relative;bottom:2px;} | ||
| 74 | +.box h3.panel-title img{bottom:5px;} | ||
| 75 | +.form.about td{padding:30px 10px} | ||
| 76 | +.nav-tabs > li > a{border-radius: 3px 20px 0 0; outline:0; text-decoration:none;} | ||
| 77 | +.nav-tabs > li.pull-right > a{border-radius: 20px 3px 0 0;} | ||
| 78 | +.nav-tabs a.selected, .nav-tabs .active a{box-shadow: 2px -2px 2px #eee;} | ||
| 79 | +.nav-tabs a.selected i{background-position:bottom; color:#86C440;} | ||
| 80 | +.nav-tabs i{float:left; position:relative; right:5px; top:1px; padding-right:0px; color:#DED2D0; font-size:16px; font-weight: normal;} | ||
| 81 | +.nav-tabs{margin-bottom: 25px;} | ||
| 82 | +.switchContent{display:none} | ||
| 83 | +.switchBtn{cursor:pointer} | ||
| 84 | +.multiple_switch > div{width:150px; float:left;} | ||
| 85 | +.multiple_switch > div > span{display:block; padding-bottom:7px;} | ||
| 86 | + | ||
| 87 | +tr.info td:first-child{text-align:center; font-size:22px; color:#bbb; transition: color 500ms;} | ||
| 88 | +tr.info:hover td:first-child{color:#1b809e; transition: color 500ms;} | ||
| 89 | +tr.info td:last-child{color:#555;padding:40px 100px 40px 0;} | ||
| 90 | + | ||
| 91 | +a.button, .list a.button{ | ||
| 92 | + cursor:pointer; | ||
| 93 | + transition: background 200ms; | ||
| 94 | + border:0px solid #888; | ||
| 95 | + font-weight:normal; | ||
| 96 | + background: #2e7091; | ||
| 97 | + border-radius:6px; | ||
| 98 | + text-shadow:0 0 2px #333; | ||
| 99 | + box-shadow:1px 1px 2px #333; | ||
| 100 | + font-size:16px; | ||
| 101 | + | ||
| 102 | + border-radius: 5px; | ||
| 103 | + border-bottom: 1px solid rgba(255,255,255,0.4); | ||
| 104 | + box-shadow :0 -1px 1px rgba(0,0,0,0.2)inset, 0 1px 2px rgba(0,0,0,0.8)inset; | ||
| 105 | + color:#fff; | ||
| 106 | + text-shadow : 0px -1px 0px rgba(0,0,0,0.8); | ||
| 107 | + | ||
| 108 | + background-size : 30px 30px; | ||
| 109 | + background-repeat:repeat-x; | ||
| 110 | + background-position :0; | ||
| 111 | + background-image : -moz-linear-gradient( 90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 50%, rgba(255,255,255,0.1) 50%, rgba(255,255,255,0.3) 100% ); | ||
| 112 | + background-image : -o-linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 50%, rgba(255,255,255,0.1) 50%, rgba(255,255,255,0.3) 100%); | ||
| 113 | + background-image : -webkit-linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 50%, rgba(255,255,255,0.1) 50%, rgba(255,255,255,0.3) 100%); | ||
| 114 | + | ||
| 115 | + background-color: #555; | ||
| 116 | +} | ||
| 117 | +a.button img{vertical-align:top; position:relative; right:4px;} | ||
| 118 | +a.button:hover{background-color: rgba(74,108,155,1); transition: background 200ms;} | ||
| 119 | + | ||
| 120 | +.button i{position:relative; right:4px; transition: color 200ms;} | ||
| 121 | +.button .iconic{font-size:14px; line-height:14px; bottom:1px; } | ||
| 122 | +.button:hover .iconic{transition: color 200ms;} | ||
| 123 | + | ||
| 124 | +.button.green i{color:#3DCC5C;} | ||
| 125 | +.button.green:hover i{color:#fff;} | ||
| 126 | +.button.green:hover{background-color:#309B28;} | ||
| 127 | +.button.red i{color:#ED5555;} | ||
| 128 | +.button.red:hover i{color:#fff;} | ||
| 129 | +.button.red:hover{background-color:#CE3D35;} | ||
| 130 | +.button.orange i{color:#ED9923;} | ||
| 131 | +.button.orange:hover i{color:#fff;} | ||
| 132 | +.button.orange:hover{background-color:#EA7D1E;} | ||
| 133 | +.button.blue i{color:#669CE8;} | ||
| 134 | +.button.blue:hover i{color:#fff;} | ||
| 135 | +.button.blue:hover{background-color:#4A6C9B;} | ||
| 136 | + | ||
| 137 | +/*.form-group + .form-group,*/ | ||
| 138 | +.specialOptions .form-group:first-child{ | ||
| 139 | + border-top: 1px solid #ededed; | ||
| 140 | + padding-top: 15px; | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +.gk-box { | ||
| 144 | + padding: 10px 20px; | ||
| 145 | + margin: 15px 0; | ||
| 146 | + border: 1px solid #eee; | ||
| 147 | + border-left-width: 5px; | ||
| 148 | + border-radius: 3px; | ||
| 149 | + font-size: 13px; | ||
| 150 | +} | ||
| 151 | +.gk-box h4 { | ||
| 152 | + margin-top: 0; | ||
| 153 | + margin-bottom: 5px; | ||
| 154 | +} | ||
| 155 | +.gk-box p:last-child { | ||
| 156 | + margin-bottom: 0; | ||
| 157 | +} | ||
| 158 | +.gk-box-info { | ||
| 159 | + border-left-color: #1b809e; | ||
| 160 | +} | ||
| 161 | +.gk-box-info h4 { | ||
| 162 | + color: #1b809e; | ||
| 163 | +} | ||
| 164 | +.params_table td{padding-right:15px;} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +/*! | ||
| 2 | + * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome | ||
| 3 | + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) | ||
| 4 | + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
No preview for this file type
No preview for this file type
This diff could not be displayed because it is too large.
No preview for this file type
No preview for this file type
This diff could not be displayed because it is too large.
| 1 | +/*! | ||
| 2 | + * Bootstrap v3.2.0 (http://getbootstrap.com) | ||
| 3 | + * Copyright 2011-2014 Twitter, Inc. | ||
| 4 | + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| 5 | + */ | ||
| 6 | +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/1x_adm/view/seo_package/gkd-script.js
0 → 100644
File mode changed
upload/1x_adm/view/seo_package/gkd-theme.css
0 → 100644
| 1 | +table.dataTable thead .sorting { | ||
| 2 | + background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATAgMAAAAPPt5fAAAACVBMVEUAAADIyMjl5eVIBBP/AAAAAXRSTlMAQObYZgAAAClJREFUCNdjwAYEwGQKiGDsBJFsTA5AUoJhAqZaiDhEDVg9RC/MHEwAANsMA91AQfd/AAAAAElFTkSuQmCC) no-repeat center right | ||
| 3 | +} | ||
| 4 | +table.dataTable thead .sorting_asc { | ||
| 5 | + background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATAQMAAABInqSPAAAABlBMVEUAAABVVVUT3Vn+AAAAAXRSTlMAQObYZgAAAB1JREFUCNdjwAkcgPgBAwPjBwYG5h8MDOx/GAgBAKRJBBCQbHkwAAAAAElFTkSuQmCC) no-repeat center right | ||
| 6 | +} | ||
| 7 | +table.dataTable thead .sorting_desc { | ||
| 8 | + background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATAQMAAABInqSPAAAABlBMVEUAAABVVVUT3Vn+AAAAAXRSTlMAQObYZgAAABxJREFUCNdjIATY/zAwMP9gYGD8AOQ8AGIHnEoBkNkEEEbbutQAAAAASUVORK5CYII=) no-repeat center right | ||
| 9 | +} | ||
| 10 | +table.dataTable thead .sorting_asc_disabled { | ||
| 11 | + background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATAQMAAABInqSPAAAABlBMVEUAAABUVFR8AzIeAAAAAnRSTlMAf7YpoZUAAAAdSURBVAjXY8AJHID4AQMD4wcGBuYfDAzsfxgIAQCkSQQQkGx5MAAAAABJRU5ErkJggg==) no-repeat center right | ||
| 12 | +} | ||
| 13 | +table.dataTable thead .sorting_desc_disabled { | ||
| 14 | + background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATAQMAAABInqSPAAAABlBMVEUAAABUVFR8AzIeAAAAAnRSTlMAf7YpoZUAAAAcSURBVAjXYyAE2P8wMDD/YGBg/ADkPABiB5xKAZDZBBBG27rUAAAAAElFTkSuQmCC) no-repeat center right | ||
| 15 | +} | ||
| 16 | +table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc { | ||
| 17 | + background-color:#eee | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + | ||
| 22 | +.gkdwidget { | ||
| 23 | + margin:0 0 20px; | ||
| 24 | + position:relative; | ||
| 25 | + -moz-border-radius:0; | ||
| 26 | + -khtml-border-radius:0; | ||
| 27 | + -webkit-border-radius:0; | ||
| 28 | + border-radius:0; | ||
| 29 | + padding:0; | ||
| 30 | +} | ||
| 31 | +.gkdwidget ol li{ | ||
| 32 | + padding:5px 0; | ||
| 33 | +} | ||
| 34 | +.widget-content-padding { | ||
| 35 | + padding:20px | ||
| 36 | +} | ||
| 37 | +.widget-content-padding .well { | ||
| 38 | + margin-bottom:0 | ||
| 39 | +} | ||
| 40 | +.gkdwidget>header { | ||
| 41 | + height:34px; | ||
| 42 | + padding:0; | ||
| 43 | + line-height:40px | ||
| 44 | +} | ||
| 45 | +.gkdwidget>header>.widget-icon { | ||
| 46 | + display:block; | ||
| 47 | + width:30px; | ||
| 48 | + height:32px; | ||
| 49 | + position:relative; | ||
| 50 | + float:left; | ||
| 51 | + font-size:111%; | ||
| 52 | + line-height:32px; | ||
| 53 | + text-align:center; | ||
| 54 | + margin-right:-10px | ||
| 55 | +} | ||
| 56 | +.gkdwidget>header h2 { | ||
| 57 | + height:100%; | ||
| 58 | + width:auto; | ||
| 59 | + display:inline-block; | ||
| 60 | + font-size:14px; | ||
| 61 | + position:relative; | ||
| 62 | + margin:0; | ||
| 63 | + line-height:34px; | ||
| 64 | + font-weight:400; | ||
| 65 | + letter-spacing:0 | ||
| 66 | +} | ||
| 67 | +.gkdwidget>header>h2 { | ||
| 68 | + margin-left:10px; | ||
| 69 | + float:left | ||
| 70 | +} | ||
| 71 | +.gkdwidget>header>:first-child.widget-icon { | ||
| 72 | + margin-left:0 | ||
| 73 | +} | ||
| 74 | +.gkdwidget>header .gkdwidget-icon { | ||
| 75 | + width:16px; | ||
| 76 | + height:16px; | ||
| 77 | + float:left; | ||
| 78 | + margin:12px 10px 0 0; | ||
| 79 | + display:block; | ||
| 80 | + zoom:1; | ||
| 81 | + z-index:4000 | ||
| 82 | +} | ||
| 83 | +.ui-sortable .gkdwidget-sortable>header { | ||
| 84 | + cursor:move; | ||
| 85 | + -moz-border-radius:0; | ||
| 86 | + -khtml-border-radius:0; | ||
| 87 | + -webkit-border-radius:0; | ||
| 88 | + border-radius:0; | ||
| 89 | + line-height:normal; | ||
| 90 | + box-shadow:inset 0 -2px 0 rgba(0,0,0,.05); | ||
| 91 | + -moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05); | ||
| 92 | + -webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05) | ||
| 93 | +} | ||
| 94 | +.ui-sortable .gkdwidget-sortable.gkdwidget-collapsed>header { | ||
| 95 | + -moz-border-radius:0; | ||
| 96 | + -khtml-border-radius:0; | ||
| 97 | + -webkit-border-radius:0; | ||
| 98 | + border-radius:0 | ||
| 99 | +} | ||
| 100 | +.gkdwidget-ctrls { | ||
| 101 | + width:auto; | ||
| 102 | + float:right; | ||
| 103 | + padding:0; | ||
| 104 | + margin:0 | ||
| 105 | +} | ||
| 106 | +.gkdwidget-ctrls .button-icon { | ||
| 107 | + min-width:30px; | ||
| 108 | + height:32px; | ||
| 109 | + float:left; | ||
| 110 | + position:relative; | ||
| 111 | + font-family:Arial,Helvetica,sans-serif; | ||
| 112 | + border-left:1px solid rgba(0,0,0,.09) | ||
| 113 | +} | ||
| 114 | +.gkdwidget-ctrls .button-icon:hover { | ||
| 115 | + background-color:rgba(0,0,0,.05) | ||
| 116 | +} | ||
| 117 | +.gkdwidget-loader { | ||
| 118 | + width:32px; | ||
| 119 | + height:32px; | ||
| 120 | + margin:0; | ||
| 121 | + float:right; | ||
| 122 | + background-repeat:no-repeat; | ||
| 123 | + background-position:center center; | ||
| 124 | + display:none; | ||
| 125 | + text-align:center; | ||
| 126 | + line-height:32px; | ||
| 127 | + font-size:111% | ||
| 128 | +} | ||
| 129 | +.gkdwidget h4 { | ||
| 130 | + color: #156584; | ||
| 131 | + border-bottom: 1px solid #E1E1E1; | ||
| 132 | + padding-bottom: 10px; | ||
| 133 | + margin-bottom: 15px; | ||
| 134 | +} | ||
| 135 | +.gkdwidget h5 { | ||
| 136 | + font-size: 13px; | ||
| 137 | + font-weight: ; | ||
| 138 | + color: #156584; | ||
| 139 | +} | ||
| 140 | +.gkdwidget p+h4, .gkdwidget table+h4, .gkdwidget ul+h4, .gkdwidget ol+h4{ | ||
| 141 | + margin-top: 50px; | ||
| 142 | +} | ||
| 143 | +.gkdwidget p+h5, .gkdwidget table+h5, .gkdwidget ul+h5{ | ||
| 144 | + margin-top: 30px; | ||
| 145 | +} | ||
| 146 | +.gkdwidget .gkd-badge{ | ||
| 147 | + border-color:#adadad; | ||
| 148 | + background:#fff; | ||
| 149 | +} | ||
| 150 | +.gkdwidget>div { | ||
| 151 | + float:left; | ||
| 152 | + width:100%; | ||
| 153 | + position:relative; | ||
| 154 | + font-size:13px; | ||
| 155 | + -moz-border-radius:0; | ||
| 156 | + -khtml-border-radius:0; | ||
| 157 | + -webkit-border-radius:0; | ||
| 158 | + border-radius:0; | ||
| 159 | + margin:0; | ||
| 160 | + border-width:1px 1px 2px; | ||
| 161 | + border-style:solid; | ||
| 162 | + border-top:none; | ||
| 163 | + border-right-color:#CCC!important; | ||
| 164 | + border-bottom-color:#CCC!important; | ||
| 165 | + border-left-color:#CCC!important; | ||
| 166 | + overflow:visible | ||
| 167 | +} | ||
| 168 | +.gkdwidget>div .tab-pane{ | ||
| 169 | + padding: 15px 25px; | ||
| 170 | +} | ||
| 171 | +.gkdwidget .widget-body { | ||
| 172 | + min-height:100px; | ||
| 173 | + position:relative; | ||
| 174 | + padding-bottom:13px | ||
| 175 | +} | ||
| 176 | +.gkdwidget .widget-body.widget-hide-overflow { | ||
| 177 | + overflow:hidden | ||
| 178 | +} | ||
| 179 | +.widget-toolbar.no-border { | ||
| 180 | + border-left:none | ||
| 181 | +} | ||
| 182 | +.widget-body.no-padding { | ||
| 183 | + margin:-13px -13px 0 | ||
| 184 | +} | ||
| 185 | +.widget-body.no-padding .alert { | ||
| 186 | + margin:0 0 10px; | ||
| 187 | + padding:10px; | ||
| 188 | + box-shadow:none!important; | ||
| 189 | + -webkit-box-shadow:none!important; | ||
| 190 | + -moz-box-shadow:none!important; | ||
| 191 | + border-width:0 0 1px!important; | ||
| 192 | + border-radius:0!important; | ||
| 193 | + -webkit-border-radius:0!important; | ||
| 194 | + -moz-border-radius:0!important | ||
| 195 | +} | ||
| 196 | +.gkdwidget.well.transparent .widget-body.no-padding { | ||
| 197 | + margin:0!important | ||
| 198 | +} | ||
| 199 | +.widget-body>table { | ||
| 200 | + margin-bottom:0 | ||
| 201 | +} | ||
| 202 | +.no-padding .md-editor,.widget-body.no-padding .cke_chrome { | ||
| 203 | + border:none | ||
| 204 | +} | ||
| 205 | +.widget-toolbar>.smart-form { | ||
| 206 | + margin-top:2px | ||
| 207 | +} | ||
| 208 | +.widget-toolbar>.smart-form .toggle:last-child { | ||
| 209 | + font-size:12px; | ||
| 210 | + line-height:29px | ||
| 211 | +} | ||
| 212 | +.widget-toolbar>.smart-form .checkbox input+i,.widget-toolbar>.smart-form .radio input+i,.widget-toolbar>.smart-form .toggle input+i { | ||
| 213 | + border-width:1px; | ||
| 214 | + border-color:#C7C7C7!important; | ||
| 215 | + margin-top:1px; | ||
| 216 | + box-shadow:0 1px 1px #FFF,0 1px 1px #858585 inset; | ||
| 217 | + -webkit-box-shadow:0 1px 1px #FFF,0 1px 1px #858585 inset; | ||
| 218 | + -moz-box-shadow:0 1px 1px #FFF,0 1px 1px #858585 inset | ||
| 219 | +} | ||
| 220 | +.gkdwidget.well { | ||
| 221 | + margin:0 0 30px | ||
| 222 | +} | ||
| 223 | +.gkdwidget.well>div { | ||
| 224 | + border:none!important; | ||
| 225 | + box-shadow:none!important; | ||
| 226 | + -webkit-box-shadow:none!important; | ||
| 227 | + -moz-box-shadow:none!important | ||
| 228 | +} | ||
| 229 | +.gkdwidget .icon { | ||
| 230 | + color: #74acc3; | ||
| 231 | + margin: 4px 15px 0; | ||
| 232 | + cursor:default; | ||
| 233 | +} | ||
| 234 | +.gkdwidget .nav-tabs { | ||
| 235 | + margin-bottom: 0; | ||
| 236 | +} | ||
| 237 | +.gkdwidget .nav-tabs > li { | ||
| 238 | + /*margin-top: 1px;*/ | ||
| 239 | +} | ||
| 240 | +.gkdwidget .nav-tabs > li.active > a { | ||
| 241 | + -webkit-box-shadow: 0 -2px 0 #74acc3; | ||
| 242 | + -moz-box-shadow: 0 -2px 0 #74acc3; | ||
| 243 | + box-shadow: 0 -3px 0 #74acc3; | ||
| 244 | + border-top-width: 0 !important; | ||
| 245 | + margin-top: 2px !important; | ||
| 246 | + font-weight: 700; | ||
| 247 | +} | ||
| 248 | +.gkdwidget.well header { | ||
| 249 | + display:none | ||
| 250 | +} | ||
| 251 | +.widget-footer { | ||
| 252 | + display:block; | ||
| 253 | + min-height:32px; | ||
| 254 | + vertical-align:middle; | ||
| 255 | + position:relative; | ||
| 256 | + background-color:#F8F7F7; | ||
| 257 | + padding:5px; | ||
| 258 | + border-top:1px solid #E4E4E4; | ||
| 259 | + text-align:right; | ||
| 260 | + margin:0 -13px -13px | ||
| 261 | +} | ||
| 262 | +.widget-footer.smart-form>label { | ||
| 263 | + margin-top:4px; | ||
| 264 | + display:block | ||
| 265 | +} | ||
| 266 | +#gkdwidget-fullscreen-mode { | ||
| 267 | + width:100%; | ||
| 268 | + height:100%; | ||
| 269 | + position:fixed; | ||
| 270 | + top:0; | ||
| 271 | + left:0; | ||
| 272 | + z-index:1050 | ||
| 273 | +} | ||
| 274 | +#gkdwidget-fullscreen-mode .gkdwidget { | ||
| 275 | + margin:0; | ||
| 276 | + -moz-border-radius:0; | ||
| 277 | + -khtml-border-radius:0; | ||
| 278 | + -webkit-border-radius:0; | ||
| 279 | + border-radius:0 | ||
| 280 | +} | ||
| 281 | +#gkdwidget-fullscreen-mode .gkdwidget>div { | ||
| 282 | + overflow-y:scroll; | ||
| 283 | + -moz-border-radius:0; | ||
| 284 | + -khtml-border-radius:0; | ||
| 285 | + -webkit-border-radius:0; | ||
| 286 | + border-radius:0 | ||
| 287 | +} | ||
| 288 | +#gkdwidget-fullscreen-mode>div>header { | ||
| 289 | + cursor:default | ||
| 290 | +} | ||
| 291 | +.gkdwidget>header { | ||
| 292 | + color:#333; | ||
| 293 | + border:1px solid #C2C2C2; | ||
| 294 | + background:#fafafa | ||
| 295 | +} | ||
| 296 | +.gkdwidget>div { | ||
| 297 | + background-color:#F5F5F5!important | ||
| 298 | +} | ||
| 299 | +.gkdwidget-color-darken>header { | ||
| 300 | + border-color:#383838!important; | ||
| 301 | + background:#404040; | ||
| 302 | + color:#fff | ||
| 303 | +} | ||
| 304 | +.gkdwidget-color-darken>.nav-tabs>li:not(.active)>a,.gkdwidget-color-darken>header>.gkdwidget-ctrls a { | ||
| 305 | + color:#fff!important | ||
| 306 | +} | ||
| 307 | +.gkdwidget-color-darken .nav-tabs li a:hover { | ||
| 308 | + color:#333!important | ||
| 309 | +} | ||
| 310 | +.gkdwidget-color-purple>header { | ||
| 311 | + border-color:#665271!important; | ||
| 312 | + background:#6e587a; | ||
| 313 | + color:#fff | ||
| 314 | +} | ||
| 315 | +.gkdwidget-color-purple .nav-tabs li:not(.active) a,.gkdwidget-color-purple>header>.gkdwidget-ctrls a { | ||
| 316 | + color:#fff!important | ||
| 317 | +} | ||
| 318 | +.gkdwidget-color-purple .nav-tabs li a:hover { | ||
| 319 | + color:#333!important | ||
| 320 | +} | ||
| 321 | +.gkdwidget-color-teal>header { | ||
| 322 | + border-color:#508180!important; | ||
| 323 | + background:#568a89; | ||
| 324 | + color:#fff | ||
| 325 | +} | ||
| 326 | +.gkdwidget-color-teal .nav-tabs li:not(.active) a,.gkdwidget-color-teal>header>.gkdwidget-ctrls a { | ||
| 327 | + color:#fff!important | ||
| 328 | +} | ||
| 329 | +.gkdwidget-color-teal .nav-tabs li a:hover { | ||
| 330 | + color:#333!important | ||
| 331 | +} | ||
| 332 | +.gkdwidget-color-blueDark>header { | ||
| 333 | + border-color:#45474b!important; | ||
| 334 | + background:#4c4f53; | ||
| 335 | + color:#fff | ||
| 336 | +} | ||
| 337 | +.gkdwidget-color-blueDark .nav-tabs li:not(.active) a,.gkdwidget-color-blueDark>header>.gkdwidget-ctrls a { | ||
| 338 | + color:#fff!important | ||
| 339 | +} | ||
| 340 | +.gkdwidget-color-blueDark .nav-tabs li a:hover { | ||
| 341 | + color:#333!important | ||
| 342 | +} | ||
| 343 | +.gkdwidget-color-blue>header { | ||
| 344 | + border-color:#45474b!important; | ||
| 345 | + background:#4c4f53; | ||
| 346 | + color:#fff | ||
| 347 | +} | ||
| 348 | +.gkdwidget-color-blue .nav-tabs li:not(.active) a,.gkdwidget-color-blue>header>.gkdwidget-ctrls a { | ||
| 349 | + color:#fff!important | ||
| 350 | +} | ||
| 351 | +.gkdwidget-color-blue .nav-tabs li a:hover { | ||
| 352 | + color:#333!important | ||
| 353 | +} | ||
| 354 | +.gkdwidget-color-blueLight>header { | ||
| 355 | + border-color:#a0aeb3!important; | ||
| 356 | + background:#cbd2d5; | ||
| 357 | + color:#000 | ||
| 358 | +} | ||
| 359 | +.gkdwidget-color-blueLight .nav-tabs li a:hover,.gkdwidget-color-blueLight .nav-tabs li:not(.active) a,.gkdwidget-color-blueLight>header>.gkdwidget-ctrls a { | ||
| 360 | + color:#2b363c!important | ||
| 361 | +} | ||
| 362 | +.gkdwidget header .nav-tabs { | ||
| 363 | + border-bottom-color:transparent | ||
| 364 | +} | ||
| 365 | +.gkdwidget header .nav-tabs>li>a { | ||
| 366 | + border-radius:0; | ||
| 367 | + border:none; | ||
| 368 | + padding:7px 15px 6px | ||
| 369 | +} | ||
| 370 | +.gkdwidget header:first-child .nav-tabs { | ||
| 371 | + float:left | ||
| 372 | +} | ||
| 373 | +.gkdwidget header:first-child .nav-tabs li { | ||
| 374 | + padding-left:0 | ||
| 375 | +} | ||
| 376 | +.gkdwidget header:first-child .nav-tabs li a { | ||
| 377 | + color:#333 | ||
| 378 | +} | ||
| 379 | +.gkdwidget header:first-child .nav-tabs.pull-right li:last-child a { | ||
| 380 | + margin-right:0!important; | ||
| 381 | + border-right:none!important | ||
| 382 | +} | ||
| 383 | +.gkdwidget header .nav-tabs>li.active>a,.gkdwidget header .nav-tabs>li.active>a:focus,.gkdwidget header .nav-tabs>li.active>a:hover { | ||
| 384 | + color:#555; | ||
| 385 | + background-color:#F5F5F5; | ||
| 386 | + border:1px solid #C2C2C2; | ||
| 387 | + border-bottom-color:transparent; | ||
| 388 | + border-top:none; | ||
| 389 | + cursor:default | ||
| 390 | +} | ||
| 391 | +.gkdwidget-ctrls .button-icon { | ||
| 392 | + text-decoration: none; | ||
| 393 | + text-align: center; | ||
| 394 | + font-size: 14px; | ||
| 395 | + min-width: 30px; | ||
| 396 | + height: 32px; | ||
| 397 | + line-height: 32px; | ||
| 398 | + float: left; | ||
| 399 | + position: relative; | ||
| 400 | + font-family: Arial,Helvetica,sans-serif; | ||
| 401 | + border-left: 1px solid rgba(0,0,0,.09); | ||
| 402 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
26.4 KB
upload/1x_adm/view/seo_package/img/clear.png
0 → 100644
509 Bytes
537 Bytes
583 Bytes
4.18 KB
91.8 KB
74.6 KB
19.2 KB
13.7 KB
363 Bytes
2.05 KB
22 KB
19.2 KB
51.2 KB
32.5 KB
38.4 KB
21.7 KB
49.1 KB
45.9 KB
29.4 KB
1.14 KB
upload/1x_adm/view/seo_package/img/icon.png
0 → 100644
774 Bytes
5.6 KB
2.47 KB
upload/1x_adm/view/seo_package/img/logo1.gif
0 → 100644
55.7 KB
upload/1x_adm/view/seo_package/img/pdf.png
0 → 100644
591 Bytes
4.37 KB
upload/1x_adm/view/seo_package/img/save.png
0 → 100644
4.01 KB
998 Bytes
15 KB
2.85 KB
1.11 KB
15.1 KB
1.02 KB
2.47 KB
upload/1x_adm/view/seo_package/img/star.png
0 → 100644
807 Bytes
3.13 KB
upload/1x_adm/view/seo_package/itoggle.js
0 → 100644
| 1 | +/*--------------- | ||
| 2 | + * jQuery iToggle Plugin by Engage Interactive | ||
| 3 | + * Examples and documentation at: http://labs.engageinteractive.co.uk/itoggle/ | ||
| 4 | + * Copyright (c) 2009 Engage Interactive | ||
| 5 | + * Version: 1.0 (10-JUN-2009) | ||
| 6 | + * Dual licensed under the MIT and GPL licenses: | ||
| 7 | + * http://www.opensource.org/licenses/mit-license.php | ||
| 8 | + * http://www.gnu.org/licenses/gpl.html | ||
| 9 | + * Version: 1.7 (30-May-2012) by pshiryaev | ||
| 10 | + * Requires: jQuery v1.7 or later | ||
| 11 | +---------------*/ | ||
| 12 | +!function(i){i.fn.iToggle=function(e){function a(e,a){1==e?"radio"==o.type?i("label[for="+a+"]").addClass("ilabel_radio"):i("label[for="+a+"]").addClass("ilabel"):i("label[for="+a+"]").remove()}function l(e,a){o.onClick.call(e),h=e.innerHeight(),t=e.prop("for"),e.hasClass("iTon")?(o.onClickOff.call(e),e.animate({backgroundPositionX:"100%",backgroundPositionY:"-"+h+"px"},o.speed,o.easing,function(){e.removeClass("iTon").addClass("iToff"),clickEnabled=!0,o.onSlide.call(this),o.onSlideOff.call(this)}),i("input#"+t).removeAttr("checked"),i("input#"+t).trigger("change")):(o.onClickOn.call(e),e.animate({backgroundPositionX:"0%",backgroundPositionY:"-"+h+"px"},o.speed,o.easing,function(){e.removeClass("iToff").addClass("iTon"),clickEnabled=!0,o.onSlide.call(this),o.onSlideOn.call(this)}),i("input#"+t).prop("checked","checked"),i("input#"+t).trigger("change")),1==a&&(name=i("#"+t).prop("name"),l(e.siblings("label[for]")))}clickEnabled=!0;var n={type:"checkbox",keepLabel:!0,easing:!1,speed:200,onClick:function(){},onClickOn:function(){},onClickOff:function(){},onSlide:function(){},onSlideOn:function(){},onSlideOff:function(){}},o=i.extend({},n,e);this.each(function(){var e=i(this);if(e.is("input")){var l=e.attr("id");if(a(o.keepLabel,l),e.attr("checked")){n=i('<label class="itoggle" for="'+l+'"><span></span></label>');e.addClass("iT_checkbox").before(n);s=i(n).innerHeight();i(n).css({"background-position-x":"0%","background-position-y":"-"+s+"px"}),e.prev("label").addClass("iTon")}else{var n=i('<label class="itoggle" for="'+l+'"><span></span></label>');e.addClass("iT_checkbox").before(n);var s=i(n).innerHeight();i(n).css({"background-position-x":"100%","background-position-y":"-"+s+"px"}),e.prev("label").addClass("iToff")}}else e.children("input:"+o.type).each(function(){var e=i(this).attr("id");if(a(o.keepLabel,e),i(this).attr("checked")){l=i('<label class="itoggle" for="'+e+'"><span></span></label>');i(this).addClass("iT_checkbox").before(l);n=i(l).innerHeight();i(l).css({"background-position-x":"0%","background-position-y":"-"+n+"px"}),i(this).prev("label").addClass("iTon")}else{var l=i('<label class="itoggle" for="'+e+'"><span></span></label>');i(this).addClass("iT_checkbox").before(l);var n=i(l).innerHeight();i(l).css({"background-position-x":"100%","background-position-y":"-"+n+"px"}),i(this).prev("label").addClass("iToff")}"radio"==o.type&&i(this).prev("label").addClass("iT_radio")})}),i("label.itoggle").click(function(){return 1==clickEnabled&&(clickEnabled=!1,i(this).hasClass("iT_radio")?i(this).hasClass("iTon")?clickEnabled=!0:l(i(this),!0):l(i(this))),!1}),i("label.ilabel").click(function(){return 1==clickEnabled&&(clickEnabled=!1,l(i(this).next("label.itoggle"))),!1})}}(jQuery); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +/*! X-editable - v1.5.1 | ||
| 2 | +* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery | ||
| 3 | +* http://github.com/vitalets/x-editable | ||
| 4 | +* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */ | ||
| 5 | + | ||
| 6 | +.seo_editor td{cursor:pointer; word-break: break-word; overflow-wrap:break-word;} | ||
| 7 | +.seo_editor td a{color:#333; text-decoration:none;} | ||
| 8 | + | ||
| 9 | +.editableform { | ||
| 10 | + margin-bottom: 0; /* overwrites bootstrap margin */ | ||
| 11 | +} | ||
| 12 | + | ||
| 13 | +.editable-input input[type="text"] { | ||
| 14 | + width:100%; | ||
| 15 | + height:30px; | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +.editableform .control-group { | ||
| 19 | + margin-bottom: 0; /* overwrites bootstrap margin */ | ||
| 20 | + white-space: nowrap; /* prevent wrapping buttons on new line */ | ||
| 21 | + line-height: 20px; /* overwriting bootstrap line-height. See #133 */ | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +/* | ||
| 25 | + BS3 width:1005 for inputs breaks editable form in popup | ||
| 26 | + See: https://github.com/vitalets/x-editable/issues/393 | ||
| 27 | +*/ | ||
| 28 | +.editableform .form-control { | ||
| 29 | + width: auto; | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +.editable-buttons { | ||
| 33 | + position:absolute; | ||
| 34 | + display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */ | ||
| 35 | + vertical-align: top; | ||
| 36 | + margin-left: 7px; | ||
| 37 | + margin-left:-24px; | ||
| 38 | + /* inline-block emulation for IE7*/ | ||
| 39 | + zoom: 1; | ||
| 40 | + *display: inline; | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +.editable-buttons button{ | ||
| 44 | + border:1px solid #CACACA; | ||
| 45 | + border-radius:4px; | ||
| 46 | + padding: 4px 7px; | ||
| 47 | + color:#333; | ||
| 48 | +} | ||
| 49 | +.editable-buttons button:hover{ | ||
| 50 | +color:#fff; | ||
| 51 | + border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)} | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +.editable-buttons.editable-buttons-bottom { | ||
| 55 | + display: block; | ||
| 56 | + margin-top: 7px; | ||
| 57 | + margin-left: 0; | ||
| 58 | +} | ||
| 59 | + | ||
| 60 | +.editable-input { | ||
| 61 | + vertical-align: top; | ||
| 62 | + display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */ | ||
| 63 | + width: 100%; /* bootstrap-responsive has width: 100% that breakes layout */ | ||
| 64 | + white-space: normal; /* reset white-space decalred in parent*/ | ||
| 65 | + padding-right:30px; | ||
| 66 | + /* display-inline emulation for IE7*/ | ||
| 67 | + zoom: 1; | ||
| 68 | + *display: inline; | ||
| 69 | +} | ||
| 70 | + | ||
| 71 | +.editable-input textarea{ | ||
| 72 | + width:100%; | ||
| 73 | +} | ||
| 74 | + | ||
| 75 | +.editable-buttons .editable-cancel { | ||
| 76 | + margin-left: 7px; | ||
| 77 | +} | ||
| 78 | + | ||
| 79 | +/*for jquery-ui buttons need set height to look more pretty*/ | ||
| 80 | +.editable-buttons button.ui-button-icon-only { | ||
| 81 | + height: 24px; | ||
| 82 | + width: 30px; | ||
| 83 | +} | ||
| 84 | + | ||
| 85 | +.editableform-loading { | ||
| 86 | + background: url('img/loading.gif') center center no-repeat; | ||
| 87 | + height: 25px; | ||
| 88 | + width: auto; | ||
| 89 | + min-width: 25px; | ||
| 90 | +} | ||
| 91 | + | ||
| 92 | +.editable-inline .editableform-loading { | ||
| 93 | + background-position: left 5px; | ||
| 94 | +} | ||
| 95 | + | ||
| 96 | + .editable-error-block { | ||
| 97 | + max-width: 300px; | ||
| 98 | + margin: 5px 0 0 0; | ||
| 99 | + width: auto; | ||
| 100 | + white-space: normal; | ||
| 101 | +} | ||
| 102 | + | ||
| 103 | +/*add padding for jquery ui*/ | ||
| 104 | +.editable-error-block.ui-state-error { | ||
| 105 | + padding: 3px; | ||
| 106 | +} | ||
| 107 | + | ||
| 108 | +.editable-error { | ||
| 109 | + color: red; | ||
| 110 | +} | ||
| 111 | + | ||
| 112 | +/* ---- For specific types ---- */ | ||
| 113 | + | ||
| 114 | +.editableform .editable-date { | ||
| 115 | + padding: 0; | ||
| 116 | + margin: 0; | ||
| 117 | + float: left; | ||
| 118 | +} | ||
| 119 | + | ||
| 120 | +/* move datepicker icon to center of add-on button. See https://github.com/vitalets/x-editable/issues/183 */ | ||
| 121 | +.editable-inline .add-on .icon-th { | ||
| 122 | + margin-top: 3px; | ||
| 123 | + margin-left: 1px; | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | + | ||
| 127 | +/* checklist vertical alignment */ | ||
| 128 | +.editable-checklist label input[type="checkbox"], | ||
| 129 | +.editable-checklist label span { | ||
| 130 | + vertical-align: middle; | ||
| 131 | + margin: 0; | ||
| 132 | +} | ||
| 133 | + | ||
| 134 | +.editable-checklist label { | ||
| 135 | + white-space: nowrap; | ||
| 136 | +} | ||
| 137 | + | ||
| 138 | +/* set exact width of textarea to fit buttons toolbar */ | ||
| 139 | +.editable-wysihtml5 { | ||
| 140 | + width: 566px; | ||
| 141 | + height: 250px; | ||
| 142 | +} | ||
| 143 | + | ||
| 144 | +/* clear button shown as link in date inputs */ | ||
| 145 | +.editable-clear { | ||
| 146 | + clear: both; | ||
| 147 | + font-size: 0.9em; | ||
| 148 | + text-decoration: none; | ||
| 149 | + text-align: right; | ||
| 150 | +} | ||
| 151 | + | ||
| 152 | +/* IOS-style clear button for text inputs */ | ||
| 153 | +.editable-clear-x { | ||
| 154 | + background: url('img/clear.png') center center no-repeat; | ||
| 155 | + display: block; | ||
| 156 | + width: 13px; | ||
| 157 | + height: 13px; | ||
| 158 | + position: absolute; | ||
| 159 | + opacity: 0.6; | ||
| 160 | + z-index: 100; | ||
| 161 | + | ||
| 162 | + top: 50%; | ||
| 163 | + right: 36px; | ||
| 164 | + margin-top: -6px; | ||
| 165 | + | ||
| 166 | +} | ||
| 167 | + | ||
| 168 | +.editable-clear-x:hover { | ||
| 169 | + opacity: 1; | ||
| 170 | +} | ||
| 171 | + | ||
| 172 | +.editable-pre-wrapped { | ||
| 173 | + white-space: pre-wrap; | ||
| 174 | +} | ||
| 175 | +.editable-container.editable-popup { | ||
| 176 | + max-width: none !important; /* without this rule poshytip/tooltip does not stretch */ | ||
| 177 | +} | ||
| 178 | + | ||
| 179 | +.editable-container.popover { | ||
| 180 | + width: auto; /* without this rule popover does not stretch */ | ||
| 181 | +} | ||
| 182 | + | ||
| 183 | +.editable-container.editable-inline { | ||
| 184 | + display: inline-block; | ||
| 185 | + vertical-align: middle; | ||
| 186 | + width: 100%; | ||
| 187 | + /* inline-block emulation for IE7*/ | ||
| 188 | + zoom: 1; | ||
| 189 | + *display: inline; | ||
| 190 | +} | ||
| 191 | + | ||
| 192 | +.editable-container.ui-widget { | ||
| 193 | + font-size: inherit; /* jqueryui widget font 1.1em too big, overwrite it */ | ||
| 194 | + z-index: 9990; /* should be less than select2 dropdown z-index to close dropdown first when click */ | ||
| 195 | +} | ||
| 196 | +.editable-click, | ||
| 197 | +a.editable-click, | ||
| 198 | +a.editable-click:hover { | ||
| 199 | + text-decoration: none; | ||
| 200 | +} | ||
| 201 | + | ||
| 202 | +.editable-click.editable-disabled, | ||
| 203 | +a.editable-click.editable-disabled, | ||
| 204 | +a.editable-click.editable-disabled:hover { | ||
| 205 | + color: #585858; | ||
| 206 | + cursor: default; | ||
| 207 | + border-bottom: none; | ||
| 208 | +} | ||
| 209 | + | ||
| 210 | +.editable-empty, .editable-empty:hover, .editable-empty:focus{ | ||
| 211 | + font-style: italic; | ||
| 212 | + color: #DD1144; | ||
| 213 | + /* border-bottom: none; */ | ||
| 214 | + text-decoration: none; | ||
| 215 | +} | ||
| 216 | + | ||
| 217 | +.editable-unsaved { | ||
| 218 | + font-weight: bold; | ||
| 219 | +} | ||
| 220 | + | ||
| 221 | +.editable-unsaved:after { | ||
| 222 | +/* content: '*'*/ | ||
| 223 | +} | ||
| 224 | + | ||
| 225 | +.editable-bg-transition { | ||
| 226 | + -webkit-transition: background-color 1400ms ease-out; | ||
| 227 | + -moz-transition: background-color 1400ms ease-out; | ||
| 228 | + -o-transition: background-color 1400ms ease-out; | ||
| 229 | + -ms-transition: background-color 1400ms ease-out; | ||
| 230 | + transition: background-color 1400ms ease-out; | ||
| 231 | +} | ||
| 232 | + | ||
| 233 | +/*see https://github.com/vitalets/x-editable/issues/139 */ | ||
| 234 | +.form-horizontal .editable | ||
| 235 | +{ | ||
| 236 | + padding-top: 5px; | ||
| 237 | + display:inline-block; | ||
| 238 | +} | ||
| 239 | + |
| 1 | +/*! X-editable - v1.5.1 | ||
| 2 | +* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery | ||
| 3 | +* http://github.com/vitalets/x-editable | ||
| 4 | +* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */ | ||
| 5 | +!function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.editableform.defaults,c),this.$div=a(b),this.options.scope||(this.options.scope=this)};b.prototype={constructor:b,initInput:function(){this.input=this.options.input,this.value=this.input.str2value(this.options.value),this.input.prerender()},initTemplate:function(){this.$form=a(a.fn.editableform.template)},initButtons:function(){var b=this.$form.find(".editable-buttons");b.append(a.fn.editableform.buttons),"bottom"===this.options.showbuttons&&b.addClass("editable-buttons-bottom")},render:function(){this.$loading=a(a.fn.editableform.loading),this.$div.empty().append(this.$loading),this.initTemplate(),this.options.showbuttons?this.initButtons():this.$form.find(".editable-buttons").remove(),this.showLoading(),this.isSaving=!1,this.$div.triggerHandler("rendering"),this.initInput(),this.$form.find("div.editable-input").append(this.input.$tpl),this.$div.append(this.$form),a.when(this.input.render()).then(a.proxy(function(){if(this.options.showbuttons||this.input.autosubmit(),this.$form.find(".editable-cancel").click(a.proxy(this.cancel,this)),this.input.error)this.error(this.input.error),this.$form.find(".editable-submit").attr("disabled",!0),this.input.$input.attr("disabled",!0),this.$form.submit(function(a){a.preventDefault()});else{this.error(!1),this.input.$input.removeAttr("disabled"),this.$form.find(".editable-submit").removeAttr("disabled");var b=null===this.value||void 0===this.value||""===this.value?this.options.defaultValue:this.value;this.input.value2input(b),this.$form.submit(a.proxy(this.submit,this))}this.$div.triggerHandler("rendered"),this.showForm(),this.input.postrender&&this.input.postrender()},this))},cancel:function(){this.$div.triggerHandler("cancel")},showLoading:function(){var a,b;this.$form?(a=this.$form.outerWidth(),b=this.$form.outerHeight(),a&&this.$loading.width(a),b&&this.$loading.height(b),this.$form.hide()):(a=this.$loading.parent().width(),a&&this.$loading.width(a)),this.$loading.show()},showForm:function(a){this.$loading.hide(),this.$form.show(),a!==!1&&this.input.activate(),this.$div.triggerHandler("show")},error:function(b){var c,d=this.$form.find(".control-group"),e=this.$form.find(".editable-error-block");if(b===!1)d.removeClass(a.fn.editableform.errorGroupClass),e.removeClass(a.fn.editableform.errorBlockClass).empty().hide();else{if(b){c=(""+b).split("\n");for(var f=0;f<c.length;f++)c[f]=a("<div>").text(c[f]).html();b=c.join("<br>")}d.addClass(a.fn.editableform.errorGroupClass),e.addClass(a.fn.editableform.errorBlockClass).html(b).show()}},submit:function(b){b.stopPropagation(),b.preventDefault();var c=this.input.input2value(),d=this.validate(c);if("object"===a.type(d)&&void 0!==d.newValue){if(c=d.newValue,this.input.value2input(c),"string"==typeof d.msg)return this.error(d.msg),this.showForm(),void 0}else if(d)return this.error(d),this.showForm(),void 0;if(!this.options.savenochange&&this.input.value2str(c)==this.input.value2str(this.value))return this.$div.triggerHandler("nochange"),void 0;var e=this.input.value2submit(c);this.isSaving=!0,a.when(this.save(e)).done(a.proxy(function(a){this.isSaving=!1;var b="function"==typeof this.options.success?this.options.success.call(this.options.scope,a,c):null;return b===!1?(this.error(!1),this.showForm(!1),void 0):"string"==typeof b?(this.error(b),this.showForm(),void 0):(b&&"object"==typeof b&&b.hasOwnProperty("newValue")&&(c=b.newValue),this.error(!1),this.value=c,this.$div.triggerHandler("save",{newValue:c,submitValue:e,response:a}),void 0)},this)).fail(a.proxy(function(a){this.isSaving=!1;var b;b="function"==typeof this.options.error?this.options.error.call(this.options.scope,a,c):"string"==typeof a?a:a.responseText||a.statusText||"Unknown error!",this.error(b),this.showForm()},this))},save:function(b){this.options.pk=a.fn.editableutils.tryParseJson(this.options.pk,!0);var c,d="function"==typeof this.options.pk?this.options.pk.call(this.options.scope):this.options.pk,e=!!("function"==typeof this.options.url||this.options.url&&("always"===this.options.send||"auto"===this.options.send&&null!==d&&void 0!==d));return e?(this.showLoading(),c={name:this.options.name||"",value:b,pk:d},"function"==typeof this.options.params?c=this.options.params.call(this.options.scope,c):(this.options.params=a.fn.editableutils.tryParseJson(this.options.params,!0),a.extend(c,this.options.params)),"function"==typeof this.options.url?this.options.url.call(this.options.scope,c):a.ajax(a.extend({url:this.options.url,data:c,type:"POST"},this.options.ajaxOptions))):void 0},validate:function(a){return void 0===a&&(a=this.value),"function"==typeof this.options.validate?this.options.validate.call(this.options.scope,a):void 0},option:function(a,b){a in this.options&&(this.options[a]=b),"value"===a&&this.setValue(b)},setValue:function(a,b){this.value=b?this.input.str2value(a):a,this.$form&&this.$form.is(":visible")&&this.input.value2input(this.value)}},a.fn.editableform=function(c){var d=arguments;return this.each(function(){var e=a(this),f=e.data("editableform"),g="object"==typeof c&&c;f||e.data("editableform",f=new b(this,g)),"string"==typeof c&&f[c].apply(f,Array.prototype.slice.call(d,1))})},a.fn.editableform.Constructor=b,a.fn.editableform.defaults={type:"text",url:null,params:null,name:null,pk:null,value:null,defaultValue:null,send:"auto",validate:null,success:null,error:null,ajaxOptions:null,showbuttons:!0,scope:null,savenochange:!1},a.fn.editableform.template='<form class="form-inline editableform"><div class="control-group"><div><div class="editable-input"></div><div class="editable-buttons"></div></div><div class="editable-error-block"></div></div></form>',a.fn.editableform.loading='<div class="editableform-loading"></div>',a.fn.editableform.buttons='<button type="submit" class="editable-submit"><i class="fa fa-check"></i></button>',a.fn.editableform.errorGroupClass=null,a.fn.editableform.errorBlockClass="editable-error",a.fn.editableform.engine="jquery"}(window.jQuery),function(a){"use strict";a.fn.editableutils={inherit:function(a,b){var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a,a.superclass=b.prototype},setCursorPosition:function(a,b){if(a.setSelectionRange)a.setSelectionRange(b,b);else if(a.createTextRange){var c=a.createTextRange();c.collapse(!0),c.moveEnd("character",b),c.moveStart("character",b),c.select()}},tryParseJson:function(a,b){if("string"==typeof a&&a.length&&a.match(/^[\{\[].*[\}\]]$/))if(b)try{a=new Function("return "+a)()}catch(c){}finally{return a}else a=new Function("return "+a)();return a},sliceObj:function(b,c,d){var e,f,g={};if(!a.isArray(c)||!c.length)return g;for(var h=0;h<c.length;h++)e=c[h],b.hasOwnProperty(e)&&(g[e]=b[e]),d!==!0&&(f=e.toLowerCase(),b.hasOwnProperty(f)&&(g[e]=b[f]));return g},getConfigData:function(b){var c={};return a.each(b.data(),function(a,b){("object"!=typeof b||b&&"object"==typeof b&&(b.constructor===Object||b.constructor===Array))&&(c[a]=b)}),c},objectKeys:function(a){if(Object.keys)return Object.keys(a);if(a!==Object(a))throw new TypeError("Object.keys called on a non-object");var b,c=[];for(b in a)Object.prototype.hasOwnProperty.call(a,b)&&c.push(b);return c},escape:function(b){return a("<div>").text(b).html()},itemsByValue:function(b,c,d){if(!c||null===b)return[];if("function"!=typeof d){var e=d||"value";d=function(a){return a[e]}}var f=a.isArray(b),g=[],h=this;return a.each(c,function(c,e){if(e.children)g=g.concat(h.itemsByValue(b,e.children,d));else if(f)a.grep(b,function(a){return a==(e&&"object"==typeof e?d(e):e)}).length&&g.push(e);else{var i=e&&"object"==typeof e?d(e):e;b==i&&g.push(e)}}),g},createInput:function(b){var c,d,e,f=b.type;return"date"===f&&("inline"===b.mode?a.fn.editabletypes.datefield?f="datefield":a.fn.editabletypes.dateuifield&&(f="dateuifield"):a.fn.editabletypes.date?f="date":a.fn.editabletypes.dateui&&(f="dateui"),"date"!==f||a.fn.editabletypes.date||(f="combodate")),"datetime"===f&&"inline"===b.mode&&(f="datetimefield"),"wysihtml5"!==f||a.fn.editabletypes[f]||(f="textarea"),"function"==typeof a.fn.editabletypes[f]?(c=a.fn.editabletypes[f],d=this.sliceObj(b,this.objectKeys(c.defaults)),e=new c(d)):(a.error("Unknown type: "+f),!1)},supportsTransitions:function(){var a=document.body||document.documentElement,b=a.style,c="transition",d=["Moz","Webkit","Khtml","O","ms"];if("string"==typeof b[c])return!0;c=c.charAt(0).toUpperCase()+c.substr(1);for(var e=0;e<d.length;e++)if("string"==typeof b[d[e]+c])return!0;return!1}}}(window.jQuery),function(a){"use strict";var b=function(a,b){this.init(a,b)},c=function(a,b){this.init(a,b)};b.prototype={containerName:null,containerDataName:null,innerCss:null,containerClass:"editable-container editable-popup",defaults:{},init:function(c,d){this.$element=a(c),this.options=a.extend({},a.fn.editableContainer.defaults,d),this.splitOptions(),this.formOptions.scope=this.$element[0],this.initContainer(),this.delayedHide=!1,this.$element.on("destroyed",a.proxy(function(){this.destroy()},this)),a(document).data("editable-handlers-attached")||(a(document).on("keyup.editable",function(b){27===b.which&&a(".editable-open").editableContainer("hide")}),a(document).on("click.editable",function(c){var d,e=a(c.target),f=[".editable-container",".ui-datepicker-header",".datepicker",".modal-backdrop",".bootstrap-wysihtml5-insert-image-modal",".bootstrap-wysihtml5-insert-link-modal"];if(a.contains(document.documentElement,c.target)&&!e.is(document)){for(d=0;d<f.length;d++)if(e.is(f[d])||e.parents(f[d]).length)return;b.prototype.closeOthers(c.target)}}),a(document).data("editable-handlers-attached",!0))},splitOptions:function(){if(this.containerOptions={},this.formOptions={},!a.fn[this.containerName])throw new Error(this.containerName+" not found. Have you included corresponding js file?");for(var b in this.options)b in this.defaults?this.containerOptions[b]=this.options[b]:this.formOptions[b]=this.options[b]},tip:function(){return this.container()?this.container().$tip:null},container:function(){var a;return this.containerDataName&&(a=this.$element.data(this.containerDataName))?a:a=this.$element.data(this.containerName)},call:function(){this.$element[this.containerName].apply(this.$element,arguments)},initContainer:function(){this.call(this.containerOptions)},renderForm:function(){this.$form.editableform(this.formOptions).on({save:a.proxy(this.save,this),nochange:a.proxy(function(){this.hide("nochange")},this),cancel:a.proxy(function(){this.hide("cancel")},this),show:a.proxy(function(){this.delayedHide?(this.hide(this.delayedHide.reason),this.delayedHide=!1):this.setPosition()},this),rendering:a.proxy(this.setPosition,this),resize:a.proxy(this.setPosition,this),rendered:a.proxy(function(){this.$element.triggerHandler("shown",a(this.options.scope).data("editable"))},this)}).editableform("render")},show:function(b){this.$element.addClass("editable-open"),b!==!1&&this.closeOthers(this.$element[0]),this.innerShow(),this.tip().addClass(this.containerClass),this.$form,this.$form=a("<div>"),this.tip().is(this.innerCss)?this.tip().append(this.$form):this.tip().find(this.innerCss).append(this.$form),this.renderForm()},hide:function(a){if(this.tip()&&this.tip().is(":visible")&&this.$element.hasClass("editable-open")){if(this.$form.data("editableform").isSaving)return this.delayedHide={reason:a},void 0;this.delayedHide=!1,this.$element.removeClass("editable-open"),this.innerHide(),this.$element.triggerHandler("hidden",a||"manual")}},innerShow:function(){},innerHide:function(){},toggle:function(a){this.container()&&this.tip()&&this.tip().is(":visible")?this.hide():this.show(a)},setPosition:function(){},save:function(a,b){this.$element.triggerHandler("save",b),this.hide("save")},option:function(a,b){this.options[a]=b,a in this.containerOptions?(this.containerOptions[a]=b,this.setContainerOption(a,b)):(this.formOptions[a]=b,this.$form&&this.$form.editableform("option",a,b))},setContainerOption:function(a,b){this.call("option",a,b)},destroy:function(){this.hide(),this.innerDestroy(),this.$element.off("destroyed"),this.$element.removeData("editableContainer")},innerDestroy:function(){},closeOthers:function(b){a(".editable-open").each(function(c,d){if(d!==b&&!a(d).find(b).length){var e=a(d),f=e.data("editableContainer");f&&("cancel"===f.options.onblur?e.data("editableContainer").hide("onblur"):"submit"===f.options.onblur&&e.data("editableContainer").tip().find("form").submit())}})},activate:function(){this.tip&&this.tip().is(":visible")&&this.$form&&this.$form.data("editableform").input.activate()}},a.fn.editableContainer=function(d){var e=arguments;return this.each(function(){var f=a(this),g="editableContainer",h=f.data(g),i="object"==typeof d&&d,j="inline"===i.mode?c:b;h||f.data(g,h=new j(this,i)),"string"==typeof d&&h[d].apply(h,Array.prototype.slice.call(e,1))})},a.fn.editableContainer.Popup=b,a.fn.editableContainer.Inline=c,a.fn.editableContainer.defaults={value:null,placement:"top",autohide:!0,onblur:"cancel",anim:!1,mode:"popup"},jQuery.event.special.destroyed={remove:function(a){a.handler&&a.handler()}}}(window.jQuery),function(a){"use strict";a.extend(a.fn.editableContainer.Inline.prototype,a.fn.editableContainer.Popup.prototype,{containerName:"editableform",innerCss:".editable-inline",containerClass:"editable-container editable-inline",initContainer:function(){this.$tip=a("<span></span>"),this.options.anim||(this.options.anim=0)},splitOptions:function(){this.containerOptions={},this.formOptions=this.options},tip:function(){return this.$tip},innerShow:function(){this.$element.hide(),this.tip().insertAfter(this.$element).show()},innerHide:function(){this.$tip.hide(this.options.anim,a.proxy(function(){this.$element.show(),this.innerDestroy()},this))},innerDestroy:function(){this.tip()&&this.tip().empty().remove()}})}(window.jQuery),function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.editable.defaults,c,a.fn.editableutils.getConfigData(this.$element)),this.options.selector?this.initLive():this.init(),this.options.highlight&&!a.fn.editableutils.supportsTransitions()&&(this.options.highlight=!1)};b.prototype={constructor:b,init:function(){var b,c=!1;if(this.options.name=this.options.name||this.$element.attr("id"),this.options.scope=this.$element[0],this.input=a.fn.editableutils.createInput(this.options),this.input){switch(void 0===this.options.value||null===this.options.value?(this.value=this.input.html2value(a.trim(this.$element.html())),c=!0):(this.options.value=a.fn.editableutils.tryParseJson(this.options.value,!0),this.value="string"==typeof this.options.value?this.input.str2value(this.options.value):this.options.value),this.$element.addClass("editable"),"textarea"===this.input.type&&this.$element.addClass("editable-pre-wrapped"),"manual"!==this.options.toggle?(this.$element.addClass("editable-click"),this.$element.on(this.options.toggle+".editable",a.proxy(function(a){if(this.options.disabled||a.preventDefault(),"mouseenter"===this.options.toggle)this.show();else{var b="click"!==this.options.toggle;this.toggle(b)}},this))):this.$element.attr("tabindex",-1),"function"==typeof this.options.display&&(this.options.autotext="always"),this.options.autotext){case"always":b=!0;break;case"auto":b=!a.trim(this.$element.text()).length&&null!==this.value&&void 0!==this.value&&!c;break;default:b=!1}a.when(b?this.render():!0).then(a.proxy(function(){this.options.disabled?this.disable():this.enable(),this.$element.triggerHandler("init",this)},this))}},initLive:function(){var b=this.options.selector;this.options.selector=!1,this.options.autotext="never",this.$element.on(this.options.toggle+".editable",b,a.proxy(function(b){var c=a(b.target);c.data("editable")||(c.hasClass(this.options.emptyclass)&&c.empty(),c.editable(this.options).trigger(b))},this))},render:function(a){return this.options.display!==!1?this.input.value2htmlFinal?this.input.value2html(this.value,this.$element[0],this.options.display,a):"function"==typeof this.options.display?this.options.display.call(this.$element[0],this.value,a):this.input.value2html(this.value,this.$element[0]):void 0},enable:function(){this.options.disabled=!1,this.$element.removeClass("editable-disabled"),this.handleEmpty(this.isEmpty),"manual"!==this.options.toggle&&"-1"===this.$element.attr("tabindex")&&this.$element.removeAttr("tabindex")},disable:function(){this.options.disabled=!0,this.hide(),this.$element.addClass("editable-disabled"),this.handleEmpty(this.isEmpty),this.$element.attr("tabindex",-1)},toggleDisabled:function(){this.options.disabled?this.enable():this.disable()},option:function(b,c){return b&&"object"==typeof b?(a.each(b,a.proxy(function(b,c){this.option(a.trim(b),c)},this)),void 0):(this.options[b]=c,"disabled"===b?c?this.disable():this.enable():("value"===b&&this.setValue(c),this.container&&this.container.option(b,c),this.input.option&&this.input.option(b,c),void 0))},handleEmpty:function(b){this.options.display!==!1&&(this.isEmpty=void 0!==b?b:"function"==typeof this.input.isEmpty?this.input.isEmpty(this.$element):""===a.trim(this.$element.html()),this.options.disabled?this.isEmpty&&(this.$element.empty(),this.options.emptyclass&&this.$element.removeClass(this.options.emptyclass)):this.isEmpty?(this.$element.html(this.options.emptytext),this.options.emptyclass&&this.$element.addClass(this.options.emptyclass)):this.options.emptyclass&&this.$element.removeClass(this.options.emptyclass))},show:function(b){if(!this.options.disabled){if(this.container){if(this.container.tip().is(":visible"))return}else{var c=a.extend({},this.options,{value:this.value,input:this.input});this.$element.editableContainer(c),this.$element.on("save.internal",a.proxy(this.save,this)),this.container=this.$element.data("editableContainer")}this.container.show(b)}},hide:function(){this.container&&this.container.hide()},toggle:function(a){this.container&&this.container.tip().is(":visible")?this.hide():this.show(a)},save:function(a,b){if(this.options.unsavedclass){var c=!1;c=c||"function"==typeof this.options.url,c=c||this.options.display===!1,c=c||void 0!==b.response,c=c||this.options.savenochange&&this.input.value2str(this.value)!==this.input.value2str(b.newValue),c?this.$element.removeClass(this.options.unsavedclass):this.$element.addClass(this.options.unsavedclass)}if(this.options.highlight){var d=this.$element,e=d.css("background-color");d.css("background-color",this.options.highlight),setTimeout(function(){"transparent"===e&&(e=""),d.css("background-color",e),d.addClass("editable-bg-transition"),setTimeout(function(){d.removeClass("editable-bg-transition")},1700)},10)}this.setValue(b.newValue,!1,b.response)},validate:function(){return"function"==typeof this.options.validate?this.options.validate.call(this,this.value):void 0},setValue:function(b,c,d){this.value=c?this.input.str2value(b):b,this.container&&this.container.option("value",this.value),a.when(this.render(d)).then(a.proxy(function(){this.handleEmpty()},this))},activate:function(){this.container&&this.container.activate()},destroy:function(){this.disable(),this.container&&this.container.destroy(),this.input.destroy(),"manual"!==this.options.toggle&&(this.$element.removeClass("editable-click"),this.$element.off(this.options.toggle+".editable")),this.$element.off("save.internal"),this.$element.removeClass("editable editable-open editable-disabled"),this.$element.removeData("editable")}},a.fn.editable=function(c){var d={},e=arguments,f="editable";switch(c){case"validate":return this.each(function(){var b,c=a(this),e=c.data(f);e&&(b=e.validate())&&(d[e.options.name]=b)}),d;case"getValue":return 2===arguments.length&&arguments[1]===!0?d=this.eq(0).data(f).value:this.each(function(){var b=a(this),c=b.data(f);c&&void 0!==c.value&&null!==c.value&&(d[c.options.name]=c.input.value2submit(c.value))}),d;case"submit":var g=arguments[1]||{},h=this,i=this.editable("validate");if(a.isEmptyObject(i)){var j={};if(1===h.length){var k=h.data("editable"),l={name:k.options.name||"",value:k.input.value2submit(k.value),pk:"function"==typeof k.options.pk?k.options.pk.call(k.options.scope):k.options.pk};"function"==typeof k.options.params?l=k.options.params.call(k.options.scope,l):(k.options.params=a.fn.editableutils.tryParseJson(k.options.params,!0),a.extend(l,k.options.params)),j={url:k.options.url,data:l,type:"POST"},g.success=g.success||k.options.success,g.error=g.error||k.options.error}else{var m=this.editable("getValue");j={url:g.url,data:m,type:"POST"}}j.success="function"==typeof g.success?function(a){g.success.call(h,a,g)}:a.noop,j.error="function"==typeof g.error?function(){g.error.apply(h,arguments)}:a.noop,g.ajaxOptions&&a.extend(j,g.ajaxOptions),g.data&&a.extend(j.data,g.data),a.ajax(j)}else"function"==typeof g.error&&g.error.call(h,i);return this}return this.each(function(){var d=a(this),g=d.data(f),h="object"==typeof c&&c;return h&&h.selector?(g=new b(this,h),void 0):(g||d.data(f,g=new b(this,h)),"string"==typeof c&&g[c].apply(g,Array.prototype.slice.call(e,1)),void 0)})},a.fn.editable.defaults={type:"text",disabled:!1,toggle:"click",emptytext:"Empty",autotext:"auto",value:null,display:null,emptyclass:"editable-empty",unsavedclass:"editable-unsaved",selector:null,highlight:"#FFFF80"}}(window.jQuery),function(a){"use strict";a.fn.editabletypes={};var b=function(){};b.prototype={init:function(b,c,d){this.type=b,this.options=a.extend({},d,c)},prerender:function(){this.$tpl=a(this.options.tpl),this.$input=this.$tpl,this.$clear=null,this.error=null},render:function(){},value2html:function(b,c){a(c)[this.options.escape?"text":"html"](a.trim(b))},html2value:function(b){return a("<div>").html(b).text()},value2str:function(a){return a},str2value:function(a){return a},value2submit:function(a){return a},value2input:function(a){this.$input.val(a)},input2value:function(){return this.$input.val()},activate:function(){this.$input.is(":visible")&&this.$input.focus()},clear:function(){this.$input.val(null)},escape:function(b){return a("<div>").text(b).html()},autosubmit:function(){},destroy:function(){},setClass:function(){this.options.inputclass&&this.$input.addClass(this.options.inputclass)},setAttr:function(a){void 0!==this.options[a]&&null!==this.options[a]&&this.$input.attr(a,this.options[a])},option:function(a,b){this.options[a]=b}},b.defaults={tpl:"",inputclass:null,escape:!0,scope:null,showbuttons:!0},a.extend(a.fn.editabletypes,{abstractinput:b})}(window.jQuery),function(a){"use strict";var b=function(){};a.fn.editableutils.inherit(b,a.fn.editabletypes.abstractinput),a.extend(b.prototype,{render:function(){var b=a.Deferred();return this.error=null,this.onSourceReady(function(){this.renderList(),b.resolve()},function(){this.error=this.options.sourceError,b.resolve()}),b.promise()},html2value:function(){return null},value2html:function(b,c,d,e){var f=a.Deferred(),g=function(){"function"==typeof d?d.call(c,b,this.sourceData,e):this.value2htmlFinal(b,c),f.resolve()};return null===b?g.call(this):this.onSourceReady(g,function(){f.resolve()}),f.promise()},onSourceReady:function(b,c){var d;if(a.isFunction(this.options.source)?(d=this.options.source.call(this.options.scope),this.sourceData=null):d=this.options.source,this.options.sourceCache&&a.isArray(this.sourceData))return b.call(this),void 0;try{d=a.fn.editableutils.tryParseJson(d,!1)}catch(e){return c.call(this),void 0}if("string"==typeof d){if(this.options.sourceCache){var f,g=d;if(a(document).data(g)||a(document).data(g,{}),f=a(document).data(g),f.loading===!1&&f.sourceData)return this.sourceData=f.sourceData,this.doPrepend(),b.call(this),void 0;if(f.loading===!0)return f.callbacks.push(a.proxy(function(){this.sourceData=f.sourceData,this.doPrepend(),b.call(this)},this)),f.err_callbacks.push(a.proxy(c,this)),void 0;f.loading=!0,f.callbacks=[],f.err_callbacks=[]}var h=a.extend({url:d,type:"get",cache:!1,dataType:"json",success:a.proxy(function(d){f&&(f.loading=!1),this.sourceData=this.makeArray(d),a.isArray(this.sourceData)?(f&&(f.sourceData=this.sourceData,a.each(f.callbacks,function(){this.call()})),this.doPrepend(),b.call(this)):(c.call(this),f&&a.each(f.err_callbacks,function(){this.call()}))},this),error:a.proxy(function(){c.call(this),f&&(f.loading=!1,a.each(f.err_callbacks,function(){this.call()}))},this)},this.options.sourceOptions);a.ajax(h)}else this.sourceData=this.makeArray(d),a.isArray(this.sourceData)?(this.doPrepend(),b.call(this)):c.call(this)},doPrepend:function(){null!==this.options.prepend&&void 0!==this.options.prepend&&(a.isArray(this.prependData)||(a.isFunction(this.options.prepend)&&(this.options.prepend=this.options.prepend.call(this.options.scope)),this.options.prepend=a.fn.editableutils.tryParseJson(this.options.prepend,!0),"string"==typeof this.options.prepend&&(this.options.prepend={"":this.options.prepend}),this.prependData=this.makeArray(this.options.prepend)),a.isArray(this.prependData)&&a.isArray(this.sourceData)&&(this.sourceData=this.prependData.concat(this.sourceData)))},renderList:function(){},value2htmlFinal:function(){},makeArray:function(b){var c,d,e,f,g=[];if(!b||"string"==typeof b)return null;if(a.isArray(b)){f=function(a,b){return d={value:a,text:b},c++>=2?!1:void 0};for(var h=0;h<b.length;h++)e=b[h],"object"==typeof e?(c=0,a.each(e,f),1===c?g.push(d):c>1&&(e.children&&(e.children=this.makeArray(e.children)),g.push(e))):g.push({value:e,text:e})}else a.each(b,function(a,b){g.push({value:a,text:b})});return g},option:function(a,b){this.options[a]=b,"source"===a&&(this.sourceData=null),"prepend"===a&&(this.prependData=null)}}),b.defaults=a.extend({},a.fn.editabletypes.abstractinput.defaults,{source:null,prepend:!1,sourceError:"Error when loading list",sourceCache:!0,sourceOptions:null}),a.fn.editabletypes.list=b}(window.jQuery),function(a){"use strict";var b=function(a){this.init("text",a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.abstractinput),a.extend(b.prototype,{render:function(){this.renderClear(),this.setClass(),this.setAttr("placeholder")},activate:function(){this.$input.is(":visible")&&(this.$input.focus(),a.fn.editableutils.setCursorPosition(this.$input.get(0),this.$input.val().length),this.toggleClear&&this.toggleClear())},renderClear:function(){this.options.clear&&(this.$clear=a('<span class="editable-clear-x"></span>'),this.$input.after(this.$clear).css("padding-right",24).keyup(a.proxy(function(b){if(!~a.inArray(b.keyCode,[40,38,9,13,27])){clearTimeout(this.t);var c=this;this.t=setTimeout(function(){c.toggleClear(b)},100)}},this)).parent().css("position","relative"),this.$clear.click(a.proxy(this.clear,this)))},postrender:function(){},toggleClear:function(){if(this.$clear){var a=this.$input.val().length,b=this.$clear.is(":visible");a&&!b&&this.$clear.show(),!a&&b&&this.$clear.hide()}},clear:function(){this.$clear.hide(),this.$input.val("").focus()}}),b.defaults=a.extend({},a.fn.editabletypes.abstractinput.defaults,{tpl:'<input type="text">',placeholder:null,clear:!0}),a.fn.editabletypes.text=b}(window.jQuery),function(a){"use strict";var b=function(a){this.init("textarea",a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.abstractinput),a.extend(b.prototype,{render:function(){this.setClass(),this.setAttr("placeholder"),this.setAttr("rows"),this.$input.keydown(function(b){b.ctrlKey&&13===b.which&&a(this).closest("form").submit()})},activate:function(){a.fn.editabletypes.text.prototype.activate.call(this)}}),b.defaults=a.extend({},a.fn.editabletypes.abstractinput.defaults,{tpl:"<textarea></textarea>",inputclass:"input-large",placeholder:null,rows:7}),a.fn.editabletypes.textarea=b}(window.jQuery),function(a){"use strict";var b=function(a){this.init("select",a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.list),a.extend(b.prototype,{renderList:function(){this.$input.empty();var b=function(c,d){var e;if(a.isArray(d))for(var f=0;f<d.length;f++)e={},d[f].children?(e.label=d[f].text,c.append(b(a("<optgroup>",e),d[f].children))):(e.value=d[f].value,d[f].disabled&&(e.disabled=!0),c.append(a("<option>",e).text(d[f].text)));return c};b(this.$input,this.sourceData),this.setClass(),this.$input.on("keydown.editable",function(b){13===b.which&&a(this).closest("form").submit()})},value2htmlFinal:function(b,c){var d="",e=a.fn.editableutils.itemsByValue(b,this.sourceData);e.length&&(d=e[0].text),a.fn.editabletypes.abstractinput.prototype.value2html.call(this,d,c)},autosubmit:function(){this.$input.off("keydown.editable").on("change.editable",function(){a(this).closest("form").submit()})}}),b.defaults=a.extend({},a.fn.editabletypes.list.defaults,{tpl:"<select></select>"}),a.fn.editabletypes.select=b}(window.jQuery),function(a){"use strict";var b=function(a){this.init("checklist",a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.list),a.extend(b.prototype,{renderList:function(){var b;if(this.$tpl.empty(),a.isArray(this.sourceData)){for(var c=0;c<this.sourceData.length;c++)b=a("<label>").append(a("<input>",{type:"checkbox",value:this.sourceData[c].value})).append(a("<span>").text(" "+this.sourceData[c].text)),a("<div>").append(b).appendTo(this.$tpl);this.$input=this.$tpl.find('input[type="checkbox"]'),this.setClass()}},value2str:function(b){return a.isArray(b)?b.sort().join(a.trim(this.options.separator)):""},str2value:function(b){var c,d=null;return"string"==typeof b&&b.length?(c=new RegExp("\\s*"+a.trim(this.options.separator)+"\\s*"),d=b.split(c)):d=a.isArray(b)?b:[b],d},value2input:function(b){this.$input.prop("checked",!1),a.isArray(b)&&b.length&&this.$input.each(function(c,d){var e=a(d);a.each(b,function(a,b){e.val()==b&&e.prop("checked",!0)})})},input2value:function(){var b=[];return this.$input.filter(":checked").each(function(c,d){b.push(a(d).val())}),b},value2htmlFinal:function(b,c){var d=[],e=a.fn.editableutils.itemsByValue(b,this.sourceData),f=this.options.escape;e.length?(a.each(e,function(b,c){var e=f?a.fn.editableutils.escape(c.text):c.text;d.push(e)}),a(c).html(d.join("<br>"))):a(c).empty()},activate:function(){this.$input.first().focus()},autosubmit:function(){this.$input.on("keydown",function(b){13===b.which&&a(this).closest("form").submit()})}}),b.defaults=a.extend({},a.fn.editabletypes.list.defaults,{tpl:'<div class="editable-checklist"></div>',inputclass:null,separator:","}),a.fn.editabletypes.checklist=b}(window.jQuery),function(a){"use strict";var b=function(a){this.init("password",a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.text),a.extend(b.prototype,{value2html:function(b,c){b?a(c).text("[hidden]"):a(c).empty()},html2value:function(){return null}}),b.defaults=a.extend({},a.fn.editabletypes.text.defaults,{tpl:'<input type="password">'}),a.fn.editabletypes.password=b}(window.jQuery),function(a){"use strict";var b=function(a){this.init("email",a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.text),b.defaults=a.extend({},a.fn.editabletypes.text.defaults,{tpl:'<input type="email">'}),a.fn.editabletypes.email=b}(window.jQuery),function(a){"use strict";var b=function(a){this.init("url",a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.text),b.defaults=a.extend({},a.fn.editabletypes.text.defaults,{tpl:'<input type="url">'}),a.fn.editabletypes.url=b}(window.jQuery),function(a){"use strict";var b=function(a){this.init("tel",a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.text),b.defaults=a.extend({},a.fn.editabletypes.text.defaults,{tpl:'<input type="tel">'}),a.fn.editabletypes.tel=b}(window.jQuery),function(a){"use strict";var b=function(a){this.init("number",a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.text),a.extend(b.prototype,{render:function(){b.superclass.render.call(this),this.setAttr("min"),this.setAttr("max"),this.setAttr("step")},postrender:function(){this.$clear&&this.$clear.css({right:24})}}),b.defaults=a.extend({},a.fn.editabletypes.text.defaults,{tpl:'<input type="number">',inputclass:"input-mini",min:null,max:null,step:null}),a.fn.editabletypes.number=b}(window.jQuery),function(a){"use strict"; | ||
| 6 | +var b=function(a){this.init("range",a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.number),a.extend(b.prototype,{render:function(){this.$input=this.$tpl.filter("input"),this.setClass(),this.setAttr("min"),this.setAttr("max"),this.setAttr("step"),this.$input.on("input",function(){a(this).siblings("output").text(a(this).val())})},activate:function(){this.$input.focus()}}),b.defaults=a.extend({},a.fn.editabletypes.number.defaults,{tpl:'<input type="range"><output style="width: 30px; display: inline-block"></output>',inputclass:"input-medium"}),a.fn.editabletypes.range=b}(window.jQuery),function(a){"use strict";var b=function(a){this.init("time",a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.abstractinput),a.extend(b.prototype,{render:function(){this.setClass()}}),b.defaults=a.extend({},a.fn.editabletypes.abstractinput.defaults,{tpl:'<input type="time">'}),a.fn.editabletypes.time=b}(window.jQuery),function(a){"use strict";var b=function(c){if(this.init("select2",c,b.defaults),c.select2=c.select2||{},this.sourceData=null,c.placeholder&&(c.select2.placeholder=c.placeholder),!c.select2.tags&&c.source){var d=c.source;a.isFunction(c.source)&&(d=c.source.call(c.scope)),"string"==typeof d?(c.select2.ajax=c.select2.ajax||{},c.select2.ajax.data||(c.select2.ajax.data=function(a){return{query:a}}),c.select2.ajax.results||(c.select2.ajax.results=function(a){return{results:a}}),c.select2.ajax.url=d):(this.sourceData=this.convertSource(d),c.select2.data=this.sourceData)}if(this.options.select2=a.extend({},b.defaults.select2,c.select2),this.isMultiple=this.options.select2.tags||this.options.select2.multiple,this.isRemote="ajax"in this.options.select2,this.idFunc=this.options.select2.id,"function"!=typeof this.idFunc){var e=this.idFunc||"id";this.idFunc=function(a){return a[e]}}this.formatSelection=this.options.select2.formatSelection,"function"!=typeof this.formatSelection&&(this.formatSelection=function(a){return a.text})};a.fn.editableutils.inherit(b,a.fn.editabletypes.abstractinput),a.extend(b.prototype,{render:function(){this.setClass(),this.isRemote&&this.$input.on("select2-loaded",a.proxy(function(a){this.sourceData=a.items.results},this)),this.isMultiple&&this.$input.on("change",function(){a(this).closest("form").parent().triggerHandler("resize")})},value2html:function(c,d){var e,f="",g=this;this.options.select2.tags?e=c:this.sourceData&&(e=a.fn.editableutils.itemsByValue(c,this.sourceData,this.idFunc)),a.isArray(e)?(f=[],a.each(e,function(a,b){f.push(b&&"object"==typeof b?g.formatSelection(b):b)})):e&&(f=g.formatSelection(e)),f=a.isArray(f)?f.join(this.options.viewseparator):f,b.superclass.value2html.call(this,f,d)},html2value:function(a){return this.options.select2.tags?this.str2value(a,this.options.viewseparator):null},value2input:function(b){if(a.isArray(b)&&(b=b.join(this.getSeparator())),this.$input.data("select2")?this.$input.val(b).trigger("change",!0):(this.$input.val(b),this.$input.select2(this.options.select2)),this.isRemote&&!this.isMultiple&&!this.options.select2.initSelection){var c=this.options.select2.id,d=this.options.select2.formatSelection;if(!c&&!d){var e=a(this.options.scope);if(!e.data("editable").isEmpty){var f={id:b,text:e.text()};this.$input.select2("data",f)}}}},input2value:function(){return this.$input.select2("val")},str2value:function(b,c){if("string"!=typeof b||!this.isMultiple)return b;c=c||this.getSeparator();var d,e,f;if(null===b||b.length<1)return null;for(d=b.split(c),e=0,f=d.length;f>e;e+=1)d[e]=a.trim(d[e]);return d},autosubmit:function(){this.$input.on("change",function(b,c){c||a(this).closest("form").submit()})},getSeparator:function(){return this.options.select2.separator||a.fn.select2.defaults.separator},convertSource:function(b){if(a.isArray(b)&&b.length&&void 0!==b[0].value)for(var c=0;c<b.length;c++)void 0!==b[c].value&&(b[c].id=b[c].value,delete b[c].value);return b},destroy:function(){this.$input.data("select2")&&this.$input.select2("destroy")}}),b.defaults=a.extend({},a.fn.editabletypes.abstractinput.defaults,{tpl:'<input type="hidden">',select2:null,placeholder:null,source:null,viewseparator:", "}),a.fn.editabletypes.select2=b}(window.jQuery),function(a){var b=function(b,c){return this.$element=a(b),this.$element.is("input")?(this.options=a.extend({},a.fn.combodate.defaults,c,this.$element.data()),this.init(),void 0):(a.error("Combodate should be applied to INPUT element"),void 0)};b.prototype={constructor:b,init:function(){this.map={day:["D","date"],month:["M","month"],year:["Y","year"],hour:["[Hh]","hours"],minute:["m","minutes"],second:["s","seconds"],ampm:["[Aa]",""]},this.$widget=a('<span class="combodate"></span>').html(this.getTemplate()),this.initCombos(),this.$widget.on("change","select",a.proxy(function(b){this.$element.val(this.getValue()).change(),this.options.smartDays&&(a(b.target).is(".month")||a(b.target).is(".year"))&&this.fillCombo("day")},this)),this.$widget.find("select").css("width","auto"),this.$element.hide().after(this.$widget),this.setValue(this.$element.val()||this.options.value)},getTemplate:function(){var b=this.options.template;return a.each(this.map,function(a,c){c=c[0];var d=new RegExp(c+"+"),e=c.length>1?c.substring(1,2):c;b=b.replace(d,"{"+e+"}")}),b=b.replace(/ /g," "),a.each(this.map,function(a,c){c=c[0];var d=c.length>1?c.substring(1,2):c;b=b.replace("{"+d+"}",'<select class="'+a+'"></select>')}),b},initCombos:function(){for(var a in this.map){var b=this.$widget.find("."+a);this["$"+a]=b.length?b:null,this.fillCombo(a)}},fillCombo:function(a){var b=this["$"+a];if(b){var c="fill"+a.charAt(0).toUpperCase()+a.slice(1),d=this[c](),e=b.val();b.empty();for(var f=0;f<d.length;f++)b.append('<option value="'+d[f][0]+'">'+d[f][1]+"</option>");b.val(e)}},fillCommon:function(a){var b,c=[];if("name"===this.options.firstItem){b=moment.relativeTime||moment.langData()._relativeTime;var d="function"==typeof b[a]?b[a](1,!0,a,!1):b[a];d=d.split(" ").reverse()[0],c.push(["",d])}else"empty"===this.options.firstItem&&c.push(["",""]);return c},fillDay:function(){var a,b,c=this.fillCommon("d"),d=-1!==this.options.template.indexOf("DD"),e=31;if(this.options.smartDays&&this.$month&&this.$year){var f=parseInt(this.$month.val(),10),g=parseInt(this.$year.val(),10);isNaN(f)||isNaN(g)||(e=moment([g,f]).daysInMonth())}for(b=1;e>=b;b++)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillMonth:function(){var a,b,c=this.fillCommon("M"),d=-1!==this.options.template.indexOf("MMMM"),e=-1!==this.options.template.indexOf("MMM"),f=-1!==this.options.template.indexOf("MM");for(b=0;11>=b;b++)a=d?moment().date(1).month(b).format("MMMM"):e?moment().date(1).month(b).format("MMM"):f?this.leadZero(b+1):b+1,c.push([b,a]);return c},fillYear:function(){var a,b,c=[],d=-1!==this.options.template.indexOf("YYYY");for(b=this.options.maxYear;b>=this.options.minYear;b--)a=d?b:(b+"").substring(2),c[this.options.yearDescending?"push":"unshift"]([b,a]);return c=this.fillCommon("y").concat(c)},fillHour:function(){var a,b,c=this.fillCommon("h"),d=-1!==this.options.template.indexOf("h"),e=(-1!==this.options.template.indexOf("H"),-1!==this.options.template.toLowerCase().indexOf("hh")),f=d?1:0,g=d?12:23;for(b=f;g>=b;b++)a=e?this.leadZero(b):b,c.push([b,a]);return c},fillMinute:function(){var a,b,c=this.fillCommon("m"),d=-1!==this.options.template.indexOf("mm");for(b=0;59>=b;b+=this.options.minuteStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillSecond:function(){var a,b,c=this.fillCommon("s"),d=-1!==this.options.template.indexOf("ss");for(b=0;59>=b;b+=this.options.secondStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillAmpm:function(){var a=-1!==this.options.template.indexOf("a"),b=(-1!==this.options.template.indexOf("A"),[["am",a?"am":"AM"],["pm",a?"pm":"PM"]]);return b},getValue:function(b){var c,d={},e=this,f=!1;return a.each(this.map,function(a){if("ampm"!==a){var b="day"===a?1:0;return d[a]=e["$"+a]?parseInt(e["$"+a].val(),10):b,isNaN(d[a])?(f=!0,!1):void 0}}),f?"":(this.$ampm&&(d.hour=12===d.hour?"am"===this.$ampm.val()?0:12:"am"===this.$ampm.val()?d.hour:d.hour+12),c=moment([d.year,d.month,d.day,d.hour,d.minute,d.second]),this.highlight(c),b=void 0===b?this.options.format:b,null===b?c.isValid()?c:null:c.isValid()?c.format(b):"")},setValue:function(b){function c(b,c){var d={};return b.children("option").each(function(b,e){var f,g=a(e).attr("value");""!==g&&(f=Math.abs(g-c),("undefined"==typeof d.distance||f<d.distance)&&(d={value:g,distance:f}))}),d.value}if(b){var d="string"==typeof b?moment(b,this.options.format):moment(b),e=this,f={};d.isValid()&&(a.each(this.map,function(a,b){"ampm"!==a&&(f[a]=d[b[1]]())}),this.$ampm&&(f.hour>=12?(f.ampm="pm",f.hour>12&&(f.hour-=12)):(f.ampm="am",0===f.hour&&(f.hour=12))),a.each(f,function(a,b){e["$"+a]&&("minute"===a&&e.options.minuteStep>1&&e.options.roundTime&&(b=c(e["$"+a],b)),"second"===a&&e.options.secondStep>1&&e.options.roundTime&&(b=c(e["$"+a],b)),e["$"+a].val(b))}),this.options.smartDays&&this.fillCombo("day"),this.$element.val(d.format(this.options.format)).change())}},highlight:function(a){a.isValid()?this.options.errorClass?this.$widget.removeClass(this.options.errorClass):this.$widget.find("select").css("border-color",this.borderColor):this.options.errorClass?this.$widget.addClass(this.options.errorClass):(this.borderColor||(this.borderColor=this.$widget.find("select").css("border-color")),this.$widget.find("select").css("border-color","red"))},leadZero:function(a){return 9>=a?"0"+a:a},destroy:function(){this.$widget.remove(),this.$element.removeData("combodate").show()}},a.fn.combodate=function(c){var d,e=Array.apply(null,arguments);return e.shift(),"getValue"===c&&this.length&&(d=this.eq(0).data("combodate"))?d.getValue.apply(d,e):this.each(function(){var d=a(this),f=d.data("combodate"),g="object"==typeof c&&c;f||d.data("combodate",f=new b(this,g)),"string"==typeof c&&"function"==typeof f[c]&&f[c].apply(f,e)})},a.fn.combodate.defaults={format:"DD-MM-YYYY HH:mm",template:"D / MMM / YYYY H : mm",value:null,minYear:1970,maxYear:2015,yearDescending:!0,minuteStep:5,secondStep:1,firstItem:"empty",errorClass:null,roundTime:!0,smartDays:!1}}(window.jQuery),function(a){"use strict";var b=function(c){this.init("combodate",c,b.defaults),this.options.viewformat||(this.options.viewformat=this.options.format),c.combodate=a.fn.editableutils.tryParseJson(c.combodate,!0),this.options.combodate=a.extend({},b.defaults.combodate,c.combodate,{format:this.options.format,template:this.options.template})};a.fn.editableutils.inherit(b,a.fn.editabletypes.abstractinput),a.extend(b.prototype,{render:function(){this.$input.combodate(this.options.combodate),"bs3"===a.fn.editableform.engine&&this.$input.siblings().find("select").addClass("form-control"),this.options.inputclass&&this.$input.siblings().find("select").addClass(this.options.inputclass)},value2html:function(a,c){var d=a?a.format(this.options.viewformat):"";b.superclass.value2html.call(this,d,c)},html2value:function(a){return a?moment(a,this.options.viewformat):null},value2str:function(a){return a?a.format(this.options.format):""},str2value:function(a){return a?moment(a,this.options.format):null},value2submit:function(a){return this.value2str(a)},value2input:function(a){this.$input.combodate("setValue",a)},input2value:function(){return this.$input.combodate("getValue",null)},activate:function(){this.$input.siblings(".combodate").find("select").eq(0).focus()},autosubmit:function(){}}),b.defaults=a.extend({},a.fn.editabletypes.abstractinput.defaults,{tpl:'<input type="text">',inputclass:null,format:"YYYY-MM-DD",viewformat:null,template:"D / MMM / YYYY",combodate:null}),a.fn.editabletypes.combodate=b}(window.jQuery),function(a){"use strict";if(a.extend(a.fn.editableContainer.Popup.prototype,{containerName:"poshytip",innerCss:"div.tip-inner",initContainer:function(){this.handlePlacement(),a.extend(this.containerOptions,{showOn:"none",content:"",alignTo:"target"}),this.call(this.containerOptions)},show:function(b){this.$element.addClass("editable-open"),b!==!1&&this.closeOthers(this.$element[0]),this.$form=a("<div>"),this.renderForm();var c=a("<label>").text(this.options.title||this.$element.data("title")||this.$element.data("originalTitle")),d=a("<div>").append(c).append(this.$form);this.call("update",d),this.call("show"),this.tip().addClass(this.containerClass),this.$form.data("editableform").input.activate()},innerHide:function(){this.call("hide")},innerDestroy:function(){this.call("destroy")},setPosition:function(){this.container().refresh(!1)},handlePlacement:function(){var b,c,d=0,e=0;switch(this.options.placement){case"top":b="center",c="top",e=5;break;case"right":b="right",c="center",d=10;break;case"bottom":b="center",c="bottom",e=5;break;case"left":b="left",c="center",d=10}a.extend(this.containerOptions,{alignX:b,offsetX:d,alignY:c,offsetY:e})}}),a.fn.editableContainer.defaults=a.extend({},a.fn.editableContainer.defaults,{className:"tip-yellowsimple"}),a.Poshytip){var b=/^url\(["']?([^"'\)]*)["']?\);?$/i,c=/\.png$/i,d=!!window.createPopup&&"undefined"==document.documentElement.currentStyle.minWidth;a.Poshytip.prototype.refresh=function(e){if(!this.disabled){var f;if(e){if(!this.$tip.data("active"))return;f={left:this.$tip.css("left"),top:this.$tip.css("top")}}this.$tip.css({left:0,top:0}).appendTo(document.body),void 0===this.opacity&&(this.opacity=this.$tip.css("opacity"));var g=this.$tip.css("background-image").match(b),h=this.$arrow.css("background-image").match(b);if(g){var i=c.test(g[1]);d&&i?(this.$tip.css("background-image","none"),this.$inner.css({margin:0,border:0,padding:0}),g=i=!1):this.$tip.prepend('<table class="fallback" border="0" cellpadding="0" cellspacing="0"><tr><td class="tip-top tip-bg-image" colspan="2"><span></span></td><td class="tip-right tip-bg-image" rowspan="2"><span></span></td></tr><tr><td class="tip-left tip-bg-image" rowspan="2"><span></span></td><td></td></tr><tr><td class="tip-bottom tip-bg-image" colspan="2"><span></span></td></tr></table>').css({border:0,padding:0,"background-image":"none","background-color":"transparent"}).find(".tip-bg-image").css("background-image",'url("'+g[1]+'")').end().find("td").eq(3).append(this.$inner),i&&!a.support.opacity&&(this.opts.fade=!1)}h&&!a.support.opacity&&(d&&c.test(h[1])&&(h=!1,this.$arrow.css("background-image","none")),this.opts.fade=!1);var j=this.$tip.find("table.fallback");if(d){this.$tip[0].style.width="",j.width("auto").find("td").eq(3).width("auto");var k=this.$tip.width(),l=parseInt(this.$tip.css("min-width"),10),m=parseInt(this.$tip.css("max-width"),10);!isNaN(l)&&l>k?k=l:!isNaN(m)&&k>m&&(k=m),this.$tip.add(j).width(k).eq(0).find("td").eq(3).width("100%")}else j[0]&&j.width("auto").find("td").eq(3).width("auto").end().end().width(document.defaultView&&document.defaultView.getComputedStyle&&parseFloat(document.defaultView.getComputedStyle(this.$tip[0],null).width)||this.$tip.width()).find("td").eq(3).width("100%");if(this.tipOuterW=this.$tip.outerWidth(),this.tipOuterH=this.$tip.outerHeight(),this.calcPos(),h&&this.pos.arrow&&(this.$arrow[0].className="tip-arrow tip-arrow-"+this.pos.arrow,this.$arrow.css("visibility","inherit")),e){this.asyncAnimating=!0;var n=this;this.$tip.css(f).animate({left:this.pos.l,top:this.pos.t},200,function(){n.asyncAnimating=!1})}else this.$tip.css({left:this.pos.l,top:this.pos.t})}}}}(window.jQuery),function(a){"use strict";var b=function(a){this.init("dateui",a,b.defaults),this.initPicker(a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.abstractinput),a.extend(b.prototype,{initPicker:function(b,c){this.options.viewformat||(this.options.viewformat=this.options.format),this.options.viewformat=this.options.viewformat.replace("yyyy","yy"),this.options.format=this.options.format.replace("yyyy","yy"),this.options.datepicker=a.extend({},c.datepicker,b.datepicker,{dateFormat:this.options.viewformat})},render:function(){this.$input.datepicker(this.options.datepicker),this.options.clear&&(this.$clear=a('<a href="#"></a>').html(this.options.clear).click(a.proxy(function(a){a.preventDefault(),a.stopPropagation(),this.clear()},this)),this.$tpl.parent().append(a('<div class="editable-clear">').append(this.$clear)))},value2html:function(c,d){var e=a.datepicker.formatDate(this.options.viewformat,c);b.superclass.value2html.call(this,e,d)},html2value:function(b){if("string"!=typeof b)return b;var c;try{c=a.datepicker.parseDate(this.options.viewformat,b)}catch(d){}return c},value2str:function(b){return a.datepicker.formatDate(this.options.format,b)},str2value:function(b){if("string"!=typeof b)return b;var c;try{c=a.datepicker.parseDate(this.options.format,b)}catch(d){}return c},value2submit:function(a){return this.value2str(a)},value2input:function(a){this.$input.datepicker("setDate",a)},input2value:function(){return this.$input.datepicker("getDate")},activate:function(){},clear:function(){this.$input.datepicker("setDate",null),this.isAutosubmit&&this.submit()},autosubmit:function(){this.isAutosubmit=!0,this.$input.on("mouseup","table.ui-datepicker-calendar a.ui-state-default",a.proxy(this.submit,this))},submit:function(){var a=this.$input.closest("form");setTimeout(function(){a.submit()},200)}}),b.defaults=a.extend({},a.fn.editabletypes.abstractinput.defaults,{tpl:'<div class="editable-date"></div>',inputclass:null,format:"yyyy-mm-dd",viewformat:null,datepicker:{firstDay:0,changeYear:!0,changeMonth:!0,showOtherMonths:!0},clear:"× clear"}),a.fn.editabletypes.dateui=b}(window.jQuery),function(a){"use strict";var b=function(a){this.init("dateuifield",a,b.defaults),this.initPicker(a,b.defaults)};a.fn.editableutils.inherit(b,a.fn.editabletypes.dateui),a.extend(b.prototype,{render:function(){this.$input.datepicker(this.options.datepicker),a.fn.editabletypes.text.prototype.renderClear.call(this)},value2input:function(b){this.$input.val(a.datepicker.formatDate(this.options.viewformat,b))},input2value:function(){return this.html2value(this.$input.val())},activate:function(){a.fn.editabletypes.text.prototype.activate.call(this)},toggleClear:function(){a.fn.editabletypes.text.prototype.toggleClear.call(this)},autosubmit:function(){}}),b.defaults=a.extend({},a.fn.editabletypes.dateui.defaults,{tpl:'<input type="text"/>',inputclass:null,datepicker:{showOn:"button",buttonImage:"http://jqueryui.com/resources/demos/datepicker/images/calendar.gif",buttonImageOnly:!0,firstDay:0,changeYear:!0,changeMonth:!0,showOtherMonths:!0},clear:!1}),a.fn.editabletypes.dateuifield=b}(window.jQuery); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +/*! | ||
| 2 | + * jQuery Migrate - v1.2.1 - 2013-05-08 | ||
| 3 | + * https://github.com/jquery/jquery-migrate | ||
| 4 | + * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT | ||
| 5 | + */ | ||
| 6 | +(function( jQuery, window, undefined ) { | ||
| 7 | +// See http://bugs.jquery.com/ticket/13335 | ||
| 8 | +// "use strict"; | ||
| 9 | + | ||
| 10 | + | ||
| 11 | +var warnedAbout = {}; | ||
| 12 | + | ||
| 13 | +// List of warnings already given; public read only | ||
| 14 | +jQuery.migrateWarnings = []; | ||
| 15 | + | ||
| 16 | +// Set to true to prevent console output; migrateWarnings still maintained | ||
| 17 | +// jQuery.migrateMute = false; | ||
| 18 | + | ||
| 19 | +// Show a message on the console so devs know we're active | ||
| 20 | +if ( !jQuery.migrateMute && window.console && window.console.log ) { | ||
| 21 | + window.console.log("JQMIGRATE: Logging is active"); | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +// Set to false to disable traces that appear with warnings | ||
| 25 | +if ( jQuery.migrateTrace === undefined ) { | ||
| 26 | + jQuery.migrateTrace = true; | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +// Forget any warnings we've already given; public | ||
| 30 | +jQuery.migrateReset = function() { | ||
| 31 | + warnedAbout = {}; | ||
| 32 | + jQuery.migrateWarnings.length = 0; | ||
| 33 | +}; | ||
| 34 | + | ||
| 35 | +function migrateWarn( msg) { | ||
| 36 | + var console = window.console; | ||
| 37 | + if ( !warnedAbout[ msg ] ) { | ||
| 38 | + warnedAbout[ msg ] = true; | ||
| 39 | + jQuery.migrateWarnings.push( msg ); | ||
| 40 | + if ( console && console.warn && !jQuery.migrateMute ) { | ||
| 41 | + console.warn( "JQMIGRATE: " + msg ); | ||
| 42 | + if ( jQuery.migrateTrace && console.trace ) { | ||
| 43 | + console.trace(); | ||
| 44 | + } | ||
| 45 | + } | ||
| 46 | + } | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +function migrateWarnProp( obj, prop, value, msg ) { | ||
| 50 | + if ( Object.defineProperty ) { | ||
| 51 | + // On ES5 browsers (non-oldIE), warn if the code tries to get prop; | ||
| 52 | + // allow property to be overwritten in case some other plugin wants it | ||
| 53 | + try { | ||
| 54 | + Object.defineProperty( obj, prop, { | ||
| 55 | + configurable: true, | ||
| 56 | + enumerable: true, | ||
| 57 | + get: function() { | ||
| 58 | + migrateWarn( msg ); | ||
| 59 | + return value; | ||
| 60 | + }, | ||
| 61 | + set: function( newValue ) { | ||
| 62 | + migrateWarn( msg ); | ||
| 63 | + value = newValue; | ||
| 64 | + } | ||
| 65 | + }); | ||
| 66 | + return; | ||
| 67 | + } catch( err ) { | ||
| 68 | + // IE8 is a dope about Object.defineProperty, can't warn there | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + // Non-ES5 (or broken) browser; just set the property | ||
| 73 | + jQuery._definePropertyBroken = true; | ||
| 74 | + obj[ prop ] = value; | ||
| 75 | +} | ||
| 76 | + | ||
| 77 | +if ( document.compatMode === "BackCompat" ) { | ||
| 78 | + // jQuery has never supported or tested Quirks Mode | ||
| 79 | + migrateWarn( "jQuery is not compatible with Quirks Mode" ); | ||
| 80 | +} | ||
| 81 | + | ||
| 82 | + | ||
| 83 | +var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn, | ||
| 84 | + oldAttr = jQuery.attr, | ||
| 85 | + valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get || | ||
| 86 | + function() { return null; }, | ||
| 87 | + valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set || | ||
| 88 | + function() { return undefined; }, | ||
| 89 | + rnoType = /^(?:input|button)$/i, | ||
| 90 | + rnoAttrNodeType = /^[238]$/, | ||
| 91 | + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, | ||
| 92 | + ruseDefault = /^(?:checked|selected)$/i; | ||
| 93 | + | ||
| 94 | +// jQuery.attrFn | ||
| 95 | +migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" ); | ||
| 96 | + | ||
| 97 | +jQuery.attr = function( elem, name, value, pass ) { | ||
| 98 | + var lowerName = name.toLowerCase(), | ||
| 99 | + nType = elem && elem.nodeType; | ||
| 100 | + | ||
| 101 | + if ( pass ) { | ||
| 102 | + // Since pass is used internally, we only warn for new jQuery | ||
| 103 | + // versions where there isn't a pass arg in the formal params | ||
| 104 | + if ( oldAttr.length < 4 ) { | ||
| 105 | + migrateWarn("jQuery.fn.attr( props, pass ) is deprecated"); | ||
| 106 | + } | ||
| 107 | + if ( elem && !rnoAttrNodeType.test( nType ) && | ||
| 108 | + (attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) { | ||
| 109 | + return jQuery( elem )[ name ]( value ); | ||
| 110 | + } | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + // Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking | ||
| 114 | + // for disconnected elements we don't warn on $( "<button>", { type: "button" } ). | ||
| 115 | + if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) { | ||
| 116 | + migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8"); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + // Restore boolHook for boolean property/attribute synchronization | ||
| 120 | + if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) { | ||
| 121 | + jQuery.attrHooks[ lowerName ] = { | ||
| 122 | + get: function( elem, name ) { | ||
| 123 | + // Align boolean attributes with corresponding properties | ||
| 124 | + // Fall back to attribute presence where some booleans are not supported | ||
| 125 | + var attrNode, | ||
| 126 | + property = jQuery.prop( elem, name ); | ||
| 127 | + return property === true || typeof property !== "boolean" && | ||
| 128 | + ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? | ||
| 129 | + | ||
| 130 | + name.toLowerCase() : | ||
| 131 | + undefined; | ||
| 132 | + }, | ||
| 133 | + set: function( elem, value, name ) { | ||
| 134 | + var propName; | ||
| 135 | + if ( value === false ) { | ||
| 136 | + // Remove boolean attributes when set to false | ||
| 137 | + jQuery.removeAttr( elem, name ); | ||
| 138 | + } else { | ||
| 139 | + // value is true since we know at this point it's type boolean and not false | ||
| 140 | + // Set boolean attributes to the same name and set the DOM property | ||
| 141 | + propName = jQuery.propFix[ name ] || name; | ||
| 142 | + if ( propName in elem ) { | ||
| 143 | + // Only set the IDL specifically if it already exists on the element | ||
| 144 | + elem[ propName ] = true; | ||
| 145 | + } | ||
| 146 | + | ||
| 147 | + elem.setAttribute( name, name.toLowerCase() ); | ||
| 148 | + } | ||
| 149 | + return name; | ||
| 150 | + } | ||
| 151 | + }; | ||
| 152 | + | ||
| 153 | + // Warn only for attributes that can remain distinct from their properties post-1.9 | ||
| 154 | + if ( ruseDefault.test( lowerName ) ) { | ||
| 155 | + migrateWarn( "jQuery.fn.attr('" + lowerName + "') may use property instead of attribute" ); | ||
| 156 | + } | ||
| 157 | + } | ||
| 158 | + | ||
| 159 | + return oldAttr.call( jQuery, elem, name, value ); | ||
| 160 | +}; | ||
| 161 | + | ||
| 162 | +// attrHooks: value | ||
| 163 | +jQuery.attrHooks.value = { | ||
| 164 | + get: function( elem, name ) { | ||
| 165 | + var nodeName = ( elem.nodeName || "" ).toLowerCase(); | ||
| 166 | + if ( nodeName === "button" ) { | ||
| 167 | + return valueAttrGet.apply( this, arguments ); | ||
| 168 | + } | ||
| 169 | + if ( nodeName !== "input" && nodeName !== "option" ) { | ||
| 170 | + migrateWarn("jQuery.fn.attr('value') no longer gets properties"); | ||
| 171 | + } | ||
| 172 | + return name in elem ? | ||
| 173 | + elem.value : | ||
| 174 | + null; | ||
| 175 | + }, | ||
| 176 | + set: function( elem, value ) { | ||
| 177 | + var nodeName = ( elem.nodeName || "" ).toLowerCase(); | ||
| 178 | + if ( nodeName === "button" ) { | ||
| 179 | + return valueAttrSet.apply( this, arguments ); | ||
| 180 | + } | ||
| 181 | + if ( nodeName !== "input" && nodeName !== "option" ) { | ||
| 182 | + migrateWarn("jQuery.fn.attr('value', val) no longer sets properties"); | ||
| 183 | + } | ||
| 184 | + // Does not return so that setAttribute is also used | ||
| 185 | + elem.value = value; | ||
| 186 | + } | ||
| 187 | +}; | ||
| 188 | + | ||
| 189 | + | ||
| 190 | +var matched, browser, | ||
| 191 | + oldInit = jQuery.fn.init, | ||
| 192 | + oldParseJSON = jQuery.parseJSON, | ||
| 193 | + // Note: XSS check is done below after string is trimmed | ||
| 194 | + rquickExpr = /^([^<]*)(<[\w\W]+>)([^>]*)$/; | ||
| 195 | + | ||
| 196 | +// $(html) "looks like html" rule change | ||
| 197 | +jQuery.fn.init = function( selector, context, rootjQuery ) { | ||
| 198 | + var match; | ||
| 199 | + | ||
| 200 | + if ( selector && typeof selector === "string" && !jQuery.isPlainObject( context ) && | ||
| 201 | + (match = rquickExpr.exec( jQuery.trim( selector ) )) && match[ 0 ] ) { | ||
| 202 | + // This is an HTML string according to the "old" rules; is it still? | ||
| 203 | + if ( selector.charAt( 0 ) !== "<" ) { | ||
| 204 | + migrateWarn("$(html) HTML strings must start with '<' character"); | ||
| 205 | + } | ||
| 206 | + if ( match[ 3 ] ) { | ||
| 207 | + migrateWarn("$(html) HTML text after last tag is ignored"); | ||
| 208 | + } | ||
| 209 | + // Consistently reject any HTML-like string starting with a hash (#9521) | ||
| 210 | + // Note that this may break jQuery 1.6.x code that otherwise would work. | ||
| 211 | + if ( match[ 0 ].charAt( 0 ) === "#" ) { | ||
| 212 | + migrateWarn("HTML string cannot start with a '#' character"); | ||
| 213 | + jQuery.error("JQMIGRATE: Invalid selector string (XSS)"); | ||
| 214 | + } | ||
| 215 | + // Now process using loose rules; let pre-1.8 play too | ||
| 216 | + if ( context && context.context ) { | ||
| 217 | + // jQuery object as context; parseHTML expects a DOM object | ||
| 218 | + context = context.context; | ||
| 219 | + } | ||
| 220 | + if ( jQuery.parseHTML ) { | ||
| 221 | + return oldInit.call( this, jQuery.parseHTML( match[ 2 ], context, true ), | ||
| 222 | + context, rootjQuery ); | ||
| 223 | + } | ||
| 224 | + } | ||
| 225 | + return oldInit.apply( this, arguments ); | ||
| 226 | +}; | ||
| 227 | +jQuery.fn.init.prototype = jQuery.fn; | ||
| 228 | + | ||
| 229 | +// Let $.parseJSON(falsy_value) return null | ||
| 230 | +jQuery.parseJSON = function( json ) { | ||
| 231 | + if ( !json && json !== null ) { | ||
| 232 | + migrateWarn("jQuery.parseJSON requires a valid JSON string"); | ||
| 233 | + return null; | ||
| 234 | + } | ||
| 235 | + return oldParseJSON.apply( this, arguments ); | ||
| 236 | +}; | ||
| 237 | + | ||
| 238 | +jQuery.uaMatch = function( ua ) { | ||
| 239 | + ua = ua.toLowerCase(); | ||
| 240 | + | ||
| 241 | + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || | ||
| 242 | + /(webkit)[ \/]([\w.]+)/.exec( ua ) || | ||
| 243 | + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || | ||
| 244 | + /(msie) ([\w.]+)/.exec( ua ) || | ||
| 245 | + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || | ||
| 246 | + []; | ||
| 247 | + | ||
| 248 | + return { | ||
| 249 | + browser: match[ 1 ] || "", | ||
| 250 | + version: match[ 2 ] || "0" | ||
| 251 | + }; | ||
| 252 | +}; | ||
| 253 | + | ||
| 254 | +// Don't clobber any existing jQuery.browser in case it's different | ||
| 255 | +if ( !jQuery.browser ) { | ||
| 256 | + matched = jQuery.uaMatch( navigator.userAgent ); | ||
| 257 | + browser = {}; | ||
| 258 | + | ||
| 259 | + if ( matched.browser ) { | ||
| 260 | + browser[ matched.browser ] = true; | ||
| 261 | + browser.version = matched.version; | ||
| 262 | + } | ||
| 263 | + | ||
| 264 | + // Chrome is Webkit, but Webkit is also Safari. | ||
| 265 | + if ( browser.chrome ) { | ||
| 266 | + browser.webkit = true; | ||
| 267 | + } else if ( browser.webkit ) { | ||
| 268 | + browser.safari = true; | ||
| 269 | + } | ||
| 270 | + | ||
| 271 | + jQuery.browser = browser; | ||
| 272 | +} | ||
| 273 | + | ||
| 274 | +// Warn if the code tries to get jQuery.browser | ||
| 275 | +migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" ); | ||
| 276 | + | ||
| 277 | +jQuery.sub = function() { | ||
| 278 | + function jQuerySub( selector, context ) { | ||
| 279 | + return new jQuerySub.fn.init( selector, context ); | ||
| 280 | + } | ||
| 281 | + jQuery.extend( true, jQuerySub, this ); | ||
| 282 | + jQuerySub.superclass = this; | ||
| 283 | + jQuerySub.fn = jQuerySub.prototype = this(); | ||
| 284 | + jQuerySub.fn.constructor = jQuerySub; | ||
| 285 | + jQuerySub.sub = this.sub; | ||
| 286 | + jQuerySub.fn.init = function init( selector, context ) { | ||
| 287 | + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { | ||
| 288 | + context = jQuerySub( context ); | ||
| 289 | + } | ||
| 290 | + | ||
| 291 | + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); | ||
| 292 | + }; | ||
| 293 | + jQuerySub.fn.init.prototype = jQuerySub.fn; | ||
| 294 | + var rootjQuerySub = jQuerySub(document); | ||
| 295 | + migrateWarn( "jQuery.sub() is deprecated" ); | ||
| 296 | + return jQuerySub; | ||
| 297 | +}; | ||
| 298 | + | ||
| 299 | + | ||
| 300 | +// Ensure that $.ajax gets the new parseJSON defined in core.js | ||
| 301 | +jQuery.ajaxSetup({ | ||
| 302 | + converters: { | ||
| 303 | + "text json": jQuery.parseJSON | ||
| 304 | + } | ||
| 305 | +}); | ||
| 306 | + | ||
| 307 | + | ||
| 308 | +var oldFnData = jQuery.fn.data; | ||
| 309 | + | ||
| 310 | +jQuery.fn.data = function( name ) { | ||
| 311 | + var ret, evt, | ||
| 312 | + elem = this[0]; | ||
| 313 | + | ||
| 314 | + // Handles 1.7 which has this behavior and 1.8 which doesn't | ||
| 315 | + if ( elem && name === "events" && arguments.length === 1 ) { | ||
| 316 | + ret = jQuery.data( elem, name ); | ||
| 317 | + evt = jQuery._data( elem, name ); | ||
| 318 | + if ( ( ret === undefined || ret === evt ) && evt !== undefined ) { | ||
| 319 | + migrateWarn("Use of jQuery.fn.data('events') is deprecated"); | ||
| 320 | + return evt; | ||
| 321 | + } | ||
| 322 | + } | ||
| 323 | + return oldFnData.apply( this, arguments ); | ||
| 324 | +}; | ||
| 325 | + | ||
| 326 | + | ||
| 327 | +var rscriptType = /\/(java|ecma)script/i, | ||
| 328 | + oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack; | ||
| 329 | + | ||
| 330 | +jQuery.fn.andSelf = function() { | ||
| 331 | + migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"); | ||
| 332 | + return oldSelf.apply( this, arguments ); | ||
| 333 | +}; | ||
| 334 | + | ||
| 335 | +// Since jQuery.clean is used internally on older versions, we only shim if it's missing | ||
| 336 | +if ( !jQuery.clean ) { | ||
| 337 | + jQuery.clean = function( elems, context, fragment, scripts ) { | ||
| 338 | + // Set context per 1.8 logic | ||
| 339 | + context = context || document; | ||
| 340 | + context = !context.nodeType && context[0] || context; | ||
| 341 | + context = context.ownerDocument || context; | ||
| 342 | + | ||
| 343 | + migrateWarn("jQuery.clean() is deprecated"); | ||
| 344 | + | ||
| 345 | + var i, elem, handleScript, jsTags, | ||
| 346 | + ret = []; | ||
| 347 | + | ||
| 348 | + jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes ); | ||
| 349 | + | ||
| 350 | + // Complex logic lifted directly from jQuery 1.8 | ||
| 351 | + if ( fragment ) { | ||
| 352 | + // Special handling of each script element | ||
| 353 | + handleScript = function( elem ) { | ||
| 354 | + // Check if we consider it executable | ||
| 355 | + if ( !elem.type || rscriptType.test( elem.type ) ) { | ||
| 356 | + // Detach the script and store it in the scripts array (if provided) or the fragment | ||
| 357 | + // Return truthy to indicate that it has been handled | ||
| 358 | + return scripts ? | ||
| 359 | + scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : | ||
| 360 | + fragment.appendChild( elem ); | ||
| 361 | + } | ||
| 362 | + }; | ||
| 363 | + | ||
| 364 | + for ( i = 0; (elem = ret[i]) != null; i++ ) { | ||
| 365 | + // Check if we're done after handling an executable script | ||
| 366 | + if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { | ||
| 367 | + // Append to fragment and handle embedded scripts | ||
| 368 | + fragment.appendChild( elem ); | ||
| 369 | + if ( typeof elem.getElementsByTagName !== "undefined" ) { | ||
| 370 | + // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration | ||
| 371 | + jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); | ||
| 372 | + | ||
| 373 | + // Splice the scripts into ret after their former ancestor and advance our index beyond them | ||
| 374 | + ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); | ||
| 375 | + i += jsTags.length; | ||
| 376 | + } | ||
| 377 | + } | ||
| 378 | + } | ||
| 379 | + } | ||
| 380 | + | ||
| 381 | + return ret; | ||
| 382 | + }; | ||
| 383 | +} | ||
| 384 | + | ||
| 385 | +var eventAdd = jQuery.event.add, | ||
| 386 | + eventRemove = jQuery.event.remove, | ||
| 387 | + eventTrigger = jQuery.event.trigger, | ||
| 388 | + oldToggle = jQuery.fn.toggle, | ||
| 389 | + oldLive = jQuery.fn.live, | ||
| 390 | + oldDie = jQuery.fn.die, | ||
| 391 | + ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess", | ||
| 392 | + rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ), | ||
| 393 | + rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, | ||
| 394 | + hoverHack = function( events ) { | ||
| 395 | + if ( typeof( events ) !== "string" || jQuery.event.special.hover ) { | ||
| 396 | + return events; | ||
| 397 | + } | ||
| 398 | + if ( rhoverHack.test( events ) ) { | ||
| 399 | + migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"); | ||
| 400 | + } | ||
| 401 | + return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); | ||
| 402 | + }; | ||
| 403 | + | ||
| 404 | +// Event props removed in 1.9, put them back if needed; no practical way to warn them | ||
| 405 | +if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) { | ||
| 406 | + jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" ); | ||
| 407 | +} | ||
| 408 | + | ||
| 409 | +// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7 | ||
| 410 | +if ( jQuery.event.dispatch ) { | ||
| 411 | + migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" ); | ||
| 412 | +} | ||
| 413 | + | ||
| 414 | +// Support for 'hover' pseudo-event and ajax event warnings | ||
| 415 | +jQuery.event.add = function( elem, types, handler, data, selector ){ | ||
| 416 | + if ( elem !== document && rajaxEvent.test( types ) ) { | ||
| 417 | + migrateWarn( "AJAX events should be attached to document: " + types ); | ||
| 418 | + } | ||
| 419 | + eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector ); | ||
| 420 | +}; | ||
| 421 | +jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){ | ||
| 422 | + eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes ); | ||
| 423 | +}; | ||
| 424 | + | ||
| 425 | +jQuery.fn.error = function() { | ||
| 426 | + var args = Array.prototype.slice.call( arguments, 0); | ||
| 427 | + migrateWarn("jQuery.fn.error() is deprecated"); | ||
| 428 | + args.splice( 0, 0, "error" ); | ||
| 429 | + if ( arguments.length ) { | ||
| 430 | + return this.bind.apply( this, args ); | ||
| 431 | + } | ||
| 432 | + // error event should not bubble to window, although it does pre-1.7 | ||
| 433 | + this.triggerHandler.apply( this, args ); | ||
| 434 | + return this; | ||
| 435 | +}; | ||
| 436 | + | ||
| 437 | +jQuery.fn.toggle = function( fn, fn2 ) { | ||
| 438 | + | ||
| 439 | + // Don't mess with animation or css toggles | ||
| 440 | + if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) { | ||
| 441 | + return oldToggle.apply( this, arguments ); | ||
| 442 | + } | ||
| 443 | + migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated"); | ||
| 444 | + | ||
| 445 | + // Save reference to arguments for access in closure | ||
| 446 | + var args = arguments, | ||
| 447 | + guid = fn.guid || jQuery.guid++, | ||
| 448 | + i = 0, | ||
| 449 | + toggler = function( event ) { | ||
| 450 | + // Figure out which function to execute | ||
| 451 | + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; | ||
| 452 | + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); | ||
| 453 | + | ||
| 454 | + // Make sure that clicks stop | ||
| 455 | + event.preventDefault(); | ||
| 456 | + | ||
| 457 | + // and execute the function | ||
| 458 | + return args[ lastToggle ].apply( this, arguments ) || false; | ||
| 459 | + }; | ||
| 460 | + | ||
| 461 | + // link all the functions, so any of them can unbind this click handler | ||
| 462 | + toggler.guid = guid; | ||
| 463 | + while ( i < args.length ) { | ||
| 464 | + args[ i++ ].guid = guid; | ||
| 465 | + } | ||
| 466 | + | ||
| 467 | + return this.click( toggler ); | ||
| 468 | +}; | ||
| 469 | + | ||
| 470 | +jQuery.fn.live = function( types, data, fn ) { | ||
| 471 | + migrateWarn("jQuery.fn.live() is deprecated"); | ||
| 472 | + if ( oldLive ) { | ||
| 473 | + return oldLive.apply( this, arguments ); | ||
| 474 | + } | ||
| 475 | + jQuery( this.context ).on( types, this.selector, data, fn ); | ||
| 476 | + return this; | ||
| 477 | +}; | ||
| 478 | + | ||
| 479 | +jQuery.fn.die = function( types, fn ) { | ||
| 480 | + migrateWarn("jQuery.fn.die() is deprecated"); | ||
| 481 | + if ( oldDie ) { | ||
| 482 | + return oldDie.apply( this, arguments ); | ||
| 483 | + } | ||
| 484 | + jQuery( this.context ).off( types, this.selector || "**", fn ); | ||
| 485 | + return this; | ||
| 486 | +}; | ||
| 487 | + | ||
| 488 | +// Turn global events into document-triggered events | ||
| 489 | +jQuery.event.trigger = function( event, data, elem, onlyHandlers ){ | ||
| 490 | + if ( !elem && !rajaxEvent.test( event ) ) { | ||
| 491 | + migrateWarn( "Global events are undocumented and deprecated" ); | ||
| 492 | + } | ||
| 493 | + return eventTrigger.call( this, event, data, elem || document, onlyHandlers ); | ||
| 494 | +}; | ||
| 495 | +jQuery.each( ajaxEvents.split("|"), | ||
| 496 | + function( _, name ) { | ||
| 497 | + jQuery.event.special[ name ] = { | ||
| 498 | + setup: function() { | ||
| 499 | + var elem = this; | ||
| 500 | + | ||
| 501 | + // The document needs no shimming; must be !== for oldIE | ||
| 502 | + if ( elem !== document ) { | ||
| 503 | + jQuery.event.add( document, name + "." + jQuery.guid, function() { | ||
| 504 | + jQuery.event.trigger( name, null, elem, true ); | ||
| 505 | + }); | ||
| 506 | + jQuery._data( this, name, jQuery.guid++ ); | ||
| 507 | + } | ||
| 508 | + return false; | ||
| 509 | + }, | ||
| 510 | + teardown: function() { | ||
| 511 | + if ( this !== document ) { | ||
| 512 | + jQuery.event.remove( document, name + "." + jQuery._data( this, name ) ); | ||
| 513 | + } | ||
| 514 | + return false; | ||
| 515 | + } | ||
| 516 | + }; | ||
| 517 | + } | ||
| 518 | +); | ||
| 519 | + | ||
| 520 | + | ||
| 521 | +})( jQuery, window ); |
| 1 | +/* | ||
| 2 | + * Table styles | ||
| 3 | + */ | ||
| 4 | +table.dataTable { | ||
| 5 | + width: 100%; | ||
| 6 | + margin: 0 auto; | ||
| 7 | + clear: both; | ||
| 8 | + border-collapse: separate; | ||
| 9 | + border-spacing: 0; | ||
| 10 | + /* | ||
| 11 | + * Header and footer styles | ||
| 12 | + */ | ||
| 13 | + /* | ||
| 14 | + * Body styles | ||
| 15 | + */ | ||
| 16 | +} | ||
| 17 | +table.dataTable thead th, | ||
| 18 | +table.dataTable tfoot th { | ||
| 19 | + font-weight: bold; | ||
| 20 | +} | ||
| 21 | +table.dataTable thead th, | ||
| 22 | +table.dataTable thead td { | ||
| 23 | + padding: 10px 18px; | ||
| 24 | + border-bottom: 1px solid #111111; | ||
| 25 | +} | ||
| 26 | +table.dataTable thead th:active, | ||
| 27 | +table.dataTable thead td:active { | ||
| 28 | + outline: none; | ||
| 29 | +} | ||
| 30 | +table.dataTable tfoot th, | ||
| 31 | +table.dataTable tfoot td { | ||
| 32 | + padding: 10px 18px 6px 18px; | ||
| 33 | + border-top: 1px solid #111111; | ||
| 34 | +} | ||
| 35 | +table.dataTable thead .sorting_asc, | ||
| 36 | +table.dataTable thead .sorting_desc, | ||
| 37 | +table.dataTable thead .sorting { | ||
| 38 | + cursor: pointer; | ||
| 39 | + *cursor: hand; | ||
| 40 | +} | ||
| 41 | +table.dataTable thead .sorting { | ||
| 42 | + background: url("../images/sort_both.png") no-repeat center right; | ||
| 43 | +} | ||
| 44 | +table.dataTable thead .sorting_asc { | ||
| 45 | + background: url("../images/sort_asc.png") no-repeat center right; | ||
| 46 | +} | ||
| 47 | +table.dataTable thead .sorting_desc { | ||
| 48 | + background: url("../images/sort_desc.png") no-repeat center right; | ||
| 49 | +} | ||
| 50 | +table.dataTable thead .sorting_asc_disabled { | ||
| 51 | + background: url("../images/sort_asc_disabled.png") no-repeat center right; | ||
| 52 | +} | ||
| 53 | +table.dataTable thead .sorting_desc_disabled { | ||
| 54 | + background: url("../images/sort_desc_disabled.png") no-repeat center right; | ||
| 55 | +} | ||
| 56 | +table.dataTable tbody tr { | ||
| 57 | + background-color: white; | ||
| 58 | +} | ||
| 59 | +table.dataTable tbody tr.selected { | ||
| 60 | + background-color: #b0bed9; | ||
| 61 | +} | ||
| 62 | +table.dataTable tbody th, | ||
| 63 | +table.dataTable tbody td { | ||
| 64 | + padding: 8px 10px; | ||
| 65 | +} | ||
| 66 | +table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { | ||
| 67 | + border-top: 1px solid #dddddd; | ||
| 68 | +} | ||
| 69 | +table.dataTable.row-border tbody tr:first-child th, | ||
| 70 | +table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, | ||
| 71 | +table.dataTable.display tbody tr:first-child td { | ||
| 72 | + border-top: none; | ||
| 73 | +} | ||
| 74 | +table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { | ||
| 75 | + border-top: 1px solid #dddddd; | ||
| 76 | + border-right: 1px solid #dddddd; | ||
| 77 | +} | ||
| 78 | +table.dataTable.cell-border tbody tr th:first-child, | ||
| 79 | +table.dataTable.cell-border tbody tr td:first-child { | ||
| 80 | + border-left: 1px solid #dddddd; | ||
| 81 | +} | ||
| 82 | +table.dataTable.cell-border tbody tr:first-child th, | ||
| 83 | +table.dataTable.cell-border tbody tr:first-child td { | ||
| 84 | + border-top: none; | ||
| 85 | +} | ||
| 86 | +table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { | ||
| 87 | + background-color: #f9f9f9; | ||
| 88 | +} | ||
| 89 | +table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { | ||
| 90 | + background-color: #abb9d3; | ||
| 91 | +} | ||
| 92 | +table.dataTable.hover tbody tr:hover, | ||
| 93 | +table.dataTable.hover tbody tr.odd:hover, | ||
| 94 | +table.dataTable.hover tbody tr.even:hover, table.dataTable.display tbody tr:hover, | ||
| 95 | +table.dataTable.display tbody tr.odd:hover, | ||
| 96 | +table.dataTable.display tbody tr.even:hover { | ||
| 97 | + background-color: whitesmoke; | ||
| 98 | +} | ||
| 99 | +table.dataTable.hover tbody tr:hover.selected, | ||
| 100 | +table.dataTable.hover tbody tr.odd:hover.selected, | ||
| 101 | +table.dataTable.hover tbody tr.even:hover.selected, table.dataTable.display tbody tr:hover.selected, | ||
| 102 | +table.dataTable.display tbody tr.odd:hover.selected, | ||
| 103 | +table.dataTable.display tbody tr.even:hover.selected { | ||
| 104 | + background-color: #a9b7d1; | ||
| 105 | +} | ||
| 106 | +table.dataTable.order-column tbody tr > .sorting_1, | ||
| 107 | +table.dataTable.order-column tbody tr > .sorting_2, | ||
| 108 | +table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, | ||
| 109 | +table.dataTable.display tbody tr > .sorting_2, | ||
| 110 | +table.dataTable.display tbody tr > .sorting_3 { | ||
| 111 | + background-color: #f9f9f9; | ||
| 112 | +} | ||
| 113 | +table.dataTable.order-column tbody tr.selected > .sorting_1, | ||
| 114 | +table.dataTable.order-column tbody tr.selected > .sorting_2, | ||
| 115 | +table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, | ||
| 116 | +table.dataTable.display tbody tr.selected > .sorting_2, | ||
| 117 | +table.dataTable.display tbody tr.selected > .sorting_3 { | ||
| 118 | + background-color: #acbad4; | ||
| 119 | +} | ||
| 120 | +table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { | ||
| 121 | + background-color: #f1f1f1; | ||
| 122 | +} | ||
| 123 | +table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { | ||
| 124 | + background-color: #f3f3f3; | ||
| 125 | +} | ||
| 126 | +table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { | ||
| 127 | + background-color: whitesmoke; | ||
| 128 | +} | ||
| 129 | +table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { | ||
| 130 | + background-color: #a6b3cd; | ||
| 131 | +} | ||
| 132 | +table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { | ||
| 133 | + background-color: #a7b5ce; | ||
| 134 | +} | ||
| 135 | +table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { | ||
| 136 | + background-color: #a9b6d0; | ||
| 137 | +} | ||
| 138 | +table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { | ||
| 139 | + background-color: #f9f9f9; | ||
| 140 | +} | ||
| 141 | +table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { | ||
| 142 | + background-color: #fbfbfb; | ||
| 143 | +} | ||
| 144 | +table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { | ||
| 145 | + background-color: #fdfdfd; | ||
| 146 | +} | ||
| 147 | +table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { | ||
| 148 | + background-color: #acbad4; | ||
| 149 | +} | ||
| 150 | +table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { | ||
| 151 | + background-color: #adbbd6; | ||
| 152 | +} | ||
| 153 | +table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { | ||
| 154 | + background-color: #afbdd8; | ||
| 155 | +} | ||
| 156 | +table.dataTable.display tbody tr:hover > .sorting_1, | ||
| 157 | +table.dataTable.display tbody tr.odd:hover > .sorting_1, | ||
| 158 | +table.dataTable.display tbody tr.even:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1, | ||
| 159 | +table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_1, | ||
| 160 | +table.dataTable.order-column.hover tbody tr.even:hover > .sorting_1 { | ||
| 161 | + background-color: #eaeaea; | ||
| 162 | +} | ||
| 163 | +table.dataTable.display tbody tr:hover > .sorting_2, | ||
| 164 | +table.dataTable.display tbody tr.odd:hover > .sorting_2, | ||
| 165 | +table.dataTable.display tbody tr.even:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2, | ||
| 166 | +table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_2, | ||
| 167 | +table.dataTable.order-column.hover tbody tr.even:hover > .sorting_2 { | ||
| 168 | + background-color: #ebebeb; | ||
| 169 | +} | ||
| 170 | +table.dataTable.display tbody tr:hover > .sorting_3, | ||
| 171 | +table.dataTable.display tbody tr.odd:hover > .sorting_3, | ||
| 172 | +table.dataTable.display tbody tr.even:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3, | ||
| 173 | +table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_3, | ||
| 174 | +table.dataTable.order-column.hover tbody tr.even:hover > .sorting_3 { | ||
| 175 | + background-color: #eeeeee; | ||
| 176 | +} | ||
| 177 | +table.dataTable.display tbody tr:hover.selected > .sorting_1, | ||
| 178 | +table.dataTable.display tbody tr.odd:hover.selected > .sorting_1, | ||
| 179 | +table.dataTable.display tbody tr.even:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1, | ||
| 180 | +table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_1, | ||
| 181 | +table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_1 { | ||
| 182 | + background-color: #a1aec7; | ||
| 183 | +} | ||
| 184 | +table.dataTable.display tbody tr:hover.selected > .sorting_2, | ||
| 185 | +table.dataTable.display tbody tr.odd:hover.selected > .sorting_2, | ||
| 186 | +table.dataTable.display tbody tr.even:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2, | ||
| 187 | +table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_2, | ||
| 188 | +table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_2 { | ||
| 189 | + background-color: #a2afc8; | ||
| 190 | +} | ||
| 191 | +table.dataTable.display tbody tr:hover.selected > .sorting_3, | ||
| 192 | +table.dataTable.display tbody tr.odd:hover.selected > .sorting_3, | ||
| 193 | +table.dataTable.display tbody tr.even:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3, | ||
| 194 | +table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_3, | ||
| 195 | +table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_3 { | ||
| 196 | + background-color: #a4b2cb; | ||
| 197 | +} | ||
| 198 | +table.dataTable.no-footer { | ||
| 199 | + border-bottom: 1px solid #111111; | ||
| 200 | +} | ||
| 201 | +table.dataTable.nowrap th, table.dataTable.nowrap td { | ||
| 202 | + white-space: nowrap; | ||
| 203 | +} | ||
| 204 | +table.dataTable.compact thead th, | ||
| 205 | +table.dataTable.compact thead td { | ||
| 206 | + padding: 5px 9px; | ||
| 207 | +} | ||
| 208 | +table.dataTable.compact tfoot th, | ||
| 209 | +table.dataTable.compact tfoot td { | ||
| 210 | + padding: 5px 9px 3px 9px; | ||
| 211 | +} | ||
| 212 | +table.dataTable.compact tbody th, | ||
| 213 | +table.dataTable.compact tbody td { | ||
| 214 | + padding: 4px 5px; | ||
| 215 | +} | ||
| 216 | +table.dataTable th.dt-left, | ||
| 217 | +table.dataTable td.dt-left { | ||
| 218 | + text-align: left; | ||
| 219 | +} | ||
| 220 | +table.dataTable th.dt-center, | ||
| 221 | +table.dataTable td.dt-center, | ||
| 222 | +table.dataTable td.dataTables_empty { | ||
| 223 | + text-align: center; | ||
| 224 | +} | ||
| 225 | +table.dataTable th.dt-right, | ||
| 226 | +table.dataTable td.dt-right { | ||
| 227 | + text-align: right; | ||
| 228 | +} | ||
| 229 | +table.dataTable th.dt-justify, | ||
| 230 | +table.dataTable td.dt-justify { | ||
| 231 | + text-align: justify; | ||
| 232 | +} | ||
| 233 | +table.dataTable th.dt-nowrap, | ||
| 234 | +table.dataTable td.dt-nowrap { | ||
| 235 | + white-space: nowrap; | ||
| 236 | +} | ||
| 237 | +table.dataTable thead th.dt-head-left, | ||
| 238 | +table.dataTable thead td.dt-head-left, | ||
| 239 | +table.dataTable tfoot th.dt-head-left, | ||
| 240 | +table.dataTable tfoot td.dt-head-left { | ||
| 241 | + text-align: left; | ||
| 242 | +} | ||
| 243 | +table.dataTable thead th.dt-head-center, | ||
| 244 | +table.dataTable thead td.dt-head-center, | ||
| 245 | +table.dataTable tfoot th.dt-head-center, | ||
| 246 | +table.dataTable tfoot td.dt-head-center { | ||
| 247 | + text-align: center; | ||
| 248 | +} | ||
| 249 | +table.dataTable thead th.dt-head-right, | ||
| 250 | +table.dataTable thead td.dt-head-right, | ||
| 251 | +table.dataTable tfoot th.dt-head-right, | ||
| 252 | +table.dataTable tfoot td.dt-head-right { | ||
| 253 | + text-align: right; | ||
| 254 | +} | ||
| 255 | +table.dataTable thead th.dt-head-justify, | ||
| 256 | +table.dataTable thead td.dt-head-justify, | ||
| 257 | +table.dataTable tfoot th.dt-head-justify, | ||
| 258 | +table.dataTable tfoot td.dt-head-justify { | ||
| 259 | + text-align: justify; | ||
| 260 | +} | ||
| 261 | +table.dataTable thead th.dt-head-nowrap, | ||
| 262 | +table.dataTable thead td.dt-head-nowrap, | ||
| 263 | +table.dataTable tfoot th.dt-head-nowrap, | ||
| 264 | +table.dataTable tfoot td.dt-head-nowrap { | ||
| 265 | + white-space: nowrap; | ||
| 266 | +} | ||
| 267 | +table.dataTable tbody th.dt-body-left, | ||
| 268 | +table.dataTable tbody td.dt-body-left { | ||
| 269 | + text-align: left; | ||
| 270 | +} | ||
| 271 | +table.dataTable tbody th.dt-body-center, | ||
| 272 | +table.dataTable tbody td.dt-body-center { | ||
| 273 | + text-align: center; | ||
| 274 | +} | ||
| 275 | +table.dataTable tbody th.dt-body-right, | ||
| 276 | +table.dataTable tbody td.dt-body-right { | ||
| 277 | + text-align: right; | ||
| 278 | +} | ||
| 279 | +table.dataTable tbody th.dt-body-justify, | ||
| 280 | +table.dataTable tbody td.dt-body-justify { | ||
| 281 | + text-align: justify; | ||
| 282 | +} | ||
| 283 | +table.dataTable tbody th.dt-body-nowrap, | ||
| 284 | +table.dataTable tbody td.dt-body-nowrap { | ||
| 285 | + white-space: nowrap; | ||
| 286 | +} | ||
| 287 | + | ||
| 288 | +table.dataTable, | ||
| 289 | +table.dataTable th, | ||
| 290 | +table.dataTable td { | ||
| 291 | + -webkit-box-sizing: content-box; | ||
| 292 | + -moz-box-sizing: content-box; | ||
| 293 | + box-sizing: content-box; | ||
| 294 | +} | ||
| 295 | + | ||
| 296 | +/* | ||
| 297 | + * Control feature layout | ||
| 298 | + */ | ||
| 299 | +.dataTables_wrapper { | ||
| 300 | + position: relative; | ||
| 301 | + clear: both; | ||
| 302 | + *zoom: 1; | ||
| 303 | + zoom: 1; | ||
| 304 | +} | ||
| 305 | +.dataTables_wrapper .dataTables_length { | ||
| 306 | + float: left; | ||
| 307 | +} | ||
| 308 | +.dataTables_wrapper .dataTables_filter { | ||
| 309 | + float: right; | ||
| 310 | + text-align: right; | ||
| 311 | +} | ||
| 312 | +.dataTables_wrapper .dataTables_filter input { | ||
| 313 | + margin-left: 0.5em; | ||
| 314 | +} | ||
| 315 | +.dataTables_wrapper .dataTables_info { | ||
| 316 | + clear: both; | ||
| 317 | + float: left; | ||
| 318 | + padding-top: 0.755em; | ||
| 319 | +} | ||
| 320 | +.dataTables_wrapper .dataTables_paginate { | ||
| 321 | + float: right; | ||
| 322 | + text-align: right; | ||
| 323 | + padding-top: 0.25em; | ||
| 324 | +} | ||
| 325 | +.dataTables_wrapper .dataTables_paginate .paginate_button { | ||
| 326 | + box-sizing: border-box; | ||
| 327 | + display: inline-block; | ||
| 328 | + min-width: 1.5em; | ||
| 329 | + padding: 0.5em 1em; | ||
| 330 | + margin-left: 2px; | ||
| 331 | + text-align: center; | ||
| 332 | + text-decoration: none !important; | ||
| 333 | + cursor: pointer; | ||
| 334 | + *cursor: hand; | ||
| 335 | + color: #333333 !important; | ||
| 336 | + border: 1px solid transparent; | ||
| 337 | +} | ||
| 338 | +.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { | ||
| 339 | + color: #333333 !important; | ||
| 340 | + border: 1px solid #cacaca; | ||
| 341 | + background-color: white; | ||
| 342 | + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, gainsboro)); | ||
| 343 | + /* Chrome,Safari4+ */ | ||
| 344 | + background: -webkit-linear-gradient(top, white 0%, gainsboro 100%); | ||
| 345 | + /* Chrome10+,Safari5.1+ */ | ||
| 346 | + background: -moz-linear-gradient(top, white 0%, gainsboro 100%); | ||
| 347 | + /* FF3.6+ */ | ||
| 348 | + background: -ms-linear-gradient(top, white 0%, gainsboro 100%); | ||
| 349 | + /* IE10+ */ | ||
| 350 | + background: -o-linear-gradient(top, white 0%, gainsboro 100%); | ||
| 351 | + /* Opera 11.10+ */ | ||
| 352 | + background: linear-gradient(to bottom, white 0%, gainsboro 100%); | ||
| 353 | + /* W3C */ | ||
| 354 | +} | ||
| 355 | +.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { | ||
| 356 | + cursor: default; | ||
| 357 | + color: #666 !important; | ||
| 358 | + border: 1px solid transparent; | ||
| 359 | + background: transparent; | ||
| 360 | + box-shadow: none; | ||
| 361 | +} | ||
| 362 | +.dataTables_wrapper .dataTables_paginate .paginate_button:hover { | ||
| 363 | + color: white !important; | ||
| 364 | + border: 1px solid #111111; | ||
| 365 | + background-color: #585858; | ||
| 366 | + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111111)); | ||
| 367 | + /* Chrome,Safari4+ */ | ||
| 368 | + background: -webkit-linear-gradient(top, #585858 0%, #111111 100%); | ||
| 369 | + /* Chrome10+,Safari5.1+ */ | ||
| 370 | + background: -moz-linear-gradient(top, #585858 0%, #111111 100%); | ||
| 371 | + /* FF3.6+ */ | ||
| 372 | + background: -ms-linear-gradient(top, #585858 0%, #111111 100%); | ||
| 373 | + /* IE10+ */ | ||
| 374 | + background: -o-linear-gradient(top, #585858 0%, #111111 100%); | ||
| 375 | + /* Opera 11.10+ */ | ||
| 376 | + background: linear-gradient(to bottom, #585858 0%, #111111 100%); | ||
| 377 | + /* W3C */ | ||
| 378 | +} | ||
| 379 | +.dataTables_wrapper .dataTables_paginate .paginate_button:active { | ||
| 380 | + outline: none; | ||
| 381 | + background-color: #2b2b2b; | ||
| 382 | + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); | ||
| 383 | + /* Chrome,Safari4+ */ | ||
| 384 | + background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||
| 385 | + /* Chrome10+,Safari5.1+ */ | ||
| 386 | + background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||
| 387 | + /* FF3.6+ */ | ||
| 388 | + background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||
| 389 | + /* IE10+ */ | ||
| 390 | + background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||
| 391 | + /* Opera 11.10+ */ | ||
| 392 | + background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); | ||
| 393 | + /* W3C */ | ||
| 394 | + box-shadow: inset 0 0 3px #111; | ||
| 395 | +} | ||
| 396 | +.dataTables_wrapper .dataTables_processing { | ||
| 397 | + position: absolute; | ||
| 398 | + top: 50%; | ||
| 399 | + left: 50%; | ||
| 400 | + width: 100%; | ||
| 401 | + height: 40px; | ||
| 402 | + margin-left: -50%; | ||
| 403 | + margin-top: -25px; | ||
| 404 | + padding-top: 20px; | ||
| 405 | + text-align: center; | ||
| 406 | + font-size: 1.2em; | ||
| 407 | + background-color: white; | ||
| 408 | + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); | ||
| 409 | + /* Chrome,Safari4+ */ | ||
| 410 | + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||
| 411 | + /* Chrome10+,Safari5.1+ */ | ||
| 412 | + background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||
| 413 | + /* FF3.6+ */ | ||
| 414 | + background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||
| 415 | + /* IE10+ */ | ||
| 416 | + background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||
| 417 | + /* Opera 11.10+ */ | ||
| 418 | + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||
| 419 | + /* W3C */ | ||
| 420 | +} | ||
| 421 | +.dataTables_wrapper .dataTables_length, | ||
| 422 | +.dataTables_wrapper .dataTables_filter, | ||
| 423 | +.dataTables_wrapper .dataTables_info, | ||
| 424 | +.dataTables_wrapper .dataTables_processing, | ||
| 425 | +.dataTables_wrapper .dataTables_paginate { | ||
| 426 | + color: #333333; | ||
| 427 | +} | ||
| 428 | +.dataTables_wrapper .dataTables_scroll { | ||
| 429 | + clear: both; | ||
| 430 | +} | ||
| 431 | +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { | ||
| 432 | + *margin-top: -1px; | ||
| 433 | + -webkit-overflow-scrolling: touch; | ||
| 434 | +} | ||
| 435 | +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing, | ||
| 436 | +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing { | ||
| 437 | + height: 0; | ||
| 438 | + overflow: hidden; | ||
| 439 | + margin: 0 !important; | ||
| 440 | + padding: 0 !important; | ||
| 441 | +} | ||
| 442 | +.dataTables_wrapper.no-footer .dataTables_scrollBody { | ||
| 443 | + border-bottom: 1px solid #111111; | ||
| 444 | +} | ||
| 445 | +.dataTables_wrapper.no-footer div.dataTables_scrollHead table, | ||
| 446 | +.dataTables_wrapper.no-footer div.dataTables_scrollBody table { | ||
| 447 | + border-bottom: none; | ||
| 448 | +} | ||
| 449 | +.dataTables_wrapper:after { | ||
| 450 | + visibility: hidden; | ||
| 451 | + display: block; | ||
| 452 | + content: ""; | ||
| 453 | + clear: both; | ||
| 454 | + height: 0; | ||
| 455 | +} | ||
| 456 | + | ||
| 457 | +@media screen and (max-width: 767px) { | ||
| 458 | + .dataTables_wrapper .dataTables_info, | ||
| 459 | + .dataTables_wrapper .dataTables_paginate { | ||
| 460 | + float: none; | ||
| 461 | + text-align: center; | ||
| 462 | + } | ||
| 463 | + .dataTables_wrapper .dataTables_paginate { | ||
| 464 | + margin-top: 0.5em; | ||
| 465 | + } | ||
| 466 | +} | ||
| 467 | +@media screen and (max-width: 640px) { | ||
| 468 | + .dataTables_wrapper .dataTables_length, | ||
| 469 | + .dataTables_wrapper .dataTables_filter { | ||
| 470 | + float: none; | ||
| 471 | + text-align: center; | ||
| 472 | + } | ||
| 473 | + .dataTables_wrapper .dataTables_filter { | ||
| 474 | + margin-top: 0.5em; | ||
| 475 | + } | ||
| 476 | +} |
| 1 | +.dataTables_filter{margin-bottom:15px;}.seo_editor th{color:#414141;}table.dataTable{width:100%;margin:0 auto;clear:both;border-spacing:0;margin-bottom:10px;}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting{cursor:pointer;*cursor:hand}table.dataTable thead .sorting{background:url("img/sort_both.png") no-repeat center right}table.dataTable thead .sorting_asc{background:url("img/sort_asc.png") no-repeat center right}table.dataTable thead .sorting_desc{background:url("img/sort_desc.png") no-repeat center right}table.dataTable thead .sorting_asc_disabled{background:url("img/sort_asc_disabled.png") no-repeat center right}table.dataTable thead .sorting_desc_disabled{background:url("img/sort_desc_disabled.png") no-repeat center right}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#b0bed9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px;vertical-align:middle !important;}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#abb9d3}table.dataTable.hover tbody tr:hover,table.dataTable.hover tbody tr.odd:hover,table.dataTable.hover tbody tr.even:hover,table.dataTable.display tbody tr:hover,table.dataTable.display tbody tr.odd:hover,table.dataTable.display tbody tr.even:hover{background-color:#f5f5f5}table.dataTable.hover tbody tr:hover.selected,table.dataTable.hover tbody tr.odd:hover.selected,table.dataTable.hover tbody tr.even:hover.selected,table.dataTable.display tbody tr:hover.selected,table.dataTable.display tbody tr.odd:hover.selected,table.dataTable.display tbody tr.even:hover.selected{background-color:#a9b7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#f9f9f9}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad4}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b3cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a7b5ce}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b6d0}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#f9f9f9}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fbfbfb}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fdfdfd}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad4}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#adbbd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.display tbody tr.odd:hover>.sorting_1,table.dataTable.display tbody tr.even:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr.odd:hover>.sorting_1,table.dataTable.order-column.hover tbody tr.even:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.display tbody tr.odd:hover>.sorting_2,table.dataTable.display tbody tr.even:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr.odd:hover>.sorting_2,table.dataTable.order-column.hover tbody tr.even:hover>.sorting_2{background-color:#ebebeb}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.display tbody tr.odd:hover>.sorting_3,table.dataTable.display tbody tr.even:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr.odd:hover>.sorting_3,table.dataTable.order-column.hover tbody tr.even:hover>.sorting_3{background-color:#eee}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.display tbody tr.odd:hover.selected>.sorting_1,table.dataTable.display tbody tr.even:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr.odd:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr.even:hover.selected>.sorting_1{background-color:#a1aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.display tbody tr.odd:hover.selected>.sorting_2,table.dataTable.display tbody tr.even:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr.odd:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr.even:hover.selected>.sorting_2{background-color:#a2afc8}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.display tbody tr.odd:hover.selected>.sorting_3,table.dataTable.display tbody tr.even:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr.odd:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr.even:hover.selected>.sorting_3{background-color:#a4b2cb}table.dataTable.no-footer_{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:5px 9px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:5px 9px 3px 9px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px 5px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:5px;}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #cacaca;background-color:#fff;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}} | ||
| 2 | + | ||
| 3 | +.dataTables_wrapper .dataTables_processing{top:0px; padding-top: 110px; height:100%; background:rgba(150, 150, 150, 0.1);} | ||
| 4 | + | ||
| 5 | +.dataTables_filter input[type=search]{ | ||
| 6 | + border-radius:5px; | ||
| 7 | + border:1px solid #ccc; | ||
| 8 | + height: 30px; | ||
| 9 | + width:250px; | ||
| 10 | +} | ||
| 11 | + | ||
| 12 | +.dataTables_filter input[type=search],.dataTables_length select { | ||
| 13 | + height: 28px; | ||
| 14 | + padding: 4px 9px; | ||
| 15 | + font-size: 12px; | ||
| 16 | + line-height: 1.5; | ||
| 17 | + color: #555; | ||
| 18 | + background-color: #fff; | ||
| 19 | + background-image: none; | ||
| 20 | + border: 1px solid #ccc; | ||
| 21 | + border-top-color: rgb(204, 204, 204); | ||
| 22 | + border-right-color: rgb(204, 204, 204); | ||
| 23 | + border-bottom-color: rgb(204, 204, 204); | ||
| 24 | + border-left-color: rgb(204, 204, 204); | ||
| 25 | + border-radius: 3px; | ||
| 26 | + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); | ||
| 27 | + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); | ||
| 28 | + -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; | ||
| 29 | + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; | ||
| 30 | + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +.dataTables_filter input[type=search]:hover,.dataTables_length select:hover { | ||
| 34 | + border: 1px solid #b9b9b9; | ||
| 35 | + border-top-color: rgb(185, 185, 185); | ||
| 36 | + border-top-color: #a0a0a0; | ||
| 37 | + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); | ||
| 38 | + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); | ||
| 39 | +} | ||
| 40 | +.dataTables_filter input[type=search]:focus,.dataTables_length select:focus { | ||
| 41 | + border-color: #66afe9; | ||
| 42 | + outline: 0; | ||
| 43 | + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); | ||
| 44 | + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); | ||
| 45 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +/*! DataTables 1.10.3 | ||
| 2 | + * ©2008-2014 SpryMedia Ltd - datatables.net/license | ||
| 3 | + */ | ||
| 4 | +(function(Da,P,l){var O=function(h){function V(a){var b,c,d={};h.each(a,function(e){if((b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" "))c=e.replace(b[0],b[2].toLowerCase()),d[c]=e,"o"===b[1]&&V(a[e])});a._hungarianMap=d}function G(a,b,c){a._hungarianMap||V(a);var d;h.each(b,function(e){d=a._hungarianMap[e];if(d!==l&&(c||b[d]===l))"o"===d.charAt(0)?(b[d]||(b[d]={}),h.extend(!0,b[d],b[e]),G(a[d],b[d],c)):b[d]=b[e]})}function O(a){var b=p.defaults.oLanguage,c=a.sZeroRecords; | ||
| 5 | +!a.sEmptyTable&&(c&&"No data available in table"===b.sEmptyTable)&&D(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&(c&&"Loading..."===b.sLoadingRecords)&&D(a,a,"sZeroRecords","sLoadingRecords");a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&db(a)}function eb(a){z(a,"ordering","bSort");z(a,"orderMulti","bSortMulti");z(a,"orderClasses","bSortClasses");z(a,"orderCellsTop","bSortCellsTop");z(a,"order","aaSorting");z(a,"orderFixed","aaSortingFixed");z(a,"paging","bPaginate"); | ||
| 6 | +z(a,"pagingType","sPaginationType");z(a,"pageLength","iDisplayLength");z(a,"searching","bFilter");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&G(p.models.oSearch,a[b])}function fb(a){z(a,"orderable","bSortable");z(a,"orderData","aDataSort");z(a,"orderSequence","asSorting");z(a,"orderDataType","sortDataType")}function gb(a){var a=a.oBrowser,b=h("<div/>").css({position:"absolute",top:0,left:0,height:1,width:1,overflow:"hidden"}).append(h("<div/>").css({position:"absolute",top:1,left:1,width:100, | ||
| 7 | +overflow:"scroll"}).append(h('<div class="test"/>').css({width:"100%",height:10}))).appendTo("body"),c=b.find(".test");a.bScrollOversize=100===c[0].offsetWidth;a.bScrollbarLeft=1!==c.offset().left;b.remove()}function hb(a,b,c,d,e,f){var g,i=!1;c!==l&&(g=c,i=!0);for(;d!==e;)a.hasOwnProperty(d)&&(g=i?b(g,a[d],d,a):a[d],i=!0,d+=f);return g}function Ea(a,b){var c=p.defaults.column,d=a.aoColumns.length,c=h.extend({},p.models.oColumn,c,{nTh:b?b:P.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML: | ||
| 8 | +"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=h.extend({},p.models.oSearch,c[d]);ia(a,d,null)}function ia(a,b,c){var b=a.aoColumns[b],d=a.oClasses,e=h(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var f=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==l&&null!==c&&(fb(c),G(p.defaults.column,c),c.mDataProp!==l&&!c.mData&&(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&& | ||
| 9 | +!c.sClass&&(c.sClass=c.className),h.extend(b,c),D(b,c,"sWidth","sWidthOrig"),"number"===typeof c.iDataSort&&(b.aDataSort=[c.iDataSort]),D(b,c,"aDataSort"));var g=b.mData,i=W(g),j=b.mRender?W(b.mRender):null,c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=h.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b.fnGetData=function(a,b,c){var d=i(a,b,l,c);return j&&b?j(d,b,a,c):d};b.fnSetData=function(a,b,c){return Q(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort|| | ||
| 10 | +(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==h.inArray("asc",b.asSorting);c=-1!==h.inArray("desc",b.asSorting);!b.bSortable||!a&&!c?(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI=""):a&&!c?(b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI)}function X(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Fa(a);for(var c=0,d=b.length;c< | ||
| 11 | +d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;(""!==b.sY||""!==b.sX)&&Y(a);u(a,null,"column-sizing",[a])}function ja(a,b){var c=Z(a,"bVisible");return"number"===typeof c[b]?c[b]:null}function $(a,b){var c=Z(a,"bVisible"),c=h.inArray(b,c);return-1!==c?c:null}function aa(a){return Z(a,"bVisible").length}function Z(a,b){var c=[];h.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ga(a){var b=a.aoColumns,c=a.aoData,d=p.ext.type.detect,e,f,g,i,j,h,m,o,k;e=0;for(f=b.length;e<f;e++)if(m= | ||
| 12 | +b[e],k=[],!m.sType&&m._sManualType)m.sType=m._sManualType;else if(!m.sType){g=0;for(i=d.length;g<i;g++){j=0;for(h=c.length;j<h&&!(k[j]===l&&(k[j]=w(a,j,e,"type")),o=d[g](k[j],a),!o||"html"===o);j++);if(o){m.sType=o;break}}m.sType||(m.sType="string")}}function ib(a,b,c,d){var e,f,g,i,j,n,m=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){n=b[e];var o=n.targets!==l?n.targets:n.aTargets;h.isArray(o)||(o=[o]);f=0;for(g=o.length;f<g;f++)if("number"===typeof o[f]&&0<=o[f]){for(;m.length<=o[f];)Ea(a);d(o[f], | ||
| 13 | +n)}else if("number"===typeof o[f]&&0>o[f])d(m.length+o[f],n);else if("string"===typeof o[f]){i=0;for(j=m.length;i<j;i++)("_all"==o[f]||h(m[i].nTh).hasClass(o[f]))&&d(i,n)}}if(c){e=0;for(a=c.length;e<a;e++)d(e,c[e])}}function I(a,b,c,d){var e=a.aoData.length,f=h.extend(!0,{},p.models.oRow,{src:c?"dom":"data"});f._aData=b;a.aoData.push(f);for(var b=a.aoColumns,f=0,g=b.length;f<g;f++)c&&Ha(a,e,f,w(a,e,f)),b[f].sType=null;a.aiDisplayMaster.push(e);(c||!a.oFeatures.bDeferRender)&&Ia(a,e,c,d);return e} | ||
| 14 | +function ka(a,b){var c;b instanceof h||(b=h(b));return b.map(function(b,e){c=la(a,e);return I(a,c.data,e,c.cells)})}function w(a,b,c,d){var e=a.iDraw,f=a.aoColumns[c],g=a.aoData[b]._aData,i=f.sDefaultContent,c=f.fnGetData(g,d,{settings:a,row:b,col:c});if(c===l)return a.iDrawError!=e&&null===i&&(R(a,0,"Requested unknown parameter "+("function"==typeof f.mData?"{function}":"'"+f.mData+"'")+" for row "+b,4),a.iDrawError=e),i;if((c===g||null===c)&&null!==i)c=i;else if("function"===typeof c)return c.call(g); | ||
| 15 | +return null===c&&"display"==d?"":c}function Ha(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}function Ja(a){return h.map(a.match(/(\\.|[^\.])+/g),function(a){return a.replace(/\\./g,".")})}function W(a){if(h.isPlainObject(a)){var b={};h.each(a,function(a,c){c&&(b[a]=W(c))});return function(a,c,f,g){var i=b[c]||b._;return i!==l?i(a,c,f,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,f,g){return a(b,c,f,g)};if("string"=== | ||
| 16 | +typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var c=function(a,b,f){var g,i;if(""!==f){i=Ja(f);for(var j=0,h=i.length;j<h;j++){f=i[j].match(ba);g=i[j].match(S);if(f){i[j]=i[j].replace(ba,"");""!==i[j]&&(a=a[i[j]]);g=[];i.splice(0,j+1);i=i.join(".");j=0;for(h=a.length;j<h;j++)g.push(c(a[j],b,i));a=f[0].substring(1,f[0].length-1);a=""===a?g:g.join(a);break}else if(g){i[j]=i[j].replace(S,"");a=a[i[j]]();continue}if(null===a||a[i[j]]===l)return l;a=a[i[j]]}}return a};return function(b, | ||
| 17 | +e){return c(b,e,a)}}return function(b){return b[a]}}function Q(a){if(h.isPlainObject(a))return Q(a._);if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var b=function(a,d,e){var e=Ja(e),f;f=e[e.length-1];for(var g,i,j=0,h=e.length-1;j<h;j++){g=e[j].match(ba);i=e[j].match(S);if(g){e[j]=e[j].replace(ba,"");a[e[j]]=[];f=e.slice();f.splice(0,j+1);g=f.join(".");i=0;for(h= | ||
| 18 | +d.length;i<h;i++)f={},b(f,d[i],g),a[e[j]].push(f);return}i&&(e[j]=e[j].replace(S,""),a=a[e[j]](d));if(null===a[e[j]]||a[e[j]]===l)a[e[j]]={};a=a[e[j]]}if(f.match(S))a[f.replace(S,"")](d);else a[f.replace(ba,"")]=d};return function(c,d){return b(c,d,a)}}return function(b,d){b[a]=d}}function Ka(a){return C(a.aoData,"_aData")}function ma(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0}function na(a,b,c){for(var d=-1,e=0,f=a.length;e<f;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===l&& | ||
| 19 | +a.splice(d,1)}function oa(a,b,c,d){var e=a.aoData[b],f;if("dom"===c||(!c||"auto"===c)&&"dom"===e.src)e._aData=la(a,e).data;else{var g=e.anCells,i;if(g){c=0;for(f=g.length;c<f;c++){for(i=g[c];i.childNodes.length;)i.removeChild(i.firstChild);g[c].innerHTML=w(a,b,c,"display")}}}e._aSortData=null;e._aFilterData=null;a=a.aoColumns;if(d!==l)a[d].sType=null;else{c=0;for(f=a.length;c<f;c++)a[c].sType=null}La(e)}function la(a,b){var c=[],d=b.firstChild,e,f,g=0,i,j=a.aoColumns,n=a._rowReadObject,m=n?{}:[], | ||
| 20 | +o=function(a,b){if("string"===typeof a){var c=a.indexOf("@");-1!==c&&(c=a.substring(c+1),Q(a)(m,b.getAttribute(c)))}},k=function(a){f=j[g];i=h.trim(a.innerHTML);f&&f._bAttrSrc?(Q(f.mData._)(m,i),o(f.mData.sort,a),o(f.mData.type,a),o(f.mData.filter,a)):n?(f._setter||(f._setter=Q(f.mData)),f._setter(m,i)):m.push(i);g++};if(d)for(;d;){e=d.nodeName.toUpperCase();if("TD"==e||"TH"==e)k(d),c.push(d);d=d.nextSibling}else{c=b.anCells;d=0;for(e=c.length;d<e;d++)k(c[d])}return{data:m,cells:c}}function Ia(a, | ||
| 21 | +b,c,d){var e=a.aoData[b],f=e._aData,g=[],i,j,h,m,o;if(null===e.nTr){i=c||P.createElement("tr");e.nTr=i;e.anCells=g;i._DT_RowIndex=b;La(e);m=0;for(o=a.aoColumns.length;m<o;m++){h=a.aoColumns[m];j=c?d[m]:P.createElement(h.sCellType);g.push(j);if(!c||h.mRender||h.mData!==m)j.innerHTML=w(a,b,m,"display");h.sClass&&(j.className+=" "+h.sClass);h.bVisible&&!c?i.appendChild(j):!h.bVisible&&c&&j.parentNode.removeChild(j);h.fnCreatedCell&&h.fnCreatedCell.call(a.oInstance,j,w(a,b,m),f,b,m)}u(a,"aoRowCreatedCallback", | ||
| 22 | +null,[i,f,b])}e.nTr.setAttribute("role","row")}function La(a){var b=a.nTr,c=a._aData;if(b){c.DT_RowId&&(b.id=c.DT_RowId);if(c.DT_RowClass){var d=c.DT_RowClass.split(" ");a.__rowc=a.__rowc?Ma(a.__rowc.concat(d)):d;h(b).removeClass(a.__rowc.join(" ")).addClass(c.DT_RowClass)}c.DT_RowData&&h(b).data(c.DT_RowData)}}function jb(a){var b,c,d,e,f,g=a.nTHead,i=a.nTFoot,j=0===h("th, td",g).length,n=a.oClasses,m=a.aoColumns;j&&(e=h("<tr/>").appendTo(g));b=0;for(c=m.length;b<c;b++)f=m[b],d=h(f.nTh).addClass(f.sClass), | ||
| 23 | +j&&d.appendTo(e),a.oFeatures.bSort&&(d.addClass(f.sSortingClass),!1!==f.bSortable&&(d.attr("tabindex",a.iTabIndex).attr("aria-controls",a.sTableId),Na(a,f.nTh,b))),f.sTitle!=d.html()&&d.html(f.sTitle),Oa(a,"header")(a,d,f,n);j&&ca(a.aoHeader,g);h(g).find(">tr").attr("role","row");h(g).find(">tr>th, >tr>td").addClass(n.sHeaderTH);h(i).find(">tr>th, >tr>td").addClass(n.sFooterTH);if(null!==i){a=a.aoFooter[0];b=0;for(c=a.length;b<c;b++)f=m[b],f.nTf=a[b].cell,f.sClass&&h(f.nTf).addClass(f.sClass)}}function da(a, | ||
| 24 | +b,c){var d,e,f,g=[],i=[],j=a.aoColumns.length,n;if(b){c===l&&(c=!1);d=0;for(e=b.length;d<e;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(f=j-1;0<=f;f--)!a.aoColumns[f].bVisible&&!c&&g[d].splice(f,1);i.push([])}d=0;for(e=g.length;d<e;d++){if(a=g[d].nTr)for(;f=a.firstChild;)a.removeChild(f);f=0;for(b=g[d].length;f<b;f++)if(n=j=1,i[d][f]===l){a.appendChild(g[d][f].cell);for(i[d][f]=1;g[d+j]!==l&&g[d][f].cell==g[d+j][f].cell;)i[d+j][f]=1,j++;for(;g[d][f+n]!==l&&g[d][f].cell==g[d][f+n].cell;){for(c=0;c< | ||
| 25 | +j;c++)i[d+c][f+n]=1;n++}h(g[d][f].cell).attr("rowspan",j).attr("colspan",n)}}}}function L(a){var b=u(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inArray(!1,b))B(a,!1);else{var b=[],c=0,d=a.asStripeClasses,e=d.length,f=a.oLanguage,g=a.iInitDisplayStart,i="ssp"==A(a),j=a.aiDisplay;a.bDrawing=!0;g!==l&&-1!==g&&(a._iDisplayStart=i?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);var g=a._iDisplayStart,n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,B(a,!1);else if(i){if(!a.bDestroying&& | ||
| 26 | +!kb(a))return}else a.iDraw++;if(0!==j.length){f=i?a.aoData.length:n;for(i=i?0:g;i<f;i++){var m=j[i],o=a.aoData[m];null===o.nTr&&Ia(a,m);m=o.nTr;if(0!==e){var k=d[c%e];o._sRowStripe!=k&&(h(m).removeClass(o._sRowStripe).addClass(k),o._sRowStripe=k)}u(a,"aoRowCallback",null,[m,o._aData,c,i]);b.push(m);c++}}else c=f.sZeroRecords,1==a.iDraw&&"ajax"==A(a)?c=f.sLoadingRecords:f.sEmptyTable&&0===a.fnRecordsTotal()&&(c=f.sEmptyTable),b[0]=h("<tr/>",{"class":e?d[0]:""}).append(h("<td />",{valign:"top",colSpan:aa(a), | ||
| 27 | +"class":a.oClasses.sRowEmpty}).html(c))[0];u(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Ka(a),g,n,j]);u(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],Ka(a),g,n,j]);d=h(a.nTBody);d.children().detach();d.append(h(b));u(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function M(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&lb(a);d?ea(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;L(a);a._drawHold= | ||
| 28 | +!1}function mb(a){var b=a.oClasses,c=h(a.nTable),c=h("<div/>").insertBefore(c),d=a.oFeatures,e=h("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,i,j,n,m,o,k=0;k<f.length;k++){g=null;i=f[k];if("<"==i){j=h("<div/>")[0];n=f[k+1];if("'"==n||'"'==n){m="";for(o=2;f[k+o]!=n;)m+=f[k+o],o++;"H"==m?m=b.sJUIHeader:"F"==m&&(m=b.sJUIFooter);-1!=m.indexOf(".")?(n=m.split("."), | ||
| 29 | +j.id=n[0].substr(1,n[0].length-1),j.className=n[1]):"#"==m.charAt(0)?j.id=m.substr(1,m.length-1):j.className=m;k+=o}e.append(j);e=h(j)}else if(">"==i)e=e.parent();else if("l"==i&&d.bPaginate&&d.bLengthChange)g=nb(a);else if("f"==i&&d.bFilter)g=ob(a);else if("r"==i&&d.bProcessing)g=pb(a);else if("t"==i)g=qb(a);else if("i"==i&&d.bInfo)g=rb(a);else if("p"==i&&d.bPaginate)g=sb(a);else if(0!==p.ext.feature.length){j=p.ext.feature;o=0;for(n=j.length;o<n;o++)if(i==j[o].cFeature){g=j[o].fnInit(a);break}}g&& | ||
| 30 | +(j=a.aanFeatures,j[i]||(j[i]=[]),j[i].push(g),e.append(g))}c.replaceWith(e)}function ca(a,b){var c=h(b).children("tr"),d,e,f,g,i,j,n,m,o,k;a.splice(0,a.length);f=0;for(j=c.length;f<j;f++)a.push([]);f=0;for(j=c.length;f<j;f++){d=c[f];for(e=d.firstChild;e;){if("TD"==e.nodeName.toUpperCase()||"TH"==e.nodeName.toUpperCase()){m=1*e.getAttribute("colspan");o=1*e.getAttribute("rowspan");m=!m||0===m||1===m?1:m;o=!o||0===o||1===o?1:o;g=0;for(i=a[f];i[g];)g++;n=g;k=1===m?!0:!1;for(i=0;i<m;i++)for(g=0;g<o;g++)a[f+ | ||
| 31 | +g][n+i]={cell:e,unique:k},a[f+g].nTr=d}e=e.nextSibling}}}function pa(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],ca(c,b)));for(var b=0,e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)if(c[b][f].unique&&(!d[f]||!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function qa(a,b,c){u(a,"aoServerParams","serverParams",[b]);if(b&&h.isArray(b)){var d={},e=/(.*?)\[\]$/;h.each(b,function(a,b){var c=b.name.match(e);c?(c=c[0],d[c]||(d[c]=[]),d[c].push(b.value)):d[b.name]=b.value});b=d}var f,g=a.ajax,i=a.oInstance; | ||
| 32 | +if(h.isPlainObject(g)&&g.data){f=g.data;var j=h.isFunction(f)?f(b):f,b=h.isFunction(f)&&j?j:h.extend(!0,b,j);delete g.data}j={data:b,success:function(b){var d=b.error||b.sError;d&&a.oApi._fnLog(a,0,d);a.json=b;u(a,null,"xhr",[a,b]);c(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c){var d=a.oApi._fnLog;"parsererror"==c?d(a,0,"Invalid JSON response",1):4===b.readyState&&d(a,0,"Ajax error",7);B(a,!1)}};a.oAjaxData=b;u(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(i,a.sAjaxSource, | ||
| 33 | +h.map(b,function(a,b){return{name:b,value:a}}),c,a):a.sAjaxSource||"string"===typeof g?a.jqXHR=h.ajax(h.extend(j,{url:g||a.sAjaxSource})):h.isFunction(g)?a.jqXHR=g.call(i,b,c,a):(a.jqXHR=h.ajax(h.extend(j,g)),g.data=f)}function kb(a){return a.bAjaxDataGet?(a.iDraw++,B(a,!0),qa(a,tb(a),function(b){ub(a,b)}),!1):!0}function tb(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g,i=[],j,n,m,o=T(a);g=a._iDisplayStart;j=!1!==d.bPaginate?a._iDisplayLength:-1;var k=function(a, | ||
| 34 | +b){i.push({name:a,value:b})};k("sEcho",a.iDraw);k("iColumns",c);k("sColumns",C(b,"sName").join(","));k("iDisplayStart",g);k("iDisplayLength",j);var l={draw:a.iDraw,columns:[],order:[],start:g,length:j,search:{value:e.sSearch,regex:e.bRegex}};for(g=0;g<c;g++)n=b[g],m=f[g],j="function"==typeof n.mData?"function":n.mData,l.columns.push({data:j,name:n.sName,searchable:n.bSearchable,orderable:n.bSortable,search:{value:m.sSearch,regex:m.bRegex}}),k("mDataProp_"+g,j),d.bFilter&&(k("sSearch_"+g,m.sSearch), | ||
| 35 | +k("bRegex_"+g,m.bRegex),k("bSearchable_"+g,n.bSearchable)),d.bSort&&k("bSortable_"+g,n.bSortable);d.bFilter&&(k("sSearch",e.sSearch),k("bRegex",e.bRegex));d.bSort&&(h.each(o,function(a,b){l.order.push({column:b.col,dir:b.dir});k("iSortCol_"+a,b.col);k("sSortDir_"+a,b.dir)}),k("iSortingCols",o.length));b=p.ext.legacy.ajax;return null===b?a.sAjaxSource?i:l:b?i:l}function ub(a,b){var c=b.sEcho!==l?b.sEcho:b.draw,d=b.iTotalRecords!==l?b.iTotalRecords:b.recordsTotal,e=b.iTotalDisplayRecords!==l?b.iTotalDisplayRecords: | ||
| 36 | +b.recordsFiltered;if(c){if(1*c<a.iDraw)return;a.iDraw=1*c}ma(a);a._iRecordsTotal=parseInt(d,10);a._iRecordsDisplay=parseInt(e,10);c=ra(a,b);d=0;for(e=c.length;d<e;d++)I(a,c[d]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;L(a);a._bInitComplete||sa(a,b);a.bAjaxDataGet=!0;B(a,!1)}function ra(a,b){var c=h.isPlainObject(a.ajax)&&a.ajax.dataSrc!==l?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===c?b.aaData||b[c]:""!==c?W(c)(b):b}function ob(a){var b=a.oClasses,c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch, | ||
| 37 | +f=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',i=d.sSearch,i=i.match(/_INPUT_/)?i.replace("_INPUT_",g):i+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(i)),f=function(){var b=!this.value?"":this.value;b!=e.sSearch&&(ea(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,L(a))},g=null!==a.searchDelay?a.searchDelay:"ssp"===A(a)?400:0,j=h("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).bind("keyup.DT search.DT input.DT paste.DT cut.DT", | ||
| 38 | +g?ta(f,g):f).bind("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);h(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{j[0]!==P.activeElement&&j.val(e.sSearch)}catch(d){}});return b[0]}function ea(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};Ga(a);if("ssp"!=A(a)){vb(a,b.sSearch,c,b.bEscapeRegex!==l?!b.bEscapeRegex:b.bRegex,b.bSmart,b.bCaseInsensitive); | ||
| 39 | +f(b);for(b=0;b<e.length;b++)wb(a,e[b].sSearch,b,e[b].bEscapeRegex!==l?!e[b].bEscapeRegex:e[b].bRegex,e[b].bSmart,e[b].bCaseInsensitive);xb(a)}else f(b);a.bFiltered=!0;u(a,null,"search",[a])}function xb(a){for(var b=p.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f<g;f++){for(var i=[],j=0,h=c.length;j<h;j++)e=c[j],d=a.aoData[e],b[f](a,d._aFilterData,e,d._aData,j)&&i.push(e);c.length=0;c.push.apply(c,i)}}function wb(a,b,c,d,e,f){if(""!==b)for(var g=a.aiDisplay,d=Pa(b,d,e,f),e=g.length-1;0<=e;e--)b=a.aoData[g[e]]._aFilterData[c], | ||
| 40 | +d.test(b)||g.splice(e,1)}function vb(a,b,c,d,e,f){var d=Pa(b,d,e,f),e=a.oPreviousSearch.sSearch,f=a.aiDisplayMaster,g;0!==p.ext.search.length&&(c=!0);g=yb(a);if(0>=b.length)a.aiDisplay=f.slice();else{if(g||c||e.length>b.length||0!==b.indexOf(e)||a.bSorted)a.aiDisplay=f.slice();b=a.aiDisplay;for(c=b.length-1;0<=c;c--)d.test(a.aoData[b[c]]._sFilterRow)||b.splice(c,1)}}function Pa(a,b,c,d){a=b?a:Qa(a);c&&(a="^(?=.*?"+h.map(a.match(/"[^"]+"|[^ ]+/g)||"",function(a){if('"'===a.charAt(0))var b=a.match(/^"(.*)"$/), | ||
| 41 | +a=b?b[1]:a;return a.replace('"',"")}).join(")(?=.*?")+").*$");return RegExp(a,d?"i":"")}function Qa(a){return a.replace(Xb,"\\$1")}function yb(a){var b=a.aoColumns,c,d,e,f,g,i,j,h,m=p.ext.type.search;c=!1;d=0;for(f=a.aoData.length;d<f;d++)if(h=a.aoData[d],!h._aFilterData){i=[];e=0;for(g=b.length;e<g;e++)c=b[e],c.bSearchable?(j=w(a,d,e,"filter"),m[c.sType]&&(j=m[c.sType](j)),null===j&&(j=""),"string"!==typeof j&&j.toString&&(j=j.toString())):j="",j.indexOf&&-1!==j.indexOf("&")&&(ua.innerHTML=j,j=Yb? | ||
| 42 | +ua.textContent:ua.innerText),j.replace&&(j=j.replace(/[\r\n]/g,"")),i.push(j);h._aFilterData=i;h._sFilterRow=i.join(" ");c=!0}return c}function zb(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}function Ab(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function rb(a){var b=a.sTableId,c=a.aanFeatures.i,d=h("<div/>",{"class":a.oClasses.sInfo,id:!c?b+"_info":null});c||(a.aoDrawCallback.push({fn:Bb,sName:"information"}), | ||
| 43 | +d.attr("role","status").attr("aria-live","polite"),h(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Bb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),f=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),i=g?c.sInfo:c.sInfoEmpty;g!==f&&(i+=" "+c.sInfoFiltered);i+=c.sInfoPostFix;i=Cb(a,i);c=c.fnInfoCallback;null!==c&&(i=c.call(a.oInstance,a,d,e,f,g,i));h(b).html(i)}}function Cb(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength, | ||
| 44 | +f=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,f)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(f/e)))}function va(a){var b,c,d=a.iInitDisplayStart,e=a.aoColumns,f;c=a.oFeatures;if(a.bInitialised){mb(a);jb(a);da(a,a.aoHeader);da(a,a.aoFooter);B(a,!0);c.bAutoWidth&&Fa(a);b=0;for(c=e.length;b<c;b++)f=e[b],f.sWidth&& | ||
| 45 | +(f.nTh.style.width=s(f.sWidth));M(a);e=A(a);"ssp"!=e&&("ajax"==e?qa(a,[],function(c){var f=ra(a,c);for(b=0;b<f.length;b++)I(a,f[b]);a.iInitDisplayStart=d;M(a);B(a,!1);sa(a,c)},a):(B(a,!1),sa(a)))}else setTimeout(function(){va(a)},200)}function sa(a,b){a._bInitComplete=!0;b&&X(a);u(a,"aoInitComplete","init",[a,b])}function Ra(a,b){var c=parseInt(b,10);a._iDisplayLength=c;Sa(a);u(a,null,"length",[a,c])}function nb(a){for(var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=h.isArray(d[0]),f=e?d[0]:d,d=e? | ||
| 46 | +d[1]:d,e=h("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect}),g=0,i=f.length;g<i;g++)e[0][g]=new Option(d[g],f[g]);var j=h("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(j[0].id=c+"_length");j.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));h("select",j).val(a._iDisplayLength).bind("change.DT",function(){Ra(a,h(this).val());L(a)});h(a.nTable).bind("length.dt.DT",function(b,c,d){a===c&&h("select",j).val(d)});return j[0]}function sb(a){var b= | ||
| 47 | +a.sPaginationType,c=p.ext.pager[b],d="function"===typeof c,e=function(a){L(a)},b=h("<div/>").addClass(a.oClasses.sPaging+b)[0],f=a.aanFeatures;d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,j=a._iDisplayLength,h=a.fnRecordsDisplay(),m=-1===j,b=m?0:Math.ceil(b/j),j=m?1:Math.ceil(h/j),h=c(b,j),o,m=0;for(o=f.p.length;m<o;m++)Oa(a,"pageButton")(a,f.p[m],m,h,b,j)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Ta(a, | ||
| 48 | +b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnRecordsDisplay();0===f||-1===e?d=0:"number"===typeof b?(d=b*e,d>f&&(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<f&&(d+=e):"last"==b?d=Math.floor((f-1)/e)*e:R(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(u(a,null,"page",[a]),c&&L(a));return b}function pb(a){return h("<div/>",{id:!a.aanFeatures.r?a.sTableId+"_processing":null,"class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]} | ||
| 49 | +function B(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display",b?"block":"none");u(a,null,"processing",[a,b])}function qb(a){var b=h(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=b.children("caption"),i=g.length?g[0]._captionSide:null,j=h(b[0].cloneNode(!1)),n=h(b[0].cloneNode(!1)),m=b.children("tfoot");c.sX&&"100%"===b.attr("width")&&b.removeAttr("width");m.length||(m=null);c=h("<div/>",{"class":f.sScrollWrapper}).append(h("<div/>", | ||
| 50 | +{"class":f.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?!d?null:s(d):"100%"}).append(h("<div/>",{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(j.removeAttr("id").css("margin-left",0).append(b.children("thead")))).append("top"===i?g:null)).append(h("<div/>",{"class":f.sScrollBody}).css({overflow:"auto",height:!e?null:s(e),width:!d?null:s(d)}).append(b));m&&c.append(h("<div/>",{"class":f.sScrollFoot}).css({overflow:"hidden", | ||
| 51 | +border:0,width:d?!d?null:s(d):"100%"}).append(h("<div/>",{"class":f.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",0).append(b.children("tfoot")))).append("bottom"===i?g:null));var b=c.children(),o=b[0],f=b[1],k=m?b[2]:null;d&&h(f).scroll(function(){var a=this.scrollLeft;o.scrollLeft=a;m&&(k.scrollLeft=a)});a.nScrollHead=o;a.nScrollBody=f;a.nScrollFoot=k;a.aoDrawCallback.push({fn:Y,sName:"scrolling"});return c[0]}function Y(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,f=b.iBarWidth, | ||
| 52 | +g=h(a.nScrollHead),i=g[0].style,j=g.children("div"),n=j[0].style,m=j.children("table"),j=a.nScrollBody,o=h(j),k=j.style,l=h(a.nScrollFoot).children("div"),p=l.children("table"),r=h(a.nTHead),q=h(a.nTable),fa=q[0],N=fa.style,J=a.nTFoot?h(a.nTFoot):null,t=a.oBrowser,u=t.bScrollOversize,x,v,w,K,y,z=[],A=[],B=[],C,D=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};q.children("thead, tfoot").remove();y=r.clone().prependTo(q);x=r.find("tr"); | ||
| 53 | +w=y.find("tr");y.find("th, td").removeAttr("tabindex");J&&(K=J.clone().prependTo(q),v=J.find("tr"),K=K.find("tr"));c||(k.width="100%",g[0].style.width="100%");h.each(pa(a,y),function(b,c){C=ja(a,b);c.style.width=a.aoColumns[C].sWidth});J&&F(function(a){a.style.width=""},K);b.bCollapse&&""!==e&&(k.height=o[0].offsetHeight+r[0].offsetHeight+"px");g=q.outerWidth();if(""===c){if(N.width="100%",u&&(q.find("tbody").height()>j.offsetHeight||"scroll"==o.css("overflow-y")))N.width=s(q.outerWidth()-f)}else""!== | ||
| 54 | +d?N.width=s(d):g==o.width()&&o.height()<q.height()?(N.width=s(g-f),q.outerWidth()>g-f&&(N.width=s(g))):N.width=s(g);g=q.outerWidth();F(D,w);F(function(a){B.push(a.innerHTML);z.push(s(h(a).css("width")))},w);F(function(a,b){a.style.width=z[b]},x);h(w).height(0);J&&(F(D,K),F(function(a){A.push(s(h(a).css("width")))},K),F(function(a,b){a.style.width=A[b]},v),h(K).height(0));F(function(a,b){a.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+B[b]+"</div>";a.style.width=z[b]}, | ||
| 55 | +w);J&&F(function(a,b){a.innerHTML="";a.style.width=A[b]},K);if(q.outerWidth()<g){v=j.scrollHeight>j.offsetHeight||"scroll"==o.css("overflow-y")?g+f:g;if(u&&(j.scrollHeight>j.offsetHeight||"scroll"==o.css("overflow-y")))N.width=s(v-f);(""===c||""!==d)&&R(a,1,"Possible column misalignment",6)}else v="100%";k.width=s(v);i.width=s(v);J&&(a.nScrollFoot.style.width=s(v));!e&&u&&(k.height=s(fa.offsetHeight+f));e&&b.bCollapse&&(k.height=s(e),b=c&&fa.offsetWidth>j.offsetWidth?f:0,fa.offsetHeight<j.offsetHeight&& | ||
| 56 | +(k.height=s(fa.offsetHeight+b)));b=q.outerWidth();m[0].style.width=s(b);n.width=s(b);m=q.height()>j.clientHeight||"scroll"==o.css("overflow-y");t="padding"+(t.bScrollbarLeft?"Left":"Right");n[t]=m?f+"px":"0px";J&&(p[0].style.width=s(b),l[0].style.width=s(b),l[0].style[t]=m?f+"px":"0px");o.scroll();if((a.bSorted||a.bFiltered)&&!a._drawHold)j.scrollTop=0}function F(a,b,c){for(var d=0,e=0,f=b.length,g,i;e<f;){g=b[e].firstChild;for(i=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,i,d):a(g,d),d++),g= | ||
| 57 | +g.nextSibling,i=c?i.nextSibling:null;e++}}function Fa(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,f=d.sX,g=d.sXInner,i=c.length,d=Z(a,"bVisible"),j=h("th",a.nTHead),n=b.getAttribute("width"),m=b.parentNode,o=!1,k,l;for(k=0;k<d.length;k++)l=c[d[k]],null!==l.sWidth&&(l.sWidth=Db(l.sWidthOrig,m),o=!0);if(!o&&!f&&!e&&i==aa(a)&&i==j.length)for(k=0;k<i;k++)c[k].sWidth=s(j.eq(k).width());else{i=h(b).clone().empty().css("visibility","hidden").removeAttr("id").append(h(a.nTHead).clone(!1)).append(h(a.nTFoot).clone(!1)).append(h("<tbody><tr/></tbody>")); | ||
| 58 | +i.find("tfoot th, tfoot td").css("width","");var p=i.find("tbody tr"),j=pa(a,i.find("thead")[0]);for(k=0;k<d.length;k++)l=c[d[k]],j[k].style.width=null!==l.sWidthOrig&&""!==l.sWidthOrig?s(l.sWidthOrig):"";if(a.aoData.length)for(k=0;k<d.length;k++)o=d[k],l=c[o],h(Eb(a,o)).clone(!1).append(l.sContentPadding).appendTo(p);i.appendTo(m);f&&g?i.width(g):f?(i.css("width","auto"),i.width()<m.offsetWidth&&i.width(m.offsetWidth)):e?i.width(m.offsetWidth):n&&i.width(n);Fb(a,i[0]);if(f){for(k=g=0;k<d.length;k++)l= | ||
| 59 | +c[d[k]],e=h(j[k]).outerWidth(),g+=null===l.sWidthOrig?e:parseInt(l.sWidth,10)+e-h(j[k]).width();i.width(s(g));b.style.width=s(g)}for(k=0;k<d.length;k++)if(l=c[d[k]],e=h(j[k]).width())l.sWidth=s(e);b.style.width=s(i.css("width"));i.remove()}n&&(b.style.width=s(n));if((n||f)&&!a._reszEvt)h(Da).bind("resize.DT-"+a.sInstance,ta(function(){X(a)})),a._reszEvt=!0}function ta(a,b){var c=b!==l?b:200,d,e;return function(){var b=this,g=+new Date,i=arguments;d&&g<d+c?(clearTimeout(e),e=setTimeout(function(){d= | ||
| 60 | +l;a.apply(b,i)},c)):d?(d=g,a.apply(b,i)):d=g}}function Db(a,b){if(!a)return 0;var c=h("<div/>").css("width",s(a)).appendTo(b||P.body),d=c[0].offsetWidth;c.remove();return d}function Fb(a,b){var c=a.oScroll;if(c.sX||c.sY)c=!c.sX?c.iBarWidth:0,b.style.width=s(h(b).outerWidth()-c)}function Eb(a,b){var c=Gb(a,b);if(0>c)return null;var d=a.aoData[c];return!d.nTr?h("<td/>").html(w(a,c,b,"display"))[0]:d.anCells[b]}function Gb(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=w(a,f,b,"display")+"", | ||
| 61 | +c=c.replace(Zb,""),c.length>d&&(d=c.length,e=f);return e}function s(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function Hb(){if(!p.__scrollbarWidth){var a=h("<p/>").css({width:"100%",height:200,padding:0})[0],b=h("<div/>").css({position:"absolute",top:0,left:0,width:200,height:150,padding:0,overflow:"hidden",visibility:"hidden"}).append(a).appendTo("body"),c=a.offsetWidth;b.css("overflow","scroll");a=a.offsetWidth;c===a&&(a=b[0].clientWidth);b.remove();p.__scrollbarWidth= | ||
| 62 | +c-a}return p.__scrollbarWidth}function T(a){var b,c,d=[],e=a.aoColumns,f,g,i,j;b=a.aaSortingFixed;c=h.isPlainObject(b);var n=[];f=function(a){a.length&&!h.isArray(a[0])?n.push(a):n.push.apply(n,a)};h.isArray(b)&&f(b);c&&b.pre&&f(b.pre);f(a.aaSorting);c&&b.post&&f(b.post);for(a=0;a<n.length;a++){j=n[a][0];f=e[j].aDataSort;b=0;for(c=f.length;b<c;b++)g=f[b],i=e[g].sType||"string",n[a]._idx===l&&(n[a]._idx=h.inArray(n[a][1],e[g].asSorting)),d.push({src:j,col:g,dir:n[a][1],index:n[a]._idx,type:i,formatter:p.ext.type.order[i+ | ||
| 63 | +"-pre"]})}return d}function lb(a){var b,c,d=[],e=p.ext.type.order,f=a.aoData,g=0,i,h=a.aiDisplayMaster,n;Ga(a);n=T(a);b=0;for(c=n.length;b<c;b++)i=n[b],i.formatter&&g++,Ib(a,i.col);if("ssp"!=A(a)&&0!==n.length){b=0;for(c=h.length;b<c;b++)d[h[b]]=b;g===n.length?h.sort(function(a,b){var c,e,g,i,h=n.length,j=f[a]._aSortData,l=f[b]._aSortData;for(g=0;g<h;g++)if(i=n[g],c=j[i.col],e=l[i.col],c=c<e?-1:c>e?1:0,0!==c)return"asc"===i.dir?c:-c;c=d[a];e=d[b];return c<e?-1:c>e?1:0}):h.sort(function(a,b){var c, | ||
| 64 | +g,i,h,j=n.length,l=f[a]._aSortData,p=f[b]._aSortData;for(i=0;i<j;i++)if(h=n[i],c=l[h.col],g=p[h.col],h=e[h.type+"-"+h.dir]||e["string-"+h.dir],c=h(c,g),0!==c)return c;c=d[a];g=d[b];return c<g?-1:c>g?1:0})}a.bSorted=!0}function Jb(a){for(var b,c,d=a.aoColumns,e=T(a),a=a.oLanguage.oAria,f=0,g=d.length;f<g;f++){c=d[f];var i=c.asSorting;b=c.sTitle.replace(/<.*?>/g,"");var h=c.nTh;h.removeAttribute("aria-sort");c.bSortable&&(0<e.length&&e[0].col==f?(h.setAttribute("aria-sort","asc"==e[0].dir?"ascending": | ||
| 65 | +"descending"),c=i[e[0].index+1]||i[0]):c=i[0],b+="asc"===c?a.sSortAscending:a.sSortDescending);h.setAttribute("aria-label",b)}}function Ua(a,b,c,d){var e=a.aaSorting,f=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===l&&(c=h.inArray(a[1],f));return c+1<f.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=h.inArray(b,C(e,"0")),-1!==c?(b=g(e[c],!0),null===b?e.splice(c,1):(e[c][1]=f[b],e[c]._idx=b)):(e.push([b,f[0],0]),e[e.length-1]._idx=0)):e.length&& | ||
| 66 | +e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=f[b],e[0]._idx=b):(e.length=0,e.push([b,f[0]]),e[0]._idx=0);M(a);"function"==typeof d&&d(a)}function Na(a,b,c,d){var e=a.aoColumns[c];Va(b,{},function(b){!1!==e.bSortable&&(a.oFeatures.bProcessing?(B(a,!0),setTimeout(function(){Ua(a,c,b.shiftKey,d);"ssp"!==A(a)&&B(a,!1)},0)):Ua(a,c,b.shiftKey,d))})}function wa(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=T(a),e=a.oFeatures,f,g;if(e.bSort&&e.bSortClasses){e=0;for(f=b.length;e<f;e++)g=b[e].src,h(C(a.aoData, | ||
| 67 | +"anCells",g)).removeClass(c+(2>e?e+1:3));e=0;for(f=d.length;e<f;e++)g=d[e].src,h(C(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Ib(a,b){var c=a.aoColumns[b],d=p.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,$(a,b)));for(var f,g=p.ext.type.order[c.sType+"-pre"],i=0,h=a.aoData.length;i<h;i++)if(c=a.aoData[i],c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)f=d?e[i]:w(a,i,b,"sort"),c._aSortData[b]=g?g(f):f}function xa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b= | ||
| 68 | +{time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:h.extend(!0,[],a.aaSorting),search:zb(a.oPreviousSearch),columns:h.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:zb(a.aoPreSearchCols[d])}})};u(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,b)}}function Kb(a){var b,c,d=a.aoColumns;if(a.oFeatures.bStateSave){var e=a.fnStateLoadCallback.call(a.oInstance,a);if(e&&e.time&&(b=u(a,"aoStateLoadParams","stateLoadParams", | ||
| 69 | +[a,e]),-1===h.inArray(!1,b)&&(b=a.iStateDuration,!(0<b&&e.time<+new Date-1E3*b)&&d.length===e.columns.length))){a.oLoadedState=h.extend(!0,{},e);a._iDisplayStart=e.start;a.iInitDisplayStart=e.start;a._iDisplayLength=e.length;a.aaSorting=[];h.each(e.order,function(b,c){a.aaSorting.push(c[0]>=d.length?[0,c[1]]:c)});h.extend(a.oPreviousSearch,Ab(e.search));b=0;for(c=e.columns.length;b<c;b++){var f=e.columns[b];d[b].bVisible=f.visible;h.extend(a.aoPreSearchCols[b],Ab(f.search))}u(a,"aoStateLoaded","stateLoaded", | ||
| 70 | +[a,e])}}}function ya(a){var b=p.settings,a=h.inArray(a,C(b,"nTable"));return-1!==a?b[a]:null}function R(a,b,c,d){c="DataTables warning: "+(null!==a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+d);if(b)Da.console&&console.log&&console.log(c);else if(a=p.ext,"alert"==(a.sErrMode||a.errMode))alert(c);else throw Error(c);}function D(a,b,c,d){h.isArray(c)?h.each(c,function(c,d){h.isArray(d)?D(a,b,d[0],d[1]):D(a,b,d)}):(d===l&& | ||
| 71 | +(d=c),b[c]!==l&&(a[d]=b[c]))}function Lb(a,b,c){var d,e;for(e in b)b.hasOwnProperty(e)&&(d=b[e],h.isPlainObject(d)?(h.isPlainObject(a[e])||(a[e]={}),h.extend(!0,a[e],d)):a[e]=c&&"data"!==e&&"aaData"!==e&&h.isArray(d)?d.slice():d);return a}function Va(a,b,c){h(a).bind("click.DT",b,function(b){a.blur();c(b)}).bind("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).bind("selectstart.DT",function(){return!1})}function y(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function u(a,b,c,d){var e= | ||
| 72 | +[];b&&(e=h.map(a[b].slice().reverse(),function(b){return b.fn.apply(a.oInstance,d)}));null!==c&&h(a.nTable).trigger(c+".dt",d);return e}function Sa(a){var b=a._iDisplayStart,c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);if(-1===d||0>b)b=0;a._iDisplayStart=b}function Oa(a,b){var c=a.renderer,d=p.ext.renderer[b];return h.isPlainObject(c)&&c[b]?d[c[b]]||d._:"string"===typeof c?d[c]||d._:d._}function A(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function Wa(a,b){var c= | ||
| 73 | +[],c=Mb.numbers_length,d=Math.floor(c/2);b<=c?c=U(0,b):a<=d?(c=U(0,c-2),c.push("ellipsis"),c.push(b-1)):(a>=b-1-d?c=U(b-(c-2),b):(c=U(a-1,a+2),c.push("ellipsis"),c.push(b-1)),c.splice(0,0,"ellipsis"),c.splice(0,0,0));c.DT_el="span";return c}function db(a){h.each({num:function(b){return za(b,a)},"num-fmt":function(b){return za(b,a,Xa)},"html-num":function(b){return za(b,a,Aa)},"html-num-fmt":function(b){return za(b,a,Aa,Xa)}},function(b,c){v.type.order[b+a+"-pre"]=c})}function Nb(a){return function(){var b= | ||
| 74 | +[ya(this[p.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return p.ext.internal[a].apply(this,b)}}var p,v,q,r,t,Ya={},Ob=/[\r\n]/g,Aa=/<.*?>/g,$b=/^[\w\+\-]/,ac=/[\w\+\-]$/,Xb=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"),Xa=/[',$\u00a3\u20ac\u00a5%\u2009\u202F]/g,H=function(a){return!a||!0===a||"-"===a?!0:!1},Pb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Qb=function(a,b){Ya[b]||(Ya[b]=RegExp(Qa(b),"g"));return"string"=== | ||
| 75 | +typeof a&&"."!==b?a.replace(/\./g,"").replace(Ya[b],"."):a},Za=function(a,b,c){var d="string"===typeof a;b&&d&&(a=Qb(a,b));c&&d&&(a=a.replace(Xa,""));return H(a)||!isNaN(parseFloat(a))&&isFinite(a)},Rb=function(a,b,c){return H(a)?!0:!(H(a)||"string"===typeof a)?null:Za(a.replace(Aa,""),b,c)?!0:null},C=function(a,b,c){var d=[],e=0,f=a.length;if(c!==l)for(;e<f;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<f;e++)a[e]&&d.push(a[e][b]);return d},ga=function(a,b,c,d){var e=[],f=0,g=b.length;if(d!== | ||
| 76 | +l)for(;f<g;f++)e.push(a[b[f]][c][d]);else for(;f<g;f++)e.push(a[b[f]][c]);return e},U=function(a,b){var c=[],d;b===l?(b=0,d=a):(d=b,b=a);for(var e=b;e<d;e++)c.push(e);return c},Ma=function(a){var b=[],c,d,e=a.length,f,g=0;d=0;a:for(;d<e;d++){c=a[d];for(f=0;f<g;f++)if(b[f]===c)continue a;b.push(c);g++}return b},z=function(a,b,c){a[b]!==l&&(a[c]=a[b])},ba=/\[.*?\]$/,S=/\(\)$/,ua=h("<div>")[0],Yb=ua.textContent!==l,Zb=/<.*?>/g;p=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a, | ||
| 77 | +b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new q(ya(this[v.iApiIndex])):new q(this)};this.fnAddData=function(a,b){var c=this.api(!0),d=h.isArray(a)&&(h.isArray(a[0])||h.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===l||b)&&c.draw();return d.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===l||a?b.draw(!1):(""!==d.sX||""!==d.sY)&&Y(c)};this.fnClearTable=function(a){var b=this.api(!0).clear(); | ||
| 78 | +(a===l||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0),a=d.rows(a),e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===l||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(!a)};this.fnFilter=function(a,b,c,d,e,h){e=this.api(!0);null===b||b===l?e.search(a,c,d,h):e.column(b).search(a,c,d,h);e.draw()};this.fnGetData=function(a,b){var c= | ||
| 79 | +this.api(!0);if(a!==l){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==l||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==l?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()}; | ||
| 80 | +this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){var c=this.api(!0).page(a);(b===l||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===l||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return ya(this[v.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h= | ||
| 81 | +this.api(!0);c===l||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===l||e)&&h.columns.adjust();(d===l||d)&&h.draw();return 0};this.fnVersionCheck=v.fnVersionCheck;var b=this,c=a===l,d=this.length;c&&(a={});this.oApi=this.internal=v.internal;for(var e in p.ext.internal)e&&(this[e]=Nb(e));this.each(function(){var e={},g=1<d?Lb(e,a,!0):a,i=0,j,n=this.getAttribute("id"),e=!1,m=p.defaults;if("table"!=this.nodeName.toLowerCase())R(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{eb(m); | ||
| 82 | +fb(m.column);G(m,m,!0);G(m.column,m.column,!0);G(m,g);var o=p.settings,i=0;for(j=o.length;i<j;i++){if(o[i].nTable==this){j=g.bRetrieve!==l?g.bRetrieve:m.bRetrieve;if(c||j)return o[i].oInstance;if(g.bDestroy!==l?g.bDestroy:m.bDestroy){o[i].oInstance.fnDestroy();break}else{R(o[i],0,"Cannot reinitialise DataTable",3);return}}if(o[i].sTableId==this.id){o.splice(i,1);break}}if(null===n||""===n)this.id=n="DataTables_Table_"+p.ext._unique++;var k=h.extend(!0,{},p.models.oSettings,{nTable:this,oApi:b.internal, | ||
| 83 | +oInit:g,sDestroyWidth:h(this)[0].style.width,sInstance:n,sTableId:n});o.push(k);k.oInstance=1===b.length?b:h(this).dataTable();eb(g);g.oLanguage&&O(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=h.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]);g=Lb(h.extend(!0,{},m),g);D(k.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));D(k,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber", | ||
| 84 | +"sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"],["bJQueryUI","bJUI"]]);D(k.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]); | ||
| 85 | +D(k.oLanguage,g,"fnInfoCallback");y(k,"aoDrawCallback",g.fnDrawCallback,"user");y(k,"aoServerParams",g.fnServerParams,"user");y(k,"aoStateSaveParams",g.fnStateSaveParams,"user");y(k,"aoStateLoadParams",g.fnStateLoadParams,"user");y(k,"aoStateLoaded",g.fnStateLoaded,"user");y(k,"aoRowCallback",g.fnRowCallback,"user");y(k,"aoRowCreatedCallback",g.fnCreatedRow,"user");y(k,"aoHeaderCallback",g.fnHeaderCallback,"user");y(k,"aoFooterCallback",g.fnFooterCallback,"user");y(k,"aoInitComplete",g.fnInitComplete, | ||
| 86 | +"user");y(k,"aoPreDrawCallback",g.fnPreDrawCallback,"user");n=k.oClasses;g.bJQueryUI?(h.extend(n,p.ext.oJUIClasses,g.oClasses),g.sDom===m.sDom&&"lfrtip"===m.sDom&&(k.sDom='<"H"lfr>t<"F"ip>'),k.renderer)?h.isPlainObject(k.renderer)&&!k.renderer.header&&(k.renderer.header="jqueryui"):k.renderer="jqueryui":h.extend(n,p.ext.classes,g.oClasses);h(this).addClass(n.sTable);if(""!==k.oScroll.sX||""!==k.oScroll.sY)k.oScroll.iBarWidth=Hb();!0===k.oScroll.sX&&(k.oScroll.sX="100%");k.iInitDisplayStart===l&&(k.iInitDisplayStart= | ||
| 87 | +g.iDisplayStart,k._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(k.bDeferLoading=!0,i=h.isArray(g.iDeferLoading),k._iRecordsDisplay=i?g.iDeferLoading[0]:g.iDeferLoading,k._iRecordsTotal=i?g.iDeferLoading[1]:g.iDeferLoading);""!==g.oLanguage.sUrl?(k.oLanguage.sUrl=g.oLanguage.sUrl,h.getJSON(k.oLanguage.sUrl,null,function(a){O(a);G(m.oLanguage,a);h.extend(true,k.oLanguage,g.oLanguage,a);va(k)}),e=!0):h.extend(!0,k.oLanguage,g.oLanguage);null===g.asStripeClasses&&(k.asStripeClasses=[n.sStripeOdd, | ||
| 88 | +n.sStripeEven]);var i=k.asStripeClasses,r=h("tbody tr:eq(0)",this);-1!==h.inArray(!0,h.map(i,function(a){return r.hasClass(a)}))&&(h("tbody tr",this).removeClass(i.join(" ")),k.asDestroyStripes=i.slice());var o=[],q,i=this.getElementsByTagName("thead");0!==i.length&&(ca(k.aoHeader,i[0]),o=pa(k));if(null===g.aoColumns){q=[];i=0;for(j=o.length;i<j;i++)q.push(null)}else q=g.aoColumns;i=0;for(j=q.length;i<j;i++)Ea(k,o?o[i]:null);ib(k,g.aoColumnDefs,q,function(a,b){ia(k,a,b)});if(r.length){var s=function(a, | ||
| 89 | +b){return a.getAttribute("data-"+b)?b:null};h.each(la(k,r[0]).cells,function(a,b){var c=k.aoColumns[a];if(c.mData===a){var d=s(b,"sort")||s(b,"order"),e=s(b,"filter")||s(b,"search");if(d!==null||e!==null){c.mData={_:a+".display",sort:d!==null?a+".@data-"+d:l,type:d!==null?a+".@data-"+d:l,filter:e!==null?a+".@data-"+e:l};ia(k,a)}}})}var t=k.oFeatures;g.bStateSave&&(t.bStateSave=!0,Kb(k,g),y(k,"aoDrawCallback",xa,"state_save"));if(g.aaSorting===l){o=k.aaSorting;i=0;for(j=o.length;i<j;i++)o[i][1]=k.aoColumns[i].asSorting[0]}wa(k); | ||
| 90 | +t.bSort&&y(k,"aoDrawCallback",function(){if(k.bSorted){var a=T(k),b={};h.each(a,function(a,c){b[c.src]=c.dir});u(k,null,"order",[k,a,b]);Jb(k)}});y(k,"aoDrawCallback",function(){(k.bSorted||A(k)==="ssp"||t.bDeferRender)&&wa(k)},"sc");gb(k);i=h(this).children("caption").each(function(){this._captionSide=h(this).css("caption-side")});j=h(this).children("thead");0===j.length&&(j=h("<thead/>").appendTo(this));k.nTHead=j[0];j=h(this).children("tbody");0===j.length&&(j=h("<tbody/>").appendTo(this));k.nTBody= | ||
| 91 | +j[0];j=h(this).children("tfoot");if(0===j.length&&0<i.length&&(""!==k.oScroll.sX||""!==k.oScroll.sY))j=h("<tfoot/>").appendTo(this);0===j.length||0===j.children().length?h(this).addClass(n.sNoFooter):0<j.length&&(k.nTFoot=j[0],ca(k.aoFooter,k.nTFoot));if(g.aaData)for(i=0;i<g.aaData.length;i++)I(k,g.aaData[i]);else(k.bDeferLoading||"dom"==A(k))&&ka(k,h(k.nTBody).children("tr"));k.aiDisplay=k.aiDisplayMaster.slice();k.bInitialised=!0;!1===e&&va(k)}});b=null;return this};var Sb=[],x=Array.prototype, | ||
| 92 | +bc=function(a){var b,c,d=p.settings,e=h.map(d,function(a){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase())return b=h.inArray(a,e),-1!==b?[d[b]]:null;if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?c=h(a):a instanceof h&&(c=a)}else return[];if(c)return c.map(function(){b=h.inArray(this,e);return-1!==b?d[b]:null}).toArray()};q=function(a,b){if(!this instanceof q)throw"DT API must be constructed as a new object"; | ||
| 93 | +var c=[],d=function(a){(a=bc(a))&&c.push.apply(c,a)};if(h.isArray(a))for(var e=0,f=a.length;e<f;e++)d(a[e]);else d(a);this.context=Ma(c);b&&this.push.apply(this,b.toArray?b.toArray():b);this.selector={rows:null,cols:null,opts:null};q.extend(this,this,Sb)};p.Api=q;q.prototype={concat:x.concat,context:[],each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new q(b[a],this[a]):null},filter:function(a){var b=[]; | ||
| 94 | +if(x.filter)b=x.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new q(this.context,b)},flatten:function(){var a=[];return new q(this.context,a.concat.apply(a,this.toArray()))},join:x.join,indexOf:x.indexOf||function(a,b){for(var c=b||0,d=this.length;c<d;c++)if(this[c]===a)return c;return-1},iterator:function(a,b,c){var d=[],e,f,g,h,j,n=this.context,m,o,k=this.selector;"string"===typeof a&&(c=b,b=a,a=!1);f=0;for(g=n.length;f<g;f++){var p= | ||
| 95 | +new q(n[f]);if("table"===b)e=c.call(p,n[f],f),e!==l&&d.push(e);else if("columns"===b||"rows"===b)e=c.call(p,n[f],this[f],f),e!==l&&d.push(e);else if("column"===b||"column-rows"===b||"row"===b||"cell"===b){o=this[f];"column-rows"===b&&(m=Ba(n[f],k.opts));h=0;for(j=o.length;h<j;h++)e=o[h],e="cell"===b?c.call(p,n[f],e.row,e.column,f,h):c.call(p,n[f],e,f,h,m),e!==l&&d.push(e)}}return d.length?(a=new q(n,a?d.concat.apply([],d):d),b=a.selector,b.rows=k.rows,b.cols=k.cols,b.opts=k.opts,a):this},lastIndexOf:x.lastIndexOf|| | ||
| 96 | +function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(x.map)b=x.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new q(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:x.pop,push:x.push,reduce:x.reduce||function(a,b){return hb(this,a,b,0,this.length,1)},reduceRight:x.reduceRight||function(a,b){return hb(this,a,b,this.length-1,-1,-1)},reverse:x.reverse,selector:null, | ||
| 97 | +shift:x.shift,sort:x.sort,splice:x.splice,toArray:function(){return x.slice.call(this)},to$:function(){return h(this)},toJQuery:function(){return h(this)},unique:function(){return new q(this.context,Ma(this))},unshift:x.unshift};q.extend=function(a,b,c){if(b&&(b instanceof q||b.__dt_wrapper)){var d,e,f,g=function(a,b,c){return function(){var d=b.apply(a,arguments);q.extend(d,d,c.methodExt);return d}};d=0;for(e=c.length;d<e;d++)f=c[d],b[f.name]="function"===typeof f.val?g(a,f.val,f):h.isPlainObject(f.val)? | ||
| 98 | +{}:f.val,b[f.name].__dt_wrapper=!0,q.extend(a,b[f.name],f.propExt)}};q.register=r=function(a,b){if(h.isArray(a))for(var c=0,d=a.length;c<d;c++)q.register(a[c],b);else for(var e=a.split("."),f=Sb,g,i,c=0,d=e.length;c<d;c++){g=(i=-1!==e[c].indexOf("()"))?e[c].replace("()",""):e[c];var j;a:{j=0;for(var n=f.length;j<n;j++)if(f[j].name===g){j=f[j];break a}j=null}j||(j={name:g,val:{},methodExt:[],propExt:[]},f.push(j));c===d-1?j.val=b:f=i?j.methodExt:j.propExt}};q.registerPlural=t=function(a,b,c){q.register(a, | ||
| 99 | +c);q.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof q?a.length?h.isArray(a[0])?new q(a.context,a[0]):a[0]:l:a})};r("tables()",function(a){var b;if(a){b=q;var c=this.context;if("number"===typeof a)a=[c[a]];else var d=h.map(c,function(a){return a.nTable}),a=h(d).filter(a).map(function(){var a=h.inArray(this,d);return c[a]}).toArray();b=new b(a)}else b=this;return b});r("table()",function(a){var a=this.tables(a),b=a.context;return b.length?new q(b[0]):a});t("tables().nodes()", | ||
| 100 | +"table().node()",function(){return this.iterator("table",function(a){return a.nTable})});t("tables().body()","table().body()",function(){return this.iterator("table",function(a){return a.nTBody})});t("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead})});t("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot})});t("tables().containers()","table().container()",function(){return this.iterator("table", | ||
| 101 | +function(a){return a.nTableWrapper})});r("draw()",function(a){return this.iterator("table",function(b){M(b,!1===a)})});r("page()",function(a){return a===l?this.page.info().page:this.iterator("table",function(b){Ta(b,a)})});r("page.info()",function(){if(0===this.context.length)return l;var a=this.context[0],b=a._iDisplayStart,c=a._iDisplayLength,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(), | ||
| 102 | +recordsDisplay:d}});r("page.len()",function(a){return a===l?0!==this.context.length?this.context[0]._iDisplayLength:l:this.iterator("table",function(b){Ra(b,a)})});var Tb=function(a,b,c){"ssp"==A(a)?M(a,b):(B(a,!0),qa(a,[],function(c){ma(a);for(var c=ra(a,c),d=0,g=c.length;d<g;d++)I(a,c[d]);M(a,b);B(a,!1)}));if(c){var d=new q(a);d.one("draw",function(){c(d.ajax.json())})}};r("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});r("ajax.params()",function(){var a=this.context; | ||
| 103 | +if(0<a.length)return a[0].oAjaxData});r("ajax.reload()",function(a,b){return this.iterator("table",function(c){Tb(c,!1===b,a)})});r("ajax.url()",function(a){var b=this.context;if(a===l){if(0===b.length)return l;b=b[0];return b.ajax?h.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){h.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});r("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Tb(c,!1===b,a)})});var $a=function(a,b){var c= | ||
| 104 | +[],d,e,f,g,i,j;d=typeof a;if(!a||"string"===d||"function"===d||a.length===l)a=[a];f=0;for(g=a.length;f<g;f++){e=a[f]&&a[f].split?a[f].split(","):[a[f]];i=0;for(j=e.length;i<j;i++)(d=b("string"===typeof e[i]?h.trim(e[i]):e[i]))&&d.length&&c.push.apply(c,d)}return c},ab=function(a){a||(a={});a.filter&&!a.search&&(a.search=a.filter);return{search:a.search||"none",order:a.order||"current",page:a.page||"all"}},bb=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a.length=1,a.context= | ||
| 105 | +[a.context[b]],a;a.length=0;return a},Ba=function(a,b){var c,d,e,f=[],g=a.aiDisplay;c=a.aiDisplayMaster;var i=b.search;d=b.order;e=b.page;if("ssp"==A(a))return"removed"===i?[]:U(0,c.length);if("current"==e){c=a._iDisplayStart;for(d=a.fnDisplayEnd();c<d;c++)f.push(g[c])}else if("current"==d||"applied"==d)f="none"==i?c.slice():"applied"==i?g.slice():h.map(c,function(a){return-1===h.inArray(a,g)?a:null});else if("index"==d||"original"==d){c=0;for(d=a.aoData.length;c<d;c++)"none"==i?f.push(c):(e=h.inArray(c, | ||
| 106 | +g),(-1===e&&"removed"==i||0<=e&&"applied"==i)&&f.push(c))}return f};r("rows()",function(a,b){a===l?a="":h.isPlainObject(a)&&(b=a,a="");var b=ab(b),c=this.iterator("table",function(c){var e=b;return $a(a,function(a){var b=Pb(a);if(b!==null&&!e)return[b];var i=Ba(c,e);if(b!==null&&h.inArray(b,i)!==-1)return[b];if(!a)return i;b=ga(c.aoData,i,"nTr");return typeof a==="function"?h.map(i,function(b){var e=c.aoData[b];return a(b,e._aData,e.nTr)?b:null}):a.nodeName&&h.inArray(a,b)!==-1?[a._DT_RowIndex]:h(b).filter(a).map(function(){return this._DT_RowIndex}).toArray()})}); | ||
| 107 | +c.selector.rows=a;c.selector.opts=b;return c});r("rows().nodes()",function(){return this.iterator("row",function(a,b){return a.aoData[b].nTr||l})});r("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return ga(a.aoData,b,"_aData")})});t("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){var d=b.aoData[c];return"search"===a?d._aFilterData:d._aSortData})});t("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b, | ||
| 108 | +c){oa(b,c,a)})});t("rows().indexes()","row().index()",function(){return this.iterator("row",function(a,b){return b})});t("rows().remove()","row().remove()",function(){var a=this;return this.iterator("row",function(b,c,d){var e=b.aoData;e.splice(c,1);for(var f=0,g=e.length;f<g;f++)null!==e[f].nTr&&(e[f].nTr._DT_RowIndex=f);h.inArray(c,b.aiDisplay);na(b.aiDisplayMaster,c);na(b.aiDisplay,c);na(a[d],c,!1);Sa(b)})});r("rows.add()",function(a){var b=this.iterator("table",function(b){var c,f,g,h=[];f=0; | ||
| 109 | +for(g=a.length;f<g;f++)c=a[f],c.nodeName&&"TR"===c.nodeName.toUpperCase()?h.push(ka(b,c)[0]):h.push(I(b,c));return h}),c=this.rows(-1);c.pop();c.push.apply(c,b.toArray());return c});r("row()",function(a,b){return bb(this.rows(a,b))});r("row().data()",function(a){var b=this.context;if(a===l)return b.length&&this.length?b[0].aoData[this[0]]._aData:l;b[0].aoData[this[0]]._aData=a;oa(b[0],this[0],"data");return this});r("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr|| | ||
| 110 | +null:null});r("row.add()",function(a){a instanceof h&&a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&"TR"===a.nodeName.toUpperCase()?ka(b,a)[0]:I(b,a)});return this.row(b[0])});var cb=function(a,b){var c=a.context;c.length&&(c=c[0].aoData[b!==l?b:a[0]],c._details&&(c._details.remove(),c._detailsShow=l,c._details=l))},Ub=function(a,b){var c=a.context;if(c.length&&a.length){var d=c[0].aoData[a[0]];if(d._details){(d._detailsShow=b)?d._details.insertAfter(d.nTr):d._details.detach(); | ||
| 111 | +var e=c[0],f=new q(e),g=e.aoData;f.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<C(g,"_details").length&&(f.on("draw.dt.DT_details",function(a,b){e===b&&f.rows({page:"current"}).eq(0).each(function(a){a=g[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),f.on("column-visibility.dt.DT_details",function(a,b){if(e===b)for(var c,d=aa(b),f=0,h=g.length;f<h;f++)c=g[f],c._details&&c._details.children("td[colspan]").attr("colspan",d)}),f.on("destroy.dt.DT_details",function(a, | ||
| 112 | +b){if(e===b)for(var c=0,d=g.length;c<d;c++)g[c]._details&&cb(f,c)}))}}};r("row().child()",function(a,b){var c=this.context;if(a===l)return c.length&&this.length?c[0].aoData[this[0]]._details:l;if(!0===a)this.child.show();else if(!1===a)cb(this);else if(c.length&&this.length){var d=c[0],c=c[0].aoData[this[0]],e=[],f=function(a,b){if(a.nodeName&&"tr"===a.nodeName.toLowerCase())e.push(a);else{var c=h("<tr><td/></tr>").addClass(b);h("td",c).addClass(b).html(a)[0].colSpan=aa(d);e.push(c[0])}};if(h.isArray(a)|| | ||
| 113 | +a instanceof h)for(var g=0,i=a.length;g<i;g++)f(a[g],b);else f(a,b);c._details&&c._details.remove();c._details=h(e);c._detailsShow&&c._details.insertAfter(c.nTr)}return this});r(["row().child.show()","row().child().show()"],function(){Ub(this,!0);return this});r(["row().child.hide()","row().child().hide()"],function(){Ub(this,!1);return this});r(["row().child.remove()","row().child().remove()"],function(){cb(this);return this});r("row().child.isShown()",function(){var a=this.context;return a.length&& | ||
| 114 | +this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var cc=/^(.+):(name|visIdx|visible)$/,Vb=function(a,b,c,d,e){for(var c=[],d=0,f=e.length;d<f;d++)c.push(w(a,e[d],b));return c};r("columns()",function(a,b){a===l?a="":h.isPlainObject(a)&&(b=a,a="");var b=ab(b),c=this.iterator("table",function(c){var e=a,f=b,g=c.aoColumns,i=C(g,"sName"),j=C(g,"nTh");return $a(e,function(a){var b=Pb(a);if(a==="")return U(g.length);if(b!==null)return[b>=0?b:g.length+b];if(typeof a==="function"){var e=Ba(c,f);return h.map(g, | ||
| 115 | +function(b,f){return a(f,Vb(c,f,0,0,e),j[f])?f:null})}var k=typeof a==="string"?a.match(cc):"";if(k)switch(k[2]){case "visIdx":case "visible":b=parseInt(k[1],10);if(b<0){var l=h.map(g,function(a,b){return a.bVisible?b:null});return[l[l.length+b]]}return[ja(c,b)];case "name":return h.map(i,function(a,b){return a===k[1]?b:null})}else return h(j).filter(a).map(function(){return h.inArray(this,j)}).toArray()})});c.selector.cols=a;c.selector.opts=b;return c});t("columns().header()","column().header()", | ||
| 116 | +function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh})});t("columns().footer()","column().footer()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf})});t("columns().data()","column().data()",function(){return this.iterator("column-rows",Vb)});t("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData})});t("columns().cache()","column().cache()",function(a){return this.iterator("column-rows", | ||
| 117 | +function(b,c,d,e,f){return ga(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)})});t("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ga(a.aoData,e,"anCells",b)})});t("columns().visible()","column().visible()",function(a,b){return this.iterator("column",function(c,d){var e;if(a===l)e=c.aoColumns[d].bVisible;else{var f=c.aoColumns;e=f[d];var g=c.aoData,i,j,n;if(a===l)e=e.bVisible;else{if(e.bVisible!==a){if(a){var m=h.inArray(!0,C(f, | ||
| 118 | +"bVisible"),d+1);i=0;for(j=g.length;i<j;i++)n=g[i].nTr,f=g[i].anCells,n&&n.insertBefore(f[d],f[m]||null)}else h(C(c.aoData,"anCells",d)).detach();e.bVisible=a;da(c,c.aoHeader);da(c,c.aoFooter);if(b===l||b)X(c),(c.oScroll.sX||c.oScroll.sY)&&Y(c);u(c,null,"column-visibility",[c,d,a]);xa(c)}e=void 0}}return e})});t("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?$(b,c):c})});r("columns.adjust()",function(){return this.iterator("table", | ||
| 119 | +function(a){X(a)})});r("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return ja(c,b);if("fromData"===a||"toVisible"===a)return $(c,b)}});r("column()",function(a,b){return bb(this.columns(a,b))});r("cells()",function(a,b,c){h.isPlainObject(a)&&(typeof a.row!==l?(c=b,b=null):(c=a,a=null));h.isPlainObject(b)&&(c=b,b=null);if(null===b||b===l)return this.iterator("table",function(b){var d=a,e=ab(c),f=b.aoData,g=Ba(b,e),e=ga(f,g,"anCells"), | ||
| 120 | +i=h([].concat.apply([],e)),j,m=b.aoColumns.length,n,p,r,q,s,t;return $a(d,function(a){var c=typeof a==="function";if(a===null||a===l||c){n=[];p=0;for(r=g.length;p<r;p++){j=g[p];for(q=0;q<m;q++){s={row:j,column:q};if(c){t=b.aoData[j];a(s,w(b,j,q),t.anCells[q])&&n.push(s)}else n.push(s)}}return n}return h.isPlainObject(a)?[a]:i.filter(a).map(function(a,b){j=b.parentNode._DT_RowIndex;return{row:j,column:h.inArray(b,f[j].anCells)}}).toArray()})});var d=this.columns(b,c),e=this.rows(a,c),f,g,i,j,n,m=this.iterator("table", | ||
| 121 | +function(a,b){f=[];g=0;for(i=e[b].length;g<i;g++){j=0;for(n=d[b].length;j<n;j++)f.push({row:e[b][g],column:d[b][j]})}return f});h.extend(m.selector,{cols:b,rows:a,opts:c});return m});t("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(a,b,c){return a.aoData[b].anCells[c]})});r("cells().data()",function(){return this.iterator("cell",function(a,b,c){return w(a,b,c)})});t("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell", | ||
| 122 | +function(b,c,d){return b.aoData[c][a][d]})});t("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return w(b,c,d,a)})});t("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,b,c){return{row:b,column:c,columnVisible:$(a,c)}})});r(["cells().invalidate()","cell().invalidate()"],function(a){var b=this.selector;this.rows(b.rows,b.opts).invalidate(a);return this});r("cell()",function(a,b,c){return bb(this.cells(a,b,c))});r("cell().data()", | ||
| 123 | +function(a){var b=this.context,c=this[0];if(a===l)return b.length&&c.length?w(b[0],c[0].row,c[0].column):l;Ha(b[0],c[0].row,c[0].column,a);oa(b[0],c[0].row,"data",c[0].column);return this});r("order()",function(a,b){var c=this.context;if(a===l)return 0!==c.length?c[0].aaSorting:l;"number"===typeof a?a=[[a,b]]:h.isArray(a[0])||(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});r("order.listener()",function(a,b,c){return this.iterator("table", | ||
| 124 | +function(d){Na(d,a,b,c)})});r(["columns().order()","column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];h.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});r("search()",function(a,b,c,d){var e=this.context;return a===l?0!==e.length?e[0].oPreviousSearch.sSearch:l:this.iterator("table",function(e){e.oFeatures.bFilter&&ea(e,h.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});t("columns().search()", | ||
| 125 | +"column().search()",function(a,b,c,d){return this.iterator("column",function(e,f){var g=e.aoPreSearchCols;if(a===l)return g[f].sSearch;e.oFeatures.bFilter&&(h.extend(g[f],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),ea(e,e.oPreviousSearch,1))})});r("state()",function(){return this.context.length?this.context[0].oSavedState:null});r("state.clear()",function(){return this.iterator("table",function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});r("state.loaded()", | ||
| 126 | +function(){return this.context.length?this.context[0].oLoadedState:null});r("state.save()",function(){return this.iterator("table",function(a){xa(a)})});p.versionCheck=p.fnVersionCheck=function(a){for(var b=p.version.split("."),a=a.split("."),c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};p.isDataTable=p.fnIsDataTable=function(a){var b=h(a).get(0),c=!1;h.each(p.settings,function(a,e){if(e.nTable===b||e.nScrollHead===b||e.nScrollFoot===b)c=!0}); | ||
| 127 | +return c};p.tables=p.fnTables=function(a){return jQuery.map(p.settings,function(b){if(!a||a&&h(b.nTable).is(":visible"))return b.nTable})};p.util={throttle:ta};p.camelToHungarian=G;r("$()",function(a,b){var c=this.rows(b).nodes(),c=h(c);return h([].concat(c.filter(a).toArray(),c.find(a).toArray()))});h.each(["on","one","off"],function(a,b){r(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0].match(/\.dt\b/)||(a[0]+=".dt");var d=h(this.tables().nodes());d[b].apply(d,a);return this})}); | ||
| 128 | +r("clear()",function(){return this.iterator("table",function(a){ma(a)})});r("settings()",function(){return new q(this.context,this.context)});r("data()",function(){return this.iterator("table",function(a){return C(a.aoData,"_aData")}).flatten()});r("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,i=b.nTFoot,j=h(e),f=h(f),l=h(b.nTableWrapper),m=h.map(b.aoData,function(a){return a.nTr}),o;b.bDestroying= | ||
| 129 | +!0;u(b,"aoDestroyCallback","destroy",[b]);a||(new q(b)).columns().visible(!0);l.unbind(".DT").find(":not(tbody *)").unbind(".DT");h(Da).unbind(".DT-"+b.sInstance);e!=g.parentNode&&(j.children("thead").detach(),j.append(g));i&&e!=i.parentNode&&(j.children("tfoot").detach(),j.append(i));j.detach();l.detach();b.aaSorting=[];b.aaSortingFixed=[];wa(b);h(m).removeClass(b.asStripeClasses.join(" "));h("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);b.bJUI&& | ||
| 130 | +(h("th span."+d.sSortIcon+", td span."+d.sSortIcon,g).detach(),h("th, td",g).each(function(){var a=h("div."+d.sSortJUIWrapper,this);h(this).append(a.contents());a.detach()}));!a&&c&&c.insertBefore(e,b.nTableReinsertBefore);f.children().detach();f.append(m);j.css("width",b.sDestroyWidth).removeClass(d.sTable);(o=b.asDestroyStripes.length)&&f.children().each(function(a){h(this).addClass(b.asDestroyStripes[a%o])});c=h.inArray(b,p.settings);-1!==c&&p.settings.splice(c,1)})});p.version="1.10.3";p.settings= | ||
| 131 | +[];p.models={};p.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};p.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null};p.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std", | ||
| 132 | +sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};p.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1, | ||
| 133 | +fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){}},fnStateLoadParams:null, | ||
| 134 | +fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"}, | ||
| 135 | +sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:h.extend({},p.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null, | ||
| 136 | +sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null};V(p.defaults);p.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};V(p.defaults.column);p.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null, | ||
| 137 | +bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[], | ||
| 138 | +sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null, | ||
| 139 | +bAjaxDataGet:!0,jqXHR:null,json:l,oAjaxData:l,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==A(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==A(this)?1*this._iRecordsDisplay: | ||
| 140 | +this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{}};p.ext=v={classes:{},errMode:"alert",feature:[],search:[],internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[], | ||
| 141 | +search:{},order:{}},_unique:0,fnVersionCheck:p.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:p.version};h.extend(v,{afnFiltering:v.search,aTypes:v.type.detect,ofnSearch:v.type.search,oSort:v.type.order,afnSortData:v.order,aoFeatures:v.feature,oApi:v.internal,oStdClasses:v.classes,oPagination:v.pager});h.extend(p.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty", | ||
| 142 | +sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner", | ||
| 143 | +sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var Ca="",Ca="",E=Ca+"ui-state-default",ha=Ca+"css_right ui-icon ui-icon-",Wb=Ca+"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix";h.extend(p.ext.oJUIClasses,p.ext.classes,{sPageButton:"fg-button ui-button "+ | ||
| 144 | +E,sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:E+" sorting_asc",sSortDesc:E+" sorting_desc",sSortable:E+" sorting",sSortableAsc:E+" sorting_asc_disabled",sSortableDesc:E+" sorting_desc_disabled",sSortableNone:E+" sorting_disabled",sSortJUIAsc:ha+"triangle-1-n",sSortJUIDesc:ha+"triangle-1-s",sSortJUI:ha+"carat-2-n-s",sSortJUIAscAllowed:ha+"carat-1-n",sSortJUIDescAllowed:ha+ | ||
| 145 | +"carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead "+E,sScrollFoot:"dataTables_scrollFoot "+E,sHeaderTH:E,sFooterTH:E,sJUIHeader:Wb+" ui-corner-tl ui-corner-tr",sJUIFooter:Wb+" ui-corner-bl ui-corner-br"});var Mb=p.ext.pager;h.extend(Mb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},simple_numbers:function(a,b){return["previous",Wa(a,b),"next"]},full_numbers:function(a,b){return["first", | ||
| 146 | +"previous",Wa(a,b),"next","last"]},_numbers:Wa,numbers_length:7});h.extend(!0,p.ext.renderer,{pageButton:{_:function(a,b,c,d,e,f){var g=a.oClasses,i=a.oLanguage.oPaginate,j,l,m=0,o=function(b,d){var k,p,r,q,s=function(b){Ta(a,b.data.action,true)};k=0;for(p=d.length;k<p;k++){q=d[k];if(h.isArray(q)){r=h("<"+(q.DT_el||"div")+"/>").appendTo(b);o(r,q)}else{l=j="";switch(q){case "ellipsis":b.append("<span>…</span>");break;case "first":j=i.sFirst;l=q+(e>0?"":" "+g.sPageButtonDisabled);break;case "previous":j= | ||
| 147 | +i.sPrevious;l=q+(e>0?"":" "+g.sPageButtonDisabled);break;case "next":j=i.sNext;l=q+(e<f-1?"":" "+g.sPageButtonDisabled);break;case "last":j=i.sLast;l=q+(e<f-1?"":" "+g.sPageButtonDisabled);break;default:j=q+1;l=e===q?g.sPageButtonActive:""}if(j){r=h("<a>",{"class":g.sPageButton+" "+l,"aria-controls":a.sTableId,"data-dt-idx":m,tabindex:a.iTabIndex,id:c===0&&typeof q==="string"?a.sTableId+"_"+q:null}).html(j).appendTo(b);Va(r,{action:q},s);m++}}}};try{var k=h(P.activeElement).data("dt-idx");o(h(b).empty(), | ||
| 148 | +d);k!==null&&h(b).find("[data-dt-idx="+k+"]").focus()}catch(p){}}}});var za=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Qb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};h.extend(v.type.order,{"date-pre":function(a){return Date.parse(a)||0},"html-pre":function(a){return H(a)?"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return H(a)?"":"string"===typeof a?a.toLowerCase():!a.toString?"":a.toString()},"string-asc":function(a, | ||
| 149 | +b){return a<b?-1:a>b?1:0},"string-desc":function(a,b){return a<b?1:a>b?-1:0}});db("");h.extend(p.ext.type.detect,[function(a,b){var c=b.oLanguage.sDecimal;return Za(a,c)?"num"+c:null},function(a){if(a&&!(a instanceof Date)&&(!$b.test(a)||!ac.test(a)))return null;var b=Date.parse(a);return null!==b&&!isNaN(b)||H(a)?"date":null},function(a,b){var c=b.oLanguage.sDecimal;return Za(a,c,!0)?"num-fmt"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Rb(a,c)?"html-num"+c:null},function(a,b){var c= | ||
| 150 | +b.oLanguage.sDecimal;return Rb(a,c,!0)?"html-num-fmt"+c:null},function(a){return H(a)||"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);h.extend(p.ext.type.search,{html:function(a){return H(a)?a:"string"===typeof a?a.replace(Ob," ").replace(Aa,""):""},string:function(a){return H(a)?a:"string"===typeof a?a.replace(Ob," "):a}});h.extend(!0,p.ext.renderer,{header:{_:function(a,b,c,d){h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(c.sSortingClass+" "+d.sSortAsc+ | ||
| 151 | +" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass)}})},jqueryui:function(a,b,c,d){h("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass);b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+ | ||
| 152 | +" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass(h[e]=="asc"?d.sSortJUIAsc:h[e]=="desc"?d.sSortJUIDesc:c.sSortingClassJUI)}})}}});p.render={number:function(a,b,c,d){return{display:function(e){var f=0>e?"-":"",e=Math.abs(parseFloat(e)),g=parseInt(e,10),e=c?b+(e-g).toFixed(c).substring(2):"";return f+(d||"")+g.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+e}}}};h.extend(p.ext.internal,{_fnExternApiFunc:Nb,_fnBuildAjax:qa,_fnAjaxUpdate:kb,_fnAjaxParameters:tb,_fnAjaxUpdateDraw:ub, | ||
| 153 | +_fnAjaxDataSrc:ra,_fnAddColumn:Ea,_fnColumnOptions:ia,_fnAdjustColumnSizing:X,_fnVisibleToColumnIndex:ja,_fnColumnIndexToVisible:$,_fnVisbleColumns:aa,_fnGetColumns:Z,_fnColumnTypes:Ga,_fnApplyColumnDefs:ib,_fnHungarianMap:V,_fnCamelToHungarian:G,_fnLanguageCompat:O,_fnBrowserDetect:gb,_fnAddData:I,_fnAddTr:ka,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==l?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return h.inArray(c,a.aoData[b].anCells)},_fnGetCellData:w,_fnSetCellData:Ha, | ||
| 154 | +_fnSplitObjNotation:Ja,_fnGetObjectDataFn:W,_fnSetObjectDataFn:Q,_fnGetDataMaster:Ka,_fnClearTable:ma,_fnDeleteIndex:na,_fnInvalidateRow:oa,_fnGetRowElements:la,_fnCreateTr:Ia,_fnBuildHead:jb,_fnDrawHead:da,_fnDraw:L,_fnReDraw:M,_fnAddOptionsHtml:mb,_fnDetectHeader:ca,_fnGetUniqueThs:pa,_fnFeatureHtmlFilter:ob,_fnFilterComplete:ea,_fnFilterCustom:xb,_fnFilterColumn:wb,_fnFilter:vb,_fnFilterCreateSearch:Pa,_fnEscapeRegex:Qa,_fnFilterData:yb,_fnFeatureHtmlInfo:rb,_fnUpdateInfo:Bb,_fnInfoMacros:Cb,_fnInitialise:va, | ||
| 155 | +_fnInitComplete:sa,_fnLengthChange:Ra,_fnFeatureHtmlLength:nb,_fnFeatureHtmlPaginate:sb,_fnPageChange:Ta,_fnFeatureHtmlProcessing:pb,_fnProcessingDisplay:B,_fnFeatureHtmlTable:qb,_fnScrollDraw:Y,_fnApplyToChildren:F,_fnCalculateColumnWidths:Fa,_fnThrottle:ta,_fnConvertToWidth:Db,_fnScrollingWidthAdjust:Fb,_fnGetWidestNode:Eb,_fnGetMaxLenString:Gb,_fnStringToCss:s,_fnScrollBarWidth:Hb,_fnSortFlatten:T,_fnSort:lb,_fnSortAria:Jb,_fnSortListener:Ua,_fnSortAttachListener:Na,_fnSortingClasses:wa,_fnSortData:Ib, | ||
| 156 | +_fnSaveState:xa,_fnLoadState:Kb,_fnSettingsFromNode:ya,_fnLog:R,_fnMap:D,_fnBindAction:Va,_fnCallbackReg:y,_fnCallbackFire:u,_fnLengthOverflow:Sa,_fnRenderer:Oa,_fnDataSource:A,_fnRowAttributes:La,_fnCalculateEnd:function(){}});h.fn.dataTable=p;h.fn.dataTableSettings=p.settings;h.fn.dataTableExt=p.ext;h.fn.DataTable=function(a){return h(this).dataTable(a).api()};h.each(p,function(a,b){h.fn.DataTable[a]=b});return h.fn.dataTable};"function"===typeof define&&define.amd?define("datatables",["jquery"], | ||
| 157 | +O):"object"===typeof exports?O(require("jquery")):jQuery&&!jQuery.fn.dataTable&&O(jQuery)})(window,document); |
upload/1x_adm/view/seo_package/jquery.min.js
0 → 100644
| 1 | +/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ | ||
| 2 | +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) | ||
| 3 | +},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b)) | ||
| 4 | +},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec=/#.*$/,fc=/([?&])_=[^&]*/,gc=/^(.*?):[ \t]*([^\r\n]*)$/gm,hc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ic=/^(?:GET|HEAD)$/,jc=/^\/\//,kc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lc={},mc={},nc="*/".concat("*"),oc=a.location.href,pc=kc.exec(oc.toLowerCase())||[];function qc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rc(a,b,c,d){var e={},f=a===mc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function uc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:oc,type:"GET",isLocal:hc.test(pc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sc(sc(a,n.ajaxSettings),b):sc(n.ajaxSettings,a)},ajaxPrefilter:qc(lc),ajaxTransport:qc(mc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gc.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||oc)+"").replace(ec,"").replace(jc,pc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pc[1]&&h[2]===pc[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pc[3]||("http:"===pc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rc(lc,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ic.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fc.test(d)?d.replace(fc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rc(mc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tc(k,v,f)),u=uc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vc=/%20/g,wc=/\[\]$/,xc=/\r?\n/g,yc=/^(?:submit|button|image|reset|file)$/i,zc=/^(?:input|select|textarea|keygen)/i;function Ac(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wc.test(a)?d(a,e):Ac(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ac(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ac(c,a[c],b,e);return d.join("&").replace(vc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zc.test(this.nodeName)&&!yc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xc,"\r\n")}}):{name:b.name,value:c.replace(xc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bc=0,Cc={},Dc={0:200,1223:204},Ec=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cc)Cc[a]()}),k.cors=!!Ec&&"withCredentials"in Ec,k.ajax=Ec=!!Ec,n.ajaxTransport(function(a){var b;return k.cors||Ec&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Dc[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fc=[],Gc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hc)return Hc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ic=a.document.documentElement;function Jc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ic;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ic})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kc=a.jQuery,Lc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lc),b&&a.jQuery===n&&(a.jQuery=Kc),n},typeof b===U&&(a.jQuery=a.$=n),n}); |
| 1 | +.clearfix:before,.clearfix:after{content:"";display:table}.clearfix:after{clear:both}.clearfix{*zoom:1}.prettycheckbox,.prettyradio{display:inline-block;padding:0;margin:0}.prettycheckbox>a,.prettyradio>a{height:30px;width:30px;display:block;float:left;cursor:pointer;margin:0;background:url('img/prettyCheckable.png')}.prettycheckbox>a:focus,.prettyradio>a:focus{outline:0 none}.prettycheckbox label,.prettyradio label{display:block;float:left;margin:6px 5px;cursor:pointer}.prettycheckbox a.disabled,.prettycheckbox label.disabled,.prettyradio a.disabled,.prettyradio label.disabled{cursor:not-allowed}.prettycheckbox>a{background-position:0 0}.prettycheckbox>a:focus{background-position:-30px 0}.prettycheckbox>a.checked{background-position:-60px 0}.prettycheckbox>a.checked:focus{background-position:-90px 0}.prettycheckbox>a.checked.disabled{background-position:-150px 0}.prettycheckbox>a.disabled{background-position:-120px 0}.prettyradio>a{background-position:-180px 0}.prettyradio>a:focus{background-position:-210px 0}.prettyradio>a.checked{background-position:-240px 0}.prettyradio>a.checked:focus{background-position:-270px 0}.prettyradio>a.checked.disabled{background-position:-330px 0}.prettyradio>a.disabled{background-position:-300px 0} | ||
| 2 | +prettycheckbox label::selection,.prettyradio label::selection{background:transparent;}.prettycheckbox label::-moz-selection,.prettyradio label::-moz-selection{background:transparent;} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +!function(e,t,a,i){"use strict";var n="prettyCheckable",s="plugin_"+n,l={label:"",labelPosition:"right",customClass:"",color:"blue"},o=function(a){t.ko&&e(a).on("change",function(t){if(t.preventDefault(),t.originalEvent===i){var a=e(this).closest(".clearfix"),n=e(a).find("a:first"),s=n.hasClass("checked");s===!0?n.addClass("checked"):n.removeClass("checked")}}),a.find("a:first, label").on("touchstart click",function(a){a.preventDefault();var i=e(this).closest(".clearfix"),n=i.find("input"),s=i.find("a:first");s.hasClass("disabled")!==!0&&("radio"===n.prop("type")&&e('input[name="'+n.attr("name")+'"]').each(function(t,a){e(a).prop("checked",!1).parent().find("a:first").removeClass("checked")}),t.ko?ko.utils.triggerEvent(n[0],"click"):n.prop("checked")?n.prop("checked",!1).change():n.prop("checked",!0).change(),s.toggleClass("checked"))}),a.find("a:first").on("keyup",function(t){32===t.keyCode&&e(this).click()})},r=function(t){this.element=t,this.options=e.extend({},l)};r.prototype={init:function(t){e.extend(this.options,t);var a=e(this.element);a.parent().addClass("has-pretty-child"),a.css("display","none");var n=a.data("type")!==i?a.data("type"):a.attr("type"),s=null,l=a.attr("id");if(l!==i){var r=e("label[for="+l+"]");r.length>0&&(s=r.text())}""===this.options.label&&(this.options.label=s),s=a.data("label")!==i?a.data("label"):this.options.label;var c=a.data("labelposition")!==i?"label"+a.data("labelposition"):"label"+this.options.labelPosition,d=a.data("customclass")!==i?a.data("customclass"):this.options.customClass,p=a.data("color")!==i?a.data("color"):this.options.color,h=a.prop("disabled")===!0?"disabled":"",f=["pretty"+n,c,d,p].join(" ");a.wrap('<div class="clearfix '+f+'"></div>').parent().html();var u=[],b=a.prop("checked")?"checked":"";"labelright"===c?(u.push('<a href="#" class="'+b+" "+h+'"></a>'),u.push('<label for="'+a.attr("id")+'">'+s+"</label>")):"labelnone"===c?u.push('<a href="#" class="'+b+" "+h+'"></a>'):(u.push('<label for="'+a.attr("id")+'">'+s+"</label>"),u.push('<a href="#" class="'+b+" "+h+'"></a>')),a.parent().append(u.join("\n")),o(a.parent())},check:function(){"radio"===e(this.element).prop("type")&&e('input[name="'+e(this.element).attr("name")+'"]').each(function(t,a){e(a).prop("checked",!1).attr("checked",!1).parent().find("a:first").removeClass("checked")}),e(this.element).prop("checked",!0).attr("checked",!0).parent().find("a:first").addClass("checked")},uncheck:function(){e(this.element).prop("checked",!1).attr("checked",!1).parent().find("a:first").removeClass("checked")},enable:function(){e(this.element).removeAttr("disabled").parent().find("a:first").removeClass("disabled")},disable:function(){e(this.element).attr("disabled","disabled").parent().find("a:first").addClass("disabled")},destroy:function(){var t=e(this.element),a=t.clone(),n=t.attr("id");if(n!==i){var s=e("label[for="+n+"]");s.length>0&&s.insertBefore(t.parent())}a.removeAttr("style").insertAfter(s),t.parent().remove()}},e.fn[n]=function(t){var a,i;if(this.data(s)instanceof r||this.data(s,new r(this)),i=this.data(s),i.element=this,"undefined"==typeof t||"object"==typeof t)"function"==typeof i.init&&i.init(t);else{if("string"==typeof t&&"function"==typeof i[t])return a=Array.prototype.slice.call(arguments,1),i[t].apply(i,a);e.error("Method "+t+" does not exist on jQuery."+n)}}}(jQuery,window,document); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +@import url(https://fonts.googleapis.com/css?family=Lato:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic); | ||
| 2 | + | ||
| 3 | +.radial-progress { | ||
| 4 | + @circle-size: 280px; | ||
| 5 | + @circle-background: #d6dadc; | ||
| 6 | + @circle-color: #97a71d; | ||
| 7 | + @inset-size: 210px; | ||
| 8 | + @inset-color: #fbfbfb; | ||
| 9 | + @transition-length: 1s; | ||
| 10 | + @shadow: 6px 6px 10px rgba(0,0,0,0.2); | ||
| 11 | + @percentage-color: #97a71d; | ||
| 12 | + @percentage-font-size: 35px; | ||
| 13 | + @percentage-text-width: 100px; | ||
| 14 | + | ||
| 15 | + margin: 20px auto; | ||
| 16 | + width: @circle-size; | ||
| 17 | + height: @circle-size; | ||
| 18 | + | ||
| 19 | + background-color: @circle-background; | ||
| 20 | + border-radius: 50%; | ||
| 21 | + .circle { | ||
| 22 | + .mask, .fill, .shadow { | ||
| 23 | + width: @circle-size; | ||
| 24 | + height: @circle-size; | ||
| 25 | + position: absolute; | ||
| 26 | + border-radius: 50%; | ||
| 27 | + } | ||
| 28 | + .shadow { | ||
| 29 | + box-shadow: @shadow inset; | ||
| 30 | + } | ||
| 31 | + .mask, .fill { | ||
| 32 | + -webkit-backface-visibility: hidden; | ||
| 33 | + transition: -webkit-transform @transition-length; | ||
| 34 | + transition: -ms-transform @transition-length; | ||
| 35 | + transition: transform @transition-length; | ||
| 36 | + border-radius: 50%; | ||
| 37 | + } | ||
| 38 | + .mask { | ||
| 39 | + clip: rect(0px, @circle-size, @circle-size, @circle-size/2); | ||
| 40 | + .fill { | ||
| 41 | + clip: rect(0px, @circle-size/2, @circle-size, 0px); | ||
| 42 | + background-color: @circle-color; | ||
| 43 | + } | ||
| 44 | + } | ||
| 45 | + } | ||
| 46 | + .inset { | ||
| 47 | + width: @inset-size; | ||
| 48 | + height: @inset-size; | ||
| 49 | + position: absolute; | ||
| 50 | + margin-left: (@circle-size - @inset-size)/2; | ||
| 51 | + margin-top: (@circle-size - @inset-size)/2; | ||
| 52 | + | ||
| 53 | + background-color: @inset-color; | ||
| 54 | + border-radius: 50%; | ||
| 55 | + box-shadow: @shadow; | ||
| 56 | + .percentage { | ||
| 57 | + height: @percentage-font-size; | ||
| 58 | + width: @percentage-text-width; | ||
| 59 | + overflow: hidden; | ||
| 60 | + | ||
| 61 | + position: absolute; | ||
| 62 | + top: (@inset-size - @percentage-font-size) / 2; | ||
| 63 | + left: (@inset-size - @percentage-text-width) / 2; | ||
| 64 | + | ||
| 65 | + line-height: 1; | ||
| 66 | + .numbers { | ||
| 67 | + margin-top: -@percentage-font-size; | ||
| 68 | + transition: width @transition-length; | ||
| 69 | + span { | ||
| 70 | + width: @percentage-text-width; | ||
| 71 | + display: inline-block; | ||
| 72 | + vertical-align: top; | ||
| 73 | + text-align: center; | ||
| 74 | + font-weight: 800; | ||
| 75 | + font-size: @percentage-font-size; | ||
| 76 | + font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif; | ||
| 77 | + color: @percentage-color; | ||
| 78 | + } | ||
| 79 | + } | ||
| 80 | + } | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @i: 0; | ||
| 84 | + @increment: 180deg / 100; | ||
| 85 | + .loop (@i) when (@i <= 100) { | ||
| 86 | + &[data-progress="@{i}"] { | ||
| 87 | + .circle { | ||
| 88 | + .mask.full, .fill { | ||
| 89 | + -webkit-transform: rotate(@increment * @i); | ||
| 90 | + -ms-transform: rotate(@increment * @i); | ||
| 91 | + transform: rotate(@increment * @i); | ||
| 92 | + } | ||
| 93 | + .fill.fix { | ||
| 94 | + -webkit-transform: rotate(@increment * @i * 2); | ||
| 95 | + -ms-transform: rotate(@increment * @i * 2); | ||
| 96 | + transform: rotate(@increment * @i * 2); | ||
| 97 | + } | ||
| 98 | + } | ||
| 99 | + .inset .percentage .numbers { | ||
| 100 | + width: @i * @percentage-text-width + @percentage-text-width; | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + .loop(@i + 1); | ||
| 104 | + } | ||
| 105 | + .loop(@i); | ||
| 106 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@keyframes fade{10%{transform:scale(1, 1)}35%{transform:scale(1, 1.7)}40%{transform:scale(1, 1.7)}50%{opacity:1}60%{transform:scale(1, 1)}100%{transform:scale(1, 1);opacity:0}}[data-language] code,[class^="lang"] code,pre [data-language],pre [class^="lang"]{opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";animation:50ms ease-in-out 2s forwards fade-in}[data-language] code.rainbow,[class^="lang"] code.rainbow,pre [data-language].rainbow,pre [class^="lang"].rainbow{animation-delay:0s}[data-language] code.loading,[class^="lang"] code.loading,pre [data-language].loading,pre [class^="lang"].loading{animation-play-state:paused}pre{position:relative}pre.loading .preloader div{animation-play-state:running}pre.loading .preloader div:nth-of-type(1){background:#0081f5;animation:fade 1.5s 300ms linear infinite}pre.loading .preloader div:nth-of-type(2){background:#5000f5;animation:fade 1.5s 438ms linear infinite}pre.loading .preloader div:nth-of-type(3){background:#9000f5;animation:fade 1.5s 577ms linear infinite}pre.loading .preloader div:nth-of-type(4){background:#f50419;animation:fade 1.5s 715ms linear infinite}pre.loading .preloader div:nth-of-type(5){background:#f57900;animation:fade 1.5s 853ms linear infinite}pre.loading .preloader div:nth-of-type(6){background:#f5e600;animation:fade 1.5s 992ms linear infinite}pre.loading .preloader div:nth-of-type(7){background:#00f50c;animation:fade 1.5s 1130ms linear infinite}pre .preloader{position:absolute;top:12px;left:10px}pre .preloader div{width:12px;height:12px;border-radius:4px;display:inline-block;margin-right:4px;opacity:0;animation-play-state:paused;animation-fill-mode:forwards}pre{border:1px solid #ccc;word-wrap:break-word;padding:6px 10px;line-height:19px;margin-bottom:20px}pre code{border:0;padding:0;margin:0;border-radius:0}code{border:1px solid #eaeaea;margin:0px 2px;padding:0px 5px;font-size:12px}pre,code{font-family:Consolas, 'Liberation Mono', Courier, monospace;color:#333;background:#f8f8f8;border-radius:3px}pre,pre code{font-size:13px}pre .comment{color:#998}pre .support{color:#0086B3}pre .tag,pre .tag-name{color:navy}pre .keyword,pre .css-property,pre .vendor-fix,pre .sass,pre .class,pre .id,pre .css-value,pre .entity.function,pre .storage.function{font-weight:bold}pre .css-property,pre .css-value,pre .vendor-fix,pre .support.namespace{color:#333}pre .constant.numeric,pre .keyword.unit,pre .hex-color{font-weight:normal;color:#099}pre .entity.class{color:#458}pre .entity.id,pre .entity.function{color:#900}pre .attribute,pre .variable{color:teal}pre .string,pre .support.value{font-weight:normal;color:#d14}pre .regexp{color:#009926} |
| 1 | +/* Rainbow v2.1.2 rainbowco.de | included languages: generic, html, javascript, php */!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Rainbow=t()}(this,function(){"use strict";function e(){return"undefined"!=typeof module&&"object"==typeof module.exports}function t(){return"undefined"==typeof document&&"undefined"!=typeof self}function n(e){var t=e.getAttribute("data-language")||e.parentNode.getAttribute("data-language");if(!t){var n=/\blang(?:uage)?-(\w+)/,r=e.className.match(n)||e.parentNode.className.match(n);r&&(t=r[1])}return t?t.toLowerCase():null}function r(e,t,n,r){return(n!==e||r!==t)&&(n<=e&&r>=t)}function a(e){return e.replace(/</g,"<").replace(/>/g,">").replace(/&(?![\w\#]+;)/g,"&")}function o(e,t){for(var n=0,r=1;r<t;++r)e[r]&&(n+=e[r].length);return n}function i(e,t,n,r){return n>=e&&n<t||r>e&&r<t}function u(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t.sort(function(e,t){return t-e})}function c(e,t,n,r){var a=r.substr(e);return r.substr(0,e)+a.replace(t,n)}function s(t,n){if(e())return global.Worker=require("webworker-threads").Worker,new Worker(__filename);var s=n.toString(),f=u.toString();f+=a.toString(),f+=r.toString(),f+=i.toString(),f+=c.toString(),f+=o.toString(),f+=s;var l=s.match(/function (\w+?)\(/)[1],d=t.toString();d=d.replace(/=new \w+/,"= new "+l);var g=f+"\tthis.onmessage ="+d,m=new Blob([g],{type:"text/javascript"});return new Worker((window.URL||window.webkitURL).createObjectURL(m))}function f(e){function t(){self.postMessage({id:n.id,lang:n.lang,result:a})}var n=e.data,r=new C(n.options),a=r.refract(n.code,n.lang);return n.isNode?(t(),void self.close()):void setTimeout(function(){t()},1e3*n.options.delay)}function l(){return(R||null===j)&&(j=s(f,C)),j}function d(e,t){function n(a){a.data.id===e.id&&(t(a.data),r.removeEventListener("message",n))}var r=l();r.addEventListener("message",n),r.postMessage(e)}function g(e,t,n){return function(r){e.innerHTML=r.result,e.classList.remove("loading"),"PRE"===e.parentNode.tagName&&e.parentNode.classList.remove("loading"),M&&M(e,r.lang),0===--t.c&&n()}}function m(e){return{patterns:S,inheritenceMap:T,aliases:x,globalClass:e.globalClass,delay:isNaN(e.delay)?0:e.delay}}function v(e,t){var n={};"object"==typeof t&&(n=t,t=n.language),t=x[t]||t;var r={id:String.fromCharCode(65+Math.floor(26*Math.random()))+Date.now(),code:e,lang:t,options:m(n),isNode:R};return r}function p(e,t){for(var r={c:0},a=0,o=e;a<o.length;a+=1){var i=o[a],u=n(i);if(!i.classList.contains("rainbow")&&u){i.classList.add("loading"),i.classList.add("rainbow"),"PRE"===i.parentNode.tagName&&i.parentNode.classList.add("loading");var c=i.getAttribute("data-global-class"),s=parseInt(i.getAttribute("data-delay"),10);++r.c,d(v(i.innerHTML,{language:u,globalClass:c,delay:s}),g(i,r,t))}}0===r.c&&t()}function h(e){var t=document.createElement("div");t.className="preloader";for(var n=0;n<7;n++)t.appendChild(document.createElement("div"));e.appendChild(t)}function b(e,t){t=t||function(){},e=e&&"function"==typeof e.getElementsByTagName?e:document;for(var n=e.getElementsByTagName("pre"),r=e.getElementsByTagName("code"),a=[],o=[],i=0,u=n;i<u.length;i+=1){var c=u[i];h(c),c.getElementsByTagName("code").length?c.getAttribute("data-trimmed")||(c.setAttribute("data-trimmed",!0),c.innerHTML=c.innerHTML.trim()):a.push(c)}for(var s=0,f=r;s<f.length;s+=1){var l=f[s];o.push(l)}p(o.concat(a),t)}function w(e){M=e}function y(e,t,n){T[e]||(T[e]=n),S[e]=t.concat(S[e]||[])}function N(e){delete T[e],delete S[e]}function L(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if("string"==typeof e[0]){var n=v(e[0],e[1]);return void d(n,function(e){return function(t){e&&e(t.result,t.lang)}}(e[2]))}return"function"==typeof e[0]?void b(0,e[0]):void b(e[0],e[1])}function E(e,t){x[e]=t}var M,C=function H(e){function t(e,t){for(var n in h)if(n=parseInt(n,10),r(n,h[n],e,t)&&(delete h[n],delete p[n]),i(n,h[n],e,t))return!0;return!1}function n(t,n){var r=t.replace(/\./g," "),a=e.globalClass;return a&&(r+=" "+a),'<span class="'+r+'">'+n+"</span>"}function s(e){for(var t=u(p),n=0,r=t;n<r.length;n+=1){var a=r[n],o=p[a];e=c(a,o.replace,o["with"],e)}return e}function f(e){var t="";return e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),new RegExp(e.source,t)}function l(r,a,i){function s(e){return r.name&&(e=n(r.name,e)),p[w]={replace:m[0],"with":e},h[w]=y,!g&&{remaining:a.substr(y-i),offset:y}}function l(t){var a=m[t];if(a){var i=r.matches[t],u=i.language,s=i.name&&i.matches?i.matches:i,f=function(e,r,a){b=c(o(m,t),e,a?n(a,r):r,b)};if("string"==typeof i)return void f(a,a,i);var l,d=new H(e);if(u)return l=d.refract(a,u),void f(a,l);l=d.refract(a,v,s.length?s:[s]),f(a,l,i.matches?i.name:0)}}void 0===i&&(i=0);var d=r.pattern;if(!d)return!1;var g=!d.global;d=f(d);var m=d.exec(a);if(!m)return!1;!r.name&&r.matches&&"string"==typeof r.matches[0]&&(r.name=r.matches[0],delete r.matches[0]);var b=m[0],w=m.index+i,y=m[0].length+w;if(w===y)return!1;if(t(w,y))return{remaining:a.substr(y-i),offset:y};for(var N=u(r.matches),L=0,E=N;L<E.length;L+=1){var M=E[L];l(M)}return s(b)}function d(e,t){for(var n=0,r=t;n<r.length;n+=1)for(var a=r[n],o=l(a,e);o;)o=l(a,o.remaining,o.offset);return s(e)}function g(t){for(var n=e.patterns[t]||[];e.inheritenceMap[t];)t=e.inheritenceMap[t],n=n.concat(e.patterns[t]||[]);return n}function m(e,t,n){return v=t,n=n||g(t),d(a(e),n)}var v,p={},h={};this.refract=m},S={},T={},x={},A={},R=e(),k=t(),j=null;A={extend:y,remove:N,onHighlight:w,addAlias:E,color:L},R&&(A.colorSync=function(e,t){var n=v(e,t),r=new C(n.options);return r.refract(n.code,n.lang)}),R||k||document.addEventListener("DOMContentLoaded",function(e){A.defer||A.color(e)},!1),k&&(self.onmessage=f);var B=A;return B}); | ||
| 2 | +Rainbow.extend("generic",[{matches:{1:[{name:"keyword.operator",pattern:/\=|\+/g},{name:"keyword.dot",pattern:/\./g}],2:{name:"string",matches:{name:"constant.character.escape",pattern:/\\('|"){1}/g}}},pattern:/(\(|\s|\[|\=|:|\+|\.|\{|,)(('|")([^\\\1]|\\.)*?(\3))/gm},{name:"comment",pattern:/\/\*[\s\S]*?\*\/|(\/\/|\#)(?!.*('|").*?[^:](\/\/|\#)).*?$/gm},{name:"constant.numeric",pattern:/\b(\d+(\.\d+)?(e(\+|\-)?\d+)?(f|d)?|0x[\da-f]+)\b/gi},{matches:{1:"keyword"},pattern:/\b(and|array|as|b(ool(ean)?|reak)|c(ase|atch|har|lass|on(st|tinue))|d(ef|elete|o(uble)?)|e(cho|lse(if)?|xit|xtends|xcept)|f(inally|loat|or(each)?|unction)|global|if|import|int(eger)?|long|new|object|or|pr(int|ivate|otected)|public|return|self|st(ring|ruct|atic)|switch|th(en|is|row)|try|(un)?signed|var|void|while)(?=\b)/gi},{name:"constant.language",pattern:/true|false|null/g},{name:"keyword.operator",pattern:/\+|\!|\-|&(gt|lt|amp);|\||\*|\=/g},{matches:{1:"function.call"},pattern:/(\w+?)(?=\()/g},{matches:{1:"storage.function",2:"entity.name.function"},pattern:/(function)\s(.*?)(?=\()/g}]),Rainbow.extend("html",[{name:"source.php.embedded",matches:{1:"variable.language.php-tag",2:{language:"php"},3:"variable.language.php-tag"},pattern:/(<\?php|<\?=?(?!xml))([\s\S]*?)(\?>)/gm},{name:"source.css.embedded",matches:{1:{matches:{1:"support.tag.style",2:[{name:"entity.tag.style",pattern:/^style/g},{name:"string",pattern:/('|")(.*?)(\1)/g},{name:"entity.tag.style.attribute",pattern:/(\w+)/g}],3:"support.tag.style"},pattern:/(<\/?)(style.*?)(>)/g},2:{language:"css"},3:"support.tag.style",4:"entity.tag.style",5:"support.tag.style"},pattern:/(<style.*?>)([\s\S]*?)(<\/)(style)(>)/gm},{name:"source.js.embedded",matches:{1:{matches:{1:"support.tag.script",2:[{name:"entity.tag.script",pattern:/^script/g},{name:"string",pattern:/('|")(.*?)(\1)/g},{name:"entity.tag.script.attribute",pattern:/(\w+)/g}],3:"support.tag.script"},pattern:/(<\/?)(script.*?)(>)/g},2:{language:"javascript"},3:"support.tag.script",4:"entity.tag.script",5:"support.tag.script"},pattern:/(<script(?! src).*?>)([\s\S]*?)(<\/)(script)(>)/gm},{name:"comment.html",pattern:/<\!--[\S\s]*?-->/g},{matches:{1:"support.tag.open",2:"support.tag.close"},pattern:/(<)|(\/?\??>)/g},{name:"support.tag",matches:{1:"support.tag",2:"support.tag.special",3:"support.tag-name"},pattern:/(<\??)(\/|\!?)(\w+)/g},{matches:{1:"support.attribute"},pattern:/([a-z-]+)(?=\=)/gi},{matches:{1:"support.operator",2:"string.quote",3:"string.value",4:"string.quote"},pattern:/(=)('|")(.*?)(\2)/g},{matches:{1:"support.operator",2:"support.value"},pattern:/(=)([a-zA-Z\-0-9]*)\b/g},{matches:{1:"support.attribute"},pattern:/\s([\w-]+)(?=\s|>)(?![\s\S]*<)/g}]),Rainbow.addAlias("xml","html"),Rainbow.extend("javascript",[{name:"selector",pattern:/\$(?=\.|\()/g},{name:"support",pattern:/\b(window|document)\b/g},{name:"keyword",pattern:/\b(export|default|from)\b/g},{name:"function.call",pattern:/\b(then)(?=\()/g},{name:"variable.language.this",pattern:/\bthis\b/g},{name:"variable.language.super",pattern:/super(?=\.|\()/g},{name:"storage.type",pattern:/\b(const|let|var)(?=\s)/g},{matches:{1:"support.property"},pattern:/\.(length|node(Name|Value))\b/g},{matches:{1:"support.function"},pattern:/(setTimeout|setInterval)(?=\()/g},{matches:{1:"support.method"},pattern:/\.(getAttribute|replace|push|getElementById|getElementsByClassName|setTimeout|setInterval)(?=\()/g},{name:"string.regexp",matches:{1:"string.regexp.open",2:{name:"constant.regexp.escape",pattern:/\\(.){1}/g},3:"string.regexp.close",4:"string.regexp.modifier"},pattern:/(\/)((?![*+?])(?:[^\r\n\[\/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+)(\/)(?!\/)([igm]{0,3})/g},{matches:{1:"storage.type",3:"entity.function"},pattern:/(var)?(\s|^)(\S+)(?=\s?=\s?function\()/g},{matches:{1:"keyword",2:"variable.type"},pattern:/(new)\s+(?!Promise)([^\(]*)(?=\()/g},{name:"entity.function",pattern:/(\w+)(?=:\s{0,}function)/g},{name:"constant.other",pattern:/\*(?= as)/g},{matches:{1:"keyword",2:"constant.other"},pattern:/(export)\s+(\*)/g},{matches:{1:"storage.type.accessor",2:"entity.name.function"},pattern:/(get|set)\s+(\w+)(?=\()/g},{matches:{2:"entity.name.function"},pattern:/(^\s*)(\w+)(?=\([^\)]*?\)\s*\{)/gm},{matches:{1:"storage.type.class",2:"entity.name.class",3:"storage.modifier.extends",4:"entity.other.inherited-class"},pattern:/(class)\s+(\w+)(?:\s+(extends)\s+(\w+))?(?=\s*\{)/g},{name:"storage.type.function.arrow",pattern:/=>/g},{name:"support.class.promise",pattern:/\bPromise(?=(\(|\.))/g}],"generic"),Rainbow.addAlias("js","javascript"),Rainbow.extend("php",[{name:"support",pattern:/\becho\b/gi},{matches:{1:"variable.dollar-sign",2:"variable"},pattern:/(\$)(\w+)\b/g},{name:"constant.language",pattern:/true|false|null/gi},{name:"constant",pattern:/\b[A-Z0-9_]{2,}\b/g},{name:"keyword.dot",pattern:/\./g},{name:"keyword",pattern:/\b(die|end(for(each)?|switch|if)|case|require(_once)?|include(_once)?)(?=\b)/gi},{matches:{1:"keyword",2:{name:"support.class",pattern:/\w+/g}},pattern:/(instanceof)\s([^\$].*?)(\)|;)/gi},{matches:{1:"support.function"},pattern:/\b(array(_key_exists|_merge|_keys|_shift)?|isset|count|empty|unset|printf|is_(array|string|numeric|object)|sprintf|each|date|time|substr|pos|str(len|pos|tolower|_replace|totime)?|ord|trim|in_array|implode|end|preg_match|explode|fmod|define|link|list|get_class|serialize|file|sort|mail|dir|idate|log|intval|header|chr|function_exists|dirname|preg_replace|file_exists)(?=\()/gi},{name:"variable.language.php-tag",pattern:/(<\?(php)?|\?>)/gi},{matches:{1:"keyword.namespace",2:{name:"support.namespace",pattern:/\w+/g}},pattern:/\b(namespace|use)\s(.*?);/gi},{matches:{1:"storage.modifier",2:"storage.class",3:"entity.name.class",4:"storage.modifier.extends",5:"entity.other.inherited-class",6:"storage.modifier.extends",7:"entity.other.inherited-class"},pattern:/\b(abstract|final)?\s?(class|interface|trait)\s(\w+)(\sextends\s)?([\w\\]*)?(\simplements\s)?([\w\\]*)?\s?\{?(\n|\})/gi},{name:"keyword.static",pattern:/self::|static::/gi},{matches:{1:"storage.function",2:"entity.name.function.magic"},pattern:/(function)\s(__.*?)(?=\()/gi},{matches:{1:"storage.function",2:"entity.name.function"},pattern:/(function)\s(.*?)(?=\()/gi},{matches:{1:"keyword.new",2:{name:"support.class",pattern:/\w+/g}},pattern:/\b(new)\s([^\$].*?)(?=\)|\(|;)/gi},{matches:{1:{name:"support.class",pattern:/\w+/g},2:"keyword.static"},pattern:/([\w\\]*?)(::)(?=\b|\$)/g},{matches:{2:{name:"support.class",pattern:/\w+/g}},pattern:/(\(|,\s?)([\w\\]*?)(?=\s\$)/g}],"generic"); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle;}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none;}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px;}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none;}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap;}.select2-container .select2-search--inline{float:left;}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none;}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051;}.select2-results{display:block;}.select2-results__options{list-style:none;margin:0;padding:0;}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none;}.select2-results__option[aria-selected]{cursor:pointer;}.select2-container--open .select2-dropdown{left:0;}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0;}.select2-search--dropdown{display:block;padding:4px;}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box;}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none;}.select2-search--dropdown.select2-search--hide{display:none;}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0);}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px;}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px;}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999;}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px;}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0;}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left;}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto;}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default;}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none;}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px;}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%;}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left;}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px;}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px;}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333;}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder{float:right;}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto;}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto;}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0;}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default;}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none;}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0;}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0;}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa;}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto;}.select2-container--default .select2-results__option[role=group]{padding:0;}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999;}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd;}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em;}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0;}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em;}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em;}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em;}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em;}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em;}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white;}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px;}.select2-container--classic .select2-selection--single{background-color:#f6f6f6;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #ffffff 50%, #eeeeee 100%);background-image:-o-linear-gradient(top, #ffffff 50%, #eeeeee 100%);background-image:linear-gradient(to bottom, #ffffff 50%, #eeeeee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb;}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px;}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px;}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999;}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);background-image:-o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);background-image:linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#cccccc', GradientType=0);}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0;}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left;}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto;}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb;}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none;}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px;}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #ffffff 0%, #eeeeee 50%);background-image:-o-linear-gradient(top, #ffffff 0%, #eeeeee 50%);background-image:linear-gradient(to bottom, #ffffff 0%, #eeeeee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eeeeee 50%, #ffffff 100%);background-image:-o-linear-gradient(top, #eeeeee 50%, #ffffff 100%);background-image:linear-gradient(to bottom, #eeeeee 50%, #ffffff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0;}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb;}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px;}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none;}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px;}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px;}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555;}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto;}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto;}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb;}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0;}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0;}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;}.select2-container--classic .select2-dropdown{background-color:white;border:1px solid transparent;}.select2-container--classic .select2-dropdown--above{border-bottom:none;}.select2-container--classic .select2-dropdown--below{border-top:none;}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto;}.select2-container--classic .select2-results__option[role=group]{padding:0;}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey;}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:white;}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px;}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb;} | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * Select2 Bootstrap CSS 1.0 | ||
| 5 | + * Compatible with select2 3.3.2 and bootstrap 2.3.1 | ||
| 6 | + * MIT License | ||
| 7 | + */ | ||
| 8 | +.select2-container { | ||
| 9 | + vertical-align: middle; | ||
| 10 | +} | ||
| 11 | +.select2-container.input-mini { | ||
| 12 | + width: 60px; | ||
| 13 | +} | ||
| 14 | +.select2-container.input-small { | ||
| 15 | + width: 90px; | ||
| 16 | +} | ||
| 17 | +.select2-container.input-medium { | ||
| 18 | + width: 150px; | ||
| 19 | +} | ||
| 20 | +.select2-container.input-large { | ||
| 21 | + width: 210px; | ||
| 22 | +} | ||
| 23 | +.select2-container.input-xlarge { | ||
| 24 | + width: 270px; | ||
| 25 | +} | ||
| 26 | +.select2-container.input-xxlarge { | ||
| 27 | + width: 530px; | ||
| 28 | +} | ||
| 29 | +.select2-container.input-default { | ||
| 30 | + width: 220px; | ||
| 31 | +} | ||
| 32 | +.select2-container[class*="span"] { | ||
| 33 | + float: none; | ||
| 34 | + margin-left: 0; | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +.select2-container .select2-choice, | ||
| 38 | +.select2-container-multi .select2-choices { | ||
| 39 | + height: 28px; | ||
| 40 | + line-height: 29px; | ||
| 41 | + border: 1px solid #cccccc; | ||
| 42 | + -webkit-border-radius: 4px; | ||
| 43 | + -moz-border-radius: 4px; | ||
| 44 | + border-radius: 4px; | ||
| 45 | + background: none; | ||
| 46 | + background-color: white; | ||
| 47 | + filter: none; | ||
| 48 | + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | ||
| 49 | + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | ||
| 50 | + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | ||
| 51 | +} | ||
| 52 | + | ||
| 53 | +.select2-container .select2-choice div, .select2-container .select2-choice .select2-arrow, | ||
| 54 | +.select2-container.select2-container-disabled .select2-choice div, | ||
| 55 | +.select2-container.select2-container-disabled .select2-choice .select2-arrow { | ||
| 56 | + border-left: none; | ||
| 57 | + background: none; | ||
| 58 | + filter: none; | ||
| 59 | +} | ||
| 60 | + | ||
| 61 | +.control-group.error [class^="select2-choice"] { | ||
| 62 | + border-color: #b94a48; | ||
| 63 | +} | ||
| 64 | + | ||
| 65 | +.select2-container-multi .select2-choices .select2-search-field { | ||
| 66 | + height: 28px; | ||
| 67 | + line-height: 27px; | ||
| 68 | +} | ||
| 69 | + | ||
| 70 | +.select2-drop.select2-drop-active, | ||
| 71 | +.select2-container-active .select2-choice, | ||
| 72 | +.select2-container-multi.select2-container-active .select2-choices { | ||
| 73 | + border-color: rgba(82, 168, 236, 0.8); | ||
| 74 | + border-color: #ccc\0; | ||
| 75 | + outline: none; | ||
| 76 | + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); | ||
| 77 | + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); | ||
| 78 | + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); | ||
| 79 | +} | ||
| 80 | + | ||
| 81 | +[class^="input-"] .select2-container { | ||
| 82 | + font-size: 14px; | ||
| 83 | +} | ||
| 84 | + | ||
| 85 | +.input-prepend [class^="select2-choice"] { | ||
| 86 | + border-top-left-radius: 0; | ||
| 87 | + border-bottom-left-radius: 0; | ||
| 88 | +} | ||
| 89 | + | ||
| 90 | +.input-append [class^="select2-choice"] { | ||
| 91 | + border-top-right-radius: 0; | ||
| 92 | + border-bottom-right-radius: 0; | ||
| 93 | +} | ||
| 94 | + | ||
| 95 | +.select2-dropdown-open [class^="select2-choice"] { | ||
| 96 | + border-bottom-left-radius: 0; | ||
| 97 | + border-bottom-right-radius: 0; | ||
| 98 | +} | ||
| 99 | + | ||
| 100 | +.select2-dropdown-open.select2-drop-above [class^="select2-choice"] { | ||
| 101 | + border-top-left-radius: 0; | ||
| 102 | + border-top-right-radius: 0; | ||
| 103 | +} | ||
| 104 | + | ||
| 105 | +[class^="input-"] .select2-offscreen { | ||
| 106 | + position: absolute; | ||
| 107 | +} | ||
| 108 | + | ||
| 109 | +/** | ||
| 110 | + * This stops the quick flash when a native selectbox is shown and | ||
| 111 | + * then replaced by a select2 input when javascript kicks in. This can be | ||
| 112 | + * removed if javascript is not present | ||
| 113 | + */ | ||
| 114 | +select.select2 { | ||
| 115 | + height: 28px; | ||
| 116 | + visibility: hidden; | ||
| 117 | +} |
| 1 | +!function(){if(window.define)var a=window.define;if(window.require)var b=window.require;if(window.jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var a=jQuery.fn.select2.amd.define,b=jQuery.fn.select2.amd.require;var c,b,a;!function(d){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(n=n.slice(0,n.length-1),a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,b){return function(){return n.apply(d,v.call(arguments,0).concat([a,b]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var b=r[a];delete r[a],t[a]=!0,m.apply(d,b)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,b,c,f){var h,k,l,m,n,s,u=[],v=typeof c;if(f=f||a,"undefined"===v||"function"===v){for(b=!b.length&&c.length?["require","exports","module"]:b,n=0;n<b.length;n+=1)if(m=o(b[n],f),k=m.f,"require"===k)u[n]=p.require(a);else if("exports"===k)u[n]=p.exports(a),s=!0;else if("module"===k)h=u[n]=p.module(a);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(a+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=c?c.apply(q[a],u):void 0,a&&(h&&h.exports!==d&&h.exports!==q[a]?q[a]=h.exports:l===d&&s||(q[a]=l))}else a&&(q[a]=c)},c=b=n=function(a,b,c,e,f){if("string"==typeof a)return p[a]?p[a](b):j(o(a,b).f);if(!a.splice){if(s=a,s.deps&&n(s.deps,s.callback),!b)return;b.splice?(a=b,b=c,c=null):a=d}return b=b||function(){},"function"==typeof c&&(c=e,e=f),e?m(d,a,b,c):setTimeout(function(){m(d,a,b,c)},4),n},n.config=function(a){return n(a)},c._defined=q,a=function(a,b,c){b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[a]=[a,b,c])},a.amd={jQuery:!0}}(),a("almond",function(){}),a("jquery",[],function(){var a=jQuery||$;return null==a&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),a}),a("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){var e=b[d];"function"==typeof e&&"constructor"!==d&&c.push(d)}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){var a=Array.prototype.unshift;return a.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice;this.listeners=this.listeners||{},a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;d>c;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return e!==f||"hidden"!==f&&"visible"!==f?"scroll"===e||"scroll"===f?!0:d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth:!1},c.escapeMarkup=function(a){var b={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c}),a("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),this.$results.append(d)},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){var c=b.find(".select2-results");c.append(a)},c.prototype.sort=function(a){var b=this.options.get("sorter");return b(a)},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data");a.inArray(c.id,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")});var f=e.filter("[aria-selected=true]");f.length>0?f.first().trigger("mouseenter"):e.first().trigger("mouseenter")})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";{a(h)}this.template(b,h);for(var i=[],j=0;j<b.children.length;j++){var k=b.children[j],l=this.option(k);i.push(l)}var m=a("<ul></ul>",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b){var c=this,d=b.id+"-results";this.$results.attr("id",d),b.on("results:all",function(a){c.clear(),c.append(a.data),b.isOpen()&&c.setClasses()}),b.on("results:append",function(a){c.append(a.data),b.isOpen()&&c.setClasses()}),b.on("query",function(a){c.showLoading(a)}),b.on("select",function(){b.isOpen()&&c.setClasses()}),b.on("unselect",function(){b.isOpen()&&c.setClasses()}),b.on("open",function(){c.$results.attr("aria-expanded","true"),c.$results.attr("aria-hidden","false"),c.setClasses(),c.ensureHighlightVisible()}),b.on("close",function(){c.$results.attr("aria-expanded","false"),c.$results.attr("aria-hidden","true"),c.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=c.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=c.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?c.trigger("close"):c.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=c.getHighlightedResults(),b=c.$results.find("[aria-selected]"),d=b.index(a);if(0!==d){var e=d-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=c.$results.offset().top,h=f.offset().top,i=c.$results.scrollTop()+(h-g);0===e?c.$results.scrollTop(0):0>h-g&&c.$results.scrollTop(i)}}),b.on("results:next",function(){var a=c.getHighlightedResults(),b=c.$results.find("[aria-selected]"),d=b.index(a),e=d+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=c.$results.offset().top+c.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=c.$results.scrollTop()+h-g;0===e?c.$results.scrollTop(0):h>g&&c.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){c.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=c.$results.scrollTop(),d=c.$results.get(0).scrollHeight-c.$results.scrollTop()+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&d<=c.$results.height();e?(c.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(c.$results.scrollTop(c.$results.get(0).scrollHeight-c.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var d=a(this),e=d.data("data");return"true"===d.attr("aria-selected")?void(c.options.get("multiple")?c.trigger("unselect",{originalEvent:b,data:e}):c.trigger("close")):void c.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(){var b=a(this).data("data");c.getHighlightedResults().removeClass("select2-results__option--highlighted"),c.trigger("results:focus",{data:b,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),a("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),a("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('<span class="select2-selection" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a){var b=this,d=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.attr("aria-owns",d),this.$selection.on("focus",function(a){b.trigger("focus",a)}),this.$selection.on("blur",function(a){b.trigger("blur",a)}),this.$selection.on("keydown",function(a){b.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){b.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){b.update(a.data)}),a.on("open",function(){b.$selection.attr("aria-expanded","true"),b._attachCloseHandler(a)}),a.on("close",function(){b.$selection.attr("aria-expanded","false"),b.$selection.removeAttr("aria-activedescendant"),b.$selection.focus(),b._detachCloseHandler(a)}),a.on("enable",function(){b.$selection.attr("tabindex",b._tabindex)}),a.on("disable",function(){b.$selection.attr("tabindex","-1")})},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(){throw new Error("The `update` method must be defined in child classes.")},d}),a("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c){function d(){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},d.prototype.bind=function(a){var b=this;d.__super__.bind.apply(this,arguments);var c=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",c),this.$selection.attr("aria-labelledby",c),this.$selection.on("mousedown",function(a){1===a.which&&b.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(){}),this.$selection.on("blur",function(){}),a.on("selection:update",function(a){b.update(a.data)})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a){var b=this.options.get("templateSelection"),c=this.options.get("escapeMarkup");return c(b(a))},d.prototype.selectionContainer=function(){return a("<span></span>")},d.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.display(b),d=this.$selection.find(".select2-selection__rendered");d.empty().append(c),d.prop("title",b.title||b.text)},d}),a("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(){var b=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){b.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(c){var d=a(this),e=d.parent(),f=e.data("data");b.trigger("unselect",{originalEvent:c,data:f})})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a){var b=this.options.get("templateSelection"),c=this.options.get("escapeMarkup");return c(b(a))},d.prototype.selectionContainer=function(){var b=a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">×</span></li>');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=this.display(d),f=this.selectionContainer();f.append(e),f.prop("title",d.title||d.text),f.data("data",d),b.push(f)}this.$selection.find(".select2-selection__rendered").append(b)}},d}),a("select2/selection/placeholder",["../utils"],function(){function a(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},a.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id,d=b.length>1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},a}),a("select2/selection/allowClear",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),null==e.placeholder&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(b){if(!e.options.get("disabled")){b.stopPropagation();for(var c=a(this).data("data"),d=0;d<c.length;d++){var f={data:c[d]};if(e.trigger("unselect",f),f.prevented)return}e.$element.val(e.placeholder.id).trigger("change"),e.trigger("toggle")}})},b.prototype.update=function(b,c){if(b.call(this,c),!(this.$selection.find(".select2-selection__placeholder").length>0||0===c.length)){var d=a('<span class="select2-selection__clear">×</span>');d.data("data",c),this.$selection.find(".select2-selection__rendered").append(d)}},b}),a("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus()}),b.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val(""),e.$search.focus()}),b.on("enable",function(){e.$search.prop("disabled",!1)}),b.on("disable",function(){e.$search.prop("disabled",!0)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e.trigger("blur",a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f)}}}),this.$selection.on("input",".select2-search--inline",function(){e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input",".select2-search--inline",function(a){e.handleSearch(a)})},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.trigger("open"),this.$search.val(b.text+" ")},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),a("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),a("select2/translation",["jquery"],function(a){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),a("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),a("select2/data/base",["../utils"],function(a){function b(){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),a("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple"))return c(a.element).is("option")?(a.element.selected=!1,void this.$element.trigger("change")):void this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})},d.prototype.bind=function(a){var b=this;this.container=a,a.on("select",function(a){b.select(a.data)}),a.on("unselect",function(a){b.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){c.removeData(this,"data")})},d.prototype.query=function(a,b){var d=[],e=this,f=this.$element.children();f.each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){this.$element.append(a)},d.prototype.option=function(a){var b;a.children?(b=document.createElement("optgroup"),b.label=a.text):(b=document.createElement("option"),void 0!==b.textContent?b.textContent=a.text:b.innerText=a.text),a.id&&(b.value=a.id),a.disabled&&(b.disabled=!0),a.selected&&(b.selected=!0),a.title&&(b.title=a.title);var d=c(b),e=this._normalizeItem(a);return e.element=b,c.data(b,"data",e),d},d.prototype.item=function(a){var b={};if(b=c.data(a[0],"data"),null!=b)return b;if(a.is("option"))b={id:a.val(),text:a.html(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){b={text:a.prop("label"),children:[],title:a.prop("title")};for(var d=a.children("option"),e=[],f=0;f<d.length;f++){var g=c(d[f]),h=this.item(g);e.push(h)}b.children=e}return b=this._normalizeItem(b),b.element=a[0],c.data(a[0],"data",b),b},d.prototype._normalizeItem=function(a){c.isPlainObject(a)||(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){var c=this.options.get("matcher");return c(a,b)},d}),a("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[]; | ||
| 2 | +d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find('option[value="'+a.id+'"]');0===b.length&&(b=this.option(a),this.addOptions([b])),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function b(a){return function(){return c(this).val()==a.id}}for(var d=this,e=this.$element.find("option"),f=e.map(function(){return d.item(c(this)).id}).get(),g=[],h=0;h<a.length;h++){var i=this._normalizeItem(a[h]);if(c.inArray(i.id,f)>=0){var j=e.filter(b(i)),k=this.item(j),l=(c.extend(!0,{},k,i),this.option(k));j.replaceWith(l)}else{var m=this.option(i);if(i.children){var n=this.convertToOptions(i.children);m.append(n)}g.push(m)}}return g},d}),a("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(b,c){this.ajaxOptions=this._applyDefaults(c.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),a.__super__.constructor.call(this,b,c)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return{q:a.term}},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){});e._request=d}var e=this;this._request&&(this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url(a)),"function"==typeof f.data&&(f.data=f.data(a)),this.ajaxOptions.delay&&""!==a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),a("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");if(void 0!==f&&(this.createTag=f),b.call(this,c,d),a.isArray(e))for(var g=0;g<e.length;g++){var h=e[g],i=this._normalizeItem(h),j=this.option(i);this.$element.append(j)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0),k=i.text===b.term;if(k||j)return f?!1:(a.data=g,void c(a))}if(f)return!0;var l=e.createTag(b);if(null!=l){var m=e.option(l);m.attr("data-select2-tag",!0),e.addOptions([m]),e.insertTag(g,l)}a.results=g,c(a)}var e=this;return this._removeOldTags(),null==b.term||""===b.term||null!=b.page?void a.call(this,b,c):void a.call(this,b,d)},b.prototype.createTag=function(a,b){return{id:b.term,text:b.term}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(){var b=(this._lastTag,this.$element.find("option[data-select2-tag]"));b.each(function(){this.selected||a(this).remove()})},b}),a("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(a,b,c){function d(a){e.select(a)}var e=this;b.term=b.term||"";var f=this.tokenizer(b,this.options,d);f.term!==b.term&&(this.$search.length&&(this.$search.val(f.term),this.$search.focus()),b.term=f.term),a.call(this,b,c)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);e(m),g=g.substr(h+1)||"",h=0}else h++}return{term:g}},b}),a("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",b.term.length<this.minimumInputLength?void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),a("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),a("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),a("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.position=function(){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),a("select2/dropdown/search",["jquery","../utils"],function(a){function b(){}return b.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},b.prototype.handleSearch=function(){if(!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},b.prototype.showSearch=function(){return!0},b}),a("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),a("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="option load-more" role="treeitem"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),a("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(a,b,c){this.$dropdownParent=c.get("dropdownParent")||document.body,a.call(this,b,c)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c){var d=this,e="scroll.select2."+c.id,f="resize.select2."+c.id,g="orientationchange.select2."+c.id,h=this.$container.parents().filter(b.hasScroll);h.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),h.on(e,function(){var b=a(this).data("select2-scroll-position");a(this).scrollTop(b.y)}),a(window).on(e+" "+f+" "+g,function(){d._positionDropdown(),d._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c){var d="scroll.select2."+c.id,e="resize.select2."+c.id,f="orientationchange.select2."+c.id,g=this.$container.parents().filter(b.hasScroll);g.off(d),a(window).off(d+" "+e+" "+f)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=(this.$container.position(),this.$container.offset());f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom};c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){this.$dropdownContainer.width(),this.$dropdown.css({width:this.$container.outerWidth(!1)+"px"})},c.prototype._showDropdown=function(){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),a("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return a(c.data.results)<this.minimumResultsForSearch?!1:b.call(this,c)},b}),a("select2/dropdown/selectOnClose",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(){d._handleSelectOnClose()})},a.prototype._handleSelectOnClose=function(){var a=this.getHighlightedResults();a.length<1||a.trigger("mouseup")},a}),a("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close")},a}),a("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){var b=a.minimum-a.input.length,c="Please enter "+b+" or more characters";return c},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),a("select2/defaults",["jquery","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}D.prototype.apply=function(l){if(l=a.extend({},this.defaults,l),null==l.dataAdapter){if(l.dataAdapter=null!=l.ajax?o:null!=l.data?n:m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),null!=l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter&&(l.selectionAdapter=l.multiple?e:d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),l.selectionAdapter=j.Decorate(l.selectionAdapter,i)),"string"==typeof l.language)if(l.language.indexOf("-")>0){var F=l.language.split("-"),G=F[0];l.language=[l.language,G]}else l.language=[l.language];if(a.isArray(l.language)){var H=new k;l.language.push("en");for(var I=l.language,J=0;J<I.length;J++){var K=I[J],L={};try{L=k.loadPath(K)}catch(M){try{K=this.defaults.amdLanguageBase+K,L=k.loadPath(K)}catch(N){window.console&&console.warn&&console.warn('Select2: The lanugage file for "'+K+'" could not be automatically loaded. A fallback will be used instead.');continue}}H.extend(L)}l.translations=H}else l.translations=new k(l.language);return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"select2/",amdLanguageBase:"select2/i18n/",closeOnSelect:!0,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),a("select2/options",["jquery","./defaults","./utils"],function(a,c,d){function e(a,e){if(this.options=a,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=b(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(b){var c=["select2"];null==this.options.multiple&&(this.options.multiple=b.prop("multiple")),null==this.options.disabled&&(this.options.disabled=b.prop("disabled")),null==this.options.language&&(b.prop("lang")?this.options.language=b.prop("lang").toLowerCase():b.closest("[lang]").prop("lang")&&(this.options.language=b.closest("[lang]").prop("lang"))),null==this.options.dir&&(this.options.dir=b.prop("dir")?b.prop("dir"):b.closest("[dir]").prop("dir")?b.closest("[dir]").prop("dir"):"ltr"),b.prop("disabled",this.options.disabled),b.prop("multiple",this.options.multiple),b.data("select2Tags")&&(window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),b.data("data",b.data("select2Tags")),b.data("tags",!0)),b.data("ajaxUrl")&&(window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),b.data("ajax-Url",b.data("ajaxUrl")));var e={};e=a.fn.jquery&&"1."==a.fn.jquery.substr(0,2)&&b[0].dataset?a.extend(!0,{},b[0].dataset,b.data()):b.data();var f=a.extend(!0,{},e);f=d._convertData(f);for(var g in f)a.inArray(g,c)>-1||(a.isPlainObject(this.options[g])?a.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),a("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.data=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.data),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.data.current(function(a){k.trigger("selection:update",{data:a})}),a.hide(),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.data.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.data.current(function(a){b.trigger("selection:update",{data:a})})}),this._sync=c.bind(this._syncAttributes,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._sync);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._sync)}),this._observer.observe(this.$element[0],{attributes:!0,subtree:!1})):this.$element[0].addEventListener&&this.$element[0].addEventListener("DOMAttrModified",b._sync,!1)},e.prototype._registerDataEvents=function(){var a=this;this.data.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("focus",function(){a.$container.addClass("select2-container--focus")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open"),this.data.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.data.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ENTER?(a.trigger("results:select"),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle"),b.preventDefault()):c===d.UP?(a.trigger("results:previous"),b.preventDefault()):c===d.DOWN?(a.trigger("results:next"),b.preventDefault()):(c===d.ESC||c===d.TAB)&&(a.close(),b.preventDefault()):(c===d.ENTER||c===d.SPACE||(c===d.DOWN||c===d.UP)&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable")):this.trigger("enable")},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||(this.trigger("query",{}),this.trigger("open"))},e.prototype.close=function(){this.isOpen()&&this.trigger("close")},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.enable=function(a){window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),0===a.length&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdpater.current(function(b){a=b}),a},e.prototype.val=function(b){if(window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._sync),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&this.$element[0].removeEventListener("DOMAttrModified",this._sync,!1),this._sync=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.show(),this.$element.removeData("select2"),this.data.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.data=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),function(b){"function"==typeof a&&a.amd?a("jquery.mousewheel",["jquery"],b):"object"==typeof exports?module.exports=b:b(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}),a("select2/compat/matcher",["jquery"],function(a){function b(b){function c(c,d){var e=a.extend(!0,{},d);if(null==c.term||""===a.trim(c.term))return e;if(d.children){for(var f=d.children.length-1;f>=0;f--){var g=d.children[f],h=b(c.term,g.text,g);h||e.children.splice(f,1)}if(e.children.length>0)return e}return b(c.term,d.text,d)?e:null}return c}return b}),a("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;return this._isInitialized?void b.call(this,c):void this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),a("select2/compat/inputData",["jquery"],function(a){function b(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `<select>` element instead."),a.call(this,b,c)}return b.prototype.current=function(b,c){function d(b,c){var e=[];return b.selected||-1!==a.inArray(b.id,c)?(b.selected=!0,e.push(b)):b.selected=!1,b.children&&e.push.apply(e,d(b.children,c)),e}for(var e=[],f=0;f<this._currentData.length;f++){var g=this._currentData[f];e.push.apply(e,d(g,this.$element.val().split(this._valueSeparator)))}c(e)},b.prototype.select=function(b,c){if(this.options.get("multiple")){var d=this.$element.val();d+=this._valueSeparator+c.id,this.$element.val(d),this.$element.trigger("change")}else this.current(function(b){a.map(b,function(a){a.selected=!1})}),this.$element.val(c.id),this.$element.trigger("change")},b.prototype.unselect=function(a,b){var c=this;b.selected=!1,this.current(function(a){for(var d=[],e=0;a>e;e++){var f=a[e];b.id!=f.id&&d.push(b.id)}c.$element.val(d.join(c._valueSeparator)),c.$element.trigger("change")})},b.prototype.query=function(a,b,c){for(var d=[],e=0;e<this._currentData.length;e++){var f=this._currentData[e],g=this.matches(b,f);null!==g&&d.push(g)}c({results:d})},b.prototype.addOptions=function(b,c){var d=a.map(c,function(b){return a.data(b[0],"data")});this._currentData.push.apply(this._currentData,d)},b}),a("select2/compat/query",[],function(){function a(a,b,c){window.console&&console.warn&&console.warn("Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2."),a.call(this,b,c)}return a.prototype.query=function(a,b,c){b.callback=c; | ||
| 3 | +var d=this.options.get("query");d.call(null,b)},a}),a("select2/dropdown/attachContainer",[],function(){function a(a,b,c){a.call(this,b,c)}return a.prototype.position=function(a,b,c){var d=c.find(".dropdown-wrapper");d.append(b),b.addClass("select2-dropdown--below"),c.addClass("select2-container--below")},a}),a("select2/dropdown/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$dropdown.on(d.join(" "),function(a){a.stopPropagation()})},a}),a("select2/selection/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$selection.on(d.join(" "),function(a){a.stopPropagation()})},a}),a("jquery.select2",["jquery","./select2/core","./select2/defaults"],function(a,c,d){try{b("jquery.mousewheel")}catch(e){}return null==a.fn.select2&&(a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){{var d=a.extend({},b,!0);new c(a(this),d)}}),this;if("string"==typeof b){var d=this.data("select2"),e=Array.prototype.slice.call(arguments,1);return d[b](e)}throw new Error("Invalid arguments for Select2: "+b)}),null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),b("jquery.select2"),jQuery.fn.select2.amd={define:a,require:b}}(); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/1x_adm/view/seo_package/style.css
0 → 100644
| 1 | +/*old opencart style*/ | ||
| 2 | +a.button,.list a.button{text-decoration:none;color:#FFF;display:inline-block;padding:5px 15px;background:#003A88;-webkit-border-radius:10px 10px 10px 10px;-moz-border-radius:10px;-khtml-border-radius:10px 10px 10px 10px;border-radius:10px 10px 10px 10px} | ||
| 3 | +table.form{width:100%;border-collapse:collapse;margin-bottom:20px} | ||
| 4 | +table.form > tbody > tr > td:first-child{width:200px} | ||
| 5 | +table.form > tbody > tr > td{padding:10px;color:#555;border-bottom:1px dotted #CCC} | ||
| 6 | +.scrollbox{border:1px solid #CCC;width:350px;height:100px;background:#FFF;overflow-y:scroll} | ||
| 7 | +.scrollbox img{float:right;cursor:pointer} | ||
| 8 | +.scrollbox div{padding:3px} | ||
| 9 | +.scrollbox div input{margin:0;padding:0;margin-right:3px} | ||
| 10 | +.scrollbox div.even{background:#FFF} | ||
| 11 | +.scrollbox div.odd{background:#F2F2F2} | ||
| 12 | +.help {color: #666;font-size: 11px;font-weight: normal;display: block; line-height:16px;} | ||
| 13 | +.buttons{float:right} | ||
| 14 | +.heading .buttons .button {margin-left:5px} | ||
| 15 | + | ||
| 16 | +.text-success{color: #489e4f;} | ||
| 17 | + | ||
| 18 | +.box > .content {overflow:unset;} /* overflow fix on 1.5 */ | ||
| 19 | + | ||
| 20 | +/* iToggle */ | ||
| 21 | +label.ilabel{display:block;font-size:12px;padding-bottom:/*1*/0px;cursor:pointer} | ||
| 22 | +label.itoggle,label.itoggle span{display:block;width:79px;height:23px;margin-bottom:20px;background:url(img/itoggle.png) left bottom no-repeat;cursor:pointer;text-indent:-5000px} | ||
| 23 | +label.itoggle.iToff{background-position:right bottom} | ||
| 24 | +label.itoggle span{background-position:left top;margin:0} | ||
| 25 | +input.iT_checkbox{position:absolute;top:-9999px;left:-9999px} | ||
| 26 | + | ||
| 27 | +/* Bootstrap customizations */ | ||
| 28 | +.table-curved {border-collapse:separate;}.table-curved {border:solid #ccc 1px;border-radius:6px;border-left:0px;}.table-curved td, .table-curved th {border-left:1px solid #ccc;border-top:1px solid #ccc;}.table-curved th {border-top:none;}.table-curved th:first-child {border-radius:6px 0 0 0;}.table-curved th:last-child {border-radius:0 6px 0 0;}.table-curved th:only-child{border-radius:6px 6px 0 0;}.table-curved tr:last-child td:first-child {border-radius:0 0 0 6px;}.table-curved tr:last-child td:last-child {border-radius:0 0 6px 0;} | ||
| 29 | +.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#EAF1FF} | ||
| 30 | +.table-hover>tbody>tr>td:hover{background-color:#DBE7FF} | ||
| 31 | + | ||
| 32 | +table.dataTable thead th, table.dataTable thead td {padding-left:10px;} | ||
| 33 | +button:active,button:hover,button:focus{outline:0!important;} | ||
| 34 | +.gkd-badge { | ||
| 35 | + padding: 3px 5px; | ||
| 36 | + width:24px; | ||
| 37 | + text-align:center; | ||
| 38 | + border-radius: 4px; | ||
| 39 | + color: #555; | ||
| 40 | + border: 1px solid #555; | ||
| 41 | +} | ||
| 42 | +.gkd-badge.green{color: #86c440; border: 1px solid #86c440;} | ||
| 43 | +.gkd-badge.orange{color: #f38a3d; border: 1px solid #f38a3d;} | ||
| 44 | +.gkd-badge.blue{color: #457ea8; border: 1px solid #457ea8;} | ||
| 45 | +.gkd-badge.cyan{color: #23A597; border: 1px solid #23A597;} | ||
| 46 | +.gkd-badge.red{color: #DA4C4C; border: 1px solid #DA4C4C;} | ||
| 47 | +.gkd-badge.purple{color: #826bc0; border: 1px solid #826bc0;} | ||
| 48 | +.gkd-badge.yellow{color: #D4D119; border: 1px solid #D4D119;} | ||
| 49 | +.gkd-badge.darkblue{color: #11428A; border: 1px solid #11428A;} | ||
| 50 | + | ||
| 51 | +#stores{float:right; background:#FCFCFC; position:relative; bottom:15px; left:15px; padding:5px 10px 5px 15px; border:1px solid #ccc; border-radius: 0 0 0 15px; border-top:0; border-right:0;} | ||
| 52 | +#stores select{margin-left:10px; max-width:160px;} | ||
| 53 | + | ||
| 54 | +.panel-heading { | ||
| 55 | + padding: 12px 20px; | ||
| 56 | +} | ||
| 57 | +.panel-heading .pull-right { | ||
| 58 | + position: relative; | ||
| 59 | + bottom: 6px; | ||
| 60 | +} | ||
| 61 | +.breadcrumb{ | ||
| 62 | + margin-bottom:15px; | ||
| 63 | +} | ||
| 64 | + | ||
| 65 | +/* Main style */ | ||
| 66 | +.select2-input{display:none;} | ||
| 67 | +/*table .fa{color:#5f5f5f;}*/ | ||
| 68 | +.editable-buttons button:hover .fa{color:#fff;} | ||
| 69 | +.more_actions{position:absolute; left: 40%; margin-top:-33px;} | ||
| 70 | +.more_actions a{cursor:pointer; text-decoration:none;} | ||
| 71 | +.more_actions i.fa{font-size:14px; padding-right:5px;} | ||
| 72 | +.more_actions .fa-plus{color:#4CBD35} | ||
| 73 | +.more_actions .fa-magic{color:#FB7C00} | ||
| 74 | +.more_actions .fa-save{color:#4276D2} | ||
| 75 | +.more_actions .fa-close{color:#ED5555} | ||
| 76 | +.more_actions .fa-minus{color:#ED5555} | ||
| 77 | +.seo_editor textarea, .seo_editor input{border-radius:5px;border:1px solid #bbb;} | ||
| 78 | +.seo_editor td.center{text-align:center} | ||
| 79 | +.checkboxinline .prettycheckbox{width:300px;} | ||
| 80 | +/*.seo_editor td .deleteAlias{font-size:14px} | ||
| 81 | +.seo_editor td .deleteAlias:hover{color:#E33535}*/ | ||
| 82 | +/* | ||
| 83 | +#tabs_editor_lang{position:relative; top:40px;} | ||
| 84 | +#tabs_editor_lang a{float:right;} | ||
| 85 | +*/ | ||
| 86 | +#tabs_editor_lang .dropdown-menu a{box-shadow:none;} | ||
| 87 | +.active a, a:focus{outline:0;} | ||
| 88 | +.nav-pills li a{outline:0; font-weight:bold; color:#444; text-decoration:none;} | ||
| 89 | +.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus{color:#444;} | ||
| 90 | +.nav-tabs li.active i.fa{color:#86C440;} | ||
| 91 | +.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus{background:#444;} | ||
| 92 | +#friendly-display{margin:15px; background:#ddd; border-radius:5px; padding:3px; color:#444;} | ||
| 93 | +#friendly-display div{display:table; width:100%;} | ||
| 94 | +#friendly-display b{display:table-cell; text-align:center; vertical-align:middle;} | ||
| 95 | +#friendly-display span{display:table-cell; background:#eee; border-radius:5px; padding:4px 10px; width:48%; } | ||
| 96 | +.friendly .buttons{float:right; text-align:center;} | ||
| 97 | +.friendly .url input{width:200px; height:auto;} | ||
| 98 | +.friendly .url .delete{font-size:14px; padding-left:30px; color:#E33535; position:relative; top:1px;} | ||
| 99 | +.friendly .btns{margin-top:25px;} | ||
| 100 | +.friendly .url{padding:2px 15px 2px; display:inline-block; border-radius:5px; margin-right:25px;} | ||
| 101 | +.friendly .url:hover{background:#ccc;} | ||
| 102 | +.friendly .url span{padding:0 30px;} | ||
| 103 | +.generator {width:100%; border-spacing:5px;} | ||
| 104 | +.generator td:nth-child(1){white-space:nowrap;} | ||
| 105 | +.generator .patterns {width:280px; padding-right:20px; padding-left:20px;} | ||
| 106 | +.ui-draggable{ | ||
| 107 | + cursor: grab; | ||
| 108 | +} | ||
| 109 | +.generator .patterns b{ | ||
| 110 | + display: inline; | ||
| 111 | + padding: 0.2em 0.6em 0.3em; | ||
| 112 | + font-size: 80%; | ||
| 113 | + font-weight: bold; | ||
| 114 | + line-height: 23px; | ||
| 115 | + color: #fff; | ||
| 116 | + text-align: center; | ||
| 117 | + white-space: nowrap; | ||
| 118 | + vertical-align: baseline; | ||
| 119 | + border-radius: 0.25em; | ||
| 120 | + background-color: #777; | ||
| 121 | +} | ||
| 122 | +.generator td{padding-right:0px;} | ||
| 123 | +/*.generator td:nth-child(1){text-align:right; font-weight:bold;}*/ | ||
| 124 | +/*.generator input{margin-right:40px;}*/ | ||
| 125 | +/*.generator input[type=text], select{border-radius:5px; border:1px solid #ccc; padding:3px; height:30px}*/ | ||
| 126 | +option{padding-right:15px;} | ||
| 127 | +.box, .box td{font-size: 13px; line-height: 15px; font-family: "PT Sans","PT Sans Narrow", sans-serif;} | ||
| 128 | +h3.panel-title{color:#11b209; font-weight:bold; position:relative;top:2px; width:400px;} | ||
| 129 | +.box h3.panel-title{float:left; padding: 9px 0px 0px; margin: 0px; font-size: 16px;} | ||
| 130 | +h3.panel-title span{color:#555;} | ||
| 131 | +h3.panel-title img{position:relative;bottom:2px;} | ||
| 132 | +.box h3.panel-title img{bottom:5px;} | ||
| 133 | +.form.about td{padding:30px 10px} | ||
| 134 | +.vtabs a,.vtabs span{border-radius: 7px 0 0 7px; outline:0} | ||
| 135 | +.nav-tabs > li > a{border-radius: 3px 20px 0 0; outline:0; color:#333; text-decoration:none;} | ||
| 136 | +.nav-tabs > li.pull-right > a{border-radius: 20px 3px 0 0;} | ||
| 137 | +.nav-tabs a.selected, .nav-tabs .active a{box-shadow: 2px -2px 2px #eee;} | ||
| 138 | +.nav-tabs a.selected i{background-position:bottom; color:#86C440;} | ||
| 139 | +.nav-tabs i{float:left; position:relative; right:5px; top:1px; padding-right:0px; color:#DED2D0; font-size:16px; font-weight: normal;} | ||
| 140 | +.nav-tabs{margin-bottom: 25px;} | ||
| 141 | +.nav-pills i{float:left; position:relative; right:3px; top:0px; padding-right:6px; color:#DED2D0; font-size:17px; font-weight:normal; width:22px; text-align:center;} | ||
| 142 | +.nav-pills .active i{background-position:bottom; color:#86C440;} | ||
| 143 | +.switchContent{display:none} | ||
| 144 | +.switchBtn{cursor:pointer} | ||
| 145 | +.customer_groups .switchContent > div{display:inline-block;width:200px; margin-bottom:5px;} | ||
| 146 | +.customer_groups .switchContent > div > span{margin-bottom:7px; display:inline-block;} | ||
| 147 | +.customer_groups h4{margin-bottom:5px;} | ||
| 148 | +.customer_groups h4:first-child{margin-top:0;} | ||
| 149 | +#template img, #sliptemplate img{width:300px; border: 1px solid #eee; cursor:zoom-in;} | ||
| 150 | +#template img.full, #sliptemplate img.full{width:auto; cursor:zoom-out;} | ||
| 151 | +.multiple_switch > div{width:150px; float:left;} | ||
| 152 | +.multiple_switch > div > span{display:block; padding-bottom:7px;} | ||
| 153 | +.cron td{padding-right:70px; vertical-align:top;} | ||
| 154 | +.cron label{font-weight:normal;} | ||
| 155 | +.cron b{margin-bottom:5px; display: inline-block;} | ||
| 156 | +.simulation{background:url('img/simulation.png') left no-repeat; padding-left:40px; margin:20px 30px;} | ||
| 157 | +.simulation.write{background:url('img/save.png') left 1px no-repeat;} | ||
| 158 | +.simulation span{font-weight:bold;} | ||
| 159 | +.res_table{width:100%; border-collapse:collapse; border:1px solid #555;} | ||
| 160 | +.res_table a{text-decoration:none; color:#555;} | ||
| 161 | +.res_table a:hover{text-decoration:underline;} | ||
| 162 | +.res_table td{padding:5px 5px 6px 5px; border-bottom:1px dashed #ccc; } | ||
| 163 | +.res_table tr:nth-child(odd){background:#F4F4F4;} | ||
| 164 | +.res_table tr:nth-child(even){background:#E5E5E5;} | ||
| 165 | +.res_table.hidecol td:nth-child(3){display:none;} | ||
| 166 | +#update_result .c{color:#388C48;} | ||
| 167 | +.res_table thead td{background:#ccc; color:#333; font-weight:bold; padding:7px 5px; border-bottom:1px dashed #eee;} | ||
| 168 | +.res_table tbody tr:hover td{background:#BCE2C2;} | ||
| 169 | +.toggle{height:16px; line-height:16px; padding-left:20px; cursor:pointer; background:url('img/toggle.png') top left no-repeat; float:right; color:#fff; margin:5px 15px 0 0;} | ||
| 170 | +.toggle:hover{text-decoration:underline;} | ||
| 171 | +.toggle.active{background:url('img/toggle.png') bottom left no-repeat;} | ||
| 172 | +.fullscreen{height:32px; line-height:32px; padding-right:40px; cursor:pointer; background:url('img/fullscreen.png') right 5px top no-repeat; float:right; margin:0 10px 0 0; padding:2px 45px 2px 15px;} | ||
| 173 | +.fullscreen:hover{background-color:#ccc; border-radius:5px; box-shadow:0 0 1px #ccc;} | ||
| 174 | +.fullscreen.active{background-position:right 5px bottom;} | ||
| 175 | +tr.info:hover td:first-child{color:#86C440; transition: color 500ms;} | ||
| 176 | +tr.info td:first-child{text-align:center; font-size:22px; color:#bbb; transition: color 500ms;} | ||
| 177 | +tr.info td:last-child{color:#555;padding:40px 100px 40px 0;} | ||
| 178 | +#update_result > div{ | ||
| 179 | + margin: 5px 15px; | ||
| 180 | +} | ||
| 181 | +#update_result{ | ||
| 182 | + border: 1px solid #ccc; | ||
| 183 | + background-color: #fff; | ||
| 184 | + height: 450px; | ||
| 185 | + overflow: auto; | ||
| 186 | + border-radius:5px; | ||
| 187 | +} | ||
| 188 | +#update_result.full{ | ||
| 189 | + position:absolute; | ||
| 190 | + width:100%; | ||
| 191 | + height:100%; | ||
| 192 | + left:0; | ||
| 193 | + top:0; | ||
| 194 | + z-index:999; | ||
| 195 | +} | ||
| 196 | +#update_result h3{ | ||
| 197 | + text-align:center; | ||
| 198 | + background:#555; | ||
| 199 | + color:#fff; | ||
| 200 | + padding: 5px; | ||
| 201 | + margin-bottom:0; | ||
| 202 | + border-radius:5px 5px 0 0; | ||
| 203 | +} | ||
| 204 | +#update_result h3.count{ | ||
| 205 | + font-weight:normal; | ||
| 206 | + margin: 0 0 25px 0; | ||
| 207 | + border-radius:0 0 5px 5px; | ||
| 208 | +} | ||
| 209 | + | ||
| 210 | +.well h4 { | ||
| 211 | + color: #156584; | ||
| 212 | +} | ||
| 213 | + | ||
| 214 | +.generator a.button{ | ||
| 215 | + line-height:20px; | ||
| 216 | + margin-top:2px; | ||
| 217 | +} | ||
| 218 | +a.button, .list a.button{ | ||
| 219 | + cursor:pointer; | ||
| 220 | + transition: background 200ms; | ||
| 221 | + border:0px solid #888; | ||
| 222 | + font-weight:normal; | ||
| 223 | + background: #2e7091; | ||
| 224 | + border-radius:6px; | ||
| 225 | + text-shadow:0 0 2px #333; | ||
| 226 | + box-shadow:1px 1px 2px #333; | ||
| 227 | + font-size:16px; | ||
| 228 | + | ||
| 229 | + border-radius: 5px; | ||
| 230 | + border-bottom: 1px solid rgba(255,255,255,0.4); | ||
| 231 | + box-shadow :0 -1px 1px rgba(0,0,0,0.2)inset, 0 1px 2px rgba(0,0,0,0.8)inset; | ||
| 232 | + color:#fff; | ||
| 233 | + text-shadow : 0px -1px 0px rgba(0,0,0,0.8); | ||
| 234 | + | ||
| 235 | + background-size : 30px 30px; | ||
| 236 | + background-repeat:repeat-x; | ||
| 237 | + background-position :0; | ||
| 238 | + background-image : -moz-linear-gradient( 90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 50%, rgba(255,255,255,0.1) 50%, rgba(255,255,255,0.3) 100% ); | ||
| 239 | + background-image : -o-linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 50%, rgba(255,255,255,0.1) 50%, rgba(255,255,255,0.3) 100%); | ||
| 240 | + background-image : -webkit-linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 50%, rgba(255,255,255,0.1) 50%, rgba(255,255,255,0.3) 100%); | ||
| 241 | + | ||
| 242 | + background-color: #555; | ||
| 243 | +} | ||
| 244 | +a.button img{vertical-align:top; position:relative; right:4px;} | ||
| 245 | +a.button:hover{background-color: #308184; transition: background 200ms;} | ||
| 246 | + | ||
| 247 | +i.iconic{font-style:normal;} | ||
| 248 | +.button .fa{color:#77A9AB;} | ||
| 249 | +.mubtn{font-size:15px; padding: 6px 15px 6px 30px;} | ||
| 250 | +.mubtn i.fa{font-size:16px; position:absolute; left:10px; top:10px;} | ||
| 251 | +.button:hover .fa{color:#fff; transition: color 200ms;} | ||
| 252 | + | ||
| 253 | +.generator td.pad{padding-left:30px;} | ||
| 254 | +.button.green i{color:#3DCC5C;} | ||
| 255 | +.button.green:hover i{color:#fff;} | ||
| 256 | +.button.green:hover{background-color:#309B28;} | ||
| 257 | +.button.red i{color:#ED5555;} | ||
| 258 | +.button.red:hover i{color:#fff;} | ||
| 259 | +.button.red:hover{background-color:#CE3D35;} | ||
| 260 | +.button.orange i{color:#ED9923;} | ||
| 261 | +.button.orange:hover i{color:#fff;} | ||
| 262 | +.button.orange:hover{background-color:#EA7D1E;} | ||
| 263 | +.button.blue i{color:#669CE8;} | ||
| 264 | +.button.blue:hover i{color:#fff;} | ||
| 265 | +.button.blue:hover{background-color:#4A6C9B;} | ||
| 266 | + | ||
| 267 | +.imgCheckbox .prettycheckbox label{padding-left:17px;} | ||
| 268 | +.prettycheckbox label{font-weight:normal;} | ||
| 269 | +.jumbo{background:#f9f9f9; border-radius:7px; padding:20px;} | ||
| 270 | + | ||
| 271 | +#tabs_editor_lang .hideLabel{display:none;} | ||
| 272 | + | ||
| 273 | +@media (max-width: 1460px) { | ||
| 274 | + .nav::before, .nav::after { | ||
| 275 | + content:none; | ||
| 276 | + } | ||
| 277 | + .nav-tabs, | ||
| 278 | + #tabs_editor.nav-tabs, #tabs_editor_lang.nav-tabs { | ||
| 279 | + padding: 15px 0; | ||
| 280 | + min-width: 100%; | ||
| 281 | + display: grid; | ||
| 282 | + grid-gap: 10px; | ||
| 283 | + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr) ) ; | ||
| 284 | + } | ||
| 285 | + #tabs_editor_lang { | ||
| 286 | + position: inherit!important; | ||
| 287 | + } | ||
| 288 | + .nav-tabs > li > a, | ||
| 289 | + .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus, | ||
| 290 | + #tabs_editor.nav-tabs a, #tabs_editor_lang.nav-tabs a{ | ||
| 291 | + border-radius: 3px; | ||
| 292 | + } | ||
| 293 | + .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus, | ||
| 294 | + #tabs_editor.nav-tabs .active a, #tabs_editor_lang.nav-tabs .active a{ | ||
| 295 | + border: 1px solid #ddd; | ||
| 296 | + box-shadow:none; | ||
| 297 | + } | ||
| 298 | + #tabs_editor_lang .hideLabel{display:inline;} | ||
| 299 | + .gkdwidget > header > ul{ | ||
| 300 | + padding: 0; | ||
| 301 | + margin: -30px 0 0 50px; | ||
| 302 | + } | ||
| 303 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/1x_adm/view/seo_package/toggler.js
0 → 100644
| 1 | +(function($){ | ||
| 2 | + $.fn.extend({ | ||
| 3 | + toggler: function(options) { | ||
| 4 | + var defaults = { | ||
| 5 | + onText: 'Enabled', | ||
| 6 | + offText: 'Disabled', | ||
| 7 | + bold: false, | ||
| 8 | + icons: true, | ||
| 9 | + onIcon: 'fa fa-check', | ||
| 10 | + offIcon: 'fa fa-times', | ||
| 11 | + onColor: '#57A155', | ||
| 12 | + offColor: '#D87261', | ||
| 13 | + mode: 'text', | ||
| 14 | + effect: 'slide', | ||
| 15 | + }; | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + return this.each(function() { | ||
| 19 | + var o = $.extend({}, defaults, options, $(this).data()); | ||
| 20 | + var obj = $(this); | ||
| 21 | + var items = $("li", obj); | ||
| 22 | + //obj.attr('type', 'hidden'); | ||
| 23 | + obj.hide(); | ||
| 24 | + | ||
| 25 | + if(obj.val() == 1) { | ||
| 26 | + var onDisabled = ''; | ||
| 27 | + var offDisabled = 'display:none;'; | ||
| 28 | + } else { | ||
| 29 | + var onDisabled = 'display:none;'; | ||
| 30 | + var offDisabled = ''; | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + | ||
| 34 | + | ||
| 35 | + // create main container and insert it in dom | ||
| 36 | + var html = ''; | ||
| 37 | + html += '<div class="form-control" style="position:relative;padding:0;overflow:hidden">'; | ||
| 38 | + html += '<div data-type="on" style="'+onDisabled+getStyle(o, 1)+'">'+getText(o, 1)+'</div>'; | ||
| 39 | + html += '<div data-type="on" style="'+offDisabled+getStyle(o, 0)+'">'+getText(o, 0)+'</div>'; | ||
| 40 | + html += '</div>'; | ||
| 41 | + | ||
| 42 | + html = $(html); | ||
| 43 | + | ||
| 44 | + obj.after(html); | ||
| 45 | + | ||
| 46 | + // create events | ||
| 47 | + html.on('click', function(){ | ||
| 48 | + if (html.prev().val() == 1) { | ||
| 49 | + if (o.effect == 'slide') { | ||
| 50 | + html.children('[data-type=on]').slideToggle(); | ||
| 51 | + html.children('[data-type=off]').slideToggle(); | ||
| 52 | + html.children('[data-type=off]').detach().prependTo(html); | ||
| 53 | + } else { | ||
| 54 | + html.children('[data-type=on]').fadeOut(); | ||
| 55 | + html.children('[data-type=off]').fadeIn(); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + var val = 0; | ||
| 59 | + } else { | ||
| 60 | + if (o.effect == 'slide') { | ||
| 61 | + html.children('[data-type=on]').slideToggle(); | ||
| 62 | + html.children('[data-type=off]').slideToggle(); | ||
| 63 | + } else { | ||
| 64 | + html.children('[data-type=on]').fadeIn(); | ||
| 65 | + html.children('[data-type=off]').fadeOut(); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + var val = 1; | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + // assign value to real input and trigger change | ||
| 72 | + html.prev().val(val).trigger('change'); | ||
| 73 | + }); | ||
| 74 | + }); | ||
| 75 | + } | ||
| 76 | +}); | ||
| 77 | + | ||
| 78 | +// function to get style of each element | ||
| 79 | +function getStyle(o, val) { | ||
| 80 | + var style = ''; | ||
| 81 | + | ||
| 82 | + // set style values | ||
| 83 | + if (o.effect == 'fade') { | ||
| 84 | + style += 'width:100%;position:absolute;top:0;'; | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + if (o.mode == 'background') { | ||
| 88 | + style += 'text-shadow: 1px 1px 1px #555;'; | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + style += '-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;padding: 8px 13px;' | ||
| 92 | + | ||
| 93 | + if (o.bold) { | ||
| 94 | + style += 'font-weight:bold'; | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + if (val == 1) { | ||
| 98 | + if (o.mode == 'text') { | ||
| 99 | + style += 'color:'+o.onColor; | ||
| 100 | + } else if (o.mode == 'background') { | ||
| 101 | + style += 'background:'+o.onColor; | ||
| 102 | + } | ||
| 103 | + } else { | ||
| 104 | + if (o.mode == 'text') { | ||
| 105 | + style += 'color:'+o.offColor; | ||
| 106 | + } else if (o.mode == 'background') { | ||
| 107 | + style += 'background:'+o.offColor; | ||
| 108 | + } | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + if (o.mode == 'background') { | ||
| 112 | + style += ';color:#fff'; | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + return style; | ||
| 116 | +} | ||
| 117 | + | ||
| 118 | +// function to get formated text | ||
| 119 | +function getText(o, val) { | ||
| 120 | + // use icons ? | ||
| 121 | + if (!o.icons) { | ||
| 122 | + var onIcon = offIcon = ''; | ||
| 123 | + } else { | ||
| 124 | + var onIcon = '<i class="'+o.onIcon+'"></i> '; | ||
| 125 | + var offIcon = '<i class="'+o.offIcon+'"></i> '; | ||
| 126 | + } | ||
| 127 | + | ||
| 128 | + if (val == 1) { | ||
| 129 | + var text = onIcon + o.onText; | ||
| 130 | + } else { | ||
| 131 | + var text = offIcon + o.offText; | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + return text; | ||
| 135 | +} | ||
| 136 | +})(jQuery); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php echo $header; ?><?php echo $column_left; ?> | ||
| 2 | +<div id="content"> | ||
| 3 | + <div class="page-header"> | ||
| 4 | + <div class="container-fluid"> | ||
| 5 | + <div class="pull-right"> | ||
| 6 | + <button type="submit" form="form-manufacturer" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button> | ||
| 7 | + <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a></div> | ||
| 8 | + <h1><?php echo $heading_title; ?></h1> | ||
| 9 | + <ul class="breadcrumb"> | ||
| 10 | + <?php foreach ($breadcrumbs as $breadcrumb) { ?> | ||
| 11 | + <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li> | ||
| 12 | + <?php } ?> | ||
| 13 | + </ul> | ||
| 14 | + </div> | ||
| 15 | + </div> | ||
| 16 | + <div class="container-fluid"> | ||
| 17 | + <?php if ($error_warning) { ?> | ||
| 18 | + <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?> | ||
| 19 | + <button type="button" class="close" data-dismiss="alert">×</button> | ||
| 20 | + </div> | ||
| 21 | + <?php } ?> | ||
| 22 | + <div class="panel panel-default"> | ||
| 23 | + <div class="panel-heading"> | ||
| 24 | + <h3 class="panel-title"><i class="fa fa-pencil"></i> <?php echo $text_form; ?></h3> | ||
| 25 | + </div> | ||
| 26 | + <div class="panel-body"> | ||
| 27 | + <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-manufacturer" class="form-horizontal"> | ||
| 28 | + <ul class="nav nav-tabs" <?php if (!$seo_enabled) { ?>style="display:none"<?php } ?>> | ||
| 29 | + <li class="active"><a href="#tab-general" data-toggle="tab"><?php echo $tab_general; ?></a></li> | ||
| 30 | + <li><a href="#tab-seo" data-toggle="tab">SEO</a></li> | ||
| 31 | + </ul> | ||
| 32 | + <div class="tab-content"> | ||
| 33 | + <div class="tab-pane active" id="tab-general"> | ||
| 34 | + <div class="form-group required"> | ||
| 35 | + <label class="col-sm-2 control-label" for="input-name"><?php echo $entry_name; ?></label> | ||
| 36 | + <div class="col-sm-10"> | ||
| 37 | + <input type="text" name="name" value="<?php echo $name; ?>" placeholder="<?php echo $entry_name; ?>" id="input-name" class="form-control" /> | ||
| 38 | + <?php if ($error_name) { ?> | ||
| 39 | + <div class="text-danger"><?php echo $error_name; ?></div> | ||
| 40 | + <?php } ?> | ||
| 41 | + </div> | ||
| 42 | + </div> | ||
| 43 | + <div class="form-group"> | ||
| 44 | + <label class="col-sm-2 control-label"><?php echo $entry_store; ?></label> | ||
| 45 | + <div class="col-sm-10"> | ||
| 46 | + <div class="well well-sm" style="height: 150px; overflow: auto;"> | ||
| 47 | + <div class="checkbox"> | ||
| 48 | + <label> | ||
| 49 | + <?php if (in_array(0, $manufacturer_store)) { ?> | ||
| 50 | + <input type="checkbox" name="manufacturer_store[]" value="0" checked="checked" /> | ||
| 51 | + <?php echo $text_default; ?> | ||
| 52 | + <?php } else { ?> | ||
| 53 | + <input type="checkbox" name="manufacturer_store[]" value="0" /> | ||
| 54 | + <?php echo $text_default; ?> | ||
| 55 | + <?php } ?> | ||
| 56 | + </label> | ||
| 57 | + </div> | ||
| 58 | + <?php foreach ($stores as $store) { ?> | ||
| 59 | + <div class="checkbox"> | ||
| 60 | + <label> | ||
| 61 | + <?php if (in_array($store['store_id'], $manufacturer_store)) { ?> | ||
| 62 | + <input type="checkbox" name="manufacturer_store[]" value="<?php echo $store['store_id']; ?>" checked="checked" /> | ||
| 63 | + <?php echo $store['name']; ?> | ||
| 64 | + <?php } else { ?> | ||
| 65 | + <input type="checkbox" name="manufacturer_store[]" value="<?php echo $store['store_id']; ?>" /> | ||
| 66 | + <?php echo $store['name']; ?> | ||
| 67 | + <?php } ?> | ||
| 68 | + </label> | ||
| 69 | + </div> | ||
| 70 | + <?php } ?> | ||
| 71 | + </div> | ||
| 72 | + </div> | ||
| 73 | + </div> | ||
| 74 | + <?php if (!$seo_enabled) { ?> | ||
| 75 | + <div class="form-group"> | ||
| 76 | + <label class="col-sm-2 control-label" for="input-keyword"><span data-toggle="tooltip" title="<?php echo $help_keyword; ?>"><?php echo $entry_keyword; ?></span></label> | ||
| 77 | + <div class="col-sm-10"> | ||
| 78 | + <input type="text" name="keyword" value="<?php echo $keyword; ?>" placeholder="<?php echo $entry_keyword; ?>" id="input-keyword" class="form-control" /> | ||
| 79 | + <?php if ($error_keyword) { ?> | ||
| 80 | + <div class="text-danger"><?php echo $error_keyword; ?></div> | ||
| 81 | + <?php } ?> | ||
| 82 | + </div> | ||
| 83 | + </div> | ||
| 84 | + <?php } else { ?> | ||
| 85 | + <input type="hidden" name="keyword" value=""/> | ||
| 86 | + <?php } ?> | ||
| 87 | + <div class="form-group"> | ||
| 88 | + <label class="col-sm-2 control-label" for="input-image"><?php echo $entry_image; ?></label> | ||
| 89 | + <div class="col-sm-10"> <a href="" id="thumb-image" data-toggle="image" class="img-thumbnail"><img src="<?php echo $thumb; ?>" alt="" title="" data-placeholder="<?php echo $placeholder; ?>" /></a> | ||
| 90 | + <input type="hidden" name="image" value="<?php echo $image; ?>" id="input-image" /> | ||
| 91 | + </div> | ||
| 92 | + </div> | ||
| 93 | + <div class="form-group"> | ||
| 94 | + <label class="col-sm-2 control-label" for="input-sort-order"><?php echo $entry_sort_order; ?></label> | ||
| 95 | + <div class="col-sm-10"> | ||
| 96 | + <input type="text" name="sort_order" value="<?php echo $sort_order; ?>" placeholder="<?php echo $entry_sort_order; ?>" id="input-sort-order" class="form-control" /> | ||
| 97 | + </div> | ||
| 98 | + </div> | ||
| 99 | + </div> | ||
| 100 | + <?php if ($seo_enabled) { ?> | ||
| 101 | + <div class="tab-pane" id="tab-seo"> | ||
| 102 | + <?php echo $seo_package_tab; ?> | ||
| 103 | + </div> | ||
| 104 | + <?php } ?> | ||
| 105 | + </div> | ||
| 106 | + </form> | ||
| 107 | + </div> | ||
| 108 | + </div> | ||
| 109 | + </div> | ||
| 110 | +</div> | ||
| 111 | +<?php echo $footer; ?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php echo $header; ?><?php echo $column_left; ?> | ||
| 2 | +<div id="content"> | ||
| 3 | + <div id="modal-info" class="modal <?php if ($OC_V2) echo ' fade'; ?>" tabindex="-1" role="dialog" aria-hidden="true"></div> | ||
| 4 | + | ||
| 5 | + <ul class="breadcrumb"> | ||
| 6 | + <?php foreach ($breadcrumbs as $breadcrumb) { ?> | ||
| 7 | + <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li> | ||
| 8 | + <?php } ?> | ||
| 9 | + </ul> | ||
| 10 | + | ||
| 11 | + <div class="<?php if($OC_V2) echo 'container-fluid'; ?>"> | ||
| 12 | + <?php if (isset($success) && $success) { ?><div class="alert alert-success success"><i class="fa fa-check-circle"></i> <?php echo $success; ?> <button type="button" class="close" data-dismiss="alert">×</button></div><script type="text/javascript">setTimeout("jQuery('.alert-success').slideUp();",5000);</script><?php } ?> | ||
| 13 | + <?php if (isset($info) && $info) { ?><div class="alert alert-info"><i class="fa fa-info-circle"></i> <?php echo $info; ?> <button type="button" class="close" data-dismiss="alert">×</button></div><?php } ?> | ||
| 14 | + <?php if (isset($error) && $error) { ?><div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error; ?> <button type="button" class="close" data-dismiss="alert">×</button></div><?php } ?> | ||
| 15 | + <?php if (isset($error_warning) && $error_warning) { ?><div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?> <button type="button" class="close" data-dismiss="alert">×</button></div><?php } ?> | ||
| 16 | + | ||
| 17 | + <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form"> | ||
| 18 | + <div class="panel panel-default"> | ||
| 19 | + <div class="panel-heading"> | ||
| 20 | + <div class="pull-right"> | ||
| 21 | + <button type="button" id="btn-clear-cache" class="btn btn-warning"><i class="fa fa-eraser"></i> <?php echo $button_clear_cache; ?></button> | ||
| 22 | + <button type="submit" form="form" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i> <?php echo $button_save; ?></button> | ||
| 23 | + <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i> <?php echo $button_cancel; ?></a> | ||
| 24 | + </div> | ||
| 25 | + <h3 class="panel-title"><?php echo $heading_title; ?></h3> | ||
| 26 | + </div> | ||
| 27 | + <div class="content panel-body"> | ||
| 28 | + <ul class="nav nav-tabs"> | ||
| 29 | + <li class="active"><a href="#tab-0" data-toggle="tab"><i class="fa fa-sitemap"></i><?php echo $_language->get('text_tab_0'); ?></a></li> | ||
| 30 | + <!--<li><a href="#tab-1" data-toggle="tab"><i class="fa fa-sitemap"></i><?php echo $_language->get('text_tab_1'); ?></a></li>--> | ||
| 31 | + <li><a href="#tab-2" data-toggle="tab"><i class="fa fa-cog"></i><?php echo $_language->get('text_tab_2'); ?></a></li> | ||
| 32 | + <?php if (!$seo_package_active) { ?> | ||
| 33 | + <li><a href="#tab-about" data-toggle="tab"><i class="fa fa-info"></i><?php echo $_language->get('text_tab_about'); ?></a></li> | ||
| 34 | + <?php } ?> | ||
| 35 | + </ul> | ||
| 36 | + | ||
| 37 | + | ||
| 38 | + <?php /*<input type="hidden" name="advanced_sitemap_fullcode" value="<?php echo $fullcode; ?>"/>*/ ?> | ||
| 39 | + <input type="hidden" name="advanced_sitemap_status" value="1"/> | ||
| 40 | + <div class="tab-content"> | ||
| 41 | + <div class="tab-pane active clearfix" id="tab-0"> | ||
| 42 | + <ul id="advanced_sitemap_feeds" class="nav nav-pills nav-stacked col-md-2"> | ||
| 43 | + <?php foreach ($stores as $store) { ?> | ||
| 44 | + <li <?php if(!$store['store_id']) echo 'class="active"'; ?> id="feed-<?php echo $store['store_id']; ?>"><a href="#tab-feed-<?php echo $store['store_id']; ?>" data-toggle="pill"><?php echo $store['name']; ?></a></li> | ||
| 45 | + <?php } ?> | ||
| 46 | + </ul> | ||
| 47 | + <div class="tab-content col-md-10"> | ||
| 48 | + <?php foreach ($stores as $store) { ?> | ||
| 49 | + <div class="tab-pane <?php if(!$store['store_id']) echo ' active'; ?>" id="tab-feed-<?php echo $store['store_id']; ?>"> | ||
| 50 | + <table class="form"> | ||
| 51 | + <tr> | ||
| 52 | + <td><?php echo $_language->get('entry_data_feed'); ?></td> | ||
| 53 | + <td><i class="fa fa-sitemap"></i> <a style="text-decoration:none;" href="<?php echo $store['url'].$main_feed; ?>" target="_blank"><?php echo $store['url'].$main_feed; ?></a></td> | ||
| 54 | + </tr> | ||
| 55 | + <?php if (!empty($advanced_sitemap_lang_feeds)) { ?> | ||
| 56 | + <tr> | ||
| 57 | + <td><?php echo $_language->get('entry_lang_feed'); ?></td> | ||
| 58 | + <td> | ||
| 59 | + <?php foreach($lang_feeds as $feed) { ?> | ||
| 60 | + <img src="<?php echo $feed['image']; ?>" alt=""/> <a style="text-decoration:none;" href="<?php echo $store['url'].$feed['feed']; ?>" target="_blank"><?php echo $store['url'].$feed['feed']; ?></a><br/><br/> | ||
| 61 | + <?php } ?> | ||
| 62 | + </td> | ||
| 63 | + </tr> | ||
| 64 | + <?php } ?> | ||
| 65 | + <!--tr> | ||
| 66 | + <td><?php echo $_language->get('entry_data_image_feed'); ?></td> | ||
| 67 | + <td><i class="fa fa-sitemap"></i> <a style="text-decoration:none;" href="<?php echo $store['url'].$main_feed; ?>" target="_blank"><?php echo $store['url'].$main_feed; ?></a></td> | ||
| 68 | + </tr--> | ||
| 69 | + <tr> | ||
| 70 | + <td><?php echo $_language->get('entry_grid_feed'); ?></td> | ||
| 71 | + <td> | ||
| 72 | + <?php foreach($grid_feeds as $feed) { ?> | ||
| 73 | + <i class="fa fa-th"></i> <a style="text-decoration:none;" href="<?php echo $store['url'].$feed; ?>" target="_blank"><?php echo $store['url'].$feed; ?></a><br/><br/> | ||
| 74 | + <?php } ?> | ||
| 75 | + </td> | ||
| 76 | + </tr> | ||
| 77 | + </table> | ||
| 78 | + </div> | ||
| 79 | + <?php $store['store_id']++; ?> | ||
| 80 | + <?php } ?> | ||
| 81 | + </div> | ||
| 82 | + </div> | ||
| 83 | + <div class="tab-pane" id="tab-1"> | ||
| 84 | + </div> | ||
| 85 | + <div class="tab-pane" id="tab-2"> | ||
| 86 | + <ul class="nav nav-pills nav-stacked col-md-2"> | ||
| 87 | + <li class="active"><a href="#tab-opt-1" data-toggle="pill"><?php echo $_language->get('tab_opt_1'); ?></a></li> | ||
| 88 | + <li><a href="#tab-opt-2" data-toggle="pill"><?php echo $_language->get('tab_opt_2'); ?></a></li> | ||
| 89 | + <li><a href="#tab-cron" data-toggle="pill">Cron</a></li> | ||
| 90 | + </ul> | ||
| 91 | + <div class="tab-content col-md-10"> | ||
| 92 | + <div class="tab-pane active" id="tab-opt-1"> | ||
| 93 | + <table class="table table-hover"> | ||
| 94 | + <thead> | ||
| 95 | + <tr> | ||
| 96 | + <th style="width:200px"><?php echo $_language->get('text_link_type'); ?></th> | ||
| 97 | + <th><?php echo $_language->get('entry_status'); ?></th> | ||
| 98 | + <!--<th><?php echo $_language->get('entry_multilang'); ?></th>--> | ||
| 99 | + <th><?php echo $_language->get('entry_priority'); ?></th> | ||
| 100 | + <th><?php echo $_language->get('entry_freq'); ?></th> | ||
| 101 | + </tr> | ||
| 102 | + </thead> | ||
| 103 | + <tbody> | ||
| 104 | + <?php $feed_types = array('product', 'category', 'manufacturer', 'information'/*, 'image'*/); | ||
| 105 | + if ($journal_active) $feed_types[] = 'journal'; | ||
| 106 | + foreach ($feed_types as $type) { ?> | ||
| 107 | + <tr> | ||
| 108 | + <td><?php echo $_language->get('text_type_'.$type); ?></td> | ||
| 109 | + <td><input class="switch" type="checkbox" name="advanced_sitemap_cfg[<?php echo $type; ?>][status]" id="advanced_sitemap_cfg_<?php echo $type; ?>_status" value="1" <?php if(!empty($advanced_sitemap_cfg[$type]['status'])) echo 'checked="checked"'; ?>/></td> | ||
| 110 | + <!--<td></td>--> | ||
| 111 | + <td> | ||
| 112 | + <select class="form-control" name="advanced_sitemap_cfg[<?php echo $type; ?>][priority]"> | ||
| 113 | + <?php foreach (array('10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0') as $priority) { ?> | ||
| 114 | + <option value="<?php echo $priority/10; ?>" <?php if($priority/10 == $advanced_sitemap_cfg[$type]['priority']) echo 'selected=""'; ?>><?php echo $priority; ?></option> | ||
| 115 | + <?php } ?> | ||
| 116 | + </select> | ||
| 117 | + </td> | ||
| 118 | + <td> | ||
| 119 | + <select class="form-control" name="advanced_sitemap_cfg[<?php echo $type; ?>][freq]"> | ||
| 120 | + <?php foreach (array('always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never') as $changefreq) { ?> | ||
| 121 | + <option value="<?php echo $changefreq; ?>" <?php if($changefreq == $advanced_sitemap_cfg[$type]['freq']) echo 'selected=""'; ?>><?php echo $_language->get('text_freq_'.$changefreq); ?></option> | ||
| 122 | + <?php } ?> | ||
| 123 | + </select> | ||
| 124 | + </td> | ||
| 125 | + </tr> | ||
| 126 | + <?php } ?> | ||
| 127 | + <tr> | ||
| 128 | + <td><?php echo $_language->get('custom_links_include'); ?></td> | ||
| 129 | + <td colspan="3"><textarea type="text" class="form-control" name="advanced_sitemap_cfg[custom_links_include]" id="advanced_sitemap_cfg_custom_links_include" cols="30" rows="10"><?php if(!empty($advanced_sitemap_cfg['custom_links_include'])) echo $advanced_sitemap_cfg['custom_links_include']; ?></textarea></td> | ||
| 130 | + </tr> | ||
| 131 | + <tr> | ||
| 132 | + <td><?php echo $_language->get('custom_links_exclude'); ?></td> | ||
| 133 | + <td colspan="3"><textarea type="text" class="form-control" name="advanced_sitemap_cfg[custom_links_exclude]" id="advanced_sitemap_cfg_custom_links_exclude" cols="30" rows="10"><?php if(!empty($advanced_sitemap_cfg['custom_links_exclude'])) echo $advanced_sitemap_cfg['custom_links_exclude']; ?></textarea></td> | ||
| 134 | + </tr> | ||
| 135 | + </tbody> | ||
| 136 | + </table> | ||
| 137 | + </div> | ||
| 138 | + <div class="tab-pane" id="tab-opt-2"> | ||
| 139 | + <table class="form"> | ||
| 140 | + <tr> | ||
| 141 | + <td><?php echo $_language->get('entry_item_no'); ?></td> | ||
| 142 | + <td><input type="text" class="form-control" name="advanced_sitemap_limit" value="<?php echo !empty($advanced_sitemap_limit) ? $advanced_sitemap_limit : ''; ?>"/></td> | ||
| 143 | + </tr> | ||
| 144 | + <tr> | ||
| 145 | + <td><?php echo $_language->get('entry_friendly_url'); ?></td> | ||
| 146 | + <td><input class="switch" type="checkbox" name="advanced_sitemap_rewrite" id="advanced_sitemap_rewrite" value="1" <?php if(!empty($advanced_sitemap_rewrite)) echo 'checked="checked"'; ?>/></td> | ||
| 147 | + </tr> | ||
| 148 | + <tr> | ||
| 149 | + <td><?php echo $_language->get('entry_hreflang'); ?></td> | ||
| 150 | + <td><input class="switch" type="checkbox" name="advanced_sitemap_hreflang" id="advanced_sitemap_hreflang" value="1" <?php if(!empty($advanced_sitemap_hreflang)) echo 'checked="checked"'; ?>/></td> | ||
| 151 | + </tr> | ||
| 152 | + <tr> | ||
| 153 | + <td><?php echo $_language->get('entry_lang_feeds'); ?></td> | ||
| 154 | + <td><input class="switch" type="checkbox" name="advanced_sitemap_lang_feeds" id="advanced_sitemap_lang_feeds" value="1" <?php if(!empty($advanced_sitemap_lang_feeds)) echo 'checked="checked"'; ?>/></td> | ||
| 155 | + </tr> | ||
| 156 | + <tr> | ||
| 157 | + <td><?php echo $_language->get('entry_in_stock'); ?></td> | ||
| 158 | + <td><input class="switch" type="checkbox" name="advanced_sitemap_cfg[in_stock]" id="advanced_sitemap_cfg_in_stock" value="1" <?php if(!empty($advanced_sitemap_cfg['in_stock'])) echo 'checked="checked"'; ?>/></td> | ||
| 159 | + </tr> | ||
| 160 | + <tr> | ||
| 161 | + <td><?php echo $_language->get('entry_include_img'); ?></td> | ||
| 162 | + <td><input class="switch" type="checkbox" name="advanced_sitemap_cfg[img]" id="advanced_sitemap_cfg_img" value="1" <?php if(!empty($advanced_sitemap_cfg['img'])) echo 'checked="checked"'; ?>/></td> | ||
| 163 | + </tr> | ||
| 164 | + <tr> | ||
| 165 | + <td><?php echo $_language->get('entry_additional_img'); ?></td> | ||
| 166 | + <td><input class="switch" type="checkbox" name="advanced_sitemap_cfg[additional_img]" id="advanced_sitemap_cfg_additional_img" value="1" <?php if(!empty($advanced_sitemap_cfg['additional_img'])) echo 'checked="checked"'; ?>/></td> | ||
| 167 | + </tr> | ||
| 168 | + <tr> | ||
| 169 | + <td><?php echo $_language->get('entry_fullsize_img'); ?></td> | ||
| 170 | + <td><input class="switch" type="checkbox" name="advanced_sitemap_cfg[fullsize_img]" id="advanced_sitemap_cfg_fullsize_img" value="1" <?php if(!empty($advanced_sitemap_cfg['fullsize_img'])) echo 'checked="checked"'; ?>/></td> | ||
| 171 | + </tr> | ||
| 172 | + <tr> | ||
| 173 | + <td><?php echo $_language->get('entry_no_count'); ?></td> | ||
| 174 | + <td><input class="switch" type="checkbox" name="advanced_sitemap_cfg[no_count]" id="advanced_sitemap_cfg_no_count" value="1" <?php if(!empty($advanced_sitemap_cfg['no_count'])) echo 'checked="checked"'; ?>/></td> | ||
| 175 | + </tr> | ||
| 176 | + <tr> | ||
| 177 | + <td><?php echo $_language->get('entry_display_img'); ?></td> | ||
| 178 | + <td><input class="switch" type="checkbox" name="advanced_sitemap_cfg[display_img]" id="advanced_sitemap_cfg_display_img" value="1" <?php if(!empty($advanced_sitemap_cfg['display_img'])) echo 'checked="checked"'; ?>/></td> | ||
| 179 | + </tr> | ||
| 180 | + </table> | ||
| 181 | + </div> | ||
| 182 | + <div class="tab-pane" id="tab-cron"> | ||
| 183 | + <div class="well"> | ||
| 184 | + Use this command to set up your cron job periodically in order to generate automatically the sitemap cache.<br/><br/> | ||
| 185 | + <code>/[path_to_php]/php <?php echo $cron_url; ?></code><br/><br/> | ||
| 186 | + <?php foreach ($stores as $store) { | ||
| 187 | + if (!$store['store_id']) continue; ?> | ||
| 188 | + <code>/[path_to_php]/php <?php echo $cron_url; ?> store_id=<?php echo $store['store_id']; ?></code><br/><br/> | ||
| 189 | + <?php } ?> | ||
| 190 | + </div> | ||
| 191 | + </div> | ||
| 192 | + </div> | ||
| 193 | + </div> | ||
| 194 | + <div class="tab-pane" id="tab-about"> | ||
| 195 | + <table class="form about"> | ||
| 196 | + <tr> | ||
| 197 | + <td colspan="2" style="text-align:center;padding:30px 0 50px"><?php echo $heading_title; ?></td> | ||
| 198 | + </tr> | ||
| 199 | + <tr> | ||
| 200 | + <td>Version</td> | ||
| 201 | + <td>1.0</td> | ||
| 202 | + </tr> | ||
| 203 | + <tr> | ||
| 204 | + <td>Free support</td> | ||
| 205 | + <td>I take care of maintaining my modules at top quality and affordable price.<br/>In case of bug, incompatibility, or if you want a new feature, just contact me on my mail.</td> | ||
| 206 | + </tr> | ||
| 207 | + <tr> | ||
| 208 | + <td>Contact</td> | ||
| 209 | + <td><a href="mailto:support@geekodev.com">support@geekodev.com</a></td> | ||
| 210 | + </tr> | ||
| 211 | + <tr> | ||
| 212 | + <td>Links</td> | ||
| 213 | + <td> | ||
| 214 | + If you like this module, please consider to make a star rating <span style="position:relative;top:3px;width:80px;height:17px;display:inline-block;background:url(data:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAARCAYAAADUryzEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8wNy8xMrG4sToAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAACr0lEQVQ4jX1US0+TURA98/Xri0KBYqG8BDYItBoIBhFBBdRNTTQx0Q0gujBiAkEXxoXxD6iJbRcaY1iQEDXqTgwQWkWDIBU3VqWQoEgECzUU+n5910VbHhacZHLvzD05c+fMzaVhgxYJIwIYi+8B8FJ5bzjob9ucB4DmLttGMGyoAGMsyc1G7bEvA91roz2NL7Y7TziHHSxFmWsorbuUFgn79BaTLnMn3LYEZqPukCKruFAUGEd54w1ekqK69x8CSkoqMnJv72noTmN+O9Q5KlE44GqxmHTS7Qho5MH+X8SJUuMhAIbM/CrS1tSnCYsmkOoUnO7SiP3dHV8Mw5AoKkRCfTwR96ei+ZZGVVDDJQhIWAVbfhjDe8eQnd/Aq8+/VAIsAcGbR8ejQiR8jcwGbYZEkTFVd7I9B4IXcL+GEPwdK4SN0XJSDaCoAvHZsA4/93hWHNVNnbZpjoG5gl7XvpFnxggxAZRaA0rokliIAIkaxMnwdWLE7XW77jd12qYBgCMiNHfZlhgTCkZfPfUDBAYGItoiL0lK8N0+51txzD1u7Ji8njTGpk6bg/iUhSiU4GT5YOtPL940AOfiDyHod9/dMsYEzmLS5bBoKE/ES8ECCyACSF4IFledAdhd2SIFUdtmAp7i92QM+uKqVg6RJXDKakCcjyjSwcldMUDgG7I0h8WKdI0ewM2kFuTpmlb1bp2UMYBJyjBjm/FYh57MjA/1+1wuESNZOfjoLPwe516zUSdLIgi6l+sl3CIW5leD7/v7HPNTE+cOtr8tDXhWy+zWAcvnDx/XoiEPiirPBomgXxd32KAFEWp3FR0YdP60pop4sfHI5cmr+MfMRl2tXKnqzS5pyFuaHRusu2A5EyeoAEAQS2Q94VDg4pY/YUOf9ZgxnBaJJSeOdny6AgB/AYEpKtpaTusRAAAAAElFTkSuQmCC)"></span> on the module page :]<br/><br/> | ||
| 215 | + <b>Module page :</b> <a target="_blank" href="http://www.opencart.com/index.php?route=extension/extension/info&extension_id="><?php echo $heading_title; ?></a><br/> | ||
| 216 | + <b>Other modules :</b> <a target="_blank" href="https://www.opencart.com/index.php?route=marketplace/extension&filter_member=GeekoDev">My modules on opencart</a><br/> | ||
| 217 | + </td> | ||
| 218 | + </tr> | ||
| 219 | + </table> | ||
| 220 | + </div> | ||
| 221 | + </div> | ||
| 222 | + </div> | ||
| 223 | + </div> | ||
| 224 | + </form> | ||
| 225 | + </div> | ||
| 226 | +</div> | ||
| 227 | +<script type="text/javascript"><!-- | ||
| 228 | +$('input.switch').iToggle({easing: 'swing',speed: 200}); | ||
| 229 | +//$('.select2').select2(); | ||
| 230 | +--></script> | ||
| 231 | +<script type="text/javascript"><!-- | ||
| 232 | +$('body').on('click', '.info-btn', function() { | ||
| 233 | + $('#modal-info').html('<div style="text-align:center"><img src="view/advanced_sitemap/img/loader.gif" alt=""/></div>'); | ||
| 234 | + $('#modal-info').load('index.php?route=module/advanced_sitemap/modal_info&<?php echo $token; ?>', {'info': $(this).attr('data-info')}); | ||
| 235 | +}); | ||
| 236 | +//--></script> | ||
| 237 | +<!-- /custom blocks --> | ||
| 238 | +<script src="https://cdn.jsdelivr.net/npm/sweetalert2@9"></script> | ||
| 239 | +<script> | ||
| 240 | + $(document).ready(function(){ | ||
| 241 | + $('#btn-clear-cache').on('click', function(){ | ||
| 242 | + Swal.fire({ | ||
| 243 | + title: 'Are you sure?', | ||
| 244 | + text: "Do you want to clear cache?", | ||
| 245 | + icon: 'warning', | ||
| 246 | + showCancelButton: true, | ||
| 247 | + confirmButtonColor: '#3085d6', | ||
| 248 | + cancelButtonColor: '#d33', | ||
| 249 | + confirmButtonText: 'Yes!' | ||
| 250 | + }).then((result) => { | ||
| 251 | + if (result.value) { | ||
| 252 | + $.post('index.php?route=feed/advanced_sitemap/clearCache&<?php echo $token; ?>', {}, function(data){ | ||
| 253 | + Swal.fire( | ||
| 254 | + 'Success!', | ||
| 255 | + 'Removed '+ data.counter+ ' file(s)', | ||
| 256 | + 'success' | ||
| 257 | + ); | ||
| 258 | + }); | ||
| 259 | + } | ||
| 260 | + }); | ||
| 261 | + }); | ||
| 262 | + }); | ||
| 263 | +</script> | ||
| 264 | +<?php echo $footer; ?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
This diff could not be displayed because it is too large.
| 1 | +<?php if ($gkd_snippet == 'seo_tab') { if ($_config->get('mlseo_enabled') && ($_config->get('mlseo_multistore') || $item_type == 'manufacturer')) { ?> | ||
| 2 | +<ul class="nav nav-pills nav-stacked col-md-2" id="stores"<?php if (!$_config->get('mlseo_multistore')) echo ' style="display:none"' ?>> | ||
| 3 | + <?php $first=0; foreach ($stores as $store) { | ||
| 4 | + if (!$store['store_id'] && $item_type != 'manufacturer') continue; | ||
| 5 | + if ($store['store_id'] && !$_config->get('mlseo_multistore')) continue; | ||
| 6 | + ?> | ||
| 7 | + <li<?php if(!$first) { echo ' class="active"'; $first=1;} ?>><a href="#gkd-tab-store-<?php echo $store['store_id']; ?>" data-toggle="pill"><?php echo $store['name']; ?></a></li> | ||
| 8 | + <?php } ?> | ||
| 9 | +</ul> | ||
| 10 | +<div class="tab-content col-md-<?php echo (!$_config->get('mlseo_multistore') ? 12 : 10); ?> clearfix"> | ||
| 11 | + <?php $first=0; foreach ($stores as $store) { | ||
| 12 | + if (!$store['store_id'] && $item_type != 'manufacturer') continue; | ||
| 13 | + if ($store['store_id'] && !$_config->get('mlseo_multistore')) continue; | ||
| 14 | + ?> | ||
| 15 | + <div id="gkd-tab-store-<?php echo $store['store_id']; ?>" class="tab-pane<?php if(!$first) { echo ' active'; $first=1;} ?>"> | ||
| 16 | + <ul id="gkd-tab-store-language-<?php echo $store['store_id']; ?>" class="nav nav-tabs"> | ||
| 17 | + <?php $first=0; foreach ($languages as $language) { ?> | ||
| 18 | + <li<?php if(!$first) { echo ' class="active"'; $first=1;} ?>><a href="#gkd-store-tab-language-<?php echo $store['store_id']; ?>-<?php echo $language['language_id']; ?>" data-toggle="tab"><img src="<?php echo $language['image']; ?>"/> <?php echo $language['name']; ?></a></li> | ||
| 19 | + <?php } ?> | ||
| 20 | + </ul> | ||
| 21 | + | ||
| 22 | + <div class="tab-content"> | ||
| 23 | + <?php $first=0; foreach ($languages as $language) { ?> | ||
| 24 | + <div id="gkd-store-tab-language-<?php echo $store['store_id']; ?>-<?php echo $language['language_id']; ?>" class="tab-pane<?php if(!$first) {echo ' active'; $first=1;} ?>"> | ||
| 25 | + <div class="form-group required"> | ||
| 26 | + <label class="col-sm-2 control-label" for="input-nameinput-seo-name<?php echo $store['store_id'].$language['language_id']; ?>"><?php echo ($_language->get('entry_name') == 'entry_name') ? $_language->get('entry_title') : $_language->get('entry_name'); ?></label> | ||
| 27 | + <div class="col-sm-10"> | ||
| 28 | + <input type="text" name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][name]" value="<?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['name']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['name'] : ''; ?>" placeholder="<?php echo ($_language->get('entry_name') == 'entry_name') ? $_language->get('entry_title') : $_language->get('entry_name'); ?>" id="input-seo-name<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control" /> | ||
| 29 | + </div> | ||
| 30 | + </div> | ||
| 31 | + <div class="form-group"> | ||
| 32 | + <label class="col-sm-2 control-label" for="input-seo-fulldesc<?php echo $store['store_id'].$language['language_id']; ?>"><?php echo $_language->get('entry_description'); ?></label> | ||
| 33 | + <div class="col-sm-10"> | ||
| 34 | + <?php if (version_compare(VERSION, '3', '>=')) { ?> | ||
| 35 | + <textarea name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][description]" placeholder="<?php echo $_language->get('entry_description'); ?>" data-toggle="summernote" data-lang="" id="input-seo-fulldesc<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control"><?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['description']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['description'] : ''; ?></textarea> | ||
| 36 | + <?php } else { ?> | ||
| 37 | + <textarea name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][description]" placeholder="<?php echo $_language->get('entry_description'); ?>" id="input-seo-fulldesc<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control summernote"><?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['description']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['description'] : ''; ?></textarea> | ||
| 38 | + <?php } ?> | ||
| 39 | + </div> | ||
| 40 | + </div> | ||
| 41 | + <div class="form-group"> | ||
| 42 | + <label class="col-sm-2 control-label"></label> | ||
| 43 | + <div class="col-sm-10"> | ||
| 44 | + <btn class="btn btn-block btn-default btnSeoGen" onClick="seoPackageGen('all', '<?php echo $language['language_id']; ?>', '<?php echo $store['store_id']; ?>')"><i class="fa fa-bolt"></i> Generate all SEO values</btn> | ||
| 45 | + </div> | ||
| 46 | + </div> | ||
| 47 | + <div class="form-group"> | ||
| 48 | + <label class="col-sm-2 control-label" for="input-seo-keyword<?php echo $store['store_id'].$language['language_id']; ?>"><?php echo $_language->get('entry_keyword'); ?></label> | ||
| 49 | + <div class="col-sm-10"> | ||
| 50 | + <div class="input-group"> | ||
| 51 | + <input type="text" name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][seo_keyword]" value="<?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['seo_keyword']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['seo_keyword'] : ''; ?>" placeholder="<?php echo $_language->get('entry_keyword'); ?>" id="input-seo-keyword<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control" /> | ||
| 52 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('seo_keyword', '<?php echo $language['language_id']; ?>', '<?php echo $store['store_id']; ?>')"><i class="fa fa-bolt"></i></span> | ||
| 53 | + </div> | ||
| 54 | + </div> | ||
| 55 | + </div> | ||
| 56 | + <div class="form-group"> | ||
| 57 | + <label class="col-sm-2 control-label" for="input-seo-h1<?php echo $store['store_id'].$language['language_id']; ?>">SEO H1</label> | ||
| 58 | + <div class="col-sm-10"> | ||
| 59 | + <div class="input-group"> | ||
| 60 | + <input type="text" name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][seo_h1]" value="<?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['seo_h1']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['seo_h1'] : ''; ?>" placeholder="SEO H1" id="input-seo-h1<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control" /> | ||
| 61 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('seo_h1', '<?php echo $language['language_id']; ?>', '<?php echo $store['store_id']; ?>')"><i class="fa fa-bolt"></i></span> | ||
| 62 | + </div> | ||
| 63 | + </div> | ||
| 64 | + </div> | ||
| 65 | + <div class="form-group"> | ||
| 66 | + <label class="col-sm-2 control-label" for="input-seo-h2<?php echo $store['store_id'].$language['language_id']; ?>">SEO H2</label> | ||
| 67 | + <div class="col-sm-10"> | ||
| 68 | + <div class="input-group"> | ||
| 69 | + <input type="text" name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][seo_h2]" value="<?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['seo_h2']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['seo_h2'] : ''; ?>" placeholder="SEO H2" id="input-seo-h2<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control" /> | ||
| 70 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('seo_h2', '<?php echo $language['language_id']; ?>', '<?php echo $store['store_id']; ?>')"><i class="fa fa-bolt"></i></span> | ||
| 71 | + </div> | ||
| 72 | + </div> | ||
| 73 | + </div> | ||
| 74 | + <div class="form-group"> | ||
| 75 | + <label class="col-sm-2 control-label" for="input-seo-h3<?php echo $store['store_id'].$language['language_id']; ?>">SEO H3</label> | ||
| 76 | + <div class="col-sm-10"> | ||
| 77 | + <div class="input-group"> | ||
| 78 | + <input type="text" name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][seo_h3]" value="<?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['seo_h3']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['seo_h3'] : ''; ?>" placeholder="SEO H3" id="input-seo-h3<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control" /> | ||
| 79 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('seo_h3', '<?php echo $language['language_id']; ?>', '<?php echo $store['store_id']; ?>')"><i class="fa fa-bolt"></i></span> | ||
| 80 | + </div> | ||
| 81 | + </div> | ||
| 82 | + </div> | ||
| 83 | + <?php if ($item_type == 'product') { ?> | ||
| 84 | + <div class="form-group"> | ||
| 85 | + <label class="col-sm-2 control-label" for="input-image-alt<?php echo $store['store_id'].$language['language_id']; ?>">Image alt</label> | ||
| 86 | + <div class="col-sm-10"> | ||
| 87 | + <div class="input-group"> | ||
| 88 | + <input type="text" name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][image_alt]" value="<?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['image_alt']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['image_alt'] : ''; ?>" placeholder="Image alt" id="input-image-alt<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control" /> | ||
| 89 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('image_alt', '<?php echo $language['language_id']; ?>', '<?php echo $store['store_id']; ?>')"><i class="fa fa-bolt"></i></span> | ||
| 90 | + </div> | ||
| 91 | + </div> | ||
| 92 | + </div> | ||
| 93 | + <div class="form-group"> | ||
| 94 | + <label class="col-sm-2 control-label" for="input-image-title<?php echo $store['store_id'].$language['language_id']; ?>">Image title</label> | ||
| 95 | + <div class="col-sm-10"> | ||
| 96 | + <div class="input-group"> | ||
| 97 | + <input type="text" name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][image_title]" value="<?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['image_title']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['image_title'] : ''; ?>" placeholder="Image title" id="input-image-title<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control" /> | ||
| 98 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('image_title', '<?php echo $language['language_id']; ?>', '<?php echo $store['store_id']; ?>')"><i class="fa fa-bolt"></i></span> | ||
| 99 | + </div> | ||
| 100 | + </div> | ||
| 101 | + </div> | ||
| 102 | + <?php } ?> | ||
| 103 | + <div class="form-group required"> | ||
| 104 | + <label class="col-sm-2 control-label" for="input-meta-title<?php echo $store['store_id'].$language['language_id']; ?>"><?php echo $_language->get('entry_meta_title'); ?></label> | ||
| 105 | + <div class="col-sm-10"> | ||
| 106 | + <div class="input-group"> | ||
| 107 | + <input type="text" name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][meta_title]" value="<?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['meta_title']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['meta_title'] : ''; ?>" placeholder="<?php echo $_language->get('entry_meta_title'); ?>" id="input-meta-title<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control" /> | ||
| 108 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('meta_title', '<?php echo $language['language_id']; ?>', '<?php echo $store['store_id']; ?>')"><i class="fa fa-bolt"></i></span> | ||
| 109 | + </div> | ||
| 110 | + <?php if (isset($error_meta_title[$language['language_id']])) { ?> | ||
| 111 | + <div class="text-danger"><?php echo $error_meta_title[$language['language_id']]; ?></div> | ||
| 112 | + <?php } ?> | ||
| 113 | + </div> | ||
| 114 | + </div> | ||
| 115 | + <div class="form-group"> | ||
| 116 | + <label class="col-sm-2 control-label" for="input-meta-description<?php echo $store['store_id'].$language['language_id']; ?>"><?php echo $_language->get('entry_meta_description'); ?></label> | ||
| 117 | + <div class="col-sm-10"> | ||
| 118 | + <div class="input-group"> | ||
| 119 | + <textarea name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][meta_description]" rows="5" placeholder="<?php echo $_language->get('entry_meta_description'); ?>" id="input-meta-description<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control"><?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['meta_description']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['meta_description'] : ''; ?></textarea> | ||
| 120 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('meta_description', '<?php echo $language['language_id']; ?>', '<?php echo $store['store_id']; ?>')"><i class="fa fa-bolt"></i></span> | ||
| 121 | + </div> | ||
| 122 | + </div> | ||
| 123 | + </div> | ||
| 124 | + <div class="form-group"> | ||
| 125 | + <label class="col-sm-2 control-label" for="input-meta-keyword<?php echo $store['store_id'].$language['language_id']; ?>"><?php echo $_language->get('entry_meta_keyword'); ?></label> | ||
| 126 | + <div class="col-sm-10"> | ||
| 127 | + <div class="input-group"> | ||
| 128 | + <textarea name="seo_<?php echo $item_type; ?>_description[<?php echo $store['store_id']; ?>][<?php echo $language['language_id']; ?>][meta_keyword]" rows="5" placeholder="<?php echo $_language->get('entry_meta_keyword'); ?>" id="input-meta-keyword<?php echo $store['store_id'].$language['language_id']; ?>" class="form-control"><?php echo isset(${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['meta_keyword']) ? ${'seo_'.$item_type.'_description'}[$store['store_id']][$language['language_id']]['meta_keyword'] : ''; ?></textarea> | ||
| 129 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('meta_keyword', '<?php echo $language['language_id']; ?>', '<?php echo $store['store_id']; ?>')"><i class="fa fa-bolt"></i></span> | ||
| 130 | + </div> | ||
| 131 | + </div> | ||
| 132 | + </div> | ||
| 133 | + </div> | ||
| 134 | + <?php } ?> | ||
| 135 | + <?php if ($item_type == 'manufacturer') { ?> | ||
| 136 | + <?php if (version_compare(VERSION, '2', '>=')) { ?> | ||
| 137 | + <link href="view/javascript/codemirror/lib/codemirror.css" rel="stylesheet" /> | ||
| 138 | + <link href="view/javascript/codemirror/theme/monokai.css" rel="stylesheet" /> | ||
| 139 | + <script type="text/javascript" src="view/javascript/codemirror/lib/codemirror.js"></script> | ||
| 140 | + <script type="text/javascript" src="view/javascript/codemirror/lib/xml.js"></script> | ||
| 141 | + <script type="text/javascript" src="view/javascript/codemirror/lib/formatting.js"></script> | ||
| 142 | + <script type="text/javascript" src="view/javascript/summernote/summernote.js"></script> | ||
| 143 | + <link href="view/javascript/summernote/summernote.css" rel="stylesheet" /> | ||
| 144 | + <script type="text/javascript" src="view/javascript/summernote/summernote-image-attributes.js"></script> | ||
| 145 | + <script type="text/javascript" src="view/javascript/summernote/opencart.js"></script> | ||
| 146 | + <?php } ?> | ||
| 147 | + <script type="text/javascript"><!-- | ||
| 148 | + $('.btnSeoGen').hover( function(){ | ||
| 149 | + $(this).addClass('btn-primary'); | ||
| 150 | + }, function(){ | ||
| 151 | + $(this).removeClass('btn-primary'); | ||
| 152 | + }); | ||
| 153 | + | ||
| 154 | + function seoPackageGen(field, lang, store) { | ||
| 155 | + $.ajax({ | ||
| 156 | + url: 'index.php?route=module/complete_seo/get_value&type=<?php echo $item_type; ?>&id=<?php echo isset($_GET[$item_type.'_id']) ? $_GET[$item_type.'_id'] : 0; ?>&field='+field+'&store='+store+'&lang='+lang+'&<?php echo $token_type; ?>=<?php echo $token; ?>', | ||
| 157 | + method: 'POST', | ||
| 158 | + data: $('form#form-<?php echo $item_type; ?>').serialize(), | ||
| 159 | + dataType: 'json', | ||
| 160 | + success: function(values) { | ||
| 161 | + jQuery.each( values, function( i, val ) { | ||
| 162 | + if (field == 'description') { | ||
| 163 | + if (CKEDITOR.status == 'loaded'){ | ||
| 164 | + var el = $('[name="'+i+'"]').next(); | ||
| 165 | + var id = $(el).attr('id').replace('cke_',''); | ||
| 166 | + CKEDITOR.instances[id].setData(val); | ||
| 167 | + } else if (typeof $('#input-description'+lang).summernote('code') === 'string') { | ||
| 168 | + $('[name="'+i+'"]').summernote('code', val); | ||
| 169 | + } else { | ||
| 170 | + $('[name="'+i+'"]').code(val); | ||
| 171 | + } | ||
| 172 | + } else { | ||
| 173 | + $('[name="'+i+'"]').val(val); | ||
| 174 | + } | ||
| 175 | + $('[name="'+i+'"]').css('transition', ''); | ||
| 176 | + $('[name="'+i+'"]').css('background-color', '#FCFFC6'); | ||
| 177 | + setTimeout(function(){ | ||
| 178 | + $('[name="'+i+'"]').css('transition', 'all 0.5s ease'); | ||
| 179 | + $('[name="'+i+'"]').css('background-color', ''); | ||
| 180 | + }, 10); | ||
| 181 | + }); | ||
| 182 | + } | ||
| 183 | + }); | ||
| 184 | + } | ||
| 185 | + --></script> | ||
| 186 | + <?php } ?> | ||
| 187 | + </div> | ||
| 188 | + </div> | ||
| 189 | + <?php } ?> | ||
| 190 | +</div> | ||
| 191 | +<?php }} else if ($gkd_snippet == 'snippet_robots') { ?> | ||
| 192 | +<?php if (version_compare(VERSION, '2', '>=')) { ?> | ||
| 193 | + <div class="form-group"> | ||
| 194 | + <label class="col-sm-2 control-label" for="input-sort-order">Meta Robots</label> | ||
| 195 | + <div class="col-sm-10"> | ||
| 196 | + <select class="form-control" name="meta_robots"> | ||
| 197 | + <option value="" <?php if($meta_robots == '') echo 'selected="selected"'; ?>>all</option> | ||
| 198 | + <option value="noindex" <?php if($meta_robots == 'noindex') echo 'selected="selected"'; ?>>noindex, follow</option> | ||
| 199 | + <option value="nofollow" <?php if($meta_robots == 'nofollow') echo 'selected="selected"'; ?>>index, nofollow</option> | ||
| 200 | + <option value="none" <?php if($meta_robots == 'none') echo 'selected="selected"'; ?>>none</option> | ||
| 201 | + <option value="noimageindex" <?php if($meta_robots == 'noimageindex') echo 'selected="selected"'; ?>>noimageindex</option> | ||
| 202 | + </select> | ||
| 203 | + </div> | ||
| 204 | + </div> | ||
| 205 | +<?php } else { ?> | ||
| 206 | +<tr> | ||
| 207 | + <td>Meta Robots</td> | ||
| 208 | + <td> | ||
| 209 | + <select class="form-control" name="meta_robots"> | ||
| 210 | + <option value="" <?php if($meta_robots == '') echo 'selected="selected"'; ?>>all</option> | ||
| 211 | + <option value="noindex" <?php if($meta_robots == 'noindex') echo 'selected="selected"'; ?>>noindex, follow</option> | ||
| 212 | + <option value="nofollow" <?php if($meta_robots == 'nofollow') echo 'selected="selected"'; ?>>index, nofollow</option> | ||
| 213 | + <option value="none" <?php if($meta_robots == 'none') echo 'selected="selected"'; ?>>none</option> | ||
| 214 | + <option value="noimageindex" <?php if($meta_robots == 'noimageindex') echo 'selected="selected"'; ?>>noimageindex</option> | ||
| 215 | + </select> | ||
| 216 | + </td> | ||
| 217 | +</tr> | ||
| 218 | +<?php }} else if ($gkd_snippet == 'seo_canonical') { ?> | ||
| 219 | +<div class="form-group"> | ||
| 220 | + <label class="col-sm-2 control-label" for="input-status"><span data-toggle="tooltip" title="Choose the path you want as canonical for this product - if you just added a new category you need to save product before being able to choose it">Canonical path</span></label> | ||
| 221 | + <div class="col-sm-10"> | ||
| 222 | + <select name="seo_canonical" id="input-canonical" class="form-control"> | ||
| 223 | + <option value="">- Auto -</option> | ||
| 224 | + <?php foreach ($product_categories as $product_category) { ?> | ||
| 225 | + <option value="<?php echo $product_category['category_id']; ?>" <?php echo (isset($seo_canonical) && $seo_canonical == $product_category['category_id']) ? 'selected' : ''; ?>><?php echo $product_category['name']; ?></option> | ||
| 226 | + <?php } ?> | ||
| 227 | + </select> | ||
| 228 | + </div> | ||
| 229 | +</div> | ||
| 230 | +<?php } else if ($gkd_snippet == 'snippet_metas') { ?> | ||
| 231 | + <?php if (version_compare(VERSION, '2.2', '>=') || $_config->get('mlseo_enabled')) { ?> | ||
| 232 | + <div class="form-group"> | ||
| 233 | + <label class="col-sm-2 control-label"></label> | ||
| 234 | + <div class="col-sm-10"> | ||
| 235 | + <btn class="btn btn-block btn-default btnSeoGen" onClick="seoPackageGen('all', '<?php echo $_language_id; ?>', '')"><i class="fa fa-bolt"></i> Generate all SEO values</btn> | ||
| 236 | + </div> | ||
| 237 | + </div> | ||
| 238 | + <div class="form-group"> | ||
| 239 | + <label class="col-sm-2 control-label" for="input-seo-keyword<?php echo $_language_id; ?>"><!--span data-toggle="tooltip" title="<?php echo $_language->get('help_keyword'); ?>"--><?php echo $_language->get('entry_keyword'); ?></label> | ||
| 240 | + <div class="col-sm-10"> | ||
| 241 | + <div class="input-group"> | ||
| 242 | + <input type="text" name="<?php echo $item_type; ?>_description[<?php echo $_language_id; ?>][seo_keyword]" value="<?php echo isset(${$item_type.'_description'}[$_language_id]) ? ${$item_type.'_description'}[$_language_id]['seo_keyword'] : ''; ?>" placeholder="<?php echo $_language->get('entry_keyword'); ?>" id="input-seo-keyword<?php echo $_language_id; ?>" class="form-control" /> | ||
| 243 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('seo_keyword', '<?php echo $_language_id; ?>', '')"><i class="fa fa-bolt"></i></span> | ||
| 244 | + </div> | ||
| 245 | + </div> | ||
| 246 | + </div> | ||
| 247 | + <div class="form-group"> | ||
| 248 | + <label class="col-sm-2 control-label" for="input-seo-h1<?php echo $_language_id; ?>">SEO H1</label> | ||
| 249 | + <div class="col-sm-10"> | ||
| 250 | + <div class="input-group"> | ||
| 251 | + <input type="text" name="<?php echo $item_type; ?>_description[<?php echo $_language_id; ?>][seo_h1]" value="<?php echo isset(${$item_type.'_description'}[$_language_id]) ? ${$item_type.'_description'}[$_language_id]['seo_h1'] : ''; ?>" placeholder="SEO H1" id="input-seo-h1<?php echo $_language_id; ?>" class="form-control" /> | ||
| 252 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('seo_h1', '<?php echo $_language_id; ?>', '')"><i class="fa fa-bolt"></i></span> | ||
| 253 | + </div> | ||
| 254 | + </div> | ||
| 255 | + </div> | ||
| 256 | + <div class="form-group"> | ||
| 257 | + <label class="col-sm-2 control-label" for="input-seo-h2<?php echo $_language_id; ?>">SEO H2</label> | ||
| 258 | + <div class="col-sm-10"> | ||
| 259 | + <div class="input-group"> | ||
| 260 | + <input type="text" name="<?php echo $item_type; ?>_description[<?php echo $_language_id; ?>][seo_h2]" value="<?php echo isset(${$item_type.'_description'}[$_language_id]) ? ${$item_type.'_description'}[$_language_id]['seo_h2'] : ''; ?>" placeholder="SEO H2" id="input-seo-h2<?php echo $_language_id; ?>" class="form-control" /> | ||
| 261 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('seo_h2', '<?php echo $_language_id; ?>', '')"><i class="fa fa-bolt"></i></span> | ||
| 262 | + </div> | ||
| 263 | + </div> | ||
| 264 | + </div> | ||
| 265 | + <div class="form-group"> | ||
| 266 | + <label class="col-sm-2 control-label" for="input-seo-h3<?php echo $_language_id; ?>">SEO H3</label> | ||
| 267 | + <div class="col-sm-10"> | ||
| 268 | + <div class="input-group"> | ||
| 269 | + <input type="text" name="<?php echo $item_type; ?>_description[<?php echo $_language_id; ?>][seo_h3]" value="<?php echo isset(${$item_type.'_description'}[$_language_id]) ? ${$item_type.'_description'}[$_language_id]['seo_h3'] : ''; ?>" placeholder="SEO H3" id="input-seo-h3<?php echo $_language_id; ?>" class="form-control" /> | ||
| 270 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('seo_h3', '<?php echo $_language_id; ?>', '')"><i class="fa fa-bolt"></i></span> | ||
| 271 | + </div> | ||
| 272 | + </div> | ||
| 273 | + <script type="text/javascript"><!-- | ||
| 274 | + $('.btnSeoGen').hover( function(){ | ||
| 275 | + $(this).addClass('btn-primary'); | ||
| 276 | + }, function(){ | ||
| 277 | + $(this).removeClass('btn-primary'); | ||
| 278 | + }); | ||
| 279 | + | ||
| 280 | + function seoPackageGen(field, lang, store) { | ||
| 281 | + $.ajax({ | ||
| 282 | + url: 'index.php?route=module/complete_seo/get_value&type=<?php echo $item_type; ?>&id=<?php echo isset($_GET[$item_type.'_id']) ? $_GET[$item_type.'_id'] : 0; ?>&field='+field+'&store='+store+'&lang='+lang+'&<?php echo $token_type; ?>=<?php echo $token; ?>', | ||
| 283 | + method: 'POST', | ||
| 284 | + data: $('form#form-<?php echo $item_type; ?>').serialize(), | ||
| 285 | + dataType: 'json', | ||
| 286 | + success: function(values) { | ||
| 287 | + jQuery.each( values, function( i, val ) { | ||
| 288 | + if (field == 'description') { | ||
| 289 | + if (CKEDITOR.status == 'loaded'){ | ||
| 290 | + var el = $('[name="'+i+'"]').next(); | ||
| 291 | + var id = $(el).attr('id').replace('cke_',''); | ||
| 292 | + CKEDITOR.instances[id].setData(val); | ||
| 293 | + } else if (typeof $('#input-description'+lang).summernote('code') === 'string') { | ||
| 294 | + $('[name="'+i+'"]').summernote('code', val); | ||
| 295 | + } else { | ||
| 296 | + $('[name="'+i+'"]').code(val); | ||
| 297 | + } | ||
| 298 | + } else { | ||
| 299 | + $('[name="'+i+'"]').val(val); | ||
| 300 | + } | ||
| 301 | + $('[name="'+i+'"]').css('transition', ''); | ||
| 302 | + $('[name="'+i+'"]').css('background-color', '#FCFFC6'); | ||
| 303 | + setTimeout(function(){ | ||
| 304 | + $('[name="'+i+'"]').css('transition', 'all 0.5s ease'); | ||
| 305 | + $('[name="'+i+'"]').css('background-color', ''); | ||
| 306 | + }, 10); | ||
| 307 | + }); | ||
| 308 | + } | ||
| 309 | + }); | ||
| 310 | + } | ||
| 311 | + --></script> | ||
| 312 | + </div> | ||
| 313 | + <?php if ($item_type == 'product') { ?> | ||
| 314 | + <div class="form-group"> | ||
| 315 | + <label class="col-sm-2 control-label" for="input-image-alt<?php echo $_language_id; ?>">Image alt</label> | ||
| 316 | + <div class="col-sm-10"> | ||
| 317 | + <div class="input-group"> | ||
| 318 | + <input type="text" name="<?php echo $item_type; ?>_description[<?php echo $_language_id; ?>][image_alt]" value="<?php echo isset(${$item_type.'_description'}[$_language_id]) ? ${$item_type.'_description'}[$_language_id]['image_alt'] : ''; ?>" placeholder="Image alt" id="input-image-alt<?php echo $_language_id; ?>" class="form-control" /> | ||
| 319 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('image_alt', '<?php echo $_language_id; ?>', '')"><i class="fa fa-bolt"></i></span> | ||
| 320 | + </div> | ||
| 321 | + </div> | ||
| 322 | + </div> | ||
| 323 | + <div class="form-group"> | ||
| 324 | + <label class="col-sm-2 control-label" for="input-image-title<?php echo $_language_id; ?>">Image title</label> | ||
| 325 | + <div class="col-sm-10"> | ||
| 326 | + <div class="input-group"> | ||
| 327 | + <input type="text" name="<?php echo $item_type; ?>_description[<?php echo $_language_id; ?>][image_title]" value="<?php echo isset(${$item_type.'_description'}[$_language_id]) ? ${$item_type.'_description'}[$_language_id]['image_title'] : ''; ?>" placeholder="Image title" id="input-image-title<?php echo $_language_id; ?>" class="form-control" /> | ||
| 328 | + <span class="input-group-addon btn btn-primary" data-toggle="tooltip" title="Generate value" onClick="seoPackageGen('image_title', '<?php echo $_language_id; ?>', '')"><i class="fa fa-bolt"></i></span> | ||
| 329 | + </div> | ||
| 330 | + </div> | ||
| 331 | + </div> | ||
| 332 | + <?php } ?> | ||
| 333 | + <?php } ?> | ||
| 334 | +<?php } ?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php echo $header; ?><?php echo $column_left; ?> | ||
| 2 | +<div id="content"> | ||
| 3 | + <?php if (!empty($breadcrumbs)) { ?> | ||
| 4 | + <ul class="breadcrumb"> | ||
| 5 | + <?php foreach ($breadcrumbs as $breadcrumb) { ?> | ||
| 6 | + <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li> | ||
| 7 | + <?php } ?> | ||
| 8 | + </ul> | ||
| 9 | + <?php } ?> | ||
| 10 | + | ||
| 11 | + <div class="<?php if(version_compare(VERSION, '2', '>=')) echo 'container-fluid'; ?>"> | ||
| 12 | +<form action="" method="post" enctype="multipart/form-data" id="form-" class="form-"> | ||
| 13 | +<div class="col-sm-offset-4 col-sm-4" style="margin-top:80px; margin-bottom:250px; width:500px;"> | ||
| 14 | +<div class="panel panel-default"> | ||
| 15 | + <div class="panel-heading module-heading"> | ||
| 16 | + <h3 class="panel-title"><i class="fa fa-check" style="color:#97BF0D"></i> GeekoDev License</h3> | ||
| 17 | + </div> | ||
| 18 | + <div class="content panel-body"> | ||
| 19 | + <div class="well" style="border-color:#c2e1a9"> | ||
| 20 | + <table> | ||
| 21 | + <tr> | ||
| 22 | + <td><img style="float:left;padding-right:30px;padding-left:5px;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAAAsTAAALEwEAmpwYAAA5z2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMTQgNzkuMTUxNDgxLCAyMDEzLzAzLzEzLTEyOjA5OjE1ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE2LTA2LTEzVDE4OjMyOjA2KzAyOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNi0wNi0xM1QxODozMjowNiswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTYtMDYtMTNUMTg6MzI6MDYrMDI6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjRlN2U2MGY0LTdiYzYtMDY0Ni04ZTJhLThhNWRhNWRlMjEyYjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDowMjgzNzFmNC00MzJlLTY5NDctYjk4ZS1hZGJmNTBiZWViMDk8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDowMjgzNzFmNC00MzJlLTY5NDctYjk4ZS1hZGJmNTBiZWViMDk8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MDI4MzcxZjQtNDMyZS02OTQ3LWI5OGUtYWRiZjUwYmVlYjA5PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE2LTA2LTEzVDE4OjMyOjA2KzAyOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo0ZTdlNjBmNC03YmM2LTA2NDYtOGUyYS04YTVkYTVkZTIxMmI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTYtMDYtMTNUMTg6MzI6MDYrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjYwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjYwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz75HNQxAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAeeSURBVHja5Jt7cBXVHcc/NyEIhA1gJO2oPAQhsUAplFbrM8cOKBWoLzoWaEdbbXOmlbZOp04ftrVlSuuMWgZ1o44tVTRTUSOotRlHFrFIW0FrgEKFxIRHjGBQcqCBhJj+sb9LN8t97I13N+v4/Yfd88r97u9xfr/fOSR6enpIIpFI0F+wHasA+DKwADgPOANIAAeAfwF/BdZoZXblunYvjnEgbDvWSGA18IUAwzcADwI1WpnOjyrhx4H5OU7bA9wJ2NmIx4qw7VjFwLvAoD4usRO4RSvzbBDCBfQ/5n8IsgATgGdsx3rYdqzh2Qb3q4RtxxoEbAHOztOSTcA8rcyW2EnYdqxC4P48kgUYC7xiO9aloUtYpHUuMA2oECIjgE6gWb5+I7AfKAVulO0nDHQAc7Qya/PutGzHOgu4GfgmUEJ8cBiYrpXZmRfCtmNNAX4FzIuJ80uFN4AZVZXtx5MNA/qourcBP+rL/HwikShk9KkzGVFcQUfnAXa31dHR9a53yFTgK8BjfSJsO9YEYJUs1K8oGXwWsyf/mRHFFSfaurqPsP7Nxex8Z5V36FVewgU5kJ0FbIoD2YJEEbOnPN6LbENDA3fdcQ8du66kzJruHT7J+zIgINmFwB+BojgY5pjSyxkxpLxX2/du/j7NTc0ALL33eki8luz6RK+PFZDsw3EhCzBsyPiT2rq6uk48Dx04yttVHFjCtmPNBFbEzQsfObbvpLZly3/PYytrmPLpyYwpH8SOrSe6TgkUeNiONRZ4TYKHWKGosJgF59YzeODIlP3Pb5lPc1vdifeqyvZERpW2HSsB/CmOZJPeuG7bQo4df9+fF7GpaWkvshJ1ZVXpG4CLiTFaD/2dmn9Mo+KTixheXM7RrjYa9j/FAfO6f+gLGVXadqyBQANwJh99bAbmVVW2t2RS6UUxILtd9vvvAu/0Yf4G4KvA57UyLdlU+lsxkMxWrUw9UG871grgSuAaycZOP8lwYR/wKrAet9DXGCg9rF5XcrpMjgMeBX6sldmToiRUKtr5AdCarGnZjlUGzAQUcCEwDLigqrK9MR3hhcDKGNngceA5oBbYCDR5yA0Bxkv+PUMIfga3tOvFOVWV7TvSEb4TuCUCIqtEgqNkN7gsh1y6XaK+wQHGrtXKfNHL0W/DkyKSXHWyGgHcYzvWKcCXgK8Bc7KEsUE/zGbgOn+jn/CYiAh/A0gSRitzTNS21nas03BPH64Xdc0Vr+MW6h9KVa/2q/TBPEVXLwI/B8aJ5OYCQ31jbtPKLPFFd5cAnVqZV6RtMu7xyxVin141PgQcBFqAbbjHMX/RyjT7f0zaEk/1upLuPCUK47Qyb3nIlAAa+IlPJVcA9wGtwE+Bb0v7L7Uyt+dLnTIR7snD+ge1MqVpYvQy4BFgVja11MpMD4NwGGmfSdehldkvTmmrr2sNsNzzvjos5xFpEU72zkeBcgka5kpWNhv3yOQprw2HUh7yvR/Ow5qZTvKukzCxSP722yLZItyTwI1hkk1F+L1cTEM849+A/3rat2SY462hdouXvVHerxGnRhwJPwuM1spM08pcJEF9Eq9msOE1wGKgRiTdApR5howKm7DfS6+TvTAbpko247XPNuBU4GfAUuB24Cbgn8ACrczhNHZdBdwB7AWu0sr8J98kM4WWrQHXSPXjHVHLJcAvPOHhXNxzp2VppF4NVEflOP0q3RJw3rAUbTWe5ybJdFLZbr+ir4RThZ+1wPPy/BvcI44ngFt9H8O7RUUOv0oHTf7PTKGaH9iOtRjYgXtKsRtYpJV52UNyDvAd4CKg2HasDqBePtb9Wpn3o5Zw0DtQ49PY4y4pAAKMBn6dlKbtWLXAM8Dl/P80YLB4+N8CjbZjXRs14e0B503M0Lfb87xX/l0p21A2M1llO5aOjLBsHU0B5n02Q9/XgbuB3wGLbceaJ/YM8CTuNYezZVyqYtt9clIZ/j4sdemHJEHPhtH+AluafXY17i2BRmCiVqbb0zdSEoky37QmoDzoTbsPmy09F3CdmwKOS1ZRWr1kRaMO4N4m8GMs7sl9JBK2JKgvzjK3DRivlTmURcJ1kv92i7M7KNFXAW61sUfa/HWsWq3M1aFLWCtjCFaqLZUwMhuSuW0h8DRwF+61polAhfiNt1LM+1wUXjqJ5QHn/8B2rGw3YP8gNSekLpXMjpo9mVWqQOa0yAhrZbbhuQiSAYVAjTifdBnSUdl76yQb24t7A+88rcxR27FmAKnmd0diwx7bOwN4EwgSAr4BXJLNnlPY90BJOs5P0V2vlZkaug17JLMPt5IYBFOBDbZjjcuB7DCx6fPTDFkbpQ0nsUzCwSCYBGy2HUvbjjUgA9GhkgNvl1pWOjwYqUp7fmAJ8JI4nKBoEE+/CTgiNjoB94p/ZYAtb4VW5oYwCgCB7lqKU1oLTI4gg9sKXKCVaQ+DcKC6tEREF4uDCRP/Bmblk2yuNuwl/R7uYfMSXzUjX3gAmKGVeTuyIl7Q68O2Y03CPRPKx02fl4FbtTIbwyKZtwvitmNdCPwQ93Qvl1OMTgk579XKvBS2U8j7f+ORPXU2cCnwKYmTh0tC0CWloz2SNKwD1odpp4EJfxzwvwEAYkXXmaPo4PsAAAAASUVORK5CYII=" alt="" /></td> | ||
| 23 | + <td> | ||
| 24 | + <h4 class="text-success" style="border:0"><b>Thanks for purchasing our product</b></h4> | ||
| 25 | + <p style="font-size:13px;">We hope it will fully satisfy you.<br/>Please fill the form below to complete your registration.</p> | ||
| 26 | + </td> | ||
| 27 | + </tr> | ||
| 28 | + </table> | ||
| 29 | + </div> | ||
| 30 | + <?php if (!empty($success)) { ?><div class="alert alert-success success"><i class="fa fa-check-circle"></i> <?php echo $success; ?></div><?php } ?> | ||
| 31 | + <?php if (!empty($info)) { ?><div class="alert alert-info"><i class="fa fa-info-circle"></i> <?php echo $info; ?></div><?php } ?> | ||
| 32 | + <?php if (!empty($error)) { ?><div class="alert alert-danger"><i class="fa fa-exclamation-triangle"></i> <?php echo $error; ?></div><?php } ?> | ||
| 33 | + <?php if (!empty($err_warning)) { ?><div class="alert alert-warning"><i class="fa fa-exclamation-triangle"></i> <?php echo $err_warning; ?></div><?php } ?> | ||
| 34 | + <div class="form-group"> | ||
| 35 | + <label class="control-label">Enter your license number</label> | ||
| 36 | + <div class="input-group"> | ||
| 37 | + <span class="input-group-addon"><i class="fa fa-lock"></i></span> | ||
| 38 | + <input id="lic_number" type="text" name="lic_number" value="<?php echo isset($_POST['lic_number']) ? $_POST['lic_number'] : ''; ?>" class="form-control" placeholder="XXXXX-XXXXX-XXXXX"/> | ||
| 39 | + </div> | ||
| 40 | + <div class="clearfix"><a class="pull-right" href="https://geekodev.com/get-license" target="_blank" style="padding-top:7px;font-size:12px;">I don't have license number yet</a></div> | ||
| 41 | + </div> | ||
| 42 | + <div class="form-group"> | ||
| 43 | + <label class="control-label">Choose if test or production</label> | ||
| 44 | + <div class="input-group" style="clear:both"> | ||
| 45 | + <span class="input-group-addon"><i class="fa fa-cube"></i></span> | ||
| 46 | + <select name="lic_test" class="form-control"> | ||
| 47 | + <option value="">This is production website</option> | ||
| 48 | + <option value="1">This is test website</option> | ||
| 49 | + </select> | ||
| 50 | + </div> | ||
| 51 | + </div> | ||
| 52 | + <hr/> | ||
| 53 | + <button type="submit" class="btn btn-success btn-lg btn-block"><i class="fa fa-check"></i> Activate module</button> | ||
| 54 | + </div> | ||
| 55 | + </div> | ||
| 56 | + </div> | ||
| 57 | +</form> | ||
| 58 | +</div> | ||
| 59 | +</div> | ||
| 60 | +<style> | ||
| 61 | +.content a, .module-heading h3.panel-title, .well .text-success{color:#7aae50;} | ||
| 62 | +a:hover{color:#7aae50; text-decoration:underline;} | ||
| 63 | +</style> | ||
| 64 | +<?php echo $footer; ?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php | ||
| 2 | +//error_reporting(0); | ||
| 3 | + | ||
| 4 | +// Uncomment the line below if you have the error on sitemap: "XML Parsing Error: XML or text declaration not at start of entity" | ||
| 5 | +// This is just a workaround, you should find the module or file which is inserting the unwanted new line on your website. | ||
| 6 | +//if (ob_get_contents()) ob_clean(); | ||
| 7 | + | ||
| 8 | +class ControllerFeedAdvancedSitemap extends Controller { | ||
| 9 | + | ||
| 10 | + private $final_file; | ||
| 11 | + private $temp_file; | ||
| 12 | + public $output; | ||
| 13 | + public $OC_V2; | ||
| 14 | + private $isSSL; | ||
| 15 | + private $generateOnly = false; | ||
| 16 | + | ||
| 17 | + public function __construct($registry) { | ||
| 18 | + $this->OC_V2 = substr(VERSION, 0, 1) == 2; | ||
| 19 | + parent::__construct($registry); | ||
| 20 | + $this->isSSL = (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))); | ||
| 21 | + | ||
| 22 | + if (!empty($this->request->get['route']) && $this->request->get['route'] !== 'feed/advanced_sitemap') { | ||
| 23 | + $route = str_replace('feed/advanced_sitemap/','',$this->request->get['route']); | ||
| 24 | + $config = $this->config->get('advanced_sitemap_cfg'); | ||
| 25 | + | ||
| 26 | + $temp_types = array(); | ||
| 27 | + | ||
| 28 | + if (!empty($config['custom_links_include'])) { | ||
| 29 | + $custom_links_include = explode("\n", $config['custom_links_include']); | ||
| 30 | + | ||
| 31 | + foreach ($custom_links_include as $k => $v) { | ||
| 32 | + if (strpos($v, '@')!==false){ | ||
| 33 | + $type = trim(explode('@',$v,2)[0]); | ||
| 34 | + if (empty($types[$type])) { | ||
| 35 | + $temp_types[$type] = 1; | ||
| 36 | + } else { | ||
| 37 | + $temp_types[$type] += 1; | ||
| 38 | + } | ||
| 39 | + } | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + foreach ($temp_types as $k => $v) { | ||
| 44 | + if ($route == $k) { | ||
| 45 | + $this->response->redirect($this->url->link('feed/advanced_sitemap/custom','type='.$route)); | ||
| 46 | + } | ||
| 47 | + } | ||
| 48 | + } | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + public function cron() { | ||
| 52 | + $this->generateOnly = true; | ||
| 53 | + $types = $this->index(true); | ||
| 54 | + | ||
| 55 | + echo '# Start sitemap generator - '. date('d-m-Y'). ' #<br/>'; | ||
| 56 | + | ||
| 57 | + echo 'Generate sitemap index: '; | ||
| 58 | + $this->index(); | ||
| 59 | + echo 'OK<br/>'; | ||
| 60 | + | ||
| 61 | + foreach($types as $type => $items) { | ||
| 62 | + if (in_array($type, array('image'))) { | ||
| 63 | + $limit = 20; | ||
| 64 | + } else { | ||
| 65 | + $limit = $this->config->get('advanced_sitemap_limit') ? $this->config->get('advanced_sitemap_limit') : 500; | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + $showPagination = ($items > $limit) ? true : false; | ||
| 69 | + $page = 0; | ||
| 70 | + | ||
| 71 | + if (!empty($_GET['t'])) file_put_contents(DIR_CACHE . 'sitemaps/cron.log', "\n".date('Y-m-d H:i:s'). '-Generate sitemaps store '.$this->config->get('config_store_id')."\n", FILE_APPEND | LOCK_EX); | ||
| 72 | + | ||
| 73 | + if ($items) { | ||
| 74 | + while ($items > 0) { | ||
| 75 | + // $this->request->get['lang'] = ''; | ||
| 76 | + $this->request->get['page'] = ++$page; | ||
| 77 | + echo 'Generate sitemap '.$type.'-'.$page.': '; | ||
| 78 | + | ||
| 79 | + if (!empty($_GET['t'])) file_put_contents(DIR_CACHE . 'sitemaps/cron.log', date('Y-m-d H:i:s'). '-Generate sitemap '.$type.'-p'.$page.' -t:'.$_GET['t']."\n", FILE_APPEND | LOCK_EX); | ||
| 80 | + | ||
| 81 | + $this->generate($type); | ||
| 82 | + | ||
| 83 | + echo 'OK<br/>'; | ||
| 84 | + | ||
| 85 | + $items -= $limit; | ||
| 86 | + } | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + unset($types[$type]); | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + echo '> Sitemaps successfully generated'; | ||
| 93 | + | ||
| 94 | + if (!empty($_GET['t'])) file_put_contents(DIR_CACHE . 'sitemaps/cron.log', date('Y-m-d H:i:s'). '> Sitemaps successfully generated t:'.$_GET['t']."\n", FILE_APPEND | LOCK_EX); | ||
| 95 | + | ||
| 96 | + exit; | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + public function index($getSitemps = false) { | ||
| 100 | + if (!empty($this->request->get['lang']) && !$this->config->get('advanced_sitemap_lang_feeds')) { | ||
| 101 | + return new Action('error/not_found'); | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + $config = $this->config->get('advanced_sitemap_cfg'); | ||
| 105 | + | ||
| 106 | + $this->load->model('catalog/product'); | ||
| 107 | + $this->load->model('catalog/category'); | ||
| 108 | + | ||
| 109 | + if (!empty($this->request->get['lang'])) { | ||
| 110 | + $request_lang = '-' . $this->request->get['lang']; | ||
| 111 | + } else { | ||
| 112 | + $request_lang = ''; | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + if (isset($this->request->get['grid'])) { | ||
| 116 | + $grid = '_grid'; | ||
| 117 | + } else { | ||
| 118 | + $grid = ''; | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + if ($this->config->get('config_store_id')) { | ||
| 122 | + $file = DIR_CACHE . 'sitemaps/' . $this->config->get('config_store_id') . '-index' . $request_lang . $grid . '.xml'; | ||
| 123 | + } else { | ||
| 124 | + $file = DIR_CACHE . 'sitemaps/index' . $request_lang . $grid . '.xml'; | ||
| 125 | + } | ||
| 126 | + | ||
| 127 | + if (!$this->generateOnly && file_exists($file) && (filemtime($file) > strtotime('-7 days'))) { | ||
| 128 | + $this->display($file); | ||
| 129 | + return; | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + $output = '<?xml version="1.0" encoding="utf-8"?>'; | ||
| 133 | + $output .= '<?xml-stylesheet type="text/xsl" href="'.$this->url->link('feed/advanced_sitemap/xslindex', '', $this->isSSL).'"?>'; | ||
| 134 | + $output .= '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; | ||
| 135 | + | ||
| 136 | + $types = array(); | ||
| 137 | + | ||
| 138 | + // count items | ||
| 139 | + if (!empty($config['product']['status'])) { | ||
| 140 | + $types['product'] = $this->get_product('', true); | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + if (!empty($config['category']['status'])) { | ||
| 144 | + $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'")->row; | ||
| 145 | + $types['category'] = $query['total']; | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + if (!empty($config['information']['status'])) { | ||
| 149 | + $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "information c LEFT JOIN " . DB_PREFIX . "information_to_store c2s ON (c.information_id = c2s.information_id) WHERE c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'")->row; | ||
| 150 | + $types['information'] = $query['total']+1; | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + if (!empty($config['image']['status'])) { | ||
| 154 | + //$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "information c LEFT JOIN " . DB_PREFIX . "information_to_store c2s ON (c.information_id = c2s.information_id) WHERE c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'")->row; | ||
| 155 | + $types['image'] = $this->get_image('', true); | ||
| 156 | + } | ||
| 157 | + | ||
| 158 | + if (!empty($config['manufacturer']['status'])) { | ||
| 159 | + $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "manufacturer m LEFT JOIN " . DB_PREFIX . "manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) WHERE m2s.store_id = '" . (int)$this->config->get('config_store_id') . "'")->row; | ||
| 160 | + $types['brand'] = $query['total']; | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + if (!empty($config['journal']['status'])) { | ||
| 164 | + //$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "manufacturer m LEFT JOIN " . DB_PREFIX . "manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) WHERE m2s.store_id = '" . (int)$this->config->get('config_store_id') . "'")->row; | ||
| 165 | + //$types['journal'] = $query['total']; | ||
| 166 | + $types['journal'] = 1; | ||
| 167 | + //$output .= '<journal>'.$types['brand'].'</journal>'; | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | + if ($getSitemps) { | ||
| 171 | + return $types; | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + if (!empty($config['custom_links_include'])) { | ||
| 175 | + $custom_links_include = explode("\n", $config['custom_links_include']); | ||
| 176 | + foreach ($custom_links_include as $k => $v) { | ||
| 177 | + if (strpos($v, '@')!==false) { | ||
| 178 | + $type = trim(explode('@',$v,2)[0]); | ||
| 179 | + if (empty($types[$type])) { | ||
| 180 | + $types[$type] = 1; | ||
| 181 | + } else { | ||
| 182 | + $types[$type] += 1; | ||
| 183 | + } | ||
| 184 | + } | ||
| 185 | + } | ||
| 186 | + } | ||
| 187 | + | ||
| 188 | + # extra_sitemap_type | ||
| 189 | + | ||
| 190 | + foreach($types as $type => $items) { | ||
| 191 | + if (in_array($type, array('image'))) { | ||
| 192 | + $limit = 20; | ||
| 193 | + } else { | ||
| 194 | + $limit = $this->config->get('advanced_sitemap_limit') ? $this->config->get('advanced_sitemap_limit') : 500; | ||
| 195 | + } | ||
| 196 | + | ||
| 197 | + $showPagination = ($items > $limit) ? true : false; | ||
| 198 | + $page = 0; | ||
| 199 | + | ||
| 200 | + $extra_where = ''; | ||
| 201 | + | ||
| 202 | + if ($type == 'product' && !empty($config['in_stock'])) { | ||
| 203 | + $extra_where = " AND p.quantity > 0"; | ||
| 204 | + } | ||
| 205 | + | ||
| 206 | + if ($items) { | ||
| 207 | + while ($items > 0) { | ||
| 208 | + // get lastmod date | ||
| 209 | + $lastmod = date('Y-m-d'); | ||
| 210 | + if ($type == 'product') { | ||
| 211 | + $limits = $config; | ||
| 212 | + $limits = array(); | ||
| 213 | + $limits['start'] = $page*$limit; | ||
| 214 | + $limits['limit'] = $limit; | ||
| 215 | + | ||
| 216 | + $lastmod = $this->get_product($limits, false, true); | ||
| 217 | + | ||
| 218 | + if (!empty($lastmod) && !(strpos($lastmod, '0000-00-00') !== false)) { | ||
| 219 | + $lastmod = substr($lastmod, 0, strpos($lastmod, ' ')); | ||
| 220 | + } else { | ||
| 221 | + $lastmod = date('Y-m-d'); | ||
| 222 | + } | ||
| 223 | + } | ||
| 224 | + else | ||
| 225 | + if (in_array($type, array('product_', 'category'))) { | ||
| 226 | + $date_query = $this->db->query( | ||
| 227 | + "SELECT MAX(t1.date_modified) as lastmod | ||
| 228 | + FROM (SELECT p.".$type."_id, date_modified FROM " . DB_PREFIX . $type ." p | ||
| 229 | + LEFT JOIN " . DB_PREFIX . $type . "_to_store p2s ON (p.".$type."_id = p2s.".$type."_id) | ||
| 230 | + LEFT JOIN " . DB_PREFIX . $type . "_description pd ON (p.".$type."_id = pd.".$type."_id) | ||
| 231 | + WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' ".($type == 'product' ? 'AND p.date_available <= NOW()' : '')." | ||
| 232 | + AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ".$extra_where." | ||
| 233 | + LIMIT " . (int) ($page*$limit) . "," . (int)$limit . ") AS t1")->row; | ||
| 234 | + | ||
| 235 | + if (!empty($date_query['lastmod']) && !(strpos($date_query['lastmod'], '0000-00-00') !== false)) { | ||
| 236 | + $lastmod = substr($date_query['lastmod'], 0, strpos($date_query['lastmod'], ' ')); | ||
| 237 | + } | ||
| 238 | + } | ||
| 239 | + | ||
| 240 | + $output .= ' <sitemap>'; | ||
| 241 | + if (!empty($this->request->get['lang'])) { | ||
| 242 | + $output .= ' <loc><![CDATA[' . html_entity_decode($this->url->link('feed/advanced_sitemap/'.$type, 'lang='.$this->request->get['lang'].($showPagination ? '&page='.++$page : ''), $this->isSSL), ENT_COMPAT, 'UTF-8').']]></loc>'; | ||
| 243 | + } else { | ||
| 244 | + $output .= ' <loc><![CDATA[' . html_entity_decode($this->url->link('feed/advanced_sitemap/'.$type, ($showPagination ? 'page='.++$page : ''), $this->isSSL), ENT_COMPAT, 'UTF-8').']]></loc>'; | ||
| 245 | + } | ||
| 246 | + | ||
| 247 | + $output .= ' <lastmod>'. $lastmod .'</lastmod>'; | ||
| 248 | + $output .= ' </sitemap>'; | ||
| 249 | + | ||
| 250 | + $items -= $limit; | ||
| 251 | + } | ||
| 252 | + } | ||
| 253 | + } | ||
| 254 | + | ||
| 255 | + $output .= '</sitemapindex>'; | ||
| 256 | + | ||
| 257 | + file_put_contents($file, $output); | ||
| 258 | + | ||
| 259 | + if ($this->generateOnly) { | ||
| 260 | + return; | ||
| 261 | + } | ||
| 262 | + | ||
| 263 | + $this->renderFeed($output); | ||
| 264 | + } | ||
| 265 | + | ||
| 266 | + public function product() { | ||
| 267 | + $this->generate('product'); | ||
| 268 | + } | ||
| 269 | + | ||
| 270 | + public function category() { | ||
| 271 | + $this->generate('category'); | ||
| 272 | + } | ||
| 273 | + | ||
| 274 | + public function information() { | ||
| 275 | + $this->generate('information'); | ||
| 276 | + } | ||
| 277 | + | ||
| 278 | + public function image() { | ||
| 279 | + $this->generate('image'); | ||
| 280 | + } | ||
| 281 | + | ||
| 282 | + public function brand() { | ||
| 283 | + $this->generate('brand'); | ||
| 284 | + } | ||
| 285 | + | ||
| 286 | + public function journal() { | ||
| 287 | + $this->generate('journal'); | ||
| 288 | + } | ||
| 289 | + | ||
| 290 | + public function custom() { | ||
| 291 | + $route = $this->request->get['type']; | ||
| 292 | + $this->generate($route, true); | ||
| 293 | + } | ||
| 294 | + | ||
| 295 | + # extra_sitemap_method | ||
| 296 | + | ||
| 297 | + public function generate($type, $custom_sitemap_type = false) { | ||
| 298 | + ini_set('memory_limit', -1); | ||
| 299 | + | ||
| 300 | + if (isset($this->request->get['grid'])) { | ||
| 301 | + $grid = '_grid'; | ||
| 302 | + } else { | ||
| 303 | + $grid = ''; | ||
| 304 | + } | ||
| 305 | + | ||
| 306 | + $page = 1; | ||
| 307 | + if (!empty($this->request->get['page'])) { | ||
| 308 | + $page = (int) $this->request->get['page']; | ||
| 309 | + } | ||
| 310 | + | ||
| 311 | + /* | ||
| 312 | + if ($this->config->get('config_store_id')) { | ||
| 313 | + $file = DIR_CACHE . 'sitemaps/' . $this->config->get('config_store_id') . '-' . $type . $grid . '-' . $page . '.xml'; | ||
| 314 | + } else { | ||
| 315 | + $file = DIR_CACHE . 'sitemaps/' . $type . $grid . '-' . $page . '.xml'; | ||
| 316 | + } | ||
| 317 | + */ | ||
| 318 | + | ||
| 319 | + if (!empty($this->request->get['lang'])) { | ||
| 320 | + $request_lang = '-' . $this->request->get['lang']; | ||
| 321 | + } else { | ||
| 322 | + $request_lang = ''; | ||
| 323 | + } | ||
| 324 | + | ||
| 325 | + if ($this->config->get('config_store_id')) { | ||
| 326 | + $file = DIR_CACHE . 'sitemaps/' . $this->config->get('config_store_id') . '-' . $type . $request_lang . $grid . '-' . $page . '.xml'; | ||
| 327 | + } else { | ||
| 328 | + $file = DIR_CACHE . 'sitemaps/' . $type . $request_lang . $grid . '-' . $page . '.xml'; | ||
| 329 | + } | ||
| 330 | + | ||
| 331 | + if ($type == 'brand') { | ||
| 332 | + $type = 'manufacturer'; | ||
| 333 | + } | ||
| 334 | + | ||
| 335 | + $this->start_time = microtime(true)*1000; | ||
| 336 | + | ||
| 337 | + $config = $this->config->get('advanced_sitemap_cfg'); | ||
| 338 | + | ||
| 339 | + // custom links handle | ||
| 340 | + $custom_links_exclude = isset($config['custom_links_exclude']) ? explode("\n", $config['custom_links_exclude']) : array(); | ||
| 341 | + $custom_links_include = isset($config['custom_links_include']) ? explode("\n", $config['custom_links_include']) : array(); | ||
| 342 | + | ||
| 343 | + $fullsize_img = !empty($config['fullsize_img']); | ||
| 344 | + $display_img = !empty($config['display_img']) || $grid; | ||
| 345 | + $additional_img = !empty($config['additional_img']); | ||
| 346 | + $main_img = !empty($config['img']); | ||
| 347 | + | ||
| 348 | + $config = isset($config[$type]) ? $config[$type] : array(); | ||
| 349 | + $limit = $this->config->get('advanced_sitemap_limit') ? $this->config->get('advanced_sitemap_limit') : 500; | ||
| 350 | + | ||
| 351 | + if ($grid) { | ||
| 352 | + $limit = 99999999; | ||
| 353 | + } | ||
| 354 | + | ||
| 355 | + if ($custom_sitemap_type) { | ||
| 356 | + $config['status'] = '1'; | ||
| 357 | + $config['freq'] = 'weekly'; | ||
| 358 | + $config['priority'] = '0.8'; | ||
| 359 | + } | ||
| 360 | + | ||
| 361 | + if (empty($config['status'])) { | ||
| 362 | + die('This feed is not active'); | ||
| 363 | + } | ||
| 364 | + | ||
| 365 | + if (!is_dir(DIR_CACHE . 'sitemaps')) { | ||
| 366 | + mkdir(DIR_CACHE . 'sitemaps'); | ||
| 367 | + } | ||
| 368 | + | ||
| 369 | + if (empty($config['cache_delay'])) { | ||
| 370 | + switch ($config['freq']) { | ||
| 371 | + case 'always': | ||
| 372 | + $config['cache_delay'] = 0; | ||
| 373 | + $config['cache_unit'] = 'minute'; | ||
| 374 | + break; | ||
| 375 | + case 'hourly': | ||
| 376 | + $config['cache_delay'] = 50; | ||
| 377 | + $config['cache_unit'] = 'minute'; | ||
| 378 | + break; | ||
| 379 | + case 'daily': | ||
| 380 | + $config['cache_delay'] = 23; | ||
| 381 | + $config['cache_unit'] = 'hour'; | ||
| 382 | + break; | ||
| 383 | + case 'weekly': | ||
| 384 | + $config['cache_delay'] = 6; | ||
| 385 | + $config['cache_unit'] = 'day'; | ||
| 386 | + break; | ||
| 387 | + case 'monthly': | ||
| 388 | + $config['cache_delay'] = 26; | ||
| 389 | + $config['cache_unit'] = 'day'; | ||
| 390 | + break; | ||
| 391 | + case 'yearly': | ||
| 392 | + $config['cache_delay'] = 11; | ||
| 393 | + $config['cache_unit'] = 'month'; | ||
| 394 | + break; | ||
| 395 | + case 'never': | ||
| 396 | + $config['cache_delay'] = 1337; | ||
| 397 | + $config['cache_unit'] = 'year'; | ||
| 398 | + break; | ||
| 399 | + } | ||
| 400 | + } | ||
| 401 | + | ||
| 402 | + if (!$this->generateOnly && file_exists($file) && (filemtime($file) > strtotime('-'. $config['cache_delay'] .' ' . $config['cache_unit']))) { | ||
| 403 | + $this->display($file); | ||
| 404 | + return; | ||
| 405 | + } | ||
| 406 | + | ||
| 407 | + //$this->load->model('catalog/product'); | ||
| 408 | + | ||
| 409 | + $this->load->model('tool/seo_package'); | ||
| 410 | + $this->load->model('tool/image'); | ||
| 411 | + | ||
| 412 | + $this->load->model('localisation/language'); | ||
| 413 | + $languages = array(); | ||
| 414 | + $results = $this->model_localisation_language->getLanguages(); | ||
| 415 | + | ||
| 416 | + $fullcode = (isset($this->request->get['lang']) && strlen($this->request->get['lang']) == 2) ? false : true; | ||
| 417 | + | ||
| 418 | + foreach ($results as $result) { | ||
| 419 | + if ($result['status']) { | ||
| 420 | + $languages[($fullcode ? $result['code'] : substr($result['code'], 0, 2))] = array( | ||
| 421 | + 'language_id' => $result['language_id'], | ||
| 422 | + 'code' => $result['code'] | ||
| 423 | + ); | ||
| 424 | + | ||
| 425 | + // set current language to default | ||
| 426 | + //if ($this->config->get('advanced_sitemap_default_lang') == $result['code']) { | ||
| 427 | + if ($this->config->get('config_language') == $result['code']) { | ||
| 428 | + $this->config->set('config_language_id', $result['language_id']); | ||
| 429 | + $this->session->data['language'] = $result['code']; | ||
| 430 | + } | ||
| 431 | + } | ||
| 432 | + } | ||
| 433 | + | ||
| 434 | + $this->languages = $languages; | ||
| 435 | + | ||
| 436 | + // save current language id | ||
| 437 | + $current_lang_id = $this->config->get('config_language_id'); | ||
| 438 | + $current_lang_code = $this->session->data['language']; | ||
| 439 | + | ||
| 440 | + | ||
| 441 | + $feed_lang = false; | ||
| 442 | + | ||
| 443 | + if (!empty($this->request->get['lang']) && in_array($this->request->get['lang'], array_keys($languages))) { | ||
| 444 | + $feed_lang = $this->request->get['lang']; | ||
| 445 | + $this->config->set('config_language_id', $languages[$feed_lang]['language_id']); | ||
| 446 | + $this->session->data['language'] = $languages[$feed_lang]['code']; | ||
| 447 | + $hreflang = false; | ||
| 448 | + } else { | ||
| 449 | + //$hreflang = $this->config->get('mlseo_hreflang'); | ||
| 450 | + if (count($this->languages) > 1 && $this->config->get('advanced_sitemap_hreflang')) { | ||
| 451 | + $hreflang = true; | ||
| 452 | + } else { | ||
| 453 | + $hreflang = false; | ||
| 454 | + } | ||
| 455 | + } | ||
| 456 | + | ||
| 457 | + if (!empty($config['language'])) { | ||
| 458 | + $this->config->set('config_language_id', $config['language']); | ||
| 459 | + } | ||
| 460 | + | ||
| 461 | + $config['hreflang'] = $hreflang; | ||
| 462 | + | ||
| 463 | + // set file header | ||
| 464 | + $output = '<?xml version="1.0" encoding="utf-8"?>' . "\n"; | ||
| 465 | + $output .= '<?xml-stylesheet type="text/xsl" href="'.$this->url->link('feed/advanced_sitemap/xsl'.$grid, 'type='.$type . ($feed_lang ? '&lang='.$feed_lang:''), $this->isSSL).'"?>' . "\n"; | ||
| 466 | + $output .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">' . "\n"; | ||
| 467 | + | ||
| 468 | + $items = array(); | ||
| 469 | + | ||
| 470 | + if (in_array($type, array('image'))) { | ||
| 471 | + $limit = 20; | ||
| 472 | + } | ||
| 473 | + | ||
| 474 | + if (in_array($type, array('journal'))) { | ||
| 475 | + $output .= $this->{'generate_'.$type}(array('start' => ($page-1)*$limit, 'limit' => $limit), $config, $custom_links_exclude); | ||
| 476 | + } elseif ($custom_sitemap_type) { | ||
| 477 | + foreach ($custom_links_include as $k => $v) { | ||
| 478 | + $custom_args = explode('@',$v, 2); | ||
| 479 | + | ||
| 480 | + if (!isset($custom_args[1])) continue; | ||
| 481 | + | ||
| 482 | + $custom_type = trim($custom_args[0]); | ||
| 483 | + $custom_link = trim($custom_args[1]); | ||
| 484 | + | ||
| 485 | + if ($type == $custom_type) { | ||
| 486 | + $items[$k] = $custom_link; | ||
| 487 | + } | ||
| 488 | + //var_dump($items);die; | ||
| 489 | + } | ||
| 490 | + } else { | ||
| 491 | + $items = $this->{'get_'.$type}(array('start' => ($page-1)*$limit, 'limit' => $limit)); | ||
| 492 | + | ||
| 493 | + if (!empty($_GET['t'])) file_put_contents(DIR_CACHE . 'sitemaps/cron.log', date('Y-m-d H:i:s'). ' - get_'.$type.'() - start '.(($page-1)*$limit).' - limit '. $limit."\n", FILE_APPEND | LOCK_EX); | ||
| 494 | + } | ||
| 495 | + | ||
| 496 | + //$products = $this->model_catalog_product->getProducts(array('start' => $offset, 'limit' => $limit)); | ||
| 497 | + | ||
| 498 | + if ($type == 'product') { | ||
| 499 | + if ($this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width')) { | ||
| 500 | + $img_width = $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'); | ||
| 501 | + $img_height = $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height'); | ||
| 502 | + } else if ($this->config->get($this->config->get('config_theme') . '_image_popup_width')) { | ||
| 503 | + $img_width = $this->config->get($this->config->get('config_theme') . '_image_popup_width'); | ||
| 504 | + $img_height = $this->config->get($this->config->get('config_theme') . '_image_popup_height'); | ||
| 505 | + } else if ($this->config->get('config_image_popup_width')) { | ||
| 506 | + $img_width = $this->config->get('config_image_popup_width'); | ||
| 507 | + $img_height = $this->config->get('config_image_popup_height'); | ||
| 508 | + } else { | ||
| 509 | + $img_width = $img_height = 500; | ||
| 510 | + } | ||
| 511 | + } | ||
| 512 | + | ||
| 513 | + if ($type == 'information') { | ||
| 514 | + $output .= '<url>'; | ||
| 515 | + $output .= '<loc><![CDATA[' . $this->url->link('common/home') . ']]></loc>'; | ||
| 516 | + $output .= '<changefreq>'.$config['freq'].'</changefreq>'; | ||
| 517 | + $output .= '<priority>'.$config['priority'].'</priority>'; | ||
| 518 | + $output .= '</url>'; | ||
| 519 | + } | ||
| 520 | + | ||
| 521 | + foreach ($items as $item) { | ||
| 522 | + if (isset($item['meta_robots']) && ($item['meta_robots'] == 'none' || $item['meta_robots'] == 'noindex')) continue; | ||
| 523 | + $custom_url = ''; | ||
| 524 | + if ($type == 'product') { | ||
| 525 | + $custom_url = $this->url->link('product/product','product_id='.$item['product_id'],'SSL'); | ||
| 526 | + } elseif ($type == 'category') { | ||
| 527 | + $path = $this->config->get('mlseo_fpp_cat_canonical') ? $this->fullCategoryPath($item) : ''; | ||
| 528 | + | ||
| 529 | + $custom_url = $this->url->link('product/category','path='.($path ? $path . '_' : '').$item['category_id'],'SSL'); | ||
| 530 | + } elseif ($type == 'information') { | ||
| 531 | + $custom_url = $this->url->link('information/information','information_id='.$item['information_id'],'SSL'); | ||
| 532 | + } elseif ($type == 'manufacturer') { | ||
| 533 | + $custom_url = $this->url->link('product/manufacturer/info','manufacturer_id='.$item['manufacturer_id'],'SSL'); | ||
| 534 | + } | ||
| 535 | + | ||
| 536 | + $custom_skip = false; | ||
| 537 | + | ||
| 538 | + if (!empty($custom_links_exclude[0])) { | ||
| 539 | + foreach ($custom_links_exclude as $k => $v) { | ||
| 540 | + //if ($custom_skip && trim($v) == $custom_url) { | ||
| 541 | + if (!$custom_skip && trim($v) == $custom_url) { | ||
| 542 | + $custom_skip = true; | ||
| 543 | + } | ||
| 544 | + } | ||
| 545 | + } | ||
| 546 | + | ||
| 547 | + if ($custom_skip) { | ||
| 548 | + continue; | ||
| 549 | + } | ||
| 550 | + | ||
| 551 | + $img_loc = false; | ||
| 552 | + if ($type == 'product' && !empty($item['image']) && ($main_img || $display_img)) { | ||
| 553 | + if ($fullsize_img) { | ||
| 554 | + $img_loc = HTTP_SERVER.'image/'.$item['image']; | ||
| 555 | + } else { | ||
| 556 | + $img_loc = $this->model_tool_image->resize($item['image'], $img_width, $img_height); | ||
| 557 | + } | ||
| 558 | + } | ||
| 559 | + | ||
| 560 | + if ($img_loc && $display_img) { | ||
| 561 | + //$output .= '<thumb>' . htmlspecialchars($this->model_tool_image->resize($item['image'], 50, 50)) . '</thumb>'; | ||
| 562 | + $output .= '<url thumb="' . htmlspecialchars($this->model_tool_image->resize($item['image'], 50, 50), ENT_COMPAT, 'UTF-8') . '">'; | ||
| 563 | + } else { | ||
| 564 | + $output .= '<url>'; | ||
| 565 | + } | ||
| 566 | + | ||
| 567 | + if ($type == 'category') { | ||
| 568 | + $path = $this->config->get('mlseo_fpp_cat_canonical') ? $this->fullCategoryPath($item) : ''; | ||
| 569 | + $output .= '<loc><![CDATA[' .html_entity_decode($this->url->link('product/category', 'path='. ($path ? $path . '_' : '') . $item['category_id']), ENT_COMPAT, 'UTF-8'). ']]></loc>'; | ||
| 570 | + } else if ($type == 'manufacturer') { | ||
| 571 | + $output .= '<loc><![CDATA[' .html_entity_decode($this->url->link('product/manufacturer/info', 'manufacturer_id=' . $item['manufacturer_id']), ENT_COMPAT, 'UTF-8'). ']]></loc>'; | ||
| 572 | + } else if ($type == 'information') { | ||
| 573 | + $output .= '<loc><![CDATA[' .html_entity_decode($this->url->link('information/information', 'information_id=' . $item['information_id']), ENT_COMPAT, 'UTF-8'). ']]></loc>'; | ||
| 574 | + } else if ($custom_sitemap_type) { | ||
| 575 | + if (strpos($item, 'http') !== false) { | ||
| 576 | + $output .= '<loc><![CDATA['.html_entity_decode(trim($item), ENT_COMPAT, 'UTF-8').']]></loc>'; | ||
| 577 | + } else { | ||
| 578 | + $output .= '<loc><![CDATA['.html_entity_decode($this->url->link($item), ENT_COMPAT, 'UTF-8').']]></loc>'; | ||
| 579 | + } | ||
| 580 | + } else { | ||
| 581 | + $output .= '<loc><![CDATA[' .html_entity_decode($this->url->link('product/'.$type, $type.'_id=' . $item[$type.'_id']), ENT_COMPAT, 'UTF-8'). ']]></loc>'; | ||
| 582 | + } | ||
| 583 | + | ||
| 584 | + if (!empty($hreflang)) { | ||
| 585 | + $hreflangs = $this->model_tool_seo_package->hrefLang('product/'.$type, $type.'_id=' . $item[$type.'_id']); | ||
| 586 | + if ($type == 'category') { | ||
| 587 | + $hreflangs = $this->model_tool_seo_package->hrefLang('product/category', 'path='. ($path ? $path . '_' : '') . $item['category_id']); | ||
| 588 | + } else if ($type == 'manufacturer') { | ||
| 589 | + $hreflangs = $this->model_tool_seo_package->hrefLang('product/manufacturer/info', 'manufacturer_id=' . $item['manufacturer_id']); | ||
| 590 | + } else if ($type == 'information') { | ||
| 591 | + $hreflangs = $this->model_tool_seo_package->hrefLang('information/information', 'information_id=' . $item['information_id']); | ||
| 592 | + } else if ($custom_sitemap_type) { | ||
| 593 | + if (strpos($item, 'http') !== false) { | ||
| 594 | + $hreflangs = array(); | ||
| 595 | + } else { | ||
| 596 | + $hreflangs = $this->model_tool_seo_package->hrefLang($item); | ||
| 597 | + } | ||
| 598 | + $hreflangs = '<xhtml:link rel="alternate" hreflang="' . $lang['code'] . '" href="' . $item . '"/>'; | ||
| 599 | + } else { | ||
| 600 | + $hreflangs = $this->model_tool_seo_package->hrefLang('product/'.$type, $type.'_id=' . $item[$type.'_id']); | ||
| 601 | + } | ||
| 602 | + | ||
| 603 | + if (!empty($hreflangs)) { | ||
| 604 | + foreach ($hreflangs as $href) { | ||
| 605 | + $output .= '<xhtml:link rel="alternate" hreflang="' . $href['hreflang'] . '" href="' . $href['href'] . '"/>'; | ||
| 606 | + } | ||
| 607 | + } | ||
| 608 | + /* | ||
| 609 | + foreach ($languages as $lang) { | ||
| 610 | + $this->config->set('config_language_id', $lang['language_id']); | ||
| 611 | + $this->session->data['language'] = $lang['code']; | ||
| 612 | + | ||
| 613 | + if ($type == 'category') { | ||
| 614 | + //$path = $this->fullCategoryPath($item); | ||
| 615 | + $output .= '<xhtml:link rel="alternate" hreflang="' . $lang['code'] . '" href="' . $this->url->link('product/category', 'path='. ($path ? $path . '_' : '') . $item['category_id']) . '"/>'; | ||
| 616 | + } else if ($type == 'manufacturer') { | ||
| 617 | + $output .= '<xhtml:link rel="alternate" hreflang="' . $lang['code'] . '" href="' . $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $item['manufacturer_id']) . '"/>'; | ||
| 618 | + } else if ($type == 'information') { | ||
| 619 | + $output .= '<xhtml:link rel="alternate" hreflang="' . $lang['code'] . '" href="' . $this->url->link('information/information', 'information_id=' . $item['information_id']) . '"/>'; | ||
| 620 | + } else if ($custom_sitemap_type) { | ||
| 621 | + $output .= '<xhtml:link rel="alternate" hreflang="' . $lang['code'] . '" href="' . $item . '"/>'; | ||
| 622 | + } else { | ||
| 623 | + $output .= '<xhtml:link rel="alternate" hreflang="' . $lang['code'] . '" href="' . $this->url->link('product/'.$type, $type.'_id=' . $item[$type.'_id']) . '"/>'; | ||
| 624 | + } | ||
| 625 | + } | ||
| 626 | + | ||
| 627 | + // restore current language id | ||
| 628 | + $this->config->set('config_language_id', $current_lang_id); | ||
| 629 | + $this->session->data['language'] = $current_lang_code; | ||
| 630 | + */ | ||
| 631 | + } | ||
| 632 | + | ||
| 633 | + if ($img_loc) { | ||
| 634 | + if (isset($this->request->get['grid'])) { | ||
| 635 | + $output .= '<thumb>' . htmlspecialchars($this->model_tool_image->resize($item['image'], 160, 120), ENT_COMPAT, 'UTF-8') . '</thumb>'; | ||
| 636 | + } | ||
| 637 | + | ||
| 638 | + if ($main_img) { | ||
| 639 | + $output .= '<image:image>'; | ||
| 640 | + $output .= '<image:loc>' . htmlspecialchars($img_loc, ENT_COMPAT, 'UTF-8') . '</image:loc>'; | ||
| 641 | + $output .= '<image:caption>' . htmlspecialchars($item['name'], ENT_COMPAT, 'UTF-8') . '</image:caption>'; | ||
| 642 | + $output .= '<image:title>' . htmlspecialchars($item['name'], ENT_COMPAT, 'UTF-8') . '</image:title>'; | ||
| 643 | + $output .= '</image:image>'; | ||
| 644 | + } | ||
| 645 | + } | ||
| 646 | + | ||
| 647 | + if ($additional_img && $type == 'product' && !empty($item['additional_images']) && $img_loc = $this->model_tool_image->resize($item['image'], $img_width, $img_height)) { | ||
| 648 | + foreach ($item['additional_images'] as $image) { | ||
| 649 | + $img_loc = false; | ||
| 650 | + if ($fullsize_img) { | ||
| 651 | + $img_loc = HTTP_SERVER.'image/'.$image; | ||
| 652 | + } else { | ||
| 653 | + $img_loc = $this->model_tool_image->resize($image, $img_width, $img_height); | ||
| 654 | + } | ||
| 655 | + | ||
| 656 | + if ($img_loc) { | ||
| 657 | + $output .= '<image:image>'; | ||
| 658 | + $output .= '<image:loc>' . htmlspecialchars($img_loc, ENT_COMPAT, 'UTF-8') . '</image:loc>'; | ||
| 659 | + $output .= '<image:caption>' . htmlspecialchars($item['name'], ENT_COMPAT, 'UTF-8') . '</image:caption>'; | ||
| 660 | + $output .= '<image:title>' . htmlspecialchars($item['name'], ENT_COMPAT, 'UTF-8') . '</image:title>'; | ||
| 661 | + $output .= '</image:image>'; | ||
| 662 | + } | ||
| 663 | + } | ||
| 664 | + } | ||
| 665 | + | ||
| 666 | + $output .= '<changefreq>'.$config['freq'].'</changefreq>'; | ||
| 667 | + $output .= '<priority>'.$config['priority'].'</priority>'; | ||
| 668 | + | ||
| 669 | + if (!empty($item['date_modified']) && !(strpos($item['date_modified'], '0000-00-00') !== false)) { | ||
| 670 | + $output .= '<lastmod>'. substr($item['date_modified'], 0, strpos($item['date_modified'], ' ')) .'</lastmod>'; | ||
| 671 | + } else if (!empty($item['date_added']) && !(strpos($item['date_added'], '0000-00-00') !== false)) { | ||
| 672 | + $output .= '<lastmod>'. substr($item['date_added'], 0, strpos($item['date_added'], ' ')) .'</lastmod>'; | ||
| 673 | + } else { | ||
| 674 | + $output .= '<lastmod>'. date('Y-m-d') .'</lastmod>'; | ||
| 675 | + } | ||
| 676 | + | ||
| 677 | + $output .= '</url>' . "\n"; | ||
| 678 | + } | ||
| 679 | + | ||
| 680 | + $output .= '</urlset>'; | ||
| 681 | + | ||
| 682 | + // $end_time = microtime(true)*1000; | ||
| 683 | + // var_dump('time: '. ((int)($end_time - $this->start_time) /1000). 'ms'); | ||
| 684 | + // var_dump('mem peak: ' . memory_get_peak_usage()); | ||
| 685 | + | ||
| 686 | + /* | ||
| 687 | + if (!$config['cache_delay'] && $config['freq'] != 'always') { | ||
| 688 | + file_put_contents($file, $output); | ||
| 689 | + } | ||
| 690 | + */ | ||
| 691 | + | ||
| 692 | + if (!empty($_GET['t'])) file_put_contents(DIR_CACHE . 'sitemaps/cron.log', date('Y-m-d H:i:s'). ' - process done save file : '.$file."\n", FILE_APPEND | LOCK_EX); | ||
| 693 | + | ||
| 694 | + if (!empty($items)) { | ||
| 695 | + file_put_contents($file, $output); | ||
| 696 | + } | ||
| 697 | + | ||
| 698 | + if ($this->generateOnly) { | ||
| 699 | + return; | ||
| 700 | + } | ||
| 701 | + | ||
| 702 | + $this->renderFeed($output); | ||
| 703 | + } | ||
| 704 | + | ||
| 705 | + // Callback | ||
| 706 | + public function callback() { | ||
| 707 | + //file_put_contents('system/cache/met.log', "\n callback called \n", FILE_APPEND); | ||
| 708 | + //file_put_contents($this->temp_file, $this->output, FILE_APPEND); | ||
| 709 | + } | ||
| 710 | + | ||
| 711 | + // Output file | ||
| 712 | + private function display($file) { | ||
| 713 | + @ini_set('zlib.output_compression', 'Off'); | ||
| 714 | + @ini_set('output_buffering', 'Off'); | ||
| 715 | + @ini_set('output_handler', ''); | ||
| 716 | + if (function_exists('apache_setenv')) { | ||
| 717 | + @apache_setenv('no-gzip', 1); | ||
| 718 | + } | ||
| 719 | + | ||
| 720 | + $this->response->addHeader('Content-Type: application/xml'); | ||
| 721 | + $this->response->addHeader('AS-cached: true'); | ||
| 722 | + | ||
| 723 | + $this->response->setOutput(file_get_contents($file)); | ||
| 724 | + } | ||
| 725 | + | ||
| 726 | + private function renderFeed($output) { | ||
| 727 | + // Disable gzip compression to avoid ERR_CONTENT_DECODING_FAILED | ||
| 728 | + @ini_set('zlib.output_compression', 'Off'); | ||
| 729 | + @ini_set('output_buffering', 'Off'); | ||
| 730 | + @ini_set('output_handler', ''); | ||
| 731 | + if (function_exists('apache_setenv')) { | ||
| 732 | + @apache_setenv('no-gzip', 1); | ||
| 733 | + } | ||
| 734 | + | ||
| 735 | + $this->response->addHeader('Content-Type: application/xml'); | ||
| 736 | + $this->response->addHeader('AS-cached: false'); | ||
| 737 | + | ||
| 738 | + $this->response->setOutput($output); | ||
| 739 | + } | ||
| 740 | + | ||
| 741 | + private function get_product($data, $count = false, $get_date = false) { | ||
| 742 | + // save current language id | ||
| 743 | + $current_lang_id = $this->config->get('config_language_id'); | ||
| 744 | + $current_lang_code = $this->session->data['language']; | ||
| 745 | + $config = $this->config->get('advanced_sitemap_cfg'); | ||
| 746 | + | ||
| 747 | + $extra_where = ''; | ||
| 748 | + | ||
| 749 | + if (!empty($config['in_stock'])) { | ||
| 750 | + $extra_where = " AND p.quantity > 0"; | ||
| 751 | + } | ||
| 752 | + | ||
| 753 | + if ($get_date) { | ||
| 754 | + $lastmod = $this->db->query("SELECT MAX(t1.date_modified) as lastmod FROM ( | ||
| 755 | + SELECT p.date_modified as date_modified FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'" . $extra_where . " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']." | ||
| 756 | + ) AS t1")->row; | ||
| 757 | + | ||
| 758 | + return $lastmod['lastmod']; | ||
| 759 | + } | ||
| 760 | + | ||
| 761 | + if ($count) { | ||
| 762 | + $total = $this->db->query("SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'" . $extra_where)->row; | ||
| 763 | + return $total['total']; | ||
| 764 | + } | ||
| 765 | + | ||
| 766 | + if (1) { | ||
| 767 | + //$rows = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'" . $extra_where . " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'])->rows; | ||
| 768 | + $rows = $this->db->query("SELECT DISTINCT p.product_id, pd.name AS name, p.image, date_modified FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'" . $extra_where . " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'])->rows; | ||
| 769 | + | ||
| 770 | + foreach ($rows as $k => $row) { | ||
| 771 | + $rows[$k]['additional_images'] = array(); | ||
| 772 | + $images = $this->db->query("SELECT image FROM " . DB_PREFIX . "product_image WHERE product_id = '" . $row['product_id'] . "' ORDER BY sort_order ASC")->rows; | ||
| 773 | + | ||
| 774 | + foreach ($images as $img) { | ||
| 775 | + if (!empty($img['image'])) { | ||
| 776 | + $rows[$k]['additional_images'][] = $img['image']; | ||
| 777 | + } | ||
| 778 | + } | ||
| 779 | + } | ||
| 780 | + } | ||
| 781 | + | ||
| 782 | + return $rows; | ||
| 783 | + } | ||
| 784 | + | ||
| 785 | + private function get_image($data, $count = false) { | ||
| 786 | + // save current language id | ||
| 787 | + $current_lang_id = $this->config->get('config_language_id'); | ||
| 788 | + $current_lang_code = $this->session->data['language']; | ||
| 789 | + $config = $this->config->get('advanced_sitemap_cfg'); | ||
| 790 | + | ||
| 791 | + $extra_where = $limit = ''; | ||
| 792 | + | ||
| 793 | + if (!empty($config['in_stock'])) { | ||
| 794 | + $extra_where = " AND p.quantity > 0"; | ||
| 795 | + } | ||
| 796 | + | ||
| 797 | + if (!$count) { | ||
| 798 | + $limit = "LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; | ||
| 799 | + } | ||
| 800 | + | ||
| 801 | + // image query | ||
| 802 | + $query = $this->db->query(" | ||
| 803 | + SELECT p.product_id, i.image, p.image as main_image | ||
| 804 | + FROM " . DB_PREFIX . "product p | ||
| 805 | + LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) | ||
| 806 | + LEFT JOIN " . DB_PREFIX . "product_image i ON (p.product_id = i.product_id) | ||
| 807 | + WHERE p.status = '1' | ||
| 808 | + AND p.date_available <= NOW() | ||
| 809 | + AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' | ||
| 810 | + AND (i.image <> '' OR p.image <> '') | ||
| 811 | + " . $extra_where . " " . $limit)->rows; | ||
| 812 | + | ||
| 813 | + // count total images | ||
| 814 | + if ($count) { | ||
| 815 | + $total = 0; | ||
| 816 | + | ||
| 817 | + foreach ($query as $image) { | ||
| 818 | + $image['main_image'] AND $total++; | ||
| 819 | + $image['image'] AND $total++; | ||
| 820 | + } | ||
| 821 | + | ||
| 822 | + return $total; | ||
| 823 | + } | ||
| 824 | + | ||
| 825 | + // prepare data array | ||
| 826 | + $images = array(); | ||
| 827 | + | ||
| 828 | + foreach ($query as $image) { | ||
| 829 | + if ($image['main_image']) { | ||
| 830 | + $images['m'.$image['product_id']] = array('product_id' => $image['product_id'], 'image' => $image['main_image']); | ||
| 831 | + } | ||
| 832 | + | ||
| 833 | + if ($image['image']) { | ||
| 834 | + $images[] = array('product_id' => $image['product_id'], 'image' => $image['image']); | ||
| 835 | + } | ||
| 836 | + } | ||
| 837 | + | ||
| 838 | + return $images; | ||
| 839 | + } | ||
| 840 | + | ||
| 841 | + private function get_category($data) { | ||
| 842 | + $rows = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name) LIMIT " . (int)$data['start'] . "," . (int)$data['limit'])->rows; | ||
| 843 | + return $rows; | ||
| 844 | + } | ||
| 845 | + | ||
| 846 | + private function get_information($data) { | ||
| 847 | + $this->load->model('catalog/information'); | ||
| 848 | + | ||
| 849 | + $rows = $this->model_catalog_information->getInformations($data); | ||
| 850 | + | ||
| 851 | + return $rows; | ||
| 852 | + } | ||
| 853 | + | ||
| 854 | + private function get_manufacturer($data) { | ||
| 855 | + $this->load->model('catalog/manufacturer'); | ||
| 856 | + | ||
| 857 | + $rows = $this->model_catalog_manufacturer->getManufacturers($data); | ||
| 858 | + | ||
| 859 | + return $rows; | ||
| 860 | + } | ||
| 861 | + | ||
| 862 | + private function generate_journal($data, $config, $custom_links_exclude = array()) { | ||
| 863 | + $output = ''; | ||
| 864 | + | ||
| 865 | + if (!is_dir(DIR_APPLICATION . 'model/journal2') && !is_dir(DIR_APPLICATION . 'model/journal3')) return ''; | ||
| 866 | + | ||
| 867 | + $journalVersion = is_dir(DIR_APPLICATION . 'model/journal3') ? 'journal3' : 'journal2'; | ||
| 868 | + | ||
| 869 | + // save current language id | ||
| 870 | + $current_lang_id = $this->config->get('config_language_id'); | ||
| 871 | + $current_lang_code = $this->session->data['language']; | ||
| 872 | + | ||
| 873 | + $output .= '<url>'; | ||
| 874 | + $output .= '<loc><![CDATA[' .html_entity_decode($this->url->link($journalVersion.'/blog', ''), ENT_COMPAT, 'UTF-8'). ']]></loc>'; | ||
| 875 | + | ||
| 876 | + if (!empty($config['hreflang'])) { | ||
| 877 | + foreach ($this->languages as $lang) { | ||
| 878 | + $this->config->set('config_language_id', $lang['language_id']); | ||
| 879 | + $this->session->data['language'] = $lang['code']; | ||
| 880 | + $this->load->model($journalVersion.'/blog'); | ||
| 881 | + $output .= '<xhtml:link rel="alternate" hreflang="' . $lang['code'] . '" href="' . $this->url->link($journalVersion.'/blog') . '"/>'; | ||
| 882 | + } | ||
| 883 | + | ||
| 884 | + // restore current language id | ||
| 885 | + $this->config->set('config_language_id', $current_lang_id); | ||
| 886 | + $this->session->data['language'] = $current_lang_code; | ||
| 887 | + } | ||
| 888 | + | ||
| 889 | + $blog_date = $this->db->query("SELECT date_created FROM `".DB_PREFIX.$journalVersion."_blog_post` WHERE status = 1 ORDER BY date_created DESC LIMIT 1")->row; | ||
| 890 | + | ||
| 891 | + $output .= '<changefreq>'.$config['freq'].'</changefreq>'; | ||
| 892 | + $output .= '<priority>'.$config['priority'].'</priority>'; | ||
| 893 | + $output .= '<lastmod>'. (!empty($blog_date['date_created']) ? substr($blog_date['date_created'], 0, strpos($blog_date['date_created'], ' ')) : date('Y-m-d')) .'</lastmod>'; | ||
| 894 | + $output .= '</url>' . "\n"; | ||
| 895 | + | ||
| 896 | + foreach ($this->{'model_'.$journalVersion.'_blog'}->getCategories() as $category) { | ||
| 897 | + $journal_category_url = $this->url->link($journalVersion.'/blog', 'journal_blog_category_id=' . $category['category_id']); | ||
| 898 | + $custom_skip = false; | ||
| 899 | + if (!empty($custom_links_exclude[0])) { | ||
| 900 | + foreach ($custom_links_exclude as $k => $v) { | ||
| 901 | + //if ($custom_skip && trim($v) == $custom_url) { | ||
| 902 | + if (!$custom_skip && trim($v) == $journal_category_url) { | ||
| 903 | + $custom_skip = true; | ||
| 904 | + } | ||
| 905 | + } | ||
| 906 | + } | ||
| 907 | + if ($custom_skip) { | ||
| 908 | + continue; | ||
| 909 | + } | ||
| 910 | + | ||
| 911 | + $output .= '<url>'; | ||
| 912 | + $output .= '<loc><![CDATA[' .html_entity_decode($journal_category_url, ENT_COMPAT, 'UTF-8'). ']]></loc>'; | ||
| 913 | + | ||
| 914 | + if (!empty($config['hreflang'])) { | ||
| 915 | + foreach ($this->languages as $lang) { | ||
| 916 | + $this->config->set('config_language_id', $lang['language_id']); | ||
| 917 | + $this->session->data['language'] = $lang['code']; | ||
| 918 | + | ||
| 919 | + $output .= '<xhtml:link rel="alternate" hreflang="' . $lang['code'] . '" href="' . $journal_category_url . '"/>'; | ||
| 920 | + } | ||
| 921 | + | ||
| 922 | + // restore current language id | ||
| 923 | + $this->config->set('config_language_id', $current_lang_id); | ||
| 924 | + $this->session->data['language'] = $current_lang_code; | ||
| 925 | + } | ||
| 926 | + | ||
| 927 | + $blog_date = $this->db->query("SELECT p.date_created FROM `".DB_PREFIX.$journalVersion."_blog_post` p LEFT JOIN `".DB_PREFIX.$journalVersion."_blog_post_to_category` p2c ON p.post_id = p2c.post_id WHERE status = 1 AND p2c.category_id = " . (int)$category['category_id'] . " ORDER BY date_created DESC LIMIT 1")->row; | ||
| 928 | + | ||
| 929 | + $output .= '<changefreq>'.$config['freq'].'</changefreq>'; | ||
| 930 | + $output .= '<priority>'.$config['priority'].'</priority>'; | ||
| 931 | + $output .= '<lastmod>'. (!empty($blog_date['date_created']) ? substr($blog_date['date_created'], 0, strpos($blog_date['date_created'], ' ')) : date('Y-m-d')) .'</lastmod>'; | ||
| 932 | + $output .= '</url>' . "\n"; | ||
| 933 | + } | ||
| 934 | + | ||
| 935 | + foreach ($this->{'model_'.$journalVersion.'_blog'}->getPosts() as $post) { | ||
| 936 | + $journal_post_url = $this->url->link($journalVersion.'/blog/post', 'journal_blog_post_id=' . $post['post_id']); | ||
| 937 | + $custom_skip = false; | ||
| 938 | + if (!empty($custom_links_exclude[0])) { | ||
| 939 | + foreach ($custom_links_exclude as $k => $v) { | ||
| 940 | + //if ($custom_skip && trim($v) == $custom_url) { | ||
| 941 | + if (!$custom_skip && trim($v) == $journal_post_url) { | ||
| 942 | + $custom_skip = true; | ||
| 943 | + } | ||
| 944 | + } | ||
| 945 | + } | ||
| 946 | + if ($custom_skip) { | ||
| 947 | + continue; | ||
| 948 | + } | ||
| 949 | + | ||
| 950 | + $output .= '<url>'; | ||
| 951 | + $output .= '<loc><![CDATA[' .$journal_post_url. ']]></loc>'; | ||
| 952 | + | ||
| 953 | + if (!empty($config['hreflang'])) { | ||
| 954 | + foreach ($this->languages as $lang) { | ||
| 955 | + $this->config->set('config_language_id', $lang['language_id']); | ||
| 956 | + $this->session->data['language'] = $lang['code']; | ||
| 957 | + | ||
| 958 | + $output .= '<xhtml:link rel="alternate" hreflang="' . $lang['code'] . '" href="' . $journal_post_url . '"/>'; | ||
| 959 | + } | ||
| 960 | + | ||
| 961 | + // restore current language id | ||
| 962 | + $this->config->set('config_language_id', $current_lang_id); | ||
| 963 | + $this->session->data['language'] = $current_lang_code; | ||
| 964 | + } | ||
| 965 | + | ||
| 966 | + $output .= '<changefreq>'.$config['freq'].'</changefreq>'; | ||
| 967 | + $output .= '<priority>'.$config['priority'].'</priority>'; | ||
| 968 | + $output .= '<lastmod>'. substr($post['date'], 0, strpos($post['date'], ' ')) .'</lastmod>'; | ||
| 969 | + $output .= '</url>' . "\n"; | ||
| 970 | + } | ||
| 971 | + | ||
| 972 | + return $output; | ||
| 973 | + } | ||
| 974 | + | ||
| 975 | + private function fullCategoryPath($category) { | ||
| 976 | + $path = ''; | ||
| 977 | + | ||
| 978 | + while (!empty($category['parent_id'])) { | ||
| 979 | + $path = $category['parent_id'] . '_' . $path; | ||
| 980 | + $category = $this->db->query("SELECT parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . $category['parent_id']. "'")->row; | ||
| 981 | + } | ||
| 982 | + | ||
| 983 | + return rtrim($path, '_'); | ||
| 984 | + } | ||
| 985 | + | ||
| 986 | + public function xslindex() { | ||
| 987 | + $this->xsl('index'); | ||
| 988 | + } | ||
| 989 | + | ||
| 990 | + public function xsl_grid() { | ||
| 991 | + $this->xsl('grid'); | ||
| 992 | + } | ||
| 993 | + | ||
| 994 | + public function xsl($xsl = '') { | ||
| 995 | + $this->response->addHeader('Content-Type: application/xml; charset=utf-8'); | ||
| 996 | + $data['title'] = $xsl == 'index' ? 'Sitemap Index' : 'XML Sitemap'; | ||
| 997 | + $data['index'] = $xsl == 'index' ? true : false; | ||
| 998 | + $data['type'] = isset($this->request->get['type']) ? $this->request->get['type'] : ''; | ||
| 999 | + $data['index_link'] = $this->url->link('feed/advanced_sitemap', (!empty($this->request->get['lang']) ? 'lang='.$this->request->get['lang']:''), $this->isSSL); | ||
| 1000 | + | ||
| 1001 | + $data['cfg'] = $this->config->get('advanced_sitemap_cfg'); | ||
| 1002 | + | ||
| 1003 | + if ($xsl == 'index' && empty($data['cfg']['no_count'])) { | ||
| 1004 | + $config = $this->config->get('advanced_sitemap_cfg'); | ||
| 1005 | + | ||
| 1006 | + $data['count'] = array(); | ||
| 1007 | + | ||
| 1008 | + // count items | ||
| 1009 | + if (!empty($config['product']['status'])) { | ||
| 1010 | + $data['count']['product'] = $this->get_product('', true); | ||
| 1011 | + } | ||
| 1012 | + | ||
| 1013 | + if (!empty($config['category']['status'])) { | ||
| 1014 | + $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'")->row; | ||
| 1015 | + $data['count']['category'] = $query['total']; | ||
| 1016 | + } | ||
| 1017 | + | ||
| 1018 | + if (!empty($config['information']['status'])) { | ||
| 1019 | + $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "information c LEFT JOIN " . DB_PREFIX . "information_to_store c2s ON (c.information_id = c2s.information_id) WHERE c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'")->row; | ||
| 1020 | + $data['count']['information'] = $query['total']+1; | ||
| 1021 | + } | ||
| 1022 | + | ||
| 1023 | + if (!empty($config['manufacturer']['status'])) { | ||
| 1024 | + $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "manufacturer m LEFT JOIN " . DB_PREFIX . "manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) WHERE m2s.store_id = '" . (int)$this->config->get('config_store_id') . "'")->row; | ||
| 1025 | + $data['count']['brand'] = $query['total']; | ||
| 1026 | + } | ||
| 1027 | + | ||
| 1028 | + if (!empty($config['journal']['status'])) { | ||
| 1029 | + //$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "manufacturer m LEFT JOIN " . DB_PREFIX . "manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) WHERE m2s.store_id = '" . (int)$this->config->get('config_store_id') . "'")->row; | ||
| 1030 | + //$data['count']['journal'] = 1; | ||
| 1031 | + } | ||
| 1032 | + | ||
| 1033 | + } | ||
| 1034 | + | ||
| 1035 | + if ($xsl == 'grid') { | ||
| 1036 | + $grid = '_grid'; | ||
| 1037 | + } else { | ||
| 1038 | + $grid = ''; | ||
| 1039 | + } | ||
| 1040 | + | ||
| 1041 | + $template = 'default/template/module/advanced_sitemap'.$grid.'.tpl'; | ||
| 1042 | + | ||
| 1043 | + if (false && version_compare(VERSION, '3', '>=')) { | ||
| 1044 | + $template = new Template('template', $this->registry); | ||
| 1045 | + foreach ($data as $key => $value) { | ||
| 1046 | + $template->set($key, $value); | ||
| 1047 | + } | ||
| 1048 | + | ||
| 1049 | + $rf = new ReflectionMethod('Template', 'render'); | ||
| 1050 | + | ||
| 1051 | + if ($rf->getNumberOfParameters() > 2) { | ||
| 1052 | + $output = $template->render('default/template/module/advanced_sitemap'.$grid, $this->registry, false); | ||
| 1053 | + } else { | ||
| 1054 | + $output = $template->render('default/template/module/advanced_sitemap'.$grid, false); | ||
| 1055 | + } | ||
| 1056 | + echo $output; | ||
| 1057 | + return; | ||
| 1058 | + /* Do not work on some installations | ||
| 1059 | + $this->config->set('template_directory', 'default/template/'); // fix issue of undefined template dir | ||
| 1060 | + $this->config->set('template_engine', 'template'); | ||
| 1061 | + | ||
| 1062 | + $this->response->setOutput($this->load->view('module/advanced_sitemap'.$grid, $data)); | ||
| 1063 | + */ | ||
| 1064 | + } else if (version_compare(VERSION, '2.2', '>=')) { | ||
| 1065 | + $this->response->setOutput($this->load->view('module/advanced_sitemap'.$grid, $data)); | ||
| 1066 | + } else if ($this->OC_V2) { | ||
| 1067 | + $this->response->setOutput($this->load->view($template, $data)); | ||
| 1068 | + } else { | ||
| 1069 | + $this->data = $data; | ||
| 1070 | + $this->template = $template; | ||
| 1071 | + $this->response->setOutput($this->render()); | ||
| 1072 | + } | ||
| 1073 | + } | ||
| 1074 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php | ||
| 2 | +class ControllerGeekodevAnalytics extends Controller { | ||
| 3 | + | ||
| 4 | + public function index() { | ||
| 5 | + header('Content-type: text/javascript'); | ||
| 6 | +?> | ||
| 7 | +function gkdEctTrack(action, pid, desc) { | ||
| 8 | + var async = action == 'remove' ? false : true; | ||
| 9 | + $.ajax({ | ||
| 10 | + url: 'index.php?route=geekodev/analytics/getTrackData', | ||
| 11 | + type: 'post', dataType: 'json', cache: false, async: async, | ||
| 12 | + data: {pid: pid, action: action}, | ||
| 13 | + success: function(res) { | ||
| 14 | + if (typeof res[0] !== 'undefined') { | ||
| 15 | + gkaLayer.push({ | ||
| 16 | + 'event': action, | ||
| 17 | + 'ecommerce': { | ||
| 18 | + 'add': { | ||
| 19 | + 'products': res | ||
| 20 | + } | ||
| 21 | + } | ||
| 22 | + }); | ||
| 23 | + /* | ||
| 24 | + ga('ec:addProduct', res[0]); | ||
| 25 | + ga('ec:setAction', action); | ||
| 26 | + ga('send', 'event', $(document).find('title').text(), desc, res[0].name); | ||
| 27 | + */ | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | + }); | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | + function gkdEctTrackCheckout(step, desc) { | ||
| 34 | + if (typeof jQuery != 'undefined') { | ||
| 35 | + $.ajax({ | ||
| 36 | + url: 'index.php?route=geekodev/analytics/getTrackData', | ||
| 37 | + type: 'post', dataType: 'json', cache: false, | ||
| 38 | + data: {cart:1}, | ||
| 39 | + success: function(res) { | ||
| 40 | + if (typeof res[0] !== 'undefined') { | ||
| 41 | + gkaLayer.push({ | ||
| 42 | + 'event': 'checkout', | ||
| 43 | + 'ecommerce': { | ||
| 44 | + 'checkout': { | ||
| 45 | + 'actionField': {'step': step}, | ||
| 46 | + 'products': res | ||
| 47 | + } | ||
| 48 | + } | ||
| 49 | + }); | ||
| 50 | + } | ||
| 51 | + /* | ||
| 52 | + for(var i=0; i<res.length; i++) { | ||
| 53 | + if (typeof res[i] !== 'undefined') { | ||
| 54 | + ga('ec:addProduct', res[i]); | ||
| 55 | + } | ||
| 56 | + } | ||
| 57 | + ga('ec:setAction', 'checkout', {'step':step, 'option':desc}); | ||
| 58 | + ga('send', 'pageview'); | ||
| 59 | + */ | ||
| 60 | + } | ||
| 61 | + }); | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | +if (typeof jQuery != 'undefined') { | ||
| 66 | + $(document).delegate('#button-confirm', 'click', function(){ | ||
| 67 | + gkdEctTrackCheckout(3, 'Checkout confirm'); | ||
| 68 | + }); | ||
| 69 | +} | ||
| 70 | +<?php | ||
| 71 | + exit; | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + public function getTrackData($asArray = false) { | ||
| 75 | + $json = array(); | ||
| 76 | + | ||
| 77 | + $this->load->model('tool/seo_package'); | ||
| 78 | + | ||
| 79 | + $json = $this->model_tool_seo_package->getTrackData(); | ||
| 80 | + | ||
| 81 | + header('Content-Type: application/json'); | ||
| 82 | + echo json_encode($json); | ||
| 83 | + } | ||
| 84 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/catalog/model/tool/path_manager.php
0 → 100644
| 1 | +<?php | ||
| 2 | +class ModelToolPathManager extends Model { | ||
| 3 | + public $cachedPath = array(); | ||
| 4 | + | ||
| 5 | + public function getFullProductPath($product_id, $breadcrumbs_mode = false) { | ||
| 6 | + $path_mode = 'mlseo_fpp_mode'; | ||
| 7 | + | ||
| 8 | + if ($breadcrumbs_mode) { | ||
| 9 | + $path_mode = 'mlseo_fpp_bc_mode'; | ||
| 10 | + } | ||
| 11 | + | ||
| 12 | + if (!$this->config->get($path_mode)) { | ||
| 13 | + return array(); | ||
| 14 | + } | ||
| 15 | + | ||
| 16 | + if ($this->config->get($path_mode) == '3') { | ||
| 17 | + $man_id = $this->db->query("SELECT manufacturer_id FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "'")->row; | ||
| 18 | + | ||
| 19 | + if (!empty($man_id['manufacturer_id'])) { | ||
| 20 | + return array('manufacturer_id' => $man_id['manufacturer_id']); | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + return array(); | ||
| 24 | + } else if ($this->config->get($path_mode) == '4') { | ||
| 25 | + $category = $this->db->query("SELECT p2c.category_id FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "category_path cp ON (p2c.category_id = cp.category_id) WHERE p2c.product_id = '" . (int)$product_id . "' ORDER BY cp.level DESC LIMIT 1")->row; | ||
| 26 | + | ||
| 27 | + if (!empty($category['category_id'])) { | ||
| 28 | + return array('path' => $category['category_id']); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + return array(); | ||
| 32 | + } else if ($this->config->get($path_mode) == '5') { | ||
| 33 | + $category = $this->db->query("SELECT cp.path_id FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "category_path cp ON (p2c.category_id = cp.category_id) WHERE p2c.product_id = '" . (int)$product_id . "' AND cp.level = 0 LIMIT 1")->row; | ||
| 34 | + | ||
| 35 | + if (!empty($category['path_id'])) { | ||
| 36 | + return array('path' => $category['path_id']); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + return array(); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + $path = array(); | ||
| 43 | + $categories = $this->db->query("SELECT c.category_id, c.parent_id, p.seo_canonical FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "category c ON (p2c.category_id = c.category_id) LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id) WHERE p2c.product_id = '" . (int)$product_id . "'")->rows; | ||
| 44 | + | ||
| 45 | + $catsId = ''; | ||
| 46 | + | ||
| 47 | + foreach ($categories as $key => $category) { | ||
| 48 | + if (!empty($category['seo_canonical']) && $category['seo_canonical'] != $category['category_id']) { | ||
| 49 | + unset($categories[$key]); | ||
| 50 | + continue; | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + $catsId .= ($catsId ? '|' : '') . $category['category_id']; | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + if (isset($this->cachedPath[($breadcrumbs_mode ? 'bc' : '') . $catsId])) { | ||
| 57 | + // pathis cached, get it | ||
| 58 | + $path = $this->cachedPath[($breadcrumbs_mode ? 'bc' : '') . $catsId]; | ||
| 59 | + } else { | ||
| 60 | + $banned_cats = $this->config->get('mlseo_fpp_categories') ? $this->config->get('mlseo_fpp_categories') : array(); | ||
| 61 | + | ||
| 62 | + // path not in cache, generate it | ||
| 63 | + foreach ($categories as $key => $category) { | ||
| 64 | + // check if top category is in banned cats | ||
| 65 | + if (in_array($category['category_id'], $banned_cats)) continue; | ||
| 66 | + | ||
| 67 | + $path[$key] = ''; | ||
| 68 | + | ||
| 69 | + if (!$category) continue; | ||
| 70 | + | ||
| 71 | + $path[$key] = $category['category_id']; | ||
| 72 | + | ||
| 73 | + $i = 0; | ||
| 74 | + | ||
| 75 | + while (!empty($category['parent_id']) && $category['parent_id'] !== $category['category_id']) { | ||
| 76 | + if ($i++ > 12) break; // category is in loop | ||
| 77 | + | ||
| 78 | + if (!in_array($category['parent_id'], $banned_cats)) { | ||
| 79 | + $path[$key] = $category['parent_id'] . '_' . $path[$key]; | ||
| 80 | + } | ||
| 81 | + $category = $this->db->query("SELECT category_id, parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . $category['parent_id']. "'")->row; | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + $path[$key] = $path[$key]; | ||
| 85 | + | ||
| 86 | + /* | ||
| 87 | + if (is_array($banned_cats) && is_array($categories) && count($banned_cats) && (count($categories) > 1)) { | ||
| 88 | + if (in_array($path[$key], $banned_cats)) { | ||
| 89 | + unset($path[$key]); | ||
| 90 | + } else if (preg_match('#[_=](\d+)$#', $path[$key], $cat)) { | ||
| 91 | + if (in_array($cat[1], $banned_cats)) { | ||
| 92 | + unset($path[$key]); | ||
| 93 | + } | ||
| 94 | + } | ||
| 95 | + } | ||
| 96 | + */ | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + if (!count($path)) return array(); | ||
| 100 | + | ||
| 101 | + // wich one is the largest ? | ||
| 102 | + $whichone = array_map('strlen', $path); | ||
| 103 | + asort($whichone); | ||
| 104 | + $whichone = array_keys($whichone); | ||
| 105 | + | ||
| 106 | + if ($this->config->get($path_mode) == '2') { | ||
| 107 | + $whichone = array_pop($whichone); | ||
| 108 | + } else { | ||
| 109 | + $whichone = array_shift($whichone); | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + $path = $path[$whichone]; | ||
| 113 | + | ||
| 114 | + if ($breadcrumbs_mode) { | ||
| 115 | + $depth = (int) $this->config->get('mlseo_fpp_bc_depth'); | ||
| 116 | + } else { | ||
| 117 | + $depth = (int) $this->config->get('mlseo_fpp_depth'); | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + if ($depth) { | ||
| 121 | + $path_parts = explode('_', $path); | ||
| 122 | + while (count($path_parts) > (int) $this->config->get('mlseo_fpp_depth')) { | ||
| 123 | + array_pop($path_parts); | ||
| 124 | + } | ||
| 125 | + $path = implode('_', $path_parts); | ||
| 126 | + } | ||
| 127 | + | ||
| 128 | + $this->cachedPath[($breadcrumbs_mode ? 'bc' : '') . $catsId] = $path; | ||
| 129 | + } | ||
| 130 | + | ||
| 131 | + return array('path' => $path); | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + public function getOneProductPath($product_id, $mode = 'path') { | ||
| 135 | + $path = $text = ''; | ||
| 136 | + | ||
| 137 | + $category = $this->db->query("SELECT c.category_id, c.parent_id, p.seo_canonical FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "category c ON (p2c.category_id = c.category_id) LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id) WHERE p2c.product_id = '" . (int)$product_id . "'")->row; | ||
| 138 | + | ||
| 139 | + if (!empty($category['category_id'])) { | ||
| 140 | + $path = $category['category_id']; | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + $i = 0; | ||
| 144 | + | ||
| 145 | + while (!empty($category['parent_id']) && $category['parent_id'] !== $category['category_id']) { | ||
| 146 | + if ($i++ > 12) break; // category is in loop | ||
| 147 | + | ||
| 148 | + $path = $category['parent_id'] . '_' . $path; | ||
| 149 | + | ||
| 150 | + $category = $this->db->query("SELECT category_id, parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . $category['parent_id']. "'")->row; | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + return $path; | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + public function getFullCategoryPath($category_id) { | ||
| 157 | + $path = ''; | ||
| 158 | + $category = $this->db->query("SELECT category_id, parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . (int)$category_id . "'")->row; | ||
| 159 | + | ||
| 160 | + if (!$category) { | ||
| 161 | + return ''; | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + $path = $category['category_id']; | ||
| 165 | + | ||
| 166 | + $i = 0; | ||
| 167 | + | ||
| 168 | + while (!empty($category['parent_id']) && $category['parent_id'] !== $category['category_id']) { | ||
| 169 | + if ($i++ > 12) break; // category is in loop | ||
| 170 | + | ||
| 171 | + $path = $category['parent_id'] . '_' . $path; | ||
| 172 | + $category = $this->db->query("SELECT category_id, parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . $category['parent_id']. "'")->row; | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + return $path; | ||
| 176 | + } | ||
| 177 | + | ||
| 178 | + public function getManufacturerKeyword() { | ||
| 179 | + if ($this->config->get('mlseo_ml_mode')) { | ||
| 180 | + $ml_mode = "AND (`language_id` = '" . (int)$this->config->get('config_language_id') . "' OR `language_id` = 0)"; | ||
| 181 | + } else { | ||
| 182 | + $ml_mode = ''; | ||
| 183 | + } | ||
| 184 | + | ||
| 185 | + if (version_compare(VERSION, '3', '>=')) { | ||
| 186 | + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE `query` = 'route=product/manufacturer'". $ml_mode ." LIMIT 1")->row; | ||
| 187 | + } else { | ||
| 188 | + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` LIKE '%product/manufacturer'". $ml_mode ." LIMIT 1")->row; | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + if (!empty($query['keyword'])) { | ||
| 192 | + return '/' . $query['keyword']; | ||
| 193 | + } | ||
| 194 | + | ||
| 195 | + return ''; | ||
| 196 | + } | ||
| 197 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/catalog/model/tool/seo_package.php
0 → 100644
| 1 | +<?php | ||
| 2 | +class ModelToolSeoPackage extends Model { | ||
| 3 | + | ||
| 4 | + public function hrefLang($linkRoute = false, $linkUrl = '') { | ||
| 5 | + if (!$this->config->get('mlseo_hreflang')) { | ||
| 6 | + return; | ||
| 7 | + } | ||
| 8 | + | ||
| 9 | + $this->load->model('localisation/language'); | ||
| 10 | + $langs = $this->model_localisation_language->getLanguages(); | ||
| 11 | + | ||
| 12 | + // save current language values | ||
| 13 | + $current_config_lang = $this->config->get('config_language'); | ||
| 14 | + $current_lang_id = $this->config->get('config_language_id'); | ||
| 15 | + $current_lang_code = $this->session->data['language']; | ||
| 16 | + | ||
| 17 | + if (!$linkRoute) { | ||
| 18 | + // construct url | ||
| 19 | + $data = $this->request->get; | ||
| 20 | + | ||
| 21 | + // do not display hreflang if page or limit parameter | ||
| 22 | + if (!empty($data['route']) && $data['route'] == 'product/category' && count($data) !== 3) { | ||
| 23 | + //return; // disabled, seems now necessary by google | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + unset($data['_route_']); | ||
| 27 | + unset($data['site_language']); | ||
| 28 | + unset(/*$data['page'],*/ $data['limit'], $data['order'], $data['sort']); | ||
| 29 | + | ||
| 30 | + if (isset($data['route']) && $data['route']) { | ||
| 31 | + $route = $data['route']; | ||
| 32 | + } else { | ||
| 33 | + $route = 'common/home'; | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + unset($data['route']); | ||
| 37 | + | ||
| 38 | + $url = ''; | ||
| 39 | + | ||
| 40 | + if (isset($data['path'])) { | ||
| 41 | + $url .= 'path=' . $data['path'] . '&'; | ||
| 42 | + unset($data['path']); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + if ($data) { | ||
| 46 | + $data = array_reverse($data); | ||
| 47 | + $url .= urldecode(http_build_query($data, '', '&')); | ||
| 48 | + } | ||
| 49 | + } else { | ||
| 50 | + $route = $linkRoute; | ||
| 51 | + $url = $linkUrl; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + $hreflangs = array(); | ||
| 55 | + | ||
| 56 | + // handle sub-stores rewriting | ||
| 57 | + if ($this->config->get('mlseo_store_mode')) { | ||
| 58 | + $lang_to_store = $this->config->get('mlseo_lang_to_store'); | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + // generate hreflangs | ||
| 62 | + foreach ($langs as $lang) { | ||
| 63 | + // set language to get each link | ||
| 64 | + $this->config->set('config_language', $lang['code']); | ||
| 65 | + $this->config->set('config_language_id', $lang['language_id']); | ||
| 66 | + $this->session->data['language'] = $lang['code']; | ||
| 67 | + | ||
| 68 | + if (!empty($lang_to_store[$lang['code']])) { | ||
| 69 | + $hreflangs[] = array( | ||
| 70 | + 'href' => !empty($lang_to_store) ? str_replace(array(rtrim($this->config->get('config_url'),'/'), rtrim($this->config->get('config_ssl'),'/')), array_map(array('self','trimSlash'), $lang_to_store[$lang['code']]), $this->url->link($route, $url)) : $this->url->link($route, $url), | ||
| 71 | + 'hreflang' => (!$this->config->get('mlseo_hreflang_mode') ? substr($lang['code'], 0, 2) : $lang['code']) | ||
| 72 | + ); | ||
| 73 | + | ||
| 74 | + if ($this->config->get('mlseo_default_lang') == $lang['code']) { | ||
| 75 | + $hreflangs[] = array( | ||
| 76 | + 'href' => !empty($lang_to_store) ? str_replace(array(rtrim($this->config->get('config_url'),'/'), rtrim($this->config->get('config_ssl'),'/')), array_map(array('self','trimSlash'), $lang_to_store[$lang['code']]), $this->url->link($route, $url)) : $this->url->link($route, $url), | ||
| 77 | + 'hreflang' => 'x-default' | ||
| 78 | + ); | ||
| 79 | + } | ||
| 80 | + } else { | ||
| 81 | + $hreflangs[] = array( | ||
| 82 | + 'href' => $this->url->link($route, $url), | ||
| 83 | + 'hreflang' => (!$this->config->get('mlseo_hreflang_mode') ? substr($lang['code'], 0, 2) : $lang['code']) | ||
| 84 | + ); | ||
| 85 | + | ||
| 86 | + if ($this->config->get('mlseo_default_lang') == $lang['code']) { | ||
| 87 | + $hreflangs[] = array( | ||
| 88 | + 'href' => $this->url->link($route, $url), | ||
| 89 | + 'hreflang' => 'x-default' | ||
| 90 | + ); | ||
| 91 | + } | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | + /* | ||
| 95 | + if (!empty($lang_to_store) && $route == 'common/home') { | ||
| 96 | + $hreflangs[] = array( | ||
| 97 | + 'href' => str_replace(array(rtrim($this->config->get('config_url'),'/'), rtrim($this->config->get('config_ssl'),'/')), array_map(array('self','trimSlash'), array('config_url' => HTTP_SERVER, 'config_ssl' => HTTPS_SERVER)), str_replace('/'.$lang['code'].'/', '/', $this->url->link($route, $url))), | ||
| 98 | + 'hreflang' => 'x-default' | ||
| 99 | + ); | ||
| 100 | + } | ||
| 101 | + */ | ||
| 102 | + | ||
| 103 | + // if ($route == 'common/home' && !$this->config->get('mlseo_flag_mode')) { | ||
| 104 | + // $hreflangs = array(); | ||
| 105 | + // } | ||
| 106 | + | ||
| 107 | + // restore current language values | ||
| 108 | + $this->config->set('config_language', $current_config_lang); | ||
| 109 | + $this->config->set('config_language_id', $current_lang_id); | ||
| 110 | + $this->session->data['language'] = $current_lang_code; | ||
| 111 | + | ||
| 112 | + if ($linkRoute) { | ||
| 113 | + return $hreflangs; | ||
| 114 | + } | ||
| 115 | + $output = ''; | ||
| 116 | + | ||
| 117 | + foreach ($hreflangs as $link) { | ||
| 118 | + $output .= '<link rel="alternate" href="'.$link['href'].'" hreflang="'.$link['hreflang'].'"/>'."\n"; | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + $this->document->addSeoMeta($output); | ||
| 122 | + //return $hreflangs; | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + private static function trimSlash($val) { | ||
| 126 | + return rtrim($val, '/'); | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + public function metaRobots() { | ||
| 130 | + if (!$this->config->get('mlseo_robots')) { | ||
| 131 | + return; | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + // do not display if already defined | ||
| 135 | + if (strpos($this->document->renderSeoMeta(), '<meta name="robots"') !== false) { | ||
| 136 | + return; | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + $page = !empty($this->request->get['route']) ? $this->request->get['route'] : 'common/home'; | ||
| 140 | + $page = str_replace(array('common/home', 'product/product', 'product/category', 'information/information', 'information/contact', 'product/search', 'product/manufacturer/info'), | ||
| 141 | + array('home', 'product', 'category', 'information', 'contact', 'search', 'manufacturer'), $page); | ||
| 142 | + | ||
| 143 | + if ($page == 'search' && !empty($this->request->get['tag'])) { | ||
| 144 | + $page = 'tag'; | ||
| 145 | + } | ||
| 146 | + | ||
| 147 | + if (strstr($page, '/', true)) { | ||
| 148 | + $page = strstr($page, '/', true); | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + // set default robots value | ||
| 152 | + $robots = $this->config->get('mlseo_meta_robots'); | ||
| 153 | + $value = isset($robots[$page]) ? $robots[$page] : ''; | ||
| 154 | + $getParams = $this->request->get; | ||
| 155 | + | ||
| 156 | + if (isset($getParams['ignorenitro'])) { | ||
| 157 | + unset($getParams['ignorenitro']); | ||
| 158 | + } | ||
| 159 | + | ||
| 160 | + if ($page == 'error') { | ||
| 161 | + $value = 'none'; | ||
| 162 | + } else if ($page == 'search') { | ||
| 163 | + if (empty($this->request->get['tag']) || isset($this->request->get['page']) || isset($this->request->get['limit']) || isset($this->request->get['sort'])) { | ||
| 164 | + $value = 'none'; | ||
| 165 | + } | ||
| 166 | + } elseif (!empty($this->request->get['page']) && $this->request->get['page'] !== '1') { | ||
| 167 | + $value = 'noindex'; | ||
| 168 | + } elseif (!empty($this->request->get['limit']) || !empty($this->request->get['sort'])) { | ||
| 169 | + $value = 'noindex'; | ||
| 170 | + } elseif (($page == 'category' && count($getParams) > 3) || ($page == 'product' && count($getParams) > 4)) { | ||
| 171 | + // no index if any extra parameter in category | ||
| 172 | + $value = 'noindex'; | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + if (!$value) { | ||
| 176 | + return; | ||
| 177 | + } | ||
| 178 | + | ||
| 179 | + $output = '<meta name="robots" content="'.$value.'"/>'."\n"; | ||
| 180 | + | ||
| 181 | + $this->document->addSeoMeta($output); | ||
| 182 | + } | ||
| 183 | + | ||
| 184 | + public function richSnippets() { | ||
| 185 | + $page = !empty($this->request->get['route']) ? $this->request->get['route'] : 'common/home'; | ||
| 186 | + $page = str_replace(array('common/home', 'product/product', 'product/category', 'information/information', 'information/contact'), | ||
| 187 | + array('home', 'product', 'category', 'information', 'contact'), $page); | ||
| 188 | + $metas = ''; | ||
| 189 | + | ||
| 190 | + switch ($page) { | ||
| 191 | + case 'home': $types = array('gpublisher', 'microdata', 'opengraph', 'tcard'); break; | ||
| 192 | + case 'category': $types = array('opengraph'); break; | ||
| 193 | + //case 'product': $types = array('microdata', 'opengraph', 'tcard'); break; | ||
| 194 | + default: $types = array(); break; | ||
| 195 | + } | ||
| 196 | + | ||
| 197 | + foreach ($types as $type) { | ||
| 198 | + if (!$this->config->get('mlseo_'.$type)) continue; | ||
| 199 | + | ||
| 200 | + $metas .= $this->rich_snippet($type, $page); | ||
| 201 | + } | ||
| 202 | + | ||
| 203 | + $metas .= html_entity_decode($this->config->get('mlseo_fb_pixel'), ENT_QUOTES, 'UTF-8'); | ||
| 204 | + | ||
| 205 | + $this->document->addSeoMeta($metas); | ||
| 206 | + } | ||
| 207 | + | ||
| 208 | + public function rich_snippet($type, $page, $data = array()) { | ||
| 209 | + $config = $data['config'] = $this->config->get('mlseo_'.$type.'_data'); | ||
| 210 | + | ||
| 211 | + if ($page == 'home' && $type == 'gpublisher') { | ||
| 212 | + $data['url'] = $config['url']; | ||
| 213 | + } else if ($page == 'product') { | ||
| 214 | + // currency | ||
| 215 | + if (isset($this->session->data['currency'])) { | ||
| 216 | + $data['currency'] = $this->session->data['currency']; | ||
| 217 | + } else { | ||
| 218 | + $data['currency'] = $this->currency->getCode(); | ||
| 219 | + } | ||
| 220 | + | ||
| 221 | + // get unformatted price | ||
| 222 | + $data['price'] = $this->currency->format($this->tax->calculate($data['product_info']['price'], $data['product_info']['tax_class_id'], $this->config->get('config_tax')),$data['currency'], '', false); | ||
| 223 | + | ||
| 224 | + if ($data['special']) { | ||
| 225 | + $data['special'] = $this->currency->format($this->tax->calculate($data['product_info']['special'], $data['product_info']['tax_class_id'], $this->config->get('config_tax')),$data['currency'], '', false); | ||
| 226 | + } | ||
| 227 | + | ||
| 228 | + // category | ||
| 229 | + $category = array(); | ||
| 230 | + | ||
| 231 | + foreach ($data['breadcrumbs'] as $breadcrumb) { | ||
| 232 | + if (strip_tags($breadcrumb['text'])) { | ||
| 233 | + $category[] = strip_tags($breadcrumb['text']); | ||
| 234 | + } | ||
| 235 | + } | ||
| 236 | + | ||
| 237 | + if (!empty($data['product_info']['product_id'])) { | ||
| 238 | + $data['product_url'] = $this->url->link('product/product', 'product_id='.$data['product_info']['product_id']); | ||
| 239 | + } | ||
| 240 | + | ||
| 241 | + if ($type == 'opengraph') { | ||
| 242 | + $data['thumb'] = $this->model_tool_image->resize($data['product_info']['image'], 1024, 1024); | ||
| 243 | + } | ||
| 244 | + | ||
| 245 | + $data['category'] = implode(' » ', $category); | ||
| 246 | + | ||
| 247 | + // reviews | ||
| 248 | + $data['reviews'] = array(); | ||
| 249 | + | ||
| 250 | + if (!empty($config['reviews']) && $type == 'microdata' && !empty($data['product_id'])) { | ||
| 251 | + $this->load->model('catalog/review'); | ||
| 252 | + $data['reviews'] = $this->model_catalog_review->getReviewsByProductId($data['product_id']); | ||
| 253 | + } | ||
| 254 | + | ||
| 255 | + $data['microdata_desc'] = $this->config->get('mlseo_microdata_desc'); | ||
| 256 | + } else if ($page == 'home') { | ||
| 257 | + $seo_meta = $this->config->get('mlseo_store'); | ||
| 258 | + if (isset($seo_meta[$this->config->get('config_store_id').$this->config->get('config_language_id')])) { | ||
| 259 | + $seo_meta = $seo_meta[$this->config->get('config_store_id').$this->config->get('config_language_id')]; | ||
| 260 | + } | ||
| 261 | + | ||
| 262 | + $data['url'] = $this->url->link('common/home'); | ||
| 263 | + | ||
| 264 | + $this->load->model('tool/image'); | ||
| 265 | + | ||
| 266 | + $logo = $this->config->get('config_logo'); | ||
| 267 | + $data['logo'] = ''; | ||
| 268 | + | ||
| 269 | + | ||
| 270 | + if (is_array($logo) && isset($logo[$this->config->get('config_language_id')]) && is_file(DIR_IMAGE . $logo[$this->config->get('config_language_id')])) { | ||
| 271 | + // compatibility with multilingual logo extensions | ||
| 272 | + $data['logo'] = $this->model_tool_image->resize($logo[$this->config->get('config_language_id')], 300, 300); // 300x300 for fb | ||
| 273 | + } else if (is_string($logo) && is_file(DIR_IMAGE . $logo)) { | ||
| 274 | + $data['logo'] = $this->model_tool_image->resize($logo, 300, 300); // 300x300 for fb | ||
| 275 | + } else if ($this->config->get('config_image') && is_file(DIR_IMAGE . $this->config->get('config_image'))) { | ||
| 276 | + $data['logo'] = $this->model_tool_image->resize($this->config->get('config_image'), 300, 300); // 300x300 for fb | ||
| 277 | + } | ||
| 278 | + | ||
| 279 | + /* | ||
| 280 | + if (is_file(DIR_IMAGE . $this->config->get('config_logo'))) { | ||
| 281 | + $data['logo'] = $this->config->get('config_url') . 'image/' . $this->config->get('config_logo'); | ||
| 282 | + } else { | ||
| 283 | + $data['logo'] = ''; | ||
| 284 | + } | ||
| 285 | + */ | ||
| 286 | + | ||
| 287 | + if (!empty($seo_meta['seo_title'])) { | ||
| 288 | + $data['title'] = $seo_meta['seo_title']; | ||
| 289 | + } else if ($this->config->get('config_meta_title')) { | ||
| 290 | + $data['title'] = $this->config->get('config_meta_title'); | ||
| 291 | + } else { | ||
| 292 | + $data['title'] = $this->config->get('config_title'); | ||
| 293 | + } | ||
| 294 | + | ||
| 295 | + if (!empty($seo_meta['description'])) { | ||
| 296 | + $data['desc'] = $seo_meta['description']; | ||
| 297 | + } else { | ||
| 298 | + $data['desc'] = $this->config->get('config_meta_description'); | ||
| 299 | + } | ||
| 300 | + } else if ($page == 'category' && !empty($this->request->get['path'])) { | ||
| 301 | + $this->load->model('catalog/category'); | ||
| 302 | + $path = $this->request->get['path']; | ||
| 303 | + $category_ids = explode('_', $path); | ||
| 304 | + $category_id = end($category_ids); | ||
| 305 | + $category_info = $this->model_catalog_category->getCategory($category_id); | ||
| 306 | + | ||
| 307 | + if (!empty($category_info)) { | ||
| 308 | + $data['title'] = $category_info['name']; | ||
| 309 | + $this->load->model('tool/image'); | ||
| 310 | + $data['image'] = $this->model_tool_image->resize($category_info['image'], 300, 300); | ||
| 311 | + if (!empty($category_info['meta_description'])) { | ||
| 312 | + $data['description'] = strip_tags(html_entity_decode($category_info['meta_description'], ENT_QUOTES, 'UTF-8')); | ||
| 313 | + } else { | ||
| 314 | + $data['description'] = substr(strip_tags(html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8')), 0, 300); | ||
| 315 | + } | ||
| 316 | + $data['url'] = $this->url->link('product/category','path='.$path, true); | ||
| 317 | + } else { | ||
| 318 | + $data['title'] = ''; | ||
| 319 | + $data['image'] = ''; | ||
| 320 | + $data['description'] = ''; | ||
| 321 | + $data['url'] = ''; | ||
| 322 | + } | ||
| 323 | + | ||
| 324 | + } else if ($page == 'info') { | ||
| 325 | + if (!empty($this->request->get['information_id'])) { | ||
| 326 | + $information_id = (int)$this->request->get['information_id']; | ||
| 327 | + } else { | ||
| 328 | + $information_id = 0; | ||
| 329 | + } | ||
| 330 | + | ||
| 331 | + $data['url'] = $this->url->link('information/information', 'information_id='.$information_id); | ||
| 332 | + } | ||
| 333 | + | ||
| 334 | + // display | ||
| 335 | + $data['config_name'] = $this->config->get('config_name'); | ||
| 336 | + $data['type'] = $type; | ||
| 337 | + $data['page'] = $page; | ||
| 338 | + | ||
| 339 | + if ($type == 'microdata') { | ||
| 340 | + return $this->microdataJson($page, $data); | ||
| 341 | + } | ||
| 342 | + | ||
| 343 | + if (version_compare(VERSION, '3', '>=')) { | ||
| 344 | + $template = new Template('template', $this->registry); | ||
| 345 | + foreach ($data as $key => $value) { | ||
| 346 | + $template->set($key, $value); | ||
| 347 | + } | ||
| 348 | + | ||
| 349 | + $rf = new ReflectionMethod('Template', 'render'); | ||
| 350 | + | ||
| 351 | + if ($rf->getNumberOfParameters() > 2) { | ||
| 352 | + return $template->render('default/template/module/seopackage_rich_snippet', $this->registry, false); | ||
| 353 | + } else { | ||
| 354 | + return $template->render('default/template/module/seopackage_rich_snippet', false); | ||
| 355 | + } | ||
| 356 | + | ||
| 357 | + return $template->render('default/template/module/seopackage_rich_snippet'); | ||
| 358 | + } else if (version_compare(VERSION, '2.2', '>=')) { | ||
| 359 | + $template = new Template(version_compare(VERSION, '2.3', '>=') ? 'php': 'basic'); | ||
| 360 | + foreach ($data as $key => $value) { | ||
| 361 | + $template->set($key, $value); | ||
| 362 | + } | ||
| 363 | + return $template->render('default/template/module/seopackage_rich_snippet.tpl', null); // null is for compatibility with fastor theme | ||
| 364 | + } elseif (method_exists($this->load, 'view')) { | ||
| 365 | + return $this->load->view('default/template/module/seopackage_rich_snippet.tpl', $data); | ||
| 366 | + } else { | ||
| 367 | + $template = new Template(); | ||
| 368 | + $template->data = &$data; | ||
| 369 | + return $template->fetch('default/template/module/seopackage_rich_snippet.tpl'); | ||
| 370 | + } | ||
| 371 | + } | ||
| 372 | + | ||
| 373 | + public function getSeoDescription($type, $item_id) { | ||
| 374 | + $store_id = $this->config->get('mlseo_multistore') ? $this->config->get('config_store_id') : 0; | ||
| 375 | + | ||
| 376 | + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_".$type."_description d WHERE ".$this->db->escape($type)."_id = '" . (int)$item_id . "' AND store_id = '".(int) $store_id."' AND language_id = '".(int) $this->config->get('config_language_id')."'")->row; | ||
| 377 | + | ||
| 378 | + if (!empty($query['description'])) { | ||
| 379 | + $query['description'] = str_replace(array(HTTP_SERVER, HTTPS_SERVER), array($this->config->get('config_url'), $this->config->get('config_ssl')), $query['description']); | ||
| 380 | + } | ||
| 381 | + | ||
| 382 | + return $query; | ||
| 383 | + } | ||
| 384 | + | ||
| 385 | + public function microdataJson($page, $data) { | ||
| 386 | + $config = !empty($data['config']) ? $data['config'] : ''; | ||
| 387 | + $output = ''; | ||
| 388 | + | ||
| 389 | + if (empty($data['url'])) { | ||
| 390 | + if (!empty($this->request->server['HTTPS'])) { | ||
| 391 | + $data['url'] = $this->config->get('config_ssl'); | ||
| 392 | + } else { | ||
| 393 | + $data['url'] = $this->config->get('config_url'); | ||
| 394 | + } | ||
| 395 | + } | ||
| 396 | + | ||
| 397 | + if (empty($data['logo'])) { | ||
| 398 | + //$data['logo'] = $data['url'] . 'image/' . $this->config->get('config_logo'); | ||
| 399 | + $this->load->model('tool/image'); | ||
| 400 | + | ||
| 401 | + $logo = $this->config->get('config_logo'); | ||
| 402 | + $data['logo'] = ''; | ||
| 403 | + | ||
| 404 | + if (is_array($logo) && isset($logo[$this->config->get('config_language_id')]) && is_file(DIR_IMAGE . $logo[$this->config->get('config_language_id')])) { | ||
| 405 | + // compatibility with multilingual logo extensions | ||
| 406 | + $data['logo'] = $this->model_tool_image->resize($logo[$this->config->get('config_language_id')], 300, 300); // 300x300 for fb | ||
| 407 | + } else if (is_string($logo) && is_file(DIR_IMAGE . $logo)) { | ||
| 408 | + $data['logo'] = $this->model_tool_image->resize($logo, 300, 300); // 300x300 for fb | ||
| 409 | + } else if ($this->config->get('config_image') && is_file(DIR_IMAGE . $this->config->get('config_image'))) { | ||
| 410 | + $data['logo'] = $this->model_tool_image->resize($this->config->get('config_image'), 300, 300); // 300x300 for fb | ||
| 411 | + } | ||
| 412 | + } | ||
| 413 | + | ||
| 414 | + // Breadcrumbs | ||
| 415 | + if (in_array($page, array('product', 'category', 'manufacturer', 'information', 'contact')) && !empty($config['breadcrumbs'])) { | ||
| 416 | + $json = array(); | ||
| 417 | + $json['@context'] = 'http://schema.org'; | ||
| 418 | + $json['@type'] = 'BreadcrumbList'; | ||
| 419 | + | ||
| 420 | + if (!empty($data['breadcrumbs'])) { | ||
| 421 | + $pos = 1; | ||
| 422 | + foreach ($data['breadcrumbs'] as $breadcrumb) { | ||
| 423 | + $json['itemListElement'][] = array( | ||
| 424 | + '@type' => 'ListItem', | ||
| 425 | + 'position' => $pos++, | ||
| 426 | + 'item' => array( | ||
| 427 | + '@id' => urldecode($breadcrumb['href']), | ||
| 428 | + 'name' => strip_tags($breadcrumb['text']) ? html_entity_decode(strip_tags($breadcrumb['text']), ENT_QUOTES, 'UTF-8') : html_entity_decode($data['config_name'], ENT_QUOTES, 'UTF-8'), | ||
| 429 | + ), | ||
| 430 | + ); | ||
| 431 | + } | ||
| 432 | + } | ||
| 433 | + | ||
| 434 | + $output .= '<script type="application/ld+json">'.json_encode($json).'</script>'."\n"; | ||
| 435 | + } | ||
| 436 | + | ||
| 437 | + // Category | ||
| 438 | + if ($page == 'category' && !empty($config['category'])) { | ||
| 439 | + if (isset($this->request->get['path']) && !empty($config['cat_reviews'])) { | ||
| 440 | + $parts = explode('_', (string)$this->request->get['path']); | ||
| 441 | + | ||
| 442 | + $category_id = (int)array_pop($parts); | ||
| 443 | + | ||
| 444 | + $filter_data = array( | ||
| 445 | + 'filter_category_id' => $category_id, | ||
| 446 | + ); | ||
| 447 | + | ||
| 448 | + $product_total = $this->model_catalog_product->getTotalProducts($filter_data); | ||
| 449 | + | ||
| 450 | + $products = $this->model_catalog_product->getProducts($filter_data); | ||
| 451 | + | ||
| 452 | + $best_rating = $review_total = 0; | ||
| 453 | + | ||
| 454 | + foreach ($products as $product) { | ||
| 455 | + $review_total += $product['rating']; | ||
| 456 | + $best_rating = ($product['rating'] > $best_rating) ? $product['rating'] : $best_rating; | ||
| 457 | + /* | ||
| 458 | + foreach ($data['reviews'] as $review) { | ||
| 459 | + $json['review'][] = array( | ||
| 460 | + '@type' => 'Review', | ||
| 461 | + 'name' => !empty($data['product_info']['meta_title']) ? html_entity_decode($data['product_info']['meta_title'], ENT_QUOTES, 'UTF-8') : html_entity_decode($data['heading_title'], ENT_QUOTES, 'UTF-8'), | ||
| 462 | + 'itemReviewed' => !empty($data['product_info']['meta_title']) ? html_entity_decode($data['product_info']['meta_title'], ENT_QUOTES, 'UTF-8') : html_entity_decode($data['heading_title'], ENT_QUOTES, 'UTF-8'), | ||
| 463 | + 'author' => array( | ||
| 464 | + '@type' => 'Person', | ||
| 465 | + 'name' => '', | ||
| 466 | + ), | ||
| 467 | + 'reviewBody' => $review['text'], | ||
| 468 | + 'datePublished' => date('Y-m-d', strtotime($review['date_added'])), | ||
| 469 | + 'reviewRating' => array( | ||
| 470 | + '@type' => 'Rating', | ||
| 471 | + 'ratingValue' => $review['rating'], | ||
| 472 | + ), | ||
| 473 | + ); | ||
| 474 | + | ||
| 475 | + $review_total += $review['rating']; | ||
| 476 | + $best_rating = ($review['rating'] > $best_rating) ? $review['rating'] : $best_rating; | ||
| 477 | + } | ||
| 478 | + */ | ||
| 479 | + } | ||
| 480 | + | ||
| 481 | + if ($product_total > 0 && $review_total > 0) { | ||
| 482 | + $json = array(); | ||
| 483 | + | ||
| 484 | + $json['aggregateRating'] = array( | ||
| 485 | + '@type' => 'AggregateRating', | ||
| 486 | + 'ratingValue' => round($review_total / $product_total, 1), | ||
| 487 | + 'bestRating' => $best_rating, | ||
| 488 | + 'reviewCount' => $product_total, | ||
| 489 | + ); | ||
| 490 | + | ||
| 491 | + $output .= '<script type="application/ld+json">'.json_encode($json).'</script>'."\n"; | ||
| 492 | + } | ||
| 493 | + } | ||
| 494 | + } | ||
| 495 | + | ||
| 496 | + // Product | ||
| 497 | + if ($page == 'product' && !empty($config['product'])) { | ||
| 498 | + $json = array(); | ||
| 499 | + $json['@context'] = 'http://schema.org'; | ||
| 500 | + $json['@type'] = 'Product'; | ||
| 501 | + $json['url'] = $data['product_url']; | ||
| 502 | + $json['name'] = !empty($data['product_info']['meta_title']) ? html_entity_decode($data['product_info']['meta_title'], ENT_QUOTES, 'UTF-8') : html_entity_decode($data['heading_title'], ENT_QUOTES, 'UTF-8'); | ||
| 503 | + $json['category'] = html_entity_decode($data['category'], ENT_QUOTES, 'UTF-8'); | ||
| 504 | + $json['image'] = $data['thumb']; | ||
| 505 | + | ||
| 506 | + $has_idtentifier = false; | ||
| 507 | + | ||
| 508 | + if (!empty($config['model'])) { | ||
| 509 | + $json['model'] = $data['model']; | ||
| 510 | + } | ||
| 511 | + | ||
| 512 | + if (!empty($config['mpn']) && !empty($data['product_info']['mpn'])) { | ||
| 513 | + $json['mpn'] = $data['product_info']['mpn']; | ||
| 514 | + $has_idtentifier = true; | ||
| 515 | + } | ||
| 516 | + | ||
| 517 | + if (!empty($config['sku'])) { | ||
| 518 | + $json['sku'] = !empty($data['product_info']['sku']) ? $data['product_info']['sku'] : $data['model']; | ||
| 519 | + } | ||
| 520 | + | ||
| 521 | + if (!empty($config['upc']) && !empty($data['product_info']['upc'])) { | ||
| 522 | + $json['gtin12'] = $data['product_info']['upc']; | ||
| 523 | + $json['gtin'] = $data['product_info']['upc']; | ||
| 524 | + $has_idtentifier = true; | ||
| 525 | + } else if (!empty($config['ean']) && !empty($data['product_info']['ean'])) { | ||
| 526 | + $json['gtin'] = $data['product_info']['ean']; | ||
| 527 | + $json['gtin8'] = $data['product_info']['ean']; | ||
| 528 | + $has_idtentifier = true; | ||
| 529 | + } else if (!empty($config['jan']) && !empty($data['product_info']['jan'])) { | ||
| 530 | + $json['gtin'] = $data['product_info']['jan']; | ||
| 531 | + $has_idtentifier = true; | ||
| 532 | + } else if (!empty($config['isbn']) && !empty($data['product_info']['isbn'])) { | ||
| 533 | + //$json['gtin13'] = $data['product_info']['isbn']; | ||
| 534 | + $json['gtin'] = $data['product_info']['isbn']; | ||
| 535 | + $json['isbn'] = $data['product_info']['isbn']; | ||
| 536 | + $has_idtentifier = true; | ||
| 537 | + } | ||
| 538 | + | ||
| 539 | + if (!$has_idtentifier) { | ||
| 540 | + // google doesn't know that... although it is specified in docs | ||
| 541 | + //$json['identifier_exists'] = FALSE; | ||
| 542 | + } | ||
| 543 | + | ||
| 544 | + //if (!empty($config['desc'])) {} | ||
| 545 | + $json['description'] = strip_tags($data['product_info']['meta_description']); | ||
| 546 | + | ||
| 547 | + if (!empty($config['brand'])) { | ||
| 548 | + $json['manufacturer'] = strip_tags($data['product_info']['manufacturer']); | ||
| 549 | + $json['brand'] = array( | ||
| 550 | + '@type' => 'Brand', | ||
| 551 | + 'name' => strip_tags($data['product_info']['manufacturer']), | ||
| 552 | + ); | ||
| 553 | + } | ||
| 554 | + | ||
| 555 | + //var_dump($data); | ||
| 556 | + if ($data['special']) { | ||
| 557 | + $specialQuery = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = " . (int)$data['product_id'] . " AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1")->row; | ||
| 558 | + | ||
| 559 | + $json['offers'] = array( | ||
| 560 | + 'name' => !empty($data['product_info']['meta_title']) ? html_entity_decode($data['product_info']['meta_title'], ENT_QUOTES, 'UTF-8') : html_entity_decode($data['heading_title'], ENT_QUOTES, 'UTF-8'), | ||
| 561 | + 'url' => $data['product_url'], | ||
| 562 | + 'category' => $data['category'], | ||
| 563 | + 'price' => $data['special'], | ||
| 564 | + 'priceCurrency' => $data['currency'], | ||
| 565 | + 'itemCondition' => 'http://schema.org/NewCondition', | ||
| 566 | + 'seller' => array( | ||
| 567 | + '@type' => 'Organization', | ||
| 568 | + 'name' => $data['config_name'], | ||
| 569 | + ), | ||
| 570 | + ); | ||
| 571 | + | ||
| 572 | + if (isset($specialQuery['date_end']) && $specialQuery['date_end'] != '0000-00-00') { | ||
| 573 | + $json['offers']['priceValidUntil'] = $specialQuery['date_end']; | ||
| 574 | + } else { | ||
| 575 | + $json['offers']['priceValidUntil'] = date('Y-m-d', strtotime('+1 years', strtotime(date("Y-m-d ")))); | ||
| 576 | + } | ||
| 577 | + } else { | ||
| 578 | + $json['offers'] = array( | ||
| 579 | + 'name' => !empty($data['product_info']['meta_title']) ? html_entity_decode($data['product_info']['meta_title'], ENT_QUOTES, 'UTF-8') : html_entity_decode($data['heading_title'], ENT_QUOTES, 'UTF-8'), | ||
| 580 | + 'url' => $data['product_url'], | ||
| 581 | + 'category' => $data['category'], | ||
| 582 | + 'price' => $data['price'], | ||
| 583 | + 'priceCurrency' => $data['currency'], | ||
| 584 | + 'priceValidUntil' => date('Y-m-d', strtotime('+1 years', strtotime(date("Y-m-d ")))), | ||
| 585 | + 'itemCondition' => 'http://schema.org/NewCondition', | ||
| 586 | + 'seller' => array( | ||
| 587 | + '@type' => 'Organization', | ||
| 588 | + 'name' => $data['config_name'], | ||
| 589 | + ), | ||
| 590 | + ); | ||
| 591 | + } | ||
| 592 | + | ||
| 593 | + if ($data['product_info']['quantity'] > 0) { | ||
| 594 | + //$json['offers']['availability'] = 'https://schema.org/InStock'; | ||
| 595 | + $json['offers']['availability'] = 'InStock'; | ||
| 596 | + } else { | ||
| 597 | + $stockStatusQuery = $this->db->query("SELECT stock_status_id FROM " . DB_PREFIX . "product WHERE product_id = " . (int)$data['product_id'])->row; | ||
| 598 | + | ||
| 599 | + if (!empty($config['order_status'][$stockStatusQuery['stock_status_id']])) { | ||
| 600 | + //$json['offers']['availability'] = 'https://schema.org/'.$config['order_status'][$stockStatusQuery['stock_status_id']]; | ||
| 601 | + $json['offers']['availability'] = $config['order_status'][$stockStatusQuery['stock_status_id']]; | ||
| 602 | + } | ||
| 603 | + } | ||
| 604 | + | ||
| 605 | + if (!empty($config['reviews']) && count($data['reviews'])) { | ||
| 606 | + $best_rating = $review_total = 0; | ||
| 607 | + | ||
| 608 | + // get all reviews | ||
| 609 | + if (true) { | ||
| 610 | + $data['reviews'] = $this->model_catalog_review->getReviewsByProductId($data['product_id'], 0, 999999999999); | ||
| 611 | + } | ||
| 612 | + | ||
| 613 | + foreach ($data['reviews'] as $review) { | ||
| 614 | + $json['review'][] = array( | ||
| 615 | + '@type' => 'Review', | ||
| 616 | + 'name' => !empty($data['product_info']['meta_title']) ? html_entity_decode($data['product_info']['meta_title'], ENT_QUOTES, 'UTF-8') : html_entity_decode($data['heading_title'], ENT_QUOTES, 'UTF-8'), | ||
| 617 | + 'itemReviewed' => !empty($data['product_info']['meta_title']) ? html_entity_decode($data['product_info']['meta_title'], ENT_QUOTES, 'UTF-8') : html_entity_decode($data['heading_title'], ENT_QUOTES, 'UTF-8'), | ||
| 618 | + 'author' => array( | ||
| 619 | + '@type' => 'Person', | ||
| 620 | + 'name' => $review['author'], | ||
| 621 | + ), | ||
| 622 | + 'reviewBody' => $review['text'], | ||
| 623 | + 'datePublished' => date('Y-m-d', strtotime($review['date_added'])), | ||
| 624 | + 'reviewRating' => array( | ||
| 625 | + '@type' => 'Rating', | ||
| 626 | + 'ratingValue' => $review['rating'], | ||
| 627 | + ), | ||
| 628 | + ); | ||
| 629 | + | ||
| 630 | + $review_total += $review['rating']; | ||
| 631 | + $best_rating = ($review['rating'] > $best_rating) ? $review['rating'] : $best_rating; | ||
| 632 | + } | ||
| 633 | + | ||
| 634 | + $json['aggregateRating'] = array( | ||
| 635 | + '@type' => 'AggregateRating', | ||
| 636 | + 'ratingValue' => round($review_total / count($data['reviews']), 1), | ||
| 637 | + 'bestRating' => $best_rating, | ||
| 638 | + 'reviewCount' => count($data['reviews']), | ||
| 639 | + ); | ||
| 640 | + } | ||
| 641 | + | ||
| 642 | + $output .= '<script type="application/ld+json">'.json_encode($json).'</script>'."\n"; | ||
| 643 | + } | ||
| 644 | + | ||
| 645 | + // Organization | ||
| 646 | + if (in_array($page, array('home', 'contact')) && !empty($config['organization'])) { | ||
| 647 | + $json = array(); | ||
| 648 | + $json['@context'] = 'http://schema.org'; | ||
| 649 | + $json['@type'] = 'Organization'; | ||
| 650 | + $json['url'] = $data['url']; | ||
| 651 | + $json['logo'] = $data['logo']; | ||
| 652 | + | ||
| 653 | + if (!empty($config['organization_search'])) { | ||
| 654 | + $json['potentialAction'][] = array( | ||
| 655 | + '@type' => 'SearchAction', | ||
| 656 | + 'target' => urldecode($this->url->link('product/search', 'search={search_term_string}')), | ||
| 657 | + 'query-input' => 'required name=search_term_string', | ||
| 658 | + ); | ||
| 659 | + } | ||
| 660 | + | ||
| 661 | + if (!empty($config['contact'])) { | ||
| 662 | + foreach ($config['contact'] as $contact) { | ||
| 663 | + if (empty($contact['phone'])) continue; | ||
| 664 | + | ||
| 665 | + $json['contactPoint'][] = array( | ||
| 666 | + '@type' => 'ContactPoint', | ||
| 667 | + 'telephone' => $contact['phone'], | ||
| 668 | + 'contactType' => $contact['type'], | ||
| 669 | + ); | ||
| 670 | + } | ||
| 671 | + } | ||
| 672 | + | ||
| 673 | + $output .= '<script type="application/ld+json">'.json_encode($json).'</script>'."\n"; | ||
| 674 | + } | ||
| 675 | + | ||
| 676 | + // Store | ||
| 677 | + if (in_array($page, array('home', 'contact')) && !empty($config['store'])) { | ||
| 678 | + $json = array(); | ||
| 679 | + $json['@context'] = 'http://schema.org'; | ||
| 680 | + $json['@type'] = 'Store'; | ||
| 681 | + $json['url'] = $data['url']; | ||
| 682 | + $json['name'] = $data['config_name']; | ||
| 683 | + $json['image'] = $data['logo']; | ||
| 684 | + | ||
| 685 | + if (!empty($config['store_logo'])) { | ||
| 686 | + $json['logo'] = $data['logo']; | ||
| 687 | + } | ||
| 688 | + | ||
| 689 | + if (!empty($config['store_mail'])) { | ||
| 690 | + $json['email'] = $this->config->get('config_email'); | ||
| 691 | + } | ||
| 692 | + | ||
| 693 | + if (!empty($config['store_phone'])) { | ||
| 694 | + $json['telephone'] = $this->config->get('config_telephone'); | ||
| 695 | + } | ||
| 696 | + | ||
| 697 | + if (!empty($config['address'])) { | ||
| 698 | + if (!empty($config['address_street'])) $json['address']['streetAddress'] = $config['address_street']; | ||
| 699 | + if (!empty($config['address_city'])) $json['address']['addressLocality'] = $config['address_city']; | ||
| 700 | + if (!empty($config['address_region'])) $json['address']['addressRegion'] = $config['address_region']; | ||
| 701 | + if (!empty($config['address_code'])) $json['address']['postalCode'] = $config['address_code']; | ||
| 702 | + if (!empty($config['address_country'])) $json['address']['addressCountry'] = $config['address_country']; | ||
| 703 | + } | ||
| 704 | + | ||
| 705 | + foreach ($config['same_as'] as $same_as) { | ||
| 706 | + if (empty($same_as)) continue; | ||
| 707 | + | ||
| 708 | + $json['sameAs'][] = $same_as; | ||
| 709 | + } | ||
| 710 | + | ||
| 711 | + if (!empty($config['pricerange'])) { | ||
| 712 | + $json['priceRange'][] = $config['pricerange']; | ||
| 713 | + } | ||
| 714 | + | ||
| 715 | + $output .= '<script type="application/ld+json">'.json_encode($json).'</script>'."\n"; | ||
| 716 | + } | ||
| 717 | + | ||
| 718 | + // Website | ||
| 719 | + if (in_array($page, array('home', 'contact')) && !empty($config['website'])) { | ||
| 720 | + $json = array(); | ||
| 721 | + $json['@context'] = 'http://schema.org'; | ||
| 722 | + $json['@type'] = 'WebSite'; | ||
| 723 | + $json['url'] = $data['url']; | ||
| 724 | + | ||
| 725 | + if (!empty($config['website_search'])) { | ||
| 726 | + $json['potentialAction'][] = array( | ||
| 727 | + '@type' => 'SearchAction', | ||
| 728 | + 'target' => urldecode($this->url->link('product/search', 'search={search_term_string}')), | ||
| 729 | + 'query-input' => 'required name=search_term_string', | ||
| 730 | + ); | ||
| 731 | + } | ||
| 732 | + | ||
| 733 | + $output .= '<script type="application/ld+json">'.json_encode($json).'</script>'."\n"; | ||
| 734 | + } | ||
| 735 | + | ||
| 736 | + // Place | ||
| 737 | + if (in_array($page, array('home', 'contact')) && !empty($config['place'])) { | ||
| 738 | + $json = array(); | ||
| 739 | + $json['@context'] = 'http://schema.org'; | ||
| 740 | + $json['@type'] = 'Place'; | ||
| 741 | + $json['name'] = $data['config_name']; | ||
| 742 | + | ||
| 743 | + if (!empty($config['gps_lat']) && !empty($config['gps_long'])) { | ||
| 744 | + $json['geo'] = array( | ||
| 745 | + '@type' => 'GeoCoordinates', | ||
| 746 | + 'latitude' => $config['gps_lat'], | ||
| 747 | + 'longitude' => $config['gps_long'], | ||
| 748 | + ); | ||
| 749 | + } | ||
| 750 | + | ||
| 751 | + $output .= '<script type="application/ld+json">'.json_encode($json).'</script>'."\n"; | ||
| 752 | + } | ||
| 753 | + | ||
| 754 | + if ($output) { | ||
| 755 | + $output = "<!-- Microdata -->\n".$output."\n"; | ||
| 756 | + } | ||
| 757 | + | ||
| 758 | + return $output; | ||
| 759 | + } | ||
| 760 | + | ||
| 761 | + public function checkCanonical() { | ||
| 762 | + if (!$this->config->get('mlseo_canonical')) { | ||
| 763 | + return; | ||
| 764 | + } | ||
| 765 | + | ||
| 766 | + foreach ($this->document->getLinks() as $link) { | ||
| 767 | + if ($link['rel'] == 'canonical') { | ||
| 768 | + return; | ||
| 769 | + } | ||
| 770 | + } | ||
| 771 | + | ||
| 772 | + /*/ no canonical for search page | ||
| 773 | + if (!empty($this->request->get['route']) && $this->request->get['route'] == 'product/search') { | ||
| 774 | + return; | ||
| 775 | + } */ | ||
| 776 | + | ||
| 777 | + if (isset($this->request->get['route']) && $this->request->get['route'] != 'common/home') { | ||
| 778 | + list($ctrl) = explode('/', $this->request->get['route']); | ||
| 779 | + | ||
| 780 | + if (in_array($ctrl, array('account', 'information', 'affiliate', 'checkout'))) { | ||
| 781 | + $data = $this->request->get; | ||
| 782 | + | ||
| 783 | + | ||
| 784 | + $route = $data['route']; | ||
| 785 | + $params = ''; | ||
| 786 | + | ||
| 787 | + unset($data['_route_'], $data['route']); | ||
| 788 | + | ||
| 789 | + if ($data) { | ||
| 790 | + $params = urldecode(http_build_query($data, '', '&')); | ||
| 791 | + } | ||
| 792 | + | ||
| 793 | + $this->document->addLink($this->url->link($route, $params), 'canonical'); | ||
| 794 | + } | ||
| 795 | + } else { | ||
| 796 | + $this->document->addLink($this->url->link('common/home'), 'canonical'); | ||
| 797 | + } | ||
| 798 | + } | ||
| 799 | + | ||
| 800 | + public function addUrl404($url) { | ||
| 801 | + $url = strip_tags($url); // prevent xss | ||
| 802 | + | ||
| 803 | + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_404 WHERE query = '" . $this->db->escape($url) . "'")->row; | ||
| 804 | + | ||
| 805 | + $referer = !empty($_SERVER['HTTP_REFERER']) ? preg_replace('/^www\./', '', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST)) : ''; | ||
| 806 | + $agent = !empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; | ||
| 807 | + | ||
| 808 | + if (!empty($agent)) { | ||
| 809 | + if (strpos($agent, 'Googlebot') !== false) { | ||
| 810 | + $agent = 'Google'; | ||
| 811 | + } else if (strpos($agent, 'PetalBot') !== false) { | ||
| 812 | + $agent = 'PetalSearch'; | ||
| 813 | + } else if (strpos($agent, 'Applebot') !== false) { | ||
| 814 | + $agent = 'Apple'; | ||
| 815 | + } else if (strpos($agent, 'Yeti') !== false) { | ||
| 816 | + $agent = 'Yeti'; | ||
| 817 | + } else if (strpos($agent, 'coccocbot') !== false) { | ||
| 818 | + $agent = 'CocCoc'; | ||
| 819 | + } else if (strpos($agent, 'Bingbot') !== false) { | ||
| 820 | + $agent = 'Bing'; | ||
| 821 | + } else if (strpos($agent, 'Slurp') !== false) { | ||
| 822 | + $agent = 'Yahoo'; | ||
| 823 | + } else if (strpos($agent, 'DuckDuckBot') !== false) { | ||
| 824 | + $agent = 'DuckDuckGo'; | ||
| 825 | + } else if (strpos($agent, 'Baiduspider') !== false) { | ||
| 826 | + $agent = 'Baidu'; | ||
| 827 | + } else if (strpos($agent, 'YandexBot') !== false) { | ||
| 828 | + $agent = 'Yandex'; | ||
| 829 | + } else if (strpos($agent, 'Sogou') !== false) { | ||
| 830 | + $agent = 'Sogou'; | ||
| 831 | + } else if (strpos($agent, 'Exabot') !== false) { | ||
| 832 | + $agent = 'Exalead'; | ||
| 833 | + } else if (strpos($agent, 'facebot') !== false) { | ||
| 834 | + $agent = 'Facebook'; | ||
| 835 | + } else if (strpos($agent, 'ia_archiver') !== false) { | ||
| 836 | + $agent = 'Alexa'; | ||
| 837 | + } else if (strpos($agent, 'SeznamBot') !== false) { | ||
| 838 | + $agent = 'Seznam'; | ||
| 839 | + } else { | ||
| 840 | + $agent = ''; | ||
| 841 | + } | ||
| 842 | + } | ||
| 843 | + | ||
| 844 | + if (!empty($agent)) { | ||
| 845 | + $referer = 'Bot:'.$agent; | ||
| 846 | + } | ||
| 847 | + | ||
| 848 | + if (isset($query['count'])) { | ||
| 849 | + if (empty($query['referer'])) { | ||
| 850 | + $query['referer'] = $referer; | ||
| 851 | + } else if ($referer && !empty($query['referer'])) { | ||
| 852 | + if (strpos($query['referer'], $referer) === false) { | ||
| 853 | + $query['referer'] = $query['referer'] . ', ' . $referer; | ||
| 854 | + } | ||
| 855 | + } | ||
| 856 | + | ||
| 857 | + $this->db->query("UPDATE " . DB_PREFIX . "url_404 SET count = '".($query['count']+1)."', referer = '". $this->db->escape($query['referer']) . "', date_accessed = NOW() WHERE url_404_id = '". $query['url_404_id'] . "'"); | ||
| 858 | + } else { | ||
| 859 | + $this->db->query("INSERT INTO " . DB_PREFIX . "url_404 SET query = '". $this->db->escape($url) . "', referer = '". $this->db->escape($referer) . "', count = 1"); | ||
| 860 | + } | ||
| 861 | + } | ||
| 862 | + | ||
| 863 | + public function ggAnalytics() { | ||
| 864 | + $ggScript = ''; | ||
| 865 | + | ||
| 866 | + $seo_meta = $this->config->get('mlseo_store'); | ||
| 867 | + /* | ||
| 868 | + if (!empty($seo_meta[$this->config->get('config_store_id')]['gg_analytics']) && !empty($seo_meta[$this->config->get('config_store_id')]['gg_enhanced'])) { | ||
| 869 | + $this->document->addScript('index.php?route=geekodev/analytics', 'footer'); | ||
| 870 | + //$ggScript .= '<script src="'.$this->url->link('geekodev/analytics').'" type="text/javascript"></script>'."\n"; | ||
| 871 | + } | ||
| 872 | + */ | ||
| 873 | + if (!empty($seo_meta[$this->config->get('config_store_id')]['gg_analytics']) && !empty($seo_meta[$this->config->get('config_store_id')]['analytics'])) { | ||
| 874 | + $ggAnalyticsCode = html_entity_decode($seo_meta[$this->config->get('config_store_id')]['analytics'], ENT_QUOTES, 'UTF-8'); | ||
| 875 | + | ||
| 876 | + // Google Analytics 4 | ||
| 877 | + if (substr($ggAnalyticsCode, 0, 2) == 'G-') { | ||
| 878 | + if (true) { | ||
| 879 | + $debug = ",{'debug_mode':true}"; | ||
| 880 | + } else { | ||
| 881 | + $debug = ''; | ||
| 882 | + } | ||
| 883 | + | ||
| 884 | + $ggScript .= "<script async src=\"https://www.googletagmanager.com/gtag/js?id=".$ggAnalyticsCode."\"></script> | ||
| 885 | +<script> | ||
| 886 | + window.dataLayer = window.dataLayer || []; | ||
| 887 | + function gtag(){dataLayer.push(arguments);} | ||
| 888 | + gtag('js', new Date()); | ||
| 889 | + gtag('config', '".$ggAnalyticsCode."'".$debug."); | ||
| 890 | +</script> | ||
| 891 | +"; | ||
| 892 | + | ||
| 893 | + // Google Analytics 3 | ||
| 894 | + } else { | ||
| 895 | + $ggScript .= '<script async src="https://www.googletagmanager.com/gtag/js?id='.$ggAnalyticsCode.'"></script>'."\n"; | ||
| 896 | + $ggScript .= "<script>window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '".$ggAnalyticsCode."');</script>\n"; | ||
| 897 | + } | ||
| 898 | + } | ||
| 899 | + | ||
| 900 | + if (!empty($seo_meta[$this->config->get('config_store_id')]['gg_adwords']) && !empty($seo_meta[$this->config->get('config_store_id')]['adwords'])) { | ||
| 901 | + $ggAdwordsCode = $seo_meta[$this->config->get('config_store_id')]['adwords']; | ||
| 902 | + | ||
| 903 | + $ggScript .= '<script async src="https://www.googletagmanager.com/gtag/js?id='.$ggAdwordsCode.'"></script>'."\n"; | ||
| 904 | + $ggScript .= "<script>window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '".$ggAdwordsCode."');</script>\n"; | ||
| 905 | + } | ||
| 906 | + | ||
| 907 | + if (!empty($seo_meta[$this->config->get('config_store_id')]['gg_analytics']) && !empty($seo_meta[$this->config->get('config_store_id')]['analytics'])) { | ||
| 908 | + $ggAnalyticsCode = html_entity_decode($seo_meta[$this->config->get('config_store_id')]['analytics'], ENT_QUOTES, 'UTF-8'); | ||
| 909 | + | ||
| 910 | + // Google Analytics 4 | ||
| 911 | + if (substr($ggAnalyticsCode, 0, 2) == 'G-') { | ||
| 912 | + // transaction complete | ||
| 913 | + if (isset($this->request->get['route']) && in_array($this->request->get['route'], array('checkout/success'))) { | ||
| 914 | + if (!empty($seo_meta[$this->config->get('config_store_id')]['gg_analytics']) && !empty($seo_meta[$this->config->get('config_store_id')]['gg_enhanced'])) { | ||
| 915 | + if (isset($this->session->data['ggAnalytics_order_id'])) { | ||
| 916 | + $order_id = $this->session->data['ggAnalytics_order_id']; | ||
| 917 | + unset($this->session->data['ggAnalytics_order_id']); | ||
| 918 | + | ||
| 919 | + $trackData = $this->getTrackData(array('action' => 'purchase', 'order_id' => $order_id)); | ||
| 920 | + | ||
| 921 | + $ggScript .= " <script>gtag('event', 'purchase', ".json_encode($trackData).");</script>\n"; | ||
| 922 | + } | ||
| 923 | + } | ||
| 924 | + } else if (isset($this->request->get['route']) && in_array($this->request->get['route'], array('product/product')) && !empty($this->request->get['product_id'])) { | ||
| 925 | + if (!empty($seo_meta[$this->config->get('config_store_id')]['gg_analytics']) && !empty($seo_meta[$this->config->get('config_store_id')]['gg_enhanced'])) { | ||
| 926 | + $trackData = $this->getTrackData(array('action' => 'item_view', 'product_id' => $this->request->get['product_id'])); | ||
| 927 | + | ||
| 928 | + $ggScript .= " <script>gtag('event', 'item_view', ".json_encode($trackData).");</script>\n"; | ||
| 929 | + } | ||
| 930 | + } | ||
| 931 | + | ||
| 932 | + // Google Analytics 3 | ||
| 933 | + } else { | ||
| 934 | + $ggScript .= "<script> | ||
| 935 | +(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | ||
| 936 | +(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | ||
| 937 | +m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | ||
| 938 | +})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); | ||
| 939 | +ga('create', '".$ggAnalyticsCode."', 'auto');\n"; | ||
| 940 | + | ||
| 941 | + if (!empty($seo_meta[$this->config->get('config_store_id')]['gg_enhanced'])) { | ||
| 942 | + $ggScript .= "ga('require', 'ec');\n"; | ||
| 943 | + } | ||
| 944 | + | ||
| 945 | + $ggScript .= "ga('send', 'pageview');\n"; | ||
| 946 | + | ||
| 947 | + if (isset($this->request->get['route']) && in_array($this->request->get['route'], array('checkout/checkout'))) { | ||
| 948 | + //$ggScript .= "gkdEctTrackCheckout(1, 'Enter checkout');\n"; | ||
| 949 | + } | ||
| 950 | + | ||
| 951 | + if (isset($this->request->get['route']) && in_array($this->request->get['route'], array('account/login', 'account/register', 'checkout/cart', 'checkout/checkout'))) { | ||
| 952 | + list($cat, $action) = explode('/', $this->request->get['route']); | ||
| 953 | + $ggScript .= "ga('send', 'event', '".ucfirst($cat)."', '".ucfirst($action)."');\n"; | ||
| 954 | + } | ||
| 955 | + | ||
| 956 | + // transaction complete | ||
| 957 | + if (isset($this->request->get['route']) && in_array($this->request->get['route'], array('checkout/success'))) { | ||
| 958 | + if (!empty($seo_meta[$this->config->get('config_store_id')]['gg_analytics']) && !empty($seo_meta[$this->config->get('config_store_id')]['gg_enhanced'])) { | ||
| 959 | + if (isset($this->session->data['ggAnalytics_order_id'])) { | ||
| 960 | + $order_id = $this->session->data['ggAnalytics_order_id']; | ||
| 961 | + unset($this->session->data['ggAnalytics_order_id']); | ||
| 962 | + | ||
| 963 | + $this->load->model('checkout/order'); | ||
| 964 | + $this->load->model('account/order'); | ||
| 965 | + | ||
| 966 | + $order_info = $this->model_checkout_order->getOrder($order_id); | ||
| 967 | + | ||
| 968 | + if ($order_info) { | ||
| 969 | + $subTotal = $tax = $shipping = 0; | ||
| 970 | + $coupon = ''; | ||
| 971 | + | ||
| 972 | + foreach ($this->model_account_order->getOrderTotals($order_id) as $order_total) { | ||
| 973 | + if ($order_total['code'] == 'tax') { | ||
| 974 | + $tax += $order_total['value']; | ||
| 975 | + } elseif($order_total['code'] == 'shipping') { | ||
| 976 | + $shipping += $order_total['value']; | ||
| 977 | + } elseif($order_total['code'] == 'sub_total') { | ||
| 978 | + $subTotal += $order_total['value']; | ||
| 979 | + } elseif($order_total['code'] == 'coupon') { | ||
| 980 | + $coupon = $order_total['title']; | ||
| 981 | + } | ||
| 982 | + } | ||
| 983 | + | ||
| 984 | + // calculate total and prices | ||
| 985 | + if (1 || !empty($seo_meta[$this->config->get('config_store_id')]['gg_tax'])) { | ||
| 986 | + $total = $order_info['total']; | ||
| 987 | + } else { | ||
| 988 | + $total = $subTotal; | ||
| 989 | + } | ||
| 990 | + | ||
| 991 | + if (!empty($seo_meta[$this->config->get('config_store_id')]['gg_currency'])) { | ||
| 992 | + $total = $this->currency->convert($this->currency->format($total, $order_info['currency_code'], $order_info['currency_value'], false), $order_info['currency_code'], $seo_meta[$this->config->get('config_store_id')]['gg_currency']); | ||
| 993 | + $tax = $this->currency->convert($this->currency->format($tax, $order_info['currency_code'], $order_info['currency_value'], false), $order_info['currency_code'], $seo_meta[$this->config->get('config_store_id')]['gg_currency']); | ||
| 994 | + $shipping = $this->currency->convert($this->currency->format($shipping, $order_info['currency_code'], $order_info['currency_value'], false), $order_info['currency_code'], $seo_meta[$this->config->get('config_store_id')]['gg_currency']); | ||
| 995 | + } else { | ||
| 996 | + $total = $this->currency->format($total, $order_info['currency_code'], $order_info['currency_value'], false); | ||
| 997 | + $tax = $this->currency->format($tax, $order_info['currency_code'], $order_info['currency_value'], false); | ||
| 998 | + $shipping = $this->currency->format($shipping, $order_info['currency_code'], $order_info['currency_value'], false); | ||
| 999 | + } | ||
| 1000 | + | ||
| 1001 | + $total = round($total, 2); | ||
| 1002 | + $tax = round($tax, 2); | ||
| 1003 | + | ||
| 1004 | + $purchase = array( | ||
| 1005 | + 'id' => $order_info['order_id'], | ||
| 1006 | + 'revenue' => $total, | ||
| 1007 | + 'tax' => $tax, | ||
| 1008 | + 'shipping' => $shipping, | ||
| 1009 | + 'coupon' => $coupon, | ||
| 1010 | + ); | ||
| 1011 | + | ||
| 1012 | + if (!empty($order_info['affiliate_id'])) { | ||
| 1013 | + $affiliate_id = $order_info['affiliate_id']; | ||
| 1014 | + | ||
| 1015 | + if (version_compare(VERSION, '3', '>=')) { | ||
| 1016 | + $this->load->model('account/customer'); | ||
| 1017 | + $affiliate_info = $this->model_account_customer->getAffiliate($affiliate_id); | ||
| 1018 | + } else { | ||
| 1019 | + $this->load->model('affiliate/affiliate'); | ||
| 1020 | + $affiliate_info = $this->model_affiliate_affiliate->getAffiliate($affiliate_id); | ||
| 1021 | + } | ||
| 1022 | + | ||
| 1023 | + $purchase['affiliation'] = $affiliate_info['code']; | ||
| 1024 | + } | ||
| 1025 | + | ||
| 1026 | + $ggScript .= "ga('ec:setAction', 'purchase'," . json_encode($purchase) . ");\n"; | ||
| 1027 | + | ||
| 1028 | + // set track products | ||
| 1029 | + $trackProducts = $this->getTrackData(array('order_id' => $order_id)); | ||
| 1030 | + | ||
| 1031 | + foreach($trackProducts as $prod) { | ||
| 1032 | + $ggScript .= "ga('ec:addProduct', " . json_encode($prod) . ");\n"; | ||
| 1033 | + } | ||
| 1034 | + } | ||
| 1035 | + } | ||
| 1036 | + } | ||
| 1037 | + } | ||
| 1038 | + | ||
| 1039 | + $ggScript .= "if (window.performance) { | ||
| 1040 | + var timeSincePageLoad = Math.round(performance.now()); | ||
| 1041 | + ga('send', 'timing', 'Page Load Time', 'load', timeSincePageLoad); | ||
| 1042 | + }"; | ||
| 1043 | + | ||
| 1044 | + $ggScript .= "</script>"; | ||
| 1045 | + } | ||
| 1046 | + } | ||
| 1047 | + | ||
| 1048 | + if (!empty($ggScript)) { | ||
| 1049 | + $this->document->addSeoMeta("\n<!-- gkdAnalytics -->\n".$ggScript."\n\n"); | ||
| 1050 | + } | ||
| 1051 | + | ||
| 1052 | + if (!$this->config->get('mlseo_hreflang')) { | ||
| 1053 | + return; | ||
| 1054 | + } | ||
| 1055 | + | ||
| 1056 | + if (!empty($seo_meta[$this->config->get('config_store_id')]['gg_analytics']) && !empty($seo_meta[$this->config->get('config_store_id')]['gg_enhanced'])) { | ||
| 1057 | + } | ||
| 1058 | + } | ||
| 1059 | + | ||
| 1060 | + public function getTrackData($data = array()) { | ||
| 1061 | + $json = array(); | ||
| 1062 | + | ||
| 1063 | + $json['currency'] = $this->session->data['currency']; | ||
| 1064 | + | ||
| 1065 | + if (!empty($this->request->post['action'])) { | ||
| 1066 | + $action = $this->request->post['action']; | ||
| 1067 | + } else if (!empty($data['action'])) { | ||
| 1068 | + $action = $data['action']; | ||
| 1069 | + } else { | ||
| 1070 | + $action = 'default'; | ||
| 1071 | + } | ||
| 1072 | + | ||
| 1073 | + $order_products_qty = array(); | ||
| 1074 | + | ||
| 1075 | + if (!empty($this->request->post['cart'])) { | ||
| 1076 | + $this->request->post['pid'] = array(); | ||
| 1077 | + | ||
| 1078 | + foreach($this->cart->getProducts() as $prod) { | ||
| 1079 | + $this->request->post['pid'][] = $prod['product_id']; | ||
| 1080 | + } | ||
| 1081 | + } else if (!empty($data['order_id'])) { | ||
| 1082 | + $this->request->post['pid'] = array(); | ||
| 1083 | + | ||
| 1084 | + $this->load->model('checkout/order'); | ||
| 1085 | + $this->load->model('account/order'); | ||
| 1086 | + | ||
| 1087 | + $order_info = $this->model_checkout_order->getOrder($data['order_id']); | ||
| 1088 | + $order_products = $this->model_account_order->getOrderProducts($data['order_id']); | ||
| 1089 | + foreach($order_products as $prod) { | ||
| 1090 | + $order_products_qty[$prod['product_id']] = $prod['quantity']; | ||
| 1091 | + $this->request->post['pid'][] = $prod['product_id']; | ||
| 1092 | + } | ||
| 1093 | + } else if (!empty($data['product_id'])) { | ||
| 1094 | + $this->request->post['pid'] = array($data['product_id']); | ||
| 1095 | + } | ||
| 1096 | + | ||
| 1097 | + // purchase data | ||
| 1098 | + if ($action == 'purchase' && !empty($order_info)) { | ||
| 1099 | + $subTotal = $tax = $shipping = 0; | ||
| 1100 | + $coupon = ''; | ||
| 1101 | + | ||
| 1102 | + foreach ($this->model_account_order->getOrderTotals($order_info['order_id']) as $order_total) { | ||
| 1103 | + if ($order_total['code'] == 'tax') { | ||
| 1104 | + $tax += $order_total['value']; | ||
| 1105 | + } elseif($order_total['code'] == 'shipping') { | ||
| 1106 | + $shipping += $order_total['value']; | ||
| 1107 | + } elseif($order_total['code'] == 'sub_total') { | ||
| 1108 | + $subTotal += $order_total['value']; | ||
| 1109 | + } elseif($order_total['code'] == 'coupon') { | ||
| 1110 | + $coupon = $order_total['title']; | ||
| 1111 | + } | ||
| 1112 | + } | ||
| 1113 | + | ||
| 1114 | + // calculate total and prices | ||
| 1115 | + if (1 || !empty($seo_meta[$this->config->get('config_store_id')]['gg_tax'])) { | ||
| 1116 | + $total = $order_info['total']; | ||
| 1117 | + } else { | ||
| 1118 | + $total = $subTotal; | ||
| 1119 | + } | ||
| 1120 | + | ||
| 1121 | + if (!empty($seo_meta[$this->config->get('config_store_id')]['gg_currency'])) { | ||
| 1122 | + $total = $this->currency->convert($this->currency->format($total, $order_info['currency_code'], $order_info['currency_value'], false), $order_info['currency_code'], $seo_meta[$this->config->get('config_store_id')]['gg_currency']); | ||
| 1123 | + $tax = $this->currency->convert($this->currency->format($tax, $order_info['currency_code'], $order_info['currency_value'], false), $order_info['currency_code'], $seo_meta[$this->config->get('config_store_id')]['gg_currency']); | ||
| 1124 | + $shipping = $this->currency->convert($this->currency->format($shipping, $order_info['currency_code'], $order_info['currency_value'], false), $order_info['currency_code'], $seo_meta[$this->config->get('config_store_id')]['gg_currency']); | ||
| 1125 | + } else { | ||
| 1126 | + $total = $this->currency->format($total, $order_info['currency_code'], $order_info['currency_value'], false); | ||
| 1127 | + $tax = $this->currency->format($tax, $order_info['currency_code'], $order_info['currency_value'], false); | ||
| 1128 | + $shipping = $this->currency->format($shipping, $order_info['currency_code'], $order_info['currency_value'], false); | ||
| 1129 | + } | ||
| 1130 | + | ||
| 1131 | + $total = round($total, 2); | ||
| 1132 | + $tax = round($tax, 2); | ||
| 1133 | + | ||
| 1134 | + $json = array( | ||
| 1135 | + 'transaction_id' => $order_info['order_id'], | ||
| 1136 | + 'currency' => $order_info['currency_code'], | ||
| 1137 | + 'value' => $total, | ||
| 1138 | + 'tax' => $tax, | ||
| 1139 | + ); | ||
| 1140 | + | ||
| 1141 | + if (!empty($shipping)) { | ||
| 1142 | + $json['shipping'] = $shipping; | ||
| 1143 | + } | ||
| 1144 | + | ||
| 1145 | + if (!empty($coupon)) { | ||
| 1146 | + $json['coupon'] = $coupon; | ||
| 1147 | + } | ||
| 1148 | + | ||
| 1149 | + if (!empty($order_info['affiliate_id'])) { | ||
| 1150 | + $affiliate_id = $order_info['affiliate_id']; | ||
| 1151 | + | ||
| 1152 | + if (version_compare(VERSION, '3', '>=')) { | ||
| 1153 | + $this->load->model('account/customer'); | ||
| 1154 | + $affiliate_info = $this->model_account_customer->getAffiliate($affiliate_id); | ||
| 1155 | + } else { | ||
| 1156 | + $this->load->model('affiliate/affiliate'); | ||
| 1157 | + $affiliate_info = $this->model_affiliate_affiliate->getAffiliate($affiliate_id); | ||
| 1158 | + } | ||
| 1159 | + | ||
| 1160 | + $purchase['affiliation'] = $affiliate_info['code']; | ||
| 1161 | + } | ||
| 1162 | + } | ||
| 1163 | + | ||
| 1164 | + // items | ||
| 1165 | + if (!empty($this->request->post['pid'])) { | ||
| 1166 | + $this->load->model('catalog/product'); | ||
| 1167 | + $this->load->model('catalog/category'); | ||
| 1168 | + $this->load->model('tool/path_manager'); | ||
| 1169 | + | ||
| 1170 | + foreach ((array) $this->request->post['pid'] as $product_id) { | ||
| 1171 | + if (version_compare(VERSION, '3', '>=') && $action == 'remove') { | ||
| 1172 | + $cart_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND cart_id = '" . (int)$product_id . "'")->row; | ||
| 1173 | + | ||
| 1174 | + if (isset($cart_query['product_id'])) { | ||
| 1175 | + $product_id = $cart_query['product_id']; | ||
| 1176 | + } | ||
| 1177 | + } | ||
| 1178 | + | ||
| 1179 | + $product_info = $this->model_catalog_product->getProduct($product_id); | ||
| 1180 | + | ||
| 1181 | + if ($product_info) { | ||
| 1182 | + if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) { | ||
| 1183 | + $data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency'], '', false); | ||
| 1184 | + } else { | ||
| 1185 | + $data['price'] = false; | ||
| 1186 | + } | ||
| 1187 | + | ||
| 1188 | + if ((float)$product_info['special']) { | ||
| 1189 | + $data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency'], '', false); | ||
| 1190 | + } else { | ||
| 1191 | + $data['special'] = false; | ||
| 1192 | + } | ||
| 1193 | + | ||
| 1194 | + $path = $this->model_tool_path_manager->getOneProductPath($product_info['product_id']); | ||
| 1195 | + | ||
| 1196 | + $productPath = ''; | ||
| 1197 | + | ||
| 1198 | + if (!empty($path)) { | ||
| 1199 | + foreach(explode('_', $path) as $catId) { | ||
| 1200 | + $category_info = $this->model_catalog_category->getCategory($catId); | ||
| 1201 | + | ||
| 1202 | + if ($category_info) { | ||
| 1203 | + $productPath .= ($productPath ? '/' : '') . $category_info['name']; | ||
| 1204 | + } | ||
| 1205 | + } | ||
| 1206 | + } | ||
| 1207 | + | ||
| 1208 | + $prodData = array( | ||
| 1209 | + 'item_id' => $product_info['product_id'], | ||
| 1210 | + 'item_name' => $product_info['name'], | ||
| 1211 | + 'quantity' => ( !empty($order_products_qty) && !empty($order_products_qty[$product_info['product_id']]) ) ? $order_products_qty[$product_info['product_id']] : 1, | ||
| 1212 | + ); | ||
| 1213 | + | ||
| 1214 | + if ($productPath) { | ||
| 1215 | + $prodData['item_category'] = $productPath; | ||
| 1216 | + } | ||
| 1217 | + | ||
| 1218 | + if ($product_info['manufacturer']) { | ||
| 1219 | + $prodData['item_brand'] = $product_info['manufacturer']; | ||
| 1220 | + } | ||
| 1221 | + | ||
| 1222 | + if ($data['price']) { | ||
| 1223 | + $prodData['price'] = $data['price']; | ||
| 1224 | + } | ||
| 1225 | + | ||
| 1226 | + if (!empty($total) && !isset($json['value'])) { | ||
| 1227 | + $json['value'] = $total; | ||
| 1228 | + } | ||
| 1229 | + | ||
| 1230 | + $json['items'][] = $prodData; | ||
| 1231 | + } | ||
| 1232 | + } | ||
| 1233 | + } | ||
| 1234 | + | ||
| 1235 | + return $json; | ||
| 1236 | + // header('Content-Type: application/json'); | ||
| 1237 | + // echo json_encode($json); | ||
| 1238 | + } | ||
| 1239 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +function gkdEctTrack(action, pid, desc) { | ||
| 2 | + var async = action == 'remove_from_cart' ? false : true; | ||
| 3 | + $.ajax({ | ||
| 4 | + url: 'index.php?route=geekodev/analytics/getTrackData', | ||
| 5 | + type: 'post', dataType: 'json', cache: false, async: async, | ||
| 6 | + data: {pid: pid, action: action}, | ||
| 7 | + success: function(res) { | ||
| 8 | + if (typeof res !== 'undefined') { | ||
| 9 | + gtag('event', action, res); | ||
| 10 | + } | ||
| 11 | + } | ||
| 12 | + }); | ||
| 13 | +} | ||
| 14 | +/* | ||
| 15 | + function gkdEctTrackCheckout(step, desc) { | ||
| 16 | + return false; | ||
| 17 | + if (typeof jQuery != 'undefined') { | ||
| 18 | + $.ajax({ | ||
| 19 | + url: 'index.php?route=geekodev/analytics/getTrackData', | ||
| 20 | + type: 'post', dataType: 'json', cache: false, | ||
| 21 | + data: {cart:1}, | ||
| 22 | + success: function(res) { | ||
| 23 | + if (typeof res !== 'undefined') { | ||
| 24 | + gtag('event', action, res); | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + } | ||
| 28 | + }); | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | +if (typeof jQuery != 'undefined') { | ||
| 33 | + $(document).delegate('#button-confirm', 'click', function(){ | ||
| 34 | + $.ajax({ | ||
| 35 | + url: 'index.php?route=geekodev/analytics/getTrackData', | ||
| 36 | + type: 'post', dataType: 'json', cache: false, | ||
| 37 | + data: {cart:1}, | ||
| 38 | + success: function(res) { | ||
| 39 | + if (typeof res !== 'undefined') { | ||
| 40 | + gtag('event', 'purchase', res); | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + }); | ||
| 44 | + }); | ||
| 45 | +} | ||
| 46 | +*/ | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +function gkdEctTrack(action, pid, desc) { | ||
| 2 | + var async = action == 'remove' ? false : true; | ||
| 3 | + $.ajax({ | ||
| 4 | + url: 'index.php?route=geekodev/analytics/getTrackData', | ||
| 5 | + type: 'post', dataType: 'json', cache: false, async: async, | ||
| 6 | + data: {pid: pid, action: action}, | ||
| 7 | + success: function(res) { | ||
| 8 | + if (typeof res[0] !== 'undefined') { | ||
| 9 | + ga('ec:addProduct', res[0]); | ||
| 10 | + ga('ec:setAction', action); | ||
| 11 | + ga('send', 'event', $(document).find('title').text(), desc, res[0].name); | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + }); | ||
| 15 | +} | ||
| 16 | + | ||
| 17 | + function gkdEctTrackCheckout(step, desc) { | ||
| 18 | + if (typeof jQuery != 'undefined') { | ||
| 19 | + $.ajax({ | ||
| 20 | + url: 'index.php?route=geekodev/analytics/getTrackData', | ||
| 21 | + type: 'post', dataType: 'json', cache: false, | ||
| 22 | + data: {cart:1}, | ||
| 23 | + success: function(res) { | ||
| 24 | + for(var i=0; i<res.length; i++) { | ||
| 25 | + if (typeof res[i] !== 'undefined') { | ||
| 26 | + ga('ec:addProduct', res[i]); | ||
| 27 | + } | ||
| 28 | + } | ||
| 29 | + ga('ec:setAction', 'checkout', {'step':step, 'option':desc}); | ||
| 30 | + ga('send', 'pageview'); | ||
| 31 | + } | ||
| 32 | + }); | ||
| 33 | + } | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | +if (typeof jQuery != 'undefined') { | ||
| 37 | + $(document).delegate('#button-confirm', 'click', function(){ | ||
| 38 | + gkdEctTrackCheckout(3, 'Checkout confirm'); | ||
| 39 | + }); | ||
| 40 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +function gkdEctTrack(action, pid, desc) { | ||
| 2 | + var async = action == 'remove' ? false : true; | ||
| 3 | + $.ajax({ | ||
| 4 | + url: 'index.php?route=geekodev/analytics/getTrackData', | ||
| 5 | + type: 'post', dataType: 'json', cache: false, async: async, | ||
| 6 | + data: {pid: pid, action: action}, | ||
| 7 | + success: function(res) { | ||
| 8 | + if (typeof res[0] !== 'undefined') { | ||
| 9 | + gkaLayer.push({ | ||
| 10 | + 'event': action, | ||
| 11 | + 'ecommerce': { | ||
| 12 | + 'add': { | ||
| 13 | + 'products': res | ||
| 14 | + } | ||
| 15 | + } | ||
| 16 | + }); | ||
| 17 | + /* | ||
| 18 | + ga('ec:addProduct', res[0]); | ||
| 19 | + ga('ec:setAction', action); | ||
| 20 | + ga('send', 'event', $(document).find('title').text(), desc, res[0].name); | ||
| 21 | + */ | ||
| 22 | + } | ||
| 23 | + } | ||
| 24 | + }); | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | + function gkdEctTrackCheckout(step, desc) { | ||
| 28 | + if (typeof jQuery != 'undefined') { | ||
| 29 | + $.ajax({ | ||
| 30 | + url: 'index.php?route=geekodev/analytics/getTrackData', | ||
| 31 | + type: 'post', dataType: 'json', cache: false, | ||
| 32 | + data: {cart:1}, | ||
| 33 | + success: function(res) { | ||
| 34 | + if (typeof res[0] !== 'undefined') { | ||
| 35 | + gkaLayer.push({ | ||
| 36 | + 'event': 'checkout', | ||
| 37 | + 'ecommerce': { | ||
| 38 | + 'checkout': { | ||
| 39 | + 'actionField': {'step': step}, | ||
| 40 | + 'products': res | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + }); | ||
| 44 | + } | ||
| 45 | + /* | ||
| 46 | + for(var i=0; i<res.length; i++) { | ||
| 47 | + if (typeof res[i] !== 'undefined') { | ||
| 48 | + ga('ec:addProduct', res[i]); | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + ga('ec:setAction', 'checkout', {'step':step, 'option':desc}); | ||
| 52 | + ga('send', 'pageview'); | ||
| 53 | + */ | ||
| 54 | + } | ||
| 55 | + }); | ||
| 56 | + } | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | +if (typeof jQuery != 'undefined') { | ||
| 60 | + $(document).delegate('#button-confirm', 'click', function(){ | ||
| 61 | + gkdEctTrackCheckout(3, 'Checkout confirm'); | ||
| 62 | + }); | ||
| 63 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<div id="search" class="input-group"> | ||
| 2 | + <input type="text" name="search" value="<?php echo $search; ?>" placeholder="<?php echo $text_search; ?>" class="form-control input-lg" /> | ||
| 3 | + <span class="input-group-btn"> | ||
| 4 | + <button type="button" class="btn btn-default btn-lg"><i class="fa fa-search"></i></button> | ||
| 5 | + </span> | ||
| 6 | +</div> | ||
| 7 | +<script type="text/javascript"><!-- | ||
| 8 | +$(document).ready(function() { $('#search input[name=\'search\']').parent().find('button').off('click'); $('#search input[name=\'search\']').parent().find('button').on('click', function() { var url = '<?php echo isset($csp_search_url_param) ? $csp_search_url_param : HTTP_SERVER.'index.php?route=product/search&search=%search%'; ?>'; var value = $('header #search input[name=\'search\']').val(); if (value) {url = url.replace('%search%', encodeURIComponent(encodeURIComponent(encodeURIComponent(value))));} else {url = '<?php echo isset($csp_search_url) ? $csp_search_url : HTTP_SERVER.'index.php?route=product/search'; ?>';} location = url; });}); | ||
| 9 | +--></script> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<div id="search" class="input-group"> | ||
| 2 | + <input type="text" name="search" value="{{ search }}" placeholder="{{ text_search }}" class="form-control input-lg" /> | ||
| 3 | + <span class="input-group-btn"> | ||
| 4 | + <button type="button" class="btn btn-default btn-lg"><i class="fa fa-search"></i></button> | ||
| 5 | + </span> | ||
| 6 | +</div> | ||
| 7 | +<script type="text/javascript"><!-- | ||
| 8 | +$(document).ready(function() { $('#search input[name=\'search\']').parent().find('button').off('click'); $('#search input[name=\'search\']').parent().find('button').on('click', function() { var url = '{{csp_search_url_param}}'; var value = $('header #search input[name=\'search\']').val(); if (value) {url = url.replace('%search%', encodeURIComponent(value));} else {url = '{{csp_search_url}}';} location = url; });}); | ||
| 9 | +--></script> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> | ||
| 2 | +<xsl:stylesheet version="2.0" | ||
| 3 | + xmlns:html="https://www.w3.org/TR/html401" | ||
| 4 | + xmlns:image="https://www.google.com/schemas/sitemap-image/1.1" | ||
| 5 | + xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9" | ||
| 6 | + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> | ||
| 7 | + <xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes"/> | ||
| 8 | + <xsl:template match="/"> | ||
| 9 | + <html xmlns="http://www.w3.org/1999/xhtml"> | ||
| 10 | + <head> | ||
| 11 | + <title><?php echo $title; ?></title> | ||
| 12 | + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||
| 13 | + <style type="text/css"> | ||
| 14 | + body { | ||
| 15 | + font-family: Helvetica, Arial, sans-serif; | ||
| 16 | + font-size: 13px; | ||
| 17 | + color: #545353; | ||
| 18 | + } | ||
| 19 | + table { | ||
| 20 | + border: none; | ||
| 21 | + border-collapse: collapse; | ||
| 22 | + } | ||
| 23 | + #sitemap tr:nth-child(even) { | ||
| 24 | + background-color: #eee; | ||
| 25 | + } | ||
| 26 | + #totals { | ||
| 27 | + width:100%; | ||
| 28 | + margin:20px 0; | ||
| 29 | + } | ||
| 30 | + #totals td div { | ||
| 31 | + font-size:15px; | ||
| 32 | + width:85%; | ||
| 33 | + display:inline-block; | ||
| 34 | + background:#eee; | ||
| 35 | + border-radius:5px; | ||
| 36 | + padding:15px; | ||
| 37 | + } | ||
| 38 | + #sitemap tbody tr:hover, #totals td div:hover { | ||
| 39 | + background-color: #D7DEE8; | ||
| 40 | + } | ||
| 41 | + #sitemap tbody tr:hover td, #sitemap tbody tr:hover td a { | ||
| 42 | + color: #000; | ||
| 43 | + } | ||
| 44 | + #content { | ||
| 45 | + margin: 0 auto; | ||
| 46 | + width: 1000px; | ||
| 47 | + } | ||
| 48 | + .expl { | ||
| 49 | + margin: 10px 3px; | ||
| 50 | + line-height: 1.3em; | ||
| 51 | + } | ||
| 52 | + .expl a { | ||
| 53 | + color: #447e9e; | ||
| 54 | + font-weight: bold; | ||
| 55 | + } | ||
| 56 | + a { | ||
| 57 | + color: #333; | ||
| 58 | + text-decoration: none; | ||
| 59 | + } | ||
| 60 | + a:hover { | ||
| 61 | + text-decoration: underline; | ||
| 62 | + } | ||
| 63 | + td { | ||
| 64 | + font-size:11px; | ||
| 65 | + } | ||
| 66 | + th { | ||
| 67 | + text-align:left; | ||
| 68 | + padding-right:30px; | ||
| 69 | + font-size:11px; | ||
| 70 | + } | ||
| 71 | + thead th { | ||
| 72 | + border-bottom: 1px solid #000; | ||
| 73 | + cursor: pointer; | ||
| 74 | + } | ||
| 75 | + </style> | ||
| 76 | + </head> | ||
| 77 | + <body> | ||
| 78 | + <div id="content"> | ||
| 79 | + <h1><?php echo $title; ?></h1> | ||
| 80 | + <!-- | ||
| 81 | + <p class="expl"> | ||
| 82 | + Generated by <a href="">Advanced Sitemap Generator</a>'s Opencart plugin, this is an XML Sitemap, meant for consumption by search engines. | ||
| 83 | + </p> | ||
| 84 | + <p class="expl"> | ||
| 85 | + You can find more information about XML sitemaps on <a href="http://sitemaps.org">sitemaps.org</a>. | ||
| 86 | + </p> | ||
| 87 | + --> | ||
| 88 | + <p class="expl"> | ||
| 89 | + <?php if ($index) { ?> | ||
| 90 | + This sitemap index contains <xsl:value-of select="count(sitemap:sitemapindex/sitemap:sitemap)"/> sitemaps. | ||
| 91 | + <table id="totals"><tr> | ||
| 92 | + <?php foreach($count as $ctype => $tot) { ?> | ||
| 93 | + <td style="text-align:center;"><div>Total <?php echo $ctype; ?>: <b><?php echo $tot; ?></b></div></td> | ||
| 94 | + <?php } ?> | ||
| 95 | + </tr></table> | ||
| 96 | + <?php } else { ?> | ||
| 97 | + This sitemap contains <xsl:value-of select="count(sitemap:urlset/sitemap:url)"/> URLs. | ||
| 98 | + <p>Return to <a href="<?php echo $index_link; ?>">sitemap index</a></p> | ||
| 99 | + <?php } ?> | ||
| 100 | + </p> | ||
| 101 | + <table id="sitemap" cellpadding="3"> | ||
| 102 | + <thead> | ||
| 103 | + <tr> | ||
| 104 | + <?php if ($type == 'product' && !empty($cfg['display_img'])) { ?> | ||
| 105 | + <th width="5%">Image</th> | ||
| 106 | + <?php } ?> | ||
| 107 | + <th width="75%">URL</th> | ||
| 108 | + <?php if (!$index) { ?> | ||
| 109 | + <th width="5%">Priority</th> | ||
| 110 | + <th width="5%">Change Freq.</th> | ||
| 111 | + <?php } ?> | ||
| 112 | + <th width="10%">Last Change</th> | ||
| 113 | + </tr> | ||
| 114 | + </thead> | ||
| 115 | + <tbody> | ||
| 116 | + <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/> | ||
| 117 | + <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/> | ||
| 118 | + <?php if ($index) { ?> | ||
| 119 | + <xsl:for-each select="sitemap:sitemapindex/sitemap:sitemap"> | ||
| 120 | + <?php } else { ?> | ||
| 121 | + <xsl:for-each select="sitemap:urlset/sitemap:url"> | ||
| 122 | + <?php } ?> | ||
| 123 | + <tr> | ||
| 124 | + <?php if ($type == 'product' && !empty($cfg['display_img'])) { ?> | ||
| 125 | + <td><xsl:if test="@thumb!= ''"><img width="50" height="50" src="{@thumb}"/></xsl:if></td> | ||
| 126 | + <?php } ?> | ||
| 127 | + <td> | ||
| 128 | + <xsl:variable name="itemURL"> | ||
| 129 | + <xsl:value-of select="sitemap:loc"/> | ||
| 130 | + </xsl:variable> | ||
| 131 | + <a href="{$itemURL}"> | ||
| 132 | + <xsl:value-of select="sitemap:loc"/> | ||
| 133 | + </a> | ||
| 134 | + </td> | ||
| 135 | + <?php if (!$index) { ?> | ||
| 136 | + <td> | ||
| 137 | + <xsl:value-of select="concat(sitemap:priority*100,'%')"/> | ||
| 138 | + </td> | ||
| 139 | + <?php /* ?> | ||
| 140 | + <td><xsl:value-of select="count(image:image)"/></td> | ||
| 141 | + <?php */ ?> | ||
| 142 | + <td> | ||
| 143 | + <xsl:value-of select="concat(translate(substring(sitemap:changefreq, 1, 1),concat($lower, $upper),concat($upper, $lower)),substring(sitemap:changefreq, 2))"/> | ||
| 144 | + </td> | ||
| 145 | + <?php } ?> | ||
| 146 | + <td> | ||
| 147 | + <xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))"/> | ||
| 148 | + </td> | ||
| 149 | + </tr> | ||
| 150 | + </xsl:for-each> | ||
| 151 | + </tbody> | ||
| 152 | + </table> | ||
| 153 | + </div> | ||
| 154 | + </body> | ||
| 155 | + </html> | ||
| 156 | + </xsl:template> | ||
| 157 | +</xsl:stylesheet> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +{{'<?xml version="1.0" encoding="UTF-8"?>'}} | ||
| 2 | +<xsl:stylesheet version="2.0" | ||
| 3 | + xmlns:html="https://www.w3.org/TR/html401" | ||
| 4 | + xmlns:image="https://www.google.com/schemas/sitemap-image/1.1" | ||
| 5 | + xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9" | ||
| 6 | + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> | ||
| 7 | + <xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes"/> | ||
| 8 | + <xsl:template match="/"> | ||
| 9 | + <html xmlns="http://www.w3.org/1999/xhtml"> | ||
| 10 | + <head> | ||
| 11 | + <title>{{title}}</title> | ||
| 12 | + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||
| 13 | + <style type="text/css"> | ||
| 14 | + body { | ||
| 15 | + font-family: Helvetica, Arial, sans-serif; | ||
| 16 | + font-size: 13px; | ||
| 17 | + color: #545353; | ||
| 18 | + } | ||
| 19 | + table { | ||
| 20 | + border: none; | ||
| 21 | + border-collapse: collapse; | ||
| 22 | + } | ||
| 23 | + #sitemap tr:nth-child(even) { | ||
| 24 | + background-color: #eee; | ||
| 25 | + } | ||
| 26 | + #totals { | ||
| 27 | + width:100%; | ||
| 28 | + margin:20px 0; | ||
| 29 | + } | ||
| 30 | + #totals td div { | ||
| 31 | + font-size:15px; | ||
| 32 | + width:85%; | ||
| 33 | + display:inline-block; | ||
| 34 | + background:#eee; | ||
| 35 | + border-radius:5px; | ||
| 36 | + padding:15px; | ||
| 37 | + } | ||
| 38 | + #sitemap tbody tr:hover, #totals td div:hover { | ||
| 39 | + background-color: #D7DEE8; | ||
| 40 | + } | ||
| 41 | + #sitemap tbody tr:hover td, #sitemap tbody tr:hover td a { | ||
| 42 | + color: #000; | ||
| 43 | + } | ||
| 44 | + #content { | ||
| 45 | + margin: 0 auto; | ||
| 46 | + width: 1000px; | ||
| 47 | + } | ||
| 48 | + .expl { | ||
| 49 | + margin: 10px 3px; | ||
| 50 | + line-height: 1.3em; | ||
| 51 | + } | ||
| 52 | + .expl a { | ||
| 53 | + color: #447e9e; | ||
| 54 | + font-weight: bold; | ||
| 55 | + } | ||
| 56 | + a { | ||
| 57 | + color: #333; | ||
| 58 | + text-decoration: none; | ||
| 59 | + } | ||
| 60 | + a:hover { | ||
| 61 | + text-decoration: underline; | ||
| 62 | + } | ||
| 63 | + td { | ||
| 64 | + font-size:11px; | ||
| 65 | + } | ||
| 66 | + th { | ||
| 67 | + text-align:left; | ||
| 68 | + padding-right:30px; | ||
| 69 | + font-size:11px; | ||
| 70 | + } | ||
| 71 | + thead th { | ||
| 72 | + border-bottom: 1px solid #000; | ||
| 73 | + cursor: pointer; | ||
| 74 | + } | ||
| 75 | + </style> | ||
| 76 | + </head> | ||
| 77 | + <body> | ||
| 78 | + <div id="content"> | ||
| 79 | + <h1>{{title}}</h1> | ||
| 80 | + <!-- | ||
| 81 | + <p class="expl"> | ||
| 82 | + Generated by <a href="">Advanced Sitemap Generator</a>'s Opencart plugin, this is an XML Sitemap, meant for consumption by search engines. | ||
| 83 | + </p> | ||
| 84 | + <p class="expl"> | ||
| 85 | + You can find more information about XML sitemaps on <a href="http://sitemaps.org">sitemaps.org</a>. | ||
| 86 | + </p> | ||
| 87 | + --> | ||
| 88 | + <p class="expl"> | ||
| 89 | + {% if index %} | ||
| 90 | + This sitemap index contains <xsl:value-of select="count(sitemap:sitemapindex/sitemap:sitemap)"/> sitemaps. | ||
| 91 | + <table id="totals"><tr> | ||
| 92 | + {% for ctype, tot in count %} | ||
| 93 | + <td style="text-align:center;"><div>Total {{ctype}}: <b>{{tot}}</b></div></td> | ||
| 94 | + {% endfor %} | ||
| 95 | + </tr></table> | ||
| 96 | + {% else %} | ||
| 97 | + This sitemap contains <xsl:value-of select="count(sitemap:urlset/sitemap:url)"/> URLs. | ||
| 98 | + <p>Return to <a href="{{index_link}}">sitemap index</a></p> | ||
| 99 | + {% endif %} | ||
| 100 | + </p> | ||
| 101 | + <table id="sitemap" cellpadding="3"> | ||
| 102 | + <thead> | ||
| 103 | + <tr> | ||
| 104 | + {% if type == 'product' and cfg.display_img %} | ||
| 105 | + <th width="5%">Image</th> | ||
| 106 | + {% endif %} | ||
| 107 | + <th width="75%">URL</th> | ||
| 108 | + {% if not index %} | ||
| 109 | + <th width="5%">Priority</th> | ||
| 110 | + <th width="5%">Change Freq.</th> | ||
| 111 | + {% endif %} | ||
| 112 | + <th width="10%">Last Change</th> | ||
| 113 | + </tr> | ||
| 114 | + </thead> | ||
| 115 | + <tbody> | ||
| 116 | + <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/> | ||
| 117 | + <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/> | ||
| 118 | + {% if index %} | ||
| 119 | + <xsl:for-each select="sitemap:sitemapindex/sitemap:sitemap"> | ||
| 120 | + {% else %} | ||
| 121 | + <xsl:for-each select="sitemap:urlset/sitemap:url"> | ||
| 122 | + {% endif %} | ||
| 123 | + <tr> | ||
| 124 | + {% if type == 'product' and cfg.display_img %} | ||
| 125 | + <td><xsl:if test="@thumb!= ''"><img width="50" height="50" src="{@thumb}"/></xsl:if></td> | ||
| 126 | + {% endif %} | ||
| 127 | + <td> | ||
| 128 | + <xsl:variable name="itemURL"> | ||
| 129 | + <xsl:value-of select="sitemap:loc"/> | ||
| 130 | + </xsl:variable> | ||
| 131 | + <a href="{$itemURL}"> | ||
| 132 | + <xsl:value-of select="sitemap:loc"/> | ||
| 133 | + </a> | ||
| 134 | + </td> | ||
| 135 | + {% if not index %} | ||
| 136 | + <td> | ||
| 137 | + <xsl:value-of select="concat(sitemap:priority*100,'%')"/> | ||
| 138 | + </td> | ||
| 139 | + <td> | ||
| 140 | + <xsl:value-of select="concat(translate(substring(sitemap:changefreq, 1, 1),concat($lower, $upper),concat($upper, $lower)),substring(sitemap:changefreq, 2))"/> | ||
| 141 | + </td> | ||
| 142 | + {% endif %} | ||
| 143 | + <td> | ||
| 144 | + <xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))"/> | ||
| 145 | + </td> | ||
| 146 | + </tr> | ||
| 147 | + </xsl:for-each> | ||
| 148 | + </tbody> | ||
| 149 | + </table> | ||
| 150 | + </div> | ||
| 151 | + </body> | ||
| 152 | + </html> | ||
| 153 | + </xsl:template> | ||
| 154 | +</xsl:stylesheet> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> | ||
| 2 | +<xsl:stylesheet version="2.0" | ||
| 3 | + xmlns:html="http://www.w3.org/TR/REC-html40" | ||
| 4 | + xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" | ||
| 5 | + xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9" | ||
| 6 | + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> | ||
| 7 | + <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/> | ||
| 8 | + <xsl:template match="/"> | ||
| 9 | + <html xmlns="http://www.w3.org/1999/xhtml"> | ||
| 10 | + <head> | ||
| 11 | + <title><?php echo $title; ?></title> | ||
| 12 | + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||
| 13 | + <style type="text/css"> | ||
| 14 | + body { | ||
| 15 | + font-family: Helvetica, Arial, sans-serif; | ||
| 16 | + font-size: 13px; | ||
| 17 | + color: #545353; | ||
| 18 | + } | ||
| 19 | + table { | ||
| 20 | + border: none; | ||
| 21 | + border-collapse: collapse; | ||
| 22 | + } | ||
| 23 | + #sitemap tr.odd { | ||
| 24 | + background-color: #eee; | ||
| 25 | + } | ||
| 26 | + #totals { | ||
| 27 | + width:100%; | ||
| 28 | + margin:20px 0; | ||
| 29 | + } | ||
| 30 | + #totals td div { | ||
| 31 | + font-size:15px; | ||
| 32 | + width:85%; | ||
| 33 | + display:inline-block; | ||
| 34 | + background:#eee; | ||
| 35 | + border-radius:5px; | ||
| 36 | + padding:15px; | ||
| 37 | + } | ||
| 38 | + #sitemap tbody tr:hover, #totals td div:hover { | ||
| 39 | + background-color: #D7DEE8; | ||
| 40 | + } | ||
| 41 | + #sitemap tbody tr:hover td, #sitemap tbody tr:hover td a { | ||
| 42 | + color: #000; | ||
| 43 | + } | ||
| 44 | + #content { | ||
| 45 | + margin: 0 auto; | ||
| 46 | + width: 1100px; | ||
| 47 | + } | ||
| 48 | + .expl { | ||
| 49 | + margin: 10px 3px; | ||
| 50 | + line-height: 1.3em; | ||
| 51 | + } | ||
| 52 | + .expl a { | ||
| 53 | + color: #447e9e; | ||
| 54 | + font-weight: bold; | ||
| 55 | + } | ||
| 56 | + a { | ||
| 57 | + color: #333; | ||
| 58 | + text-decoration: none; | ||
| 59 | + } | ||
| 60 | + a:hover { | ||
| 61 | + text-decoration: underline; | ||
| 62 | + } | ||
| 63 | + td { | ||
| 64 | + font-size:11px; | ||
| 65 | + } | ||
| 66 | + .grid div{float:left; padding:15px;} | ||
| 67 | + .grid div a{display:block;border:3px solid #fff; border-radius:4px; padding:5px 10px;} | ||
| 68 | + .grid div a:hover{border-color:#678aac;} | ||
| 69 | + </style> | ||
| 70 | + </head> | ||
| 71 | + <body> | ||
| 72 | + <div id="content"> | ||
| 73 | + <h1 style="text-align:center;margin:50px 0 80px">Product grid</h1> | ||
| 74 | + <!--Generated by <a href="">Advanced Sitemap Generator</a>'s Opencart plugin, this is an XML Sitemap, meant for consumption by search engines--> | ||
| 75 | + <div class="grid"> | ||
| 76 | + <xsl:for-each select="sitemap:urlset/sitemap:url"> | ||
| 77 | + <?php if ($type == 'product') { ?> | ||
| 78 | + <xsl:if test="sitemap:thumb != ''"><div><a href="{sitemap:loc}"><img src="{sitemap:thumb}"/></a></div></xsl:if> | ||
| 79 | + <?php } ?> | ||
| 80 | + </xsl:for-each> | ||
| 81 | + </div> | ||
| 82 | + </div> | ||
| 83 | + </body> | ||
| 84 | + </html> | ||
| 85 | + </xsl:template> | ||
| 86 | +</xsl:stylesheet> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +{{ '<?xml version="1.0" encoding="UTF-8"?>' }} | ||
| 2 | +<xsl:stylesheet version="2.0" | ||
| 3 | + xmlns:html="http://www.w3.org/TR/REC-html40" | ||
| 4 | + xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" | ||
| 5 | + xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9" | ||
| 6 | + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> | ||
| 7 | + <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/> | ||
| 8 | + <xsl:template match="/"> | ||
| 9 | + <html xmlns="http://www.w3.org/1999/xhtml"> | ||
| 10 | + <head> | ||
| 11 | + <title>{{ title }}</title> | ||
| 12 | + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||
| 13 | + <style type="text/css"> | ||
| 14 | + body { | ||
| 15 | + font-family: Helvetica, Arial, sans-serif; | ||
| 16 | + font-size: 13px; | ||
| 17 | + color: #545353; | ||
| 18 | + } | ||
| 19 | + table { | ||
| 20 | + border: none; | ||
| 21 | + border-collapse: collapse; | ||
| 22 | + } | ||
| 23 | + #sitemap tr.odd { | ||
| 24 | + background-color: #eee; | ||
| 25 | + } | ||
| 26 | + #totals { | ||
| 27 | + width:100%; | ||
| 28 | + margin:20px 0; | ||
| 29 | + } | ||
| 30 | + #totals td div { | ||
| 31 | + font-size:15px; | ||
| 32 | + width:85%; | ||
| 33 | + display:inline-block; | ||
| 34 | + background:#eee; | ||
| 35 | + border-radius:5px; | ||
| 36 | + padding:15px; | ||
| 37 | + } | ||
| 38 | + #sitemap tbody tr:hover, #totals td div:hover { | ||
| 39 | + background-color: #D7DEE8; | ||
| 40 | + } | ||
| 41 | + #sitemap tbody tr:hover td, #sitemap tbody tr:hover td a { | ||
| 42 | + color: #000; | ||
| 43 | + } | ||
| 44 | + #content { | ||
| 45 | + margin: 0 auto; | ||
| 46 | + width: 1100px; | ||
| 47 | + } | ||
| 48 | + .expl { | ||
| 49 | + margin: 10px 3px; | ||
| 50 | + line-height: 1.3em; | ||
| 51 | + } | ||
| 52 | + .expl a { | ||
| 53 | + color: #447e9e; | ||
| 54 | + font-weight: bold; | ||
| 55 | + } | ||
| 56 | + a { | ||
| 57 | + color: #333; | ||
| 58 | + text-decoration: none; | ||
| 59 | + } | ||
| 60 | + a:hover { | ||
| 61 | + text-decoration: underline; | ||
| 62 | + } | ||
| 63 | + td { | ||
| 64 | + font-size:11px; | ||
| 65 | + } | ||
| 66 | + .grid div{float:left; padding:15px;} | ||
| 67 | + .grid div a{display:block;border:3px solid #fff; border-radius:4px; padding:5px 10px;} | ||
| 68 | + .grid div a:hover{border-color:#678aac;} | ||
| 69 | + </style> | ||
| 70 | + </head> | ||
| 71 | + <body> | ||
| 72 | + <div id="content"> | ||
| 73 | + <h1 style="text-align:center;margin:50px 0 80px">Product grid</h1> | ||
| 74 | + <!--Generated by <a href="">Advanced Sitemap Generator</a>'s by GeekoDev Opencart plugin, this is an XML Sitemap, meant for consumption by search engines--> | ||
| 75 | + <div class="grid"> | ||
| 76 | + <xsl:for-each select="sitemap:urlset/sitemap:url"> | ||
| 77 | + {% if (type == 'product') %} | ||
| 78 | + <xsl:if test="sitemap:thumb != ''"><div><a href="{sitemap:loc}"><img src="{sitemap:thumb}"/></a></div></xsl:if> | ||
| 79 | + {% endif %} | ||
| 80 | + </xsl:for-each> | ||
| 81 | + </div> | ||
| 82 | + </div> | ||
| 83 | + </body> | ||
| 84 | + </html> | ||
| 85 | + </xsl:template> | ||
| 86 | +</xsl:stylesheet> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?php if ($type == 'microdata') { ?> | ||
| 2 | +<?php if ($page == 'category') { ?> | ||
| 3 | +<?php } else { ?> | ||
| 4 | +<!-- Microdata --> | ||
| 5 | +<div itemscope="itemscope" itemtype="http://schema.org/Product"> | ||
| 6 | + <meta itemprop="url" content="<?php echo $product_url; ?>"> | ||
| 7 | + <meta itemprop="name" content="<?php echo $heading_title; ?>"> | ||
| 8 | + <meta itemprop="image" content="<?php echo $thumb; ?>"> | ||
| 9 | + <?php if (!empty($config['model'])) { ?> | ||
| 10 | + <meta itemprop="model" content="<?php echo $model; ?>"> | ||
| 11 | + <?php } if (!empty($config['desc'])) { ?> | ||
| 12 | + <meta itemprop="description" content="<?php echo strip_tags($product_info['meta_description']); ?>"> | ||
| 13 | + <?php } if (!empty($config['brand'])) { ?> | ||
| 14 | + <meta itemprop="manufacturer" content="<?php echo $manufacturer; ?>"> | ||
| 15 | + <?php } ?> | ||
| 16 | + | ||
| 17 | + <div itemscope="itemscope" itemtype="http://schema.org/Offer"> | ||
| 18 | + <meta itemprop="name" content="<?php echo $heading_title; ?>"> | ||
| 19 | + <meta itemprop="category" content="<?php echo $category; ?>"> | ||
| 20 | + <meta itemprop="price" content="<?php echo $special ? $special : $price; ?>"> | ||
| 21 | + <meta itemprop="priceCurrency" content="<?php echo $currency; ?>"> | ||
| 22 | + <?php if ($product_info['quantity'] > 0) { ?><link itemprop="availability" href="http://schema.org/InStock"> | ||
| 23 | +<?php } ?> | ||
| 24 | + </div> | ||
| 25 | + | ||
| 26 | +<?php if (!empty($reviews)) { ?> | ||
| 27 | + | ||
| 28 | + <?php $review_total = 0; foreach ($reviews as $review) { ?> | ||
| 29 | + <div itemprop="review" itemscope="itemscope" itemtype="http://schema.org/Review"> | ||
| 30 | + <meta itemprop="name" content="<?php echo $heading_title; ?>"> | ||
| 31 | + <meta itemprop="author" content="<?php echo $review['author']; ?>"> | ||
| 32 | + <meta itemprop="datePublished" content="<?php echo date('Y-m-d', strtotime($review['date_added'])); ?>"> | ||
| 33 | + <meta itemprop="description" content="<?php echo $review['text']; ?>"> | ||
| 34 | + <div itemprop="reviewRating" itemscope="itemscope" itemtype="http://schema.org/Rating"> | ||
| 35 | + <meta itemprop="ratingValue" content="<?php echo $review['rating']; ?>"> | ||
| 36 | + </div> | ||
| 37 | + </div> | ||
| 38 | + <?php $review_total += $review['rating']; ?> | ||
| 39 | + <?php } ?> | ||
| 40 | + | ||
| 41 | + <div itemprop="aggregateRating" itemscope="itemscope" itemtype="http://schema.org/AggregateRating"> | ||
| 42 | + <meta itemprop="ratingValue" content="<?php echo round($review_total / count($reviews), 1); ?>"> | ||
| 43 | + <meta itemprop="reviewCount" content="<?php echo count($reviews); ?>"> | ||
| 44 | + </div> | ||
| 45 | +<?php } ?> | ||
| 46 | +<?php } ?> | ||
| 47 | +</div> | ||
| 48 | +<?php } elseif ($type == 'opengraph') { ?> | ||
| 49 | +<!-- Opengraph --> | ||
| 50 | +<?php if (!empty($config['page_id'])) { ?> | ||
| 51 | +<meta property="fb:app_id" content="<?php echo $config['page_id']; ?>"/> | ||
| 52 | +<?php } ?> | ||
| 53 | +<?php if ($page == 'home') { ?> | ||
| 54 | +<meta property="og:type" content="website"> | ||
| 55 | +<?php if (!empty($config_name)) { ?> | ||
| 56 | +<meta property="og:site_name" content="<?php echo $config_name; ?>"/> | ||
| 57 | +<?php } ?> | ||
| 58 | +<meta property="og:title" content="<?php echo $title; ?>"/> | ||
| 59 | +<meta property="og:url" content="<?php echo $url; ?>"/> | ||
| 60 | +<meta property="og:image" content="<?php echo $logo; ?>"/> | ||
| 61 | +<meta property="og:description" content="<?php echo $desc; ?>"/> | ||
| 62 | +<?php } else if ($page == 'info') { ?> | ||
| 63 | +<meta property="og:type" content="article"/> | ||
| 64 | +<meta property="og:url" content="<?php echo $url; ?>"/> | ||
| 65 | +<meta property="og:title" content="<?php echo $heading_title; ?>"/> | ||
| 66 | +<?php } else if ($page == 'product') { ?> | ||
| 67 | +<meta property="og:type" content="product"/> | ||
| 68 | +<meta property="og:title" content="<?php echo !empty($product_info['meta_title']) ? $product_info['meta_title'] : $heading_title; ?>"/> | ||
| 69 | +<meta property="og:url" content="<?php echo $product_url; ?>"/> | ||
| 70 | +<meta property="product:price:amount" content="<?php echo $special ? $special : $price; ?>"/> | ||
| 71 | +<meta property="product:availability" content="<?php echo ($product_info['quantity'] > 0) ? 'in stock' : 'out of stock'; ?>"/> | ||
| 72 | +<meta property="product:price:currency" content="<?php echo $currency; ?>"/> | ||
| 73 | +<meta property="og:image" content="<?php echo str_replace(' ', '%20', $thumb); ?>"/> | ||
| 74 | +<?php if (!empty($config['desc'])) { ?><meta property="og:description" content="<?php echo strip_tags($product_info['meta_description']); ?>"/><?php } ?> | ||
| 75 | +<?php } else if ($page == 'category' && !empty($title)) { ?> | ||
| 76 | +<meta property="og:type" content="article"/> | ||
| 77 | +<meta property="og:title" content="<?php echo $title; ?>"/> | ||
| 78 | +<meta property="og:url" content="<?php echo $url; ?>"/> | ||
| 79 | +<meta property="og:image" content="<?php echo $image; ?>"/> | ||
| 80 | +<meta property="og:description" content="<?php echo $description; ?>"/> | ||
| 81 | +<?php } ?> | ||
| 82 | + | ||
| 83 | + | ||
| 84 | +<?php } elseif ($type == 'tcard') { ?> | ||
| 85 | +<!-- Twittercard --> | ||
| 86 | +<?php if ($page == 'home') { ?> | ||
| 87 | +<meta name="twitter:card" content="<?php echo !empty($config['home_type']) ? $config['home_type'] : 'summary'; ?>"/> | ||
| 88 | +<meta name="twitter:description" content="<?php echo $desc; ?>"/> | ||
| 89 | +<meta name="twitter:title" content="<?php echo $title; ?>"/> | ||
| 90 | +<meta name="twitter:domain" content="<?php echo $url; ?>"/> | ||
| 91 | +<meta name="twitter:image" content="<?php echo $logo; ?>"/> | ||
| 92 | +<?php } else if ($page == 'product') { ?> | ||
| 93 | +<meta name="twitter:card" content="product"/> | ||
| 94 | +<meta name="twitter:title" content="<?php echo $heading_title; ?>"/> | ||
| 95 | +<meta name="twitter:domain" content="<?php echo $product_url; ?>"/> | ||
| 96 | +<meta name="twitter:image" content="<?php echo $thumb; ?>"/> | ||
| 97 | +<?php if (!empty($config['desc'])) { ?><meta name="twitter:description" content="<?php echo strip_tags($product_info['meta_description']); ?>"/><?php } ?> | ||
| 98 | +<?php } ?> | ||
| 99 | +<?php if (!empty($config['nick'])) { ?><meta name="twitter:creator" content="<?php echo $config['nick']; ?>"/> | ||
| 100 | +<meta name="twitter:site" content="<?php echo $config['nick']; ?>"/><?php } ?> | ||
| 101 | + | ||
| 102 | +<?php } elseif ($type == 'gpublisher' && $url) { ?> | ||
| 103 | +<!-- Google Publisher --> | ||
| 104 | +<link rel="publisher" href="<?php echo $url; ?>"/> | ||
| 105 | + | ||
| 106 | +<?php } ?> |
upload/sitemap_cli.php
0 → 100644
| 1 | +<?php | ||
| 2 | +chdir(__DIR__); | ||
| 3 | + | ||
| 4 | +require_once('config.php'); | ||
| 5 | + | ||
| 6 | +$domain = parse_url(HTTP_SERVER); | ||
| 7 | +$host = $domain['host']; | ||
| 8 | +putenv('SERVER_NAME='.$host); | ||
| 9 | +$_SERVER['SERVER_NAME'] = $host; | ||
| 10 | +$_SERVER['REQUEST_METHOD'] = 'GET'; | ||
| 11 | + | ||
| 12 | +if (!isset($_SERVER['SERVER_PORT'])) { | ||
| 13 | + $_SERVER['SERVER_PORT'] = getenv('SERVER_PORT'); | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +if (!empty($argv)) { | ||
| 17 | + array_shift($argv); | ||
| 18 | + parse_str(implode('&', $argv), $_GET); | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +define('GKD_CRON', true); | ||
| 22 | + | ||
| 23 | +$_GET['route'] = 'feed/advanced_sitemap/cron'; | ||
| 24 | + | ||
| 25 | +require_once('index.php'); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/system/library/gkd_urlify.php
0 → 100644
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * A PHP port of URLify.js from the Django project | ||
| 4 | + * (https://github.com/django/django/blob/master/django/contrib/admin/static/admin/js/urlify.js). | ||
| 5 | + */ | ||
| 6 | + | ||
| 7 | +class URLify { | ||
| 8 | + public static $maps = array ( | ||
| 9 | + 'de' => array ( /* German */ | ||
| 10 | + 'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue', 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', | ||
| 11 | + 'ẞ' => 'SS' | ||
| 12 | + ), | ||
| 13 | + 'latin' => array ( | ||
| 14 | + 'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A','Ă' => 'A', 'Æ' => 'AE', 'Ç' => | ||
| 15 | + 'C', 'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', | ||
| 16 | + 'Ï' => 'I', 'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => | ||
| 17 | + 'O', 'Ő' => 'O', 'Ø' => 'O', 'Œ' => 'OE' ,'Ș' => 'S','Ț' => 'T', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ű' => 'U', | ||
| 18 | + 'Ý' => 'Y', 'Þ' => 'TH', 'ß' => 'ss', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => | ||
| 19 | + 'a', 'å' => 'a', 'ă' => 'a', 'æ' => 'ae', 'ç' => 'c', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', | ||
| 20 | + 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => | ||
| 21 | + 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ő' => 'o', 'ø' => 'o', 'œ' => 'oe', 'ș' => 's', 'ț' => 't', 'ù' => 'u', 'ú' => 'u', | ||
| 22 | + 'û' => 'u', 'ü' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th', 'ÿ' => 'y' | ||
| 23 | + ), | ||
| 24 | + 'latin_symbols' => array ( | ||
| 25 | + '©' => '(c)' | ||
| 26 | + ), | ||
| 27 | + /* old | ||
| 28 | + 'el' => array ( // Greek | ||
| 29 | + 'α' => 'a', 'β' => 'b', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'ζ' => 'z', 'η' => 'h', 'θ' => '8', | ||
| 30 | + 'ι' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => '3', 'ο' => 'o', 'π' => 'p', | ||
| 31 | + 'ρ' => 'r', 'σ' => 's', 'τ' => 't', 'υ' => 'y', 'φ' => 'f', 'χ' => 'x', 'ψ' => 'ps', 'ω' => 'w', | ||
| 32 | + 'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'y', 'ή' => 'h', 'ώ' => 'w', 'ς' => 's', | ||
| 33 | + 'ϊ' => 'i', 'ΰ' => 'y', 'ϋ' => 'y', 'ΐ' => 'i', | ||
| 34 | + 'Α' => 'A', 'Β' => 'B', 'Γ' => 'G', 'Δ' => 'D', 'Ε' => 'E', 'Ζ' => 'Z', 'Η' => 'H', 'Θ' => '8', | ||
| 35 | + 'Ι' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', 'Ν' => 'N', 'Ξ' => '3', 'Ο' => 'O', 'Π' => 'P', | ||
| 36 | + 'Ρ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'Y', 'Φ' => 'F', 'Χ' => 'X', 'Ψ' => 'PS', 'Ω' => 'W', | ||
| 37 | + 'Ά' => 'A', 'Έ' => 'E', 'Ί' => 'I', 'Ό' => 'O', 'Ύ' => 'Y', 'Ή' => 'H', 'Ώ' => 'W', 'Ϊ' => 'I', | ||
| 38 | + 'Ϋ' => 'Y' | ||
| 39 | + ), | ||
| 40 | + */ | ||
| 41 | + 'el' => array ( /* Greek */ | ||
| 42 | + 'α' => 'a', 'β' => 'b', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'ζ' => 'z', 'η' => 'i', 'θ' => 'th', | ||
| 43 | + 'ι' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => 'x', 'ο' => 'o', 'π' => 'p', | ||
| 44 | + 'ρ' => 'r', 'σ' => 's', 'τ' => 't', 'υ' => 'u', 'φ' => 'f', 'χ' => 'ch', 'ψ' => 'ps', 'ω' => 'o', | ||
| 45 | + 'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'i', 'ή' => 'i', 'ώ' => 'o', 'ς' => 's', | ||
| 46 | + 'ϊ' => 'i', 'ΰ' => 'i', 'ϋ' => 'i', 'ΐ' => 'i', | ||
| 47 | + 'Α' => 'A', 'Β' => 'B', 'Γ' => 'G', 'Δ' => 'D', 'Ε' => 'E', 'Ζ' => 'Z', 'Η' => 'I', 'Θ' => 'TH', | ||
| 48 | + 'Ι' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', 'Ν' => 'N', 'Ξ' => 'X', 'Ο' => 'O', 'Π' => 'P', | ||
| 49 | + 'Ρ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'U', 'Φ' => 'F', 'Χ' => 'CH', 'Ψ' => 'PS', 'Ω' => 'O', | ||
| 50 | + 'Ά' => 'A', 'Έ' => 'E', 'Ί' => 'I', 'Ό' => 'O', 'Ύ' => 'I', 'Ή' => 'I', 'Ώ' => 'O', 'Ϊ' => 'I', | ||
| 51 | + 'Ϋ' => 'I' | ||
| 52 | + ), | ||
| 53 | + 'tr' => array ( /* Turkish */ | ||
| 54 | + 'ş' => 's', 'Ş' => 'S', 'ı' => 'i', 'İ' => 'I', 'ç' => 'c', 'Ç' => 'C', 'ü' => 'u', 'Ü' => 'U', | ||
| 55 | + 'ö' => 'o', 'Ö' => 'O', 'ğ' => 'g', 'Ğ' => 'G' | ||
| 56 | + ), | ||
| 57 | + /* | ||
| 58 | + 'bg' => array( /* Bulgarian original * | ||
| 59 | + "Щ" => 'Sht', "Ш" => 'Sh', "Ч" => 'Ch', "Ц" => 'C', "Ю" => 'Yu', "Я" => 'Ya', | ||
| 60 | + "Ж" => 'J', "А" => 'A', "Б" => 'B', "В" => 'V', "Г" => 'G', "Д" => 'D', | ||
| 61 | + "Е" => 'E', "З" => 'Z', "И" => 'I', "Й" => 'Y', "К" => 'K', "Л" => 'L', | ||
| 62 | + "М" => 'M', "Н" => 'N', "О" => 'O', "П" => 'P', "Р" => 'R', "С" => 'S', | ||
| 63 | + "Т" => 'T', "У" => 'U', "Ф" => 'F', "Х" => 'H', "Ь" => '', "Ъ" => 'A', | ||
| 64 | + "щ" => 'sht', "ш" => 'sh', "ч" => 'ch', "ц" => 'c', "ю" => 'yu', "я" => 'ya', | ||
| 65 | + "ж" => 'j', "а" => 'a', "б" => 'b', "в" => 'v', "г" => 'g', "д" => 'd', | ||
| 66 | + "е" => 'e', "з" => 'z', "и" => 'i', "й" => 'y', "к" => 'k', "л" => 'l', | ||
| 67 | + "м" => 'm', "н" => 'n', "о" => 'o', "п" => 'p', "р" => 'r', "с" => 's', | ||
| 68 | + "т" => 't', "у" => 'u', "ф" => 'f', "х" => 'h', "ь" => '', "ъ" => 'a' | ||
| 69 | + ), | ||
| 70 | + */ | ||
| 71 | + 'bg' => array( /* Bulgarian */ | ||
| 72 | + "Щ" => 'Sht', "Ш" => 'Sh', "Ч" => 'Ch', "Ц" => 'Ts', "Ю" => 'Yu', "Я" => 'Ya', | ||
| 73 | + "Ж" => 'Zh', "А" => 'A', "Б" => 'B', "В" => 'V', "Г" => 'G', "Д" => 'D', | ||
| 74 | + "Е" => 'E', "З" => 'Z', "И" => 'I', "Й" => 'Y', "К" => 'K', "Л" => 'L', | ||
| 75 | + "М" => 'M', "Н" => 'N', "О" => 'O', "П" => 'P', "Р" => 'R', "С" => 'S', | ||
| 76 | + "Т" => 'T', "У" => 'U', "Ф" => 'F', "Х" => 'H', "Ь" => 'Y', "Ъ" => 'A', | ||
| 77 | + "щ" => 'sht', "ш" => 'sh', "ч" => 'ch', "ц" => 'ts', "ю" => 'yu', "я" => 'ya', | ||
| 78 | + "ж" => 'zh', "а" => 'a', "б" => 'b', "в" => 'v', "г" => 'g', "д" => 'd', | ||
| 79 | + "е" => 'e', "з" => 'z', "и" => 'i', "й" => 'y', "к" => 'k', "л" => 'l', | ||
| 80 | + "м" => 'm', "н" => 'n', "о" => 'o', "п" => 'p', "р" => 'r', "с" => 's', | ||
| 81 | + "т" => 't', "у" => 'u', "ф" => 'f', "х" => 'h', "ь" => 'y', "ъ" => 'a' | ||
| 82 | + ), | ||
| 83 | + 'ru' => array ( /* Russian */ | ||
| 84 | + 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh', | ||
| 85 | + 'з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', | ||
| 86 | + 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', | ||
| 87 | + 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sh', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu', | ||
| 88 | + 'я' => 'ya', | ||
| 89 | + 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'Yo', 'Ж' => 'Zh', | ||
| 90 | + 'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', | ||
| 91 | + 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', | ||
| 92 | + 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sh', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'Yu', | ||
| 93 | + 'Я' => 'Ya', | ||
| 94 | + '№' => '' | ||
| 95 | + ), | ||
| 96 | + 'uk' => array ( /* Ukrainian */ | ||
| 97 | + 'Є' => 'Ye', 'І' => 'I', 'Ї' => 'Yi', 'Ґ' => 'G', 'И' => 'Y', | ||
| 98 | + 'є' => 'ye', 'і' => 'i', 'ї' => 'yi', 'ґ' => 'g', 'и' => 'y', | ||
| 99 | + ), | ||
| 100 | + 'kk' => array ( /* Kazakh */ | ||
| 101 | + 'Ә' => 'A', 'Ғ' => 'G', 'Қ' => 'Q', 'Ң' => 'N', 'Ө' => 'O', 'Ұ' => 'U', 'Ү' => 'U', 'Һ' => 'H', | ||
| 102 | + 'ә' => 'a', 'ғ' => 'g', 'қ' => 'q', 'ң' => 'n', 'ө' => 'o', 'ұ' => 'u', 'ү' => 'u', 'һ' => 'h', | ||
| 103 | + ), | ||
| 104 | + 'cs' => array ( /* Czech */ | ||
| 105 | + 'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u', | ||
| 106 | + 'ž' => 'z', 'Č' => 'C', 'Ď' => 'D', 'Ě' => 'E', 'Ň' => 'N', 'Ř' => 'R', 'Š' => 'S', 'Ť' => 'T', | ||
| 107 | + 'Ů' => 'U', 'Ž' => 'Z' | ||
| 108 | + ), | ||
| 109 | + 'sk' => array ( /* Slovak */ | ||
| 110 | + 'á' => 'a', 'ä' => 'a', 'č' => 'c', 'ď' => 'd', 'é' => 'e', 'í' => 'i', 'ľ' => 'l', | ||
| 111 | + 'ĺ' => 'l', 'ň' => 'n', 'ó' => 'o', 'ô' => 'o', 'ŕ' => 'r', 'š' => 's', 'ť' => 't', | ||
| 112 | + 'ú' => 'u', 'ý' => 'y', 'ž' => 'z', | ||
| 113 | + 'Á' => 'a', 'Ä' => 'A', 'Č' => 'C', 'Ď' => 'D', 'É' => 'E', 'Í' => 'I', 'Ľ' => 'L', | ||
| 114 | + 'Ĺ' => 'L', 'Ň' => 'N', 'Ó' => 'O', 'Ô' => 'O', 'Ŕ' => 'R', 'Š' => 'S', 'Ť' => 'T', | ||
| 115 | + 'Ú' => 'U', 'Ý' => 'Y', 'Ž' => 'Z' | ||
| 116 | + ), | ||
| 117 | + 'pl' => array ( /* Polish */ | ||
| 118 | + 'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z', | ||
| 119 | + 'ż' => 'z', 'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'O', 'Ś' => 'S', | ||
| 120 | + 'Ź' => 'Z', 'Ż' => 'Z' | ||
| 121 | + ), | ||
| 122 | + 'ro' => array ( /* Romanian */ | ||
| 123 | + 'ă' => 'a', 'â' => 'a', 'î' => 'i', 'ș' => 's', 'ț' => 't', 'Ţ' => 'T', 'ţ' => 't' | ||
| 124 | + ), | ||
| 125 | + 'lv' => array ( /* Latvian */ | ||
| 126 | + 'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n', | ||
| 127 | + 'š' => 's', 'ū' => 'u', 'ž' => 'z', 'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', | ||
| 128 | + 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N', 'Š' => 'S', 'Ū' => 'u', 'Ž' => 'Z' | ||
| 129 | + ), | ||
| 130 | + 'lt' => array ( /* Lithuanian */ | ||
| 131 | + 'ą' => 'a', 'č' => 'c', 'ę' => 'e', 'ė' => 'e', 'į' => 'i', 'š' => 's', 'ų' => 'u', 'ū' => 'u', 'ž' => 'z', | ||
| 132 | + 'Ą' => 'A', 'Č' => 'C', 'Ę' => 'E', 'Ė' => 'E', 'Į' => 'I', 'Š' => 'S', 'Ų' => 'U', 'Ū' => 'U', 'Ž' => 'Z' | ||
| 133 | + ), | ||
| 134 | + 'vn' => array ( /* Vietnamese */ | ||
| 135 | + 'Á' => 'A', 'À' => 'A', 'Ả' => 'A', 'Ã' => 'A', 'Ạ' => 'A', 'Ă' => 'A', 'Ắ' => 'A', 'Ằ' => 'A', 'Ẳ' => 'A', 'Ẵ' => 'A', 'Ặ' => 'A', 'Â' => 'A', 'Ấ' => 'A', 'Ầ' => 'A', 'Ẩ' => 'A', 'Ẫ' => 'A', 'Ậ' => 'A', | ||
| 136 | + 'á' => 'a', 'à' => 'a', 'ả' => 'a', 'ã' => 'a', 'ạ' => 'a', 'ă' => 'a', 'ắ' => 'a', 'ằ' => 'a', 'ẳ' => 'a', 'ẵ' => 'a', 'ặ' => 'a', 'â' => 'a', 'ấ' => 'a', 'ầ' => 'a', 'ẩ' => 'a', 'ẫ' => 'a', 'ậ' => 'a', | ||
| 137 | + 'É' => 'E', 'È' => 'E', 'Ẻ' => 'E', 'Ẽ' => 'E', 'Ẹ' => 'E', 'Ê' => 'E', 'Ế' => 'E', 'Ề' => 'E', 'Ể' => 'E', 'Ễ' => 'E', 'Ệ' => 'E', | ||
| 138 | + 'é' => 'e', 'è' => 'e', 'ẻ' => 'e', 'ẽ' => 'e', 'ẹ' => 'e', 'ê' => 'e', 'ế' => 'e', 'ề' => 'e', 'ể' => 'e', 'ễ' => 'e', 'ệ' => 'e', | ||
| 139 | + 'Í' => 'I', 'Ì' => 'I', 'Ỉ' => 'I', 'Ĩ' => 'I', 'Ị' => 'I', 'í' => 'i', 'ì' => 'i', 'ỉ' => 'i', 'ĩ' => 'i', 'ị' => 'i', | ||
| 140 | + 'Ó' => 'O', 'Ò' => 'O', 'Ỏ' => 'O', 'Õ' => 'O', 'Ọ' => 'O', 'Ô' => 'O', 'Ố' => 'O', 'Ồ' => 'O', 'Ổ' => 'O', 'Ỗ' => 'O', 'Ộ' => 'O', 'Ơ' => 'O', 'Ớ' => 'O', 'Ờ' => 'O', 'Ở' => 'O', 'Ỡ' => 'O', 'Ợ' => 'O', | ||
| 141 | + 'ó' => 'o', 'ò' => 'o', 'ỏ' => 'o', 'õ' => 'o', 'ọ' => 'o', 'ô' => 'o', 'ố' => 'o', 'ồ' => 'o', 'ổ' => 'o', 'ỗ' => 'o', 'ộ' => 'o', 'ơ' => 'o', 'ớ' => 'o', 'ờ' => 'o', 'ở' => 'o', 'ỡ' => 'o', 'ợ' => 'o', | ||
| 142 | + 'Ú' => 'U', 'Ù' => 'U', 'Ủ' => 'U', 'Ũ' => 'U', 'Ụ' => 'U', 'Ư' => 'U', 'Ứ' => 'U', 'Ừ' => 'U', 'Ử' => 'U', 'Ữ' => 'U', 'Ự' => 'U', | ||
| 143 | + 'ú' => 'u', 'ù' => 'u', 'ủ' => 'u', 'ũ' => 'u', 'ụ' => 'u', 'ư' => 'u', 'ứ' => 'u', 'ừ' => 'u', 'ử' => 'u', 'ữ' => 'u', 'ự' => 'u', | ||
| 144 | + 'Ý' => 'Y', 'Ỳ' => 'Y', 'Ỷ' => 'Y', 'Ỹ' => 'Y', 'Ỵ' => 'Y', 'ý' => 'y', 'ỳ' => 'y', 'ỷ' => 'y', 'ỹ' => 'y', 'ỵ' => 'y', | ||
| 145 | + 'Đ' => 'D', 'đ' => 'd', | ||
| 146 | + // same chars but made with other accentuation system | ||
| 147 | + 'ą' => 'a','ę' => 'e','ǝ' => 'e','ə' => 'e','ɛ' => 'e','I' => 'i','ǐ' => 'i','ĭ' => 'i','ī' => 'i','į' => 'i','İ' => 'i','ǒ' => 'o','ŏ' => 'o','ō' => 'o','ő' => 'o','ǫ' => 'o','ǿ' => 'o','ǔ' => 'u','ŭ' => 'u','ū' => 'u','ű' => 'u','ů' => 'u','ų' => 'u','Y' => 'y','ŷ' => 'y','ȳ' => 'y','ƴ' => 'y', | ||
| 148 | + 'ạ' => 'a', 'ệ' => 'e', 'ẹ' => 'e', 'í' => 'i', | ||
| 149 | + ), | ||
| 150 | + 'vi' => array ( /* Vietnamese copy in case of not useing vn code */ | ||
| 151 | + 'Á' => 'A', 'À' => 'A', 'Ả' => 'A', 'Ã' => 'A', 'Ạ' => 'A', 'Ă' => 'A', 'Ắ' => 'A', 'Ằ' => 'A', 'Ẳ' => 'A', 'Ẵ' => 'A', 'Ặ' => 'A', 'Â' => 'A', 'Ấ' => 'A', 'Ầ' => 'A', 'Ẩ' => 'A', 'Ẫ' => 'A', 'Ậ' => 'A', | ||
| 152 | + 'á' => 'a', 'à' => 'a', 'ả' => 'a', 'ã' => 'a', 'ạ' => 'a', 'ă' => 'a', 'ắ' => 'a', 'ằ' => 'a', 'ẳ' => 'a', 'ẵ' => 'a', 'ặ' => 'a', 'â' => 'a', 'ấ' => 'a', 'ầ' => 'a', 'ẩ' => 'a', 'ẫ' => 'a', 'ậ' => 'a', | ||
| 153 | + 'É' => 'E', 'È' => 'E', 'Ẻ' => 'E', 'Ẽ' => 'E', 'Ẹ' => 'E', 'Ê' => 'E', 'Ế' => 'E', 'Ề' => 'E', 'Ể' => 'E', 'Ễ' => 'E', 'Ệ' => 'E', | ||
| 154 | + 'é' => 'e', 'è' => 'e', 'ẻ' => 'e', 'ẽ' => 'e', 'ẹ' => 'e', 'ê' => 'e', 'ế' => 'e', 'ề' => 'e', 'ể' => 'e', 'ễ' => 'e', 'ệ' => 'e', | ||
| 155 | + 'Í' => 'I', 'Ì' => 'I', 'Ỉ' => 'I', 'Ĩ' => 'I', 'Ị' => 'I', 'í' => 'i', 'ì' => 'i', 'ỉ' => 'i', 'ĩ' => 'i', 'ị' => 'i', | ||
| 156 | + 'Ó' => 'O', 'Ò' => 'O', 'Ỏ' => 'O', 'Õ' => 'O', 'Ọ' => 'O', 'Ô' => 'O', 'Ố' => 'O', 'Ồ' => 'O', 'Ổ' => 'O', 'Ỗ' => 'O', 'Ộ' => 'O', 'Ơ' => 'O', 'Ớ' => 'O', 'Ờ' => 'O', 'Ở' => 'O', 'Ỡ' => 'O', 'Ợ' => 'O', | ||
| 157 | + 'ó' => 'o', 'ò' => 'o', 'ỏ' => 'o', 'õ' => 'o', 'ọ' => 'o', 'ô' => 'o', 'ố' => 'o', 'ồ' => 'o', 'ổ' => 'o', 'ỗ' => 'o', 'ộ' => 'o', 'ơ' => 'o', 'ớ' => 'o', 'ờ' => 'o', 'ở' => 'o', 'ỡ' => 'o', 'ợ' => 'o', | ||
| 158 | + 'Ú' => 'U', 'Ù' => 'U', 'Ủ' => 'U', 'Ũ' => 'U', 'Ụ' => 'U', 'Ư' => 'U', 'Ứ' => 'U', 'Ừ' => 'U', 'Ử' => 'U', 'Ữ' => 'U', 'Ự' => 'U', | ||
| 159 | + 'ú' => 'u', 'ù' => 'u', 'ủ' => 'u', 'ũ' => 'u', 'ụ' => 'u', 'ư' => 'u', 'ứ' => 'u', 'ừ' => 'u', 'ử' => 'u', 'ữ' => 'u', 'ự' => 'u', | ||
| 160 | + 'Ý' => 'Y', 'Ỳ' => 'Y', 'Ỷ' => 'Y', 'Ỹ' => 'Y', 'Ỵ' => 'Y', 'ý' => 'y', 'ỳ' => 'y', 'ỷ' => 'y', 'ỹ' => 'y', 'ỵ' => 'y', | ||
| 161 | + 'Đ' => 'D', 'đ' => 'd', | ||
| 162 | + // same chars but made with other accentuation system | ||
| 163 | + 'ą' => 'a','ę' => 'e','ǝ' => 'e','ə' => 'e','ɛ' => 'e','I' => 'i','ǐ' => 'i','ĭ' => 'i','ī' => 'i','į' => 'i','İ' => 'i','ǒ' => 'o','ŏ' => 'o','ō' => 'o','ő' => 'o','ǫ' => 'o','ǿ' => 'o','ǔ' => 'u','ŭ' => 'u','ū' => 'u','ű' => 'u','ů' => 'u','ų' => 'u','Y' => 'y','ŷ' => 'y','ȳ' => 'y','ƴ' => 'y', | ||
| 164 | + 'ạ' => 'a', 'ệ' => 'e', 'ẹ' => 'e', 'í' => 'i', | ||
| 165 | + ), | ||
| 166 | + 'ar' => array ( /* Arabic */ | ||
| 167 | + 'أ' => 'a', 'ب' => 'b', 'ت' => 't', 'ث' => 'th', 'ج' => 'g', 'ح' => 'h', 'خ' => 'kh', 'د' => 'd', | ||
| 168 | + 'ذ' => 'th', 'ر' => 'r', 'ز' => 'z', 'س' => 's', 'ش' => 'sh', 'ص' => 's', 'ض' => 'd', 'ط' => 't', | ||
| 169 | + 'ظ' => 'th', 'ع' => 'aa', 'غ' => 'gh', 'ف' => 'f', 'ق' => 'k', 'ك' => 'k', 'ل' => 'l', 'م' => 'm', | ||
| 170 | + 'ن' => 'n', 'ه' => 'h', 'و' => 'o', 'ي' => 'y', | ||
| 171 | + 'ا' => 'a', 'إ' => 'a', 'آ' => 'a', 'ؤ' => 'o', 'ئ' => 'y', 'ء' => 'aa', | ||
| 172 | + '٠' => '0', '١' => '1', '٢' => '2', '٣' => '3', '٤' => '4', '٥' => '5', '٦' => '6', '٧' => '7', '٨' => '8', '٩' => '9', | ||
| 173 | + ), | ||
| 174 | + 'fa' => array ( /* Persian */ | ||
| 175 | + 'گ' => 'g', 'ژ' => 'j', 'پ' => 'p', 'چ' => 'ch', 'ی' => 'y', 'ک' => 'k', | ||
| 176 | + '۰' => '0', '۱' => '1', '۲' => '2', '۳' => '3', '۴' => '4', '۵' => '5', '۶' => '6', '۷' => '7', '۸' => '8', '۹' => '9', | ||
| 177 | + ), | ||
| 178 | + 'sr' => array ( /* Serbian */ | ||
| 179 | + 'ђ' => 'dj', 'ј' => 'j', 'љ' => 'lj', 'њ' => 'nj', 'ћ' => 'c', 'џ' => 'dz', 'đ' => 'dj', | ||
| 180 | + 'Ђ' => 'Dj', 'Ј' => 'j', 'Љ' => 'Lj', 'Њ' => 'Nj', 'Ћ' => 'C', 'Џ' => 'Dz', 'Đ' => 'Dj' | ||
| 181 | + ), | ||
| 182 | + 'az' => array ( /* Azerbaijani */ | ||
| 183 | + 'ç' => 'c', 'ə' => 'e', 'ğ' => 'g', 'ı' => 'i', 'ö' => 'o', 'ş' => 's', 'ü' => 'u', | ||
| 184 | + 'Ç' => 'C', 'Ə' => 'E', 'Ğ' => 'G', 'İ' => 'I', 'Ö' => 'O', 'Ş' => 'S', 'Ü' => 'U' | ||
| 185 | + ), | ||
| 186 | + 'ka' => array ( /* Georgian */ | ||
| 187 | + 'ა' => 'a', 'ბ' => 'b', 'გ' => 'g', 'დ' => 'd', 'ე' => 'e', 'ვ' => 'v', 'ზ' => 'z', | ||
| 188 | + 'თ' => 't', 'ი' => 'i', 'კ' => 'k', 'ლ' => 'l', 'მ' => 'm', 'ნ' => 'n', 'ო' => 'o', | ||
| 189 | + 'პ' => 'p', 'ჟ' => 'j', 'რ' => 'r', 'ს' => 's', 'ტ' => 't', 'უ' => 'u', 'ფ' => 'f', | ||
| 190 | + 'ქ' => 'q', 'ღ' => 'g', 'ყ' => 'y', 'შ' => 'sh', 'ჩ' => 'ch', 'ც' => 'c', 'ძ' => 'dz', | ||
| 191 | + 'წ' => 'w', 'ჭ' => 'ch', 'ხ' => 'x', 'ჯ' => 'j', 'ჰ' => 'h' | ||
| 192 | + ), | ||
| 193 | + ); | ||
| 194 | + | ||
| 195 | + /** | ||
| 196 | + * List of words to remove from URLs. | ||
| 197 | + */ | ||
| 198 | + public static $remove_list = array ( | ||
| 199 | + 'a', 'an', 'as', 'at', 'before', 'but', 'by', 'for', 'from', | ||
| 200 | + 'is', 'in', 'into', 'like', 'of', 'off', 'on', 'onto', 'per', | ||
| 201 | + 'since', 'than', 'the', 'this', 'that', 'to', 'up', 'via', | ||
| 202 | + 'with' | ||
| 203 | + ); | ||
| 204 | + | ||
| 205 | + /** | ||
| 206 | + * The character map. | ||
| 207 | + */ | ||
| 208 | + private static $map = array (); | ||
| 209 | + | ||
| 210 | + /** | ||
| 211 | + * The character list as a string. | ||
| 212 | + */ | ||
| 213 | + private static $chars = ''; | ||
| 214 | + | ||
| 215 | + /** | ||
| 216 | + * The character list as a regular expression. | ||
| 217 | + */ | ||
| 218 | + private static $regex = ''; | ||
| 219 | + | ||
| 220 | + /** | ||
| 221 | + * The current language | ||
| 222 | + */ | ||
| 223 | + private static $language = ''; | ||
| 224 | + | ||
| 225 | + /** | ||
| 226 | + * Initializes the character map. | ||
| 227 | + */ | ||
| 228 | + private static function init ($language = "") { | ||
| 229 | + if (count (self::$map) > 0 && (($language == "") || ($language == self::$language))) { | ||
| 230 | + return; | ||
| 231 | + } | ||
| 232 | + | ||
| 233 | + /* Is a specific map associated with $language ? */ | ||
| 234 | + if (isset(self::$maps[$language]) && is_array(self::$maps[$language])) { | ||
| 235 | + /* Move this map to end. This means it will have priority over others */ | ||
| 236 | + $m = self::$maps[$language]; | ||
| 237 | + unset(self::$maps[$language]); | ||
| 238 | + self::$maps[$language] = $m; | ||
| 239 | + } | ||
| 240 | + /* Reset static vars */ | ||
| 241 | + self::$language = $language; | ||
| 242 | + self::$map = array(); | ||
| 243 | + self::$chars = ''; | ||
| 244 | + | ||
| 245 | + foreach (self::$maps as $map) { | ||
| 246 | + foreach ($map as $orig => $conv) { | ||
| 247 | + self::$map[$orig] = $conv; | ||
| 248 | + self::$chars .= $orig; | ||
| 249 | + } | ||
| 250 | + } | ||
| 251 | + | ||
| 252 | + self::$regex = '/[' . self::$chars . ']/u'; | ||
| 253 | + } | ||
| 254 | + | ||
| 255 | + /** | ||
| 256 | + * Add new characters to the list. `$map` should be a hash. | ||
| 257 | + */ | ||
| 258 | + public static function add_chars ($map) { | ||
| 259 | + if (! is_array ($map)) { | ||
| 260 | + throw new LogicException ('$map must be an associative array.'); | ||
| 261 | + } | ||
| 262 | + self::$maps[] = $map; | ||
| 263 | + self::$map = array (); | ||
| 264 | + self::$chars = ''; | ||
| 265 | + } | ||
| 266 | + | ||
| 267 | + /** | ||
| 268 | + * Append words to the remove list. Accepts either single words | ||
| 269 | + * or an array of words. | ||
| 270 | + */ | ||
| 271 | + public static function remove_words ($words) { | ||
| 272 | + $words = is_array ($words) ? $words : array ($words); | ||
| 273 | + self::$remove_list = array_merge (self::$remove_list, $words); | ||
| 274 | + } | ||
| 275 | + | ||
| 276 | + /** | ||
| 277 | + * Transliterates characters to their ASCII equivalents. | ||
| 278 | + * $language specifies a priority for a specific language. | ||
| 279 | + * The latter is useful if languages have different rules for the same character. | ||
| 280 | + */ | ||
| 281 | + public static function downcode ($text, $language = "") { | ||
| 282 | + self::init ($language); | ||
| 283 | + | ||
| 284 | + if (preg_match_all (self::$regex, $text, $matches)) { | ||
| 285 | + for ($i = 0; $i < count ($matches[0]); $i++) { | ||
| 286 | + $char = $matches[0][$i]; | ||
| 287 | + if (isset (self::$map[$char])) { | ||
| 288 | + $text = str_replace ($char, self::$map[$char], $text); | ||
| 289 | + } | ||
| 290 | + } | ||
| 291 | + } | ||
| 292 | + return $text; | ||
| 293 | + } | ||
| 294 | + | ||
| 295 | + /** | ||
| 296 | + * Filters a string, e.g., "Petty theft" to "petty-theft" | ||
| 297 | + * @param string $text The text to return filtered | ||
| 298 | + * @param int $length The length (after filtering) of the string to be returned | ||
| 299 | + * @param string $language The transliteration language, passed down to downcode() | ||
| 300 | + * @param bool $file_name Whether there should be and additional filter considering this is a filename | ||
| 301 | + * @param bool $use_remove_list Whether you want to remove specific elements previously set in self::$remove_list | ||
| 302 | + * @param bool $lower_case Whether you want the filter to maintain casing or lowercase everything (default) | ||
| 303 | + * @param bool $treat_underscore_as_space Treat underscore as space, so it will replaced with "-" | ||
| 304 | + */ | ||
| 305 | + public static function filter ($text, $length = 999, $language = "", $file_name = false, $use_remove_list = true, $lower_case = true, $treat_underscore_as_space = true) { | ||
| 306 | + $text = self::downcode ($text,$language); | ||
| 307 | + | ||
| 308 | + if ($use_remove_list) { | ||
| 309 | + // remove all these words from the string before urlifying | ||
| 310 | + $text = preg_replace ('/\b(' . join ('|', self::$remove_list) . ')\b/i', '', $text); | ||
| 311 | + } | ||
| 312 | + | ||
| 313 | + // if downcode doesn't hit, the char will be stripped here | ||
| 314 | + $remove_pattern = ($file_name) ? '/[^_\-.\-a-zA-Z0-9\s]/u' : '/[^\s_\-a-zA-Z0-9]/u'; | ||
| 315 | + $text = preg_replace ($remove_pattern, '', $text); // remove unneeded chars | ||
| 316 | + if ($treat_underscore_as_space) { | ||
| 317 | + $text = str_replace ('_', ' ', $text); // treat underscores as spaces | ||
| 318 | + } | ||
| 319 | + $text = preg_replace ('/^\s+|\s+$/u', '', $text); // trim leading/trailing spaces | ||
| 320 | + $text = preg_replace ('/[-\s]+/u', '-', $text); // convert spaces to hyphens | ||
| 321 | + if ($lower_case) { | ||
| 322 | + $text = strtolower ($text); // convert to lowercase | ||
| 323 | + } | ||
| 324 | + | ||
| 325 | + if (function_exists('mb_substr')) { | ||
| 326 | + return trim (mb_substr ($text, 0, (int)$length), '-'); // trim to first $length chars | ||
| 327 | + } else { | ||
| 328 | + return trim (substr ($text, 0, (int)$length), '-'); // trim to first $length chars | ||
| 329 | + } | ||
| 330 | + } | ||
| 331 | + | ||
| 332 | + /** | ||
| 333 | + * Alias of `URLify::downcode()`. | ||
| 334 | + */ | ||
| 335 | + public static function transliterate ($text) { | ||
| 336 | + return self::downcode ($text); | ||
| 337 | + } | ||
| 338 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/system/library/multilingual_seo.php
0 → 100644
| 1 | +<?php | ||
| 2 | +/************************************ | ||
| 3 | + - GeekoDev SEO Package - multilingual handler - | ||
| 4 | +************************************* | ||
| 5 | + | ||
| 6 | + contact : sales@geekodev.com | ||
| 7 | + | ||
| 8 | +************************************/ | ||
| 9 | + | ||
| 10 | +final class multilingual_seo extends Controller { | ||
| 11 | + | ||
| 12 | + public function detect() { | ||
| 13 | + $url_alias = version_compare(VERSION, '3', '>=') ? 'seo_url' : 'url_alias'; | ||
| 14 | + | ||
| 15 | + // prefix mode | ||
| 16 | + if ($this->config->get('mlseo_store_mode')) { | ||
| 17 | + $lang_to_store = $this->config->get('mlseo_lang_to_store'); | ||
| 18 | + | ||
| 19 | + foreach ($lang_to_store as $lang => $store) { | ||
| 20 | + if (isset($this->session->data['language']) && isset($store['config_url']) && strpos($store['config_url'], $this->request->server['HTTP_HOST']) !== false) { | ||
| 21 | + $this->session->data['language'] = $lang; | ||
| 22 | + } | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + // suffix mode | ||
| 26 | + } else if ($this->config->get('mlseo_flag')) { | ||
| 27 | + if (empty($this->request->get['_route_'])) { | ||
| 28 | + if (empty($this->request->get['route'])) { | ||
| 29 | + if (!$this->config->get('mlseo_flag_detect')) { | ||
| 30 | + // redirect if detected language (session, cookie, or browser detect) is not equal to default language | ||
| 31 | + $detect = $this->detectLanguage(); | ||
| 32 | + if ($detect != $this->config->get('mlseo_default_lang')) { | ||
| 33 | + if ($this->config->get('mlseo_flag_short')) { | ||
| 34 | + $detect = substr($detect, 0, 2); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + header('CSP-Redir: lang autodetect', false); | ||
| 38 | + header('Location: '.$this->config->get('config_url') . $detect); | ||
| 39 | + } | ||
| 40 | + } else if (false) { | ||
| 41 | + // detect but don't do anything | ||
| 42 | + return; | ||
| 43 | + } else { | ||
| 44 | + // force default language if no tag | ||
| 45 | + $this->session->data['language'] = $this->config->get('mlseo_default_lang'); | ||
| 46 | + } | ||
| 47 | + } | ||
| 48 | + return; | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + $parts = explode('/', $this->request->get['_route_']); | ||
| 52 | + $lgCode = array_shift($parts); | ||
| 53 | + $lgCodes = (array) $this->config->get('mlseo_lang_codes'); | ||
| 54 | + | ||
| 55 | + $customSeoFlag = $this->config->get('mlseo_flag_custom'); | ||
| 56 | + if (is_array($customSeoFlag)) { | ||
| 57 | + $customSeoFlag = array_flip($customSeoFlag); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + if (!empty($customSeoFlag[$lgCode])) { | ||
| 61 | + $this->session->data['language'] = $customSeoFlag[$lgCode]; | ||
| 62 | + $this->request->get['_route_'] = implode('/', $parts); | ||
| 63 | + } else { | ||
| 64 | + if ($this->config->get('mlseo_flag_short')) { | ||
| 65 | + $lgSearch = array_map(array($this, 'langCode'), $lgCodes); | ||
| 66 | + } else { | ||
| 67 | + $lgSearch = array_map(array($this, 'lowercaseCode'), $lgCodes); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + if ($lgKey = array_search(strtolower($lgCode), $lgSearch)) { | ||
| 71 | + $this->session->data['language'] = $lgCodes[$lgKey]; | ||
| 72 | + $this->request->get['_route_'] = implode('/', $parts); | ||
| 73 | + } else { | ||
| 74 | + if ($this->config->get('mlseo_flag_default') || ($this->config->get('mlseo_flag_detect') && !empty($this->request->get['route']))) { | ||
| 75 | + $this->session->data['language'] = $this->config->get('mlseo_default_lang'); | ||
| 76 | + } | ||
| 77 | + } | ||
| 78 | + } | ||
| 79 | + // multilingual | ||
| 80 | + } else if($this->config->get('mlseo_ml_mode')) { | ||
| 81 | + $get = array(); | ||
| 82 | + | ||
| 83 | + if (isset($this->request->get['_route_'])) { | ||
| 84 | + $parts = explode('/', $this->request->get['_route_']); | ||
| 85 | + | ||
| 86 | + foreach ($parts as $part) { | ||
| 87 | + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . $url_alias . " WHERE keyword = '" . $this->db->escape($part) . "'"); | ||
| 88 | + | ||
| 89 | + if ($query->num_rows) { | ||
| 90 | + $url = explode('=', $query->row['query']); | ||
| 91 | + | ||
| 92 | + if ($url[0] == 'product_id') { | ||
| 93 | + $get['product_id'] = $url[1]; | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + if ($url[0] == 'category_id') { | ||
| 97 | + if (!isset($this->request->get['path'])) { | ||
| 98 | + $get['path'] = $url[1]; | ||
| 99 | + } else { | ||
| 100 | + $get['path'] .= '_' . $url[1]; | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + if ($url[0] == 'manufacturer_id') { | ||
| 105 | + $get['manufacturer_id'] = $url[1]; | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + if ($url[0] == 'information_id') { | ||
| 109 | + $get['information_id'] = $url[1]; | ||
| 110 | + } | ||
| 111 | + } else { | ||
| 112 | + $get['route'] = 'error/not_found'; | ||
| 113 | + } | ||
| 114 | + } | ||
| 115 | + if (isset($get['product_id'])) { | ||
| 116 | + $get['route'] = 'product/product'; | ||
| 117 | + } elseif (isset($get['path'])) { | ||
| 118 | + $get['route'] = 'product/category'; | ||
| 119 | + } elseif (isset($get['manufacturer_id'])) { | ||
| 120 | + $get['route'] = 'product/manufacturer/product'; | ||
| 121 | + } elseif (isset($get['information_id'])) { | ||
| 122 | + $get['route'] = 'information/information'; | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + if (isset($get['route'])) { | ||
| 126 | + if (isset($query->row['language_id']) && ($query->row['language_id'] != 0) && (count($query->rows) === 1)) { | ||
| 127 | + $lgCodes = (array) $this->config->get('mlseo_lang_codes'); | ||
| 128 | + | ||
| 129 | + if (isset($lgCodes[$query->row['language_id']])) { | ||
| 130 | + $this->session->data['language'] = $lgCodes[$query->row['language_id']]; | ||
| 131 | + } | ||
| 132 | + } | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + | ||
| 138 | + private function detectLanguage() { | ||
| 139 | + $code = ''; | ||
| 140 | + | ||
| 141 | + $this->load->model('localisation/language'); | ||
| 142 | + | ||
| 143 | + $languages = $this->model_localisation_language->getLanguages(); | ||
| 144 | + | ||
| 145 | + if (isset($this->session->data['language'])) { | ||
| 146 | + $code = $this->session->data['language']; | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + if (isset($this->request->cookie['language']) && !array_key_exists($code, $languages)) { | ||
| 150 | + $code = $this->request->cookie['language']; | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + // Language Detection | ||
| 154 | + if (!empty($this->request->server['HTTP_ACCEPT_LANGUAGE']) && !array_key_exists($code, $languages)) { | ||
| 155 | + $detect = ''; | ||
| 156 | + | ||
| 157 | + $browser_languages = explode(',', $this->request->server['HTTP_ACCEPT_LANGUAGE']); | ||
| 158 | + | ||
| 159 | + // Try using local to detect the language | ||
| 160 | + foreach ($browser_languages as $browser_language) { | ||
| 161 | + foreach ($languages as $key => $value) { | ||
| 162 | + if ($value['status']) { | ||
| 163 | + $locale = explode(',', $value['locale']); | ||
| 164 | + | ||
| 165 | + if (in_array($browser_language, $locale)) { | ||
| 166 | + $detect = $key; | ||
| 167 | + break 2; | ||
| 168 | + } | ||
| 169 | + } | ||
| 170 | + } | ||
| 171 | + } | ||
| 172 | + | ||
| 173 | + if (!$detect) { | ||
| 174 | + // Try using language folder to detect the language | ||
| 175 | + foreach ($browser_languages as $browser_language) { | ||
| 176 | + if (array_key_exists(strtolower($browser_language), $languages)) { | ||
| 177 | + $detect = strtolower($browser_language); | ||
| 178 | + | ||
| 179 | + break; | ||
| 180 | + } | ||
| 181 | + } | ||
| 182 | + } | ||
| 183 | + | ||
| 184 | + $code = $detect ? $detect : ''; | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + if (!array_key_exists($code, $languages)) { | ||
| 188 | + $code = $this->config->get('config_language'); | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + return $code; | ||
| 192 | + } | ||
| 193 | + | ||
| 194 | + private function langCode($code) { | ||
| 195 | + $code = substr($code, 0, 2); | ||
| 196 | + | ||
| 197 | + return strtolower($code); | ||
| 198 | + } | ||
| 199 | + | ||
| 200 | + private function lowercaseCode($code) { | ||
| 201 | + return strtolower($code); | ||
| 202 | + } | ||
| 203 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
upload/system/library/powercache.php
0 → 100644
| 1 | +<?php | ||
| 2 | +class Powercache { | ||
| 3 | + | ||
| 4 | + private static $instance; | ||
| 5 | + private $file; | ||
| 6 | + | ||
| 7 | + public static function getInstance() | ||
| 8 | + { | ||
| 9 | + if ( is_null( self::$instance ) ) | ||
| 10 | + { | ||
| 11 | + self::$instance = new self(); | ||
| 12 | + } | ||
| 13 | + return self::$instance; | ||
| 14 | + } | ||
| 15 | + | ||
| 16 | + public static function get($file, $key = null) { | ||
| 17 | + $c = self::getInstance(); | ||
| 18 | + | ||
| 19 | + if (!isset($c->file[$file])) { | ||
| 20 | + if (!file_exists(DIR_CACHE . 'pcache.' . $file)) | ||
| 21 | + return null; | ||
| 22 | + | ||
| 23 | + $c->file[$file] = include DIR_CACHE . 'pcache.' . $file; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + if (!$key) | ||
| 27 | + return $c->file[$file]; | ||
| 28 | + | ||
| 29 | + if (!is_array($c->file[$file]) || !array_key_exists($key, $c->file[$file])) | ||
| 30 | + return null; | ||
| 31 | + return $c->file[$file][$key]; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + public static function set($file, $value) { | ||
| 35 | + file_put_contents(DIR_CACHE . 'pcache.' . $file, "<?php\nreturn " . var_export($value, true) . ";\n", LOCK_EX); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + public static function add($file, $key, $value) { | ||
| 39 | + if (file_exists(DIR_CACHE . 'pcache.' . $file)) { | ||
| 40 | + $arr = include DIR_CACHE . 'pcache.' . $file; | ||
| 41 | + } else { | ||
| 42 | + $arr = array(); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + if (!is_array($arr)) { | ||
| 46 | + $arr = array(); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + $arr[$key] = $value; | ||
| 50 | + | ||
| 51 | + file_put_contents(DIR_CACHE . 'pcache.' . $file, "<?php\nreturn " . var_export($arr, true) . ";\n", LOCK_EX); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + public static function remove($file, $key, $val = null) { | ||
| 55 | + $files = array(); | ||
| 56 | + if (file_exists(DIR_CACHE . 'pcache.' . $file)) { | ||
| 57 | + $files[] = DIR_CACHE . 'pcache.' . $file; | ||
| 58 | + } else { | ||
| 59 | + $glob = glob(DIR_CACHE . 'pcache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $file) . '.*'); | ||
| 60 | + | ||
| 61 | + if ($glob) { | ||
| 62 | + foreach ($glob as $file) { | ||
| 63 | + if (file_exists($file)) { | ||
| 64 | + $files[] = $file; | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + foreach ($files as $file) { | ||
| 71 | + $arr = include $file; | ||
| 72 | + $changed = false; | ||
| 73 | + | ||
| 74 | + if (!is_null($val)) { | ||
| 75 | + foreach(array_keys($arr) as $node) { | ||
| 76 | + if (strpos($node, $key) !== false) { | ||
| 77 | + $values = explode('_', str_replace($key, '', $node)); | ||
| 78 | + if (in_array($val, $values)) { | ||
| 79 | + $changed = true; | ||
| 80 | + unset($arr[$node]); | ||
| 81 | + } | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | + } else { | ||
| 85 | + if (isset($arr[$key])) { | ||
| 86 | + $changed = true; | ||
| 87 | + unset($arr[$key]); | ||
| 88 | + } | ||
| 89 | + } | ||
| 90 | + if ($changed) { | ||
| 91 | + file_put_contents($file, "<?php\nreturn " . var_export($arr, true) . ";\n", LOCK_EX); | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + public static function delete($file) { | ||
| 97 | + if (file_exists(DIR_CACHE . 'pcache.' . $file)) { | ||
| 98 | + return unlink(DIR_CACHE . 'pcache.' . $file); | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + $files = glob(DIR_CACHE . 'pcache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $file) . '.*'); | ||
| 102 | + | ||
| 103 | + if ($files) { | ||
| 104 | + foreach ($files as $file) { | ||
| 105 | + if (file_exists($file)) { | ||
| 106 | + unlink($file); | ||
| 107 | + } | ||
| 108 | + } | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | +} | ||
| 112 | +?> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -19,6 +19,7 @@ class SeoPro { | ... | @@ -19,6 +19,7 @@ class SeoPro { |
| 19 | private $url; | 19 | private $url; |
| 20 | private $session; | 20 | private $session; |
| 21 | private $db; | 21 | private $db; |
| 22 | + private $cache; | ||
| 22 | private $cat_tree = []; | 23 | private $cat_tree = []; |
| 23 | private $keywords = []; | 24 | private $keywords = []; |
| 24 | private $queries = []; | 25 | private $queries = []; |
| ... | @@ -427,7 +428,7 @@ class SeoPro { | ... | @@ -427,7 +428,7 @@ class SeoPro { |
| 427 | } | 428 | } |
| 428 | 429 | ||
| 429 | private function getQueryByKeyword($keyword, $language_id = null) { | 430 | private function getQueryByKeyword($keyword, $language_id = null) { |
| 430 | - $query = null; | 431 | + $query = ''; |
| 431 | $store_id = (int)$this->config->get('config_store_id'); | 432 | $store_id = (int)$this->config->get('config_store_id'); |
| 432 | 433 | ||
| 433 | if (!$language_id) | 434 | if (!$language_id) |
| ... | @@ -438,7 +439,7 @@ class SeoPro { | ... | @@ -438,7 +439,7 @@ class SeoPro { |
| 438 | $query = $this->queries[$keyword][$store_id][$language_id]; | 439 | $query = $this->queries[$keyword][$store_id][$language_id]; |
| 439 | } else { | 440 | } else { |
| 440 | $_query = $this->db->query("SELECT query FROM " . DB_PREFIX . "seo_url WHERE keyword = '" . $this->db->escape(trim($keyword)) . "' AND store_id = '" . $store_id . "' AND language_id = '" . $language_id . "' LIMIT 1"); | 441 | $_query = $this->db->query("SELECT query FROM " . DB_PREFIX . "seo_url WHERE keyword = '" . $this->db->escape(trim($keyword)) . "' AND store_id = '" . $store_id . "' AND language_id = '" . $language_id . "' LIMIT 1"); |
| 441 | - $query = !empty($_query->row) ? (string)$_query->row['query'] : null; | 442 | + $query = !empty($_query->row) ? (string)$_query->row['query'] : ''; |
| 442 | } | 443 | } |
| 443 | 444 | ||
| 444 | return $query; | 445 | return $query; | ... | ... |
upload/system/seo_package.ocmod.xml
0 → 100644
This diff could not be displayed because it is too large.
-
Please register or login to post a comment