Permalink
Browse files

initial commit

  • Loading branch information...
0 parents commit 6ef5ac49252cdbecf7ec0737c0aaf1926af29e0b @lx-berlin committed Oct 6, 2012
Showing with 5,417 additions and 0 deletions.
  1. +79 −0 README.md
  2. +2 −0 _config.php
  3. +140 −0 code/FlexSlide.php
  4. +300 −0 code/FlexSlider.php
  5. +18 −0 code/FlexSliderAdmin.php
  6. +19 −0 code/FlexSliderExtension.php
  7. +42 −0 css/flexslider.css
  8. BIN images/icons/flexslider_icon.png
  9. +23 −0 javascript/flexslider.template.js
  10. +25 −0 lang/de.yml
  11. +25 −0 lang/en.yml
  12. +19 −0 templates/Includes/FlexSlider.ss
  13. +130 −0 thirdparty/FlexSlider/README.mdown
  14. +173 −0 thirdparty/FlexSlider/demo/basic-carousel.html
  15. +178 −0 thirdparty/FlexSlider/demo/carousel-min-max.html
  16. +241 −0 thirdparty/FlexSlider/demo/css/demo.css
  17. +226 −0 thirdparty/FlexSlider/demo/css/shCore.css
  18. +117 −0 thirdparty/FlexSlider/demo/css/shThemeDefault.css
  19. BIN thirdparty/FlexSlider/demo/fonts/webfonts/geo-medium/eot/1110FC_0.eot
  20. +411 −0 thirdparty/FlexSlider/demo/fonts/webfonts/geo-medium/svg/1110FC_0.svg
  21. +46 −0 thirdparty/FlexSlider/demo/fonts/webfonts/geo-medium/svg/svg_test.html
  22. BIN thirdparty/FlexSlider/demo/fonts/webfonts/geo-medium/ttf/1110FC_0.ttf
  23. BIN thirdparty/FlexSlider/demo/fonts/webfonts/geo-medium/woff/1110FC_0.woff
  24. BIN thirdparty/FlexSlider/demo/fonts/webfonts/geo-regular/eot/11014B_0.eot
  25. +403 −0 thirdparty/FlexSlider/demo/fonts/webfonts/geo-regular/svg/11014B_0.svg
  26. +46 −0 thirdparty/FlexSlider/demo/fonts/webfonts/geo-regular/svg/svg_test.html
  27. BIN thirdparty/FlexSlider/demo/fonts/webfonts/geo-regular/ttf/11014B_0.ttf
  28. BIN thirdparty/FlexSlider/demo/fonts/webfonts/geo-regular/woff/11014B_0.woff
  29. BIN thirdparty/FlexSlider/demo/fonts/webfonts/geo-semibold/eot/style_169898.eot
  30. +46 −0 thirdparty/FlexSlider/demo/fonts/webfonts/geo-semibold/svg/index.html
  31. +419 −0 thirdparty/FlexSlider/demo/fonts/webfonts/geo-semibold/svg/style_169898.svg
  32. BIN thirdparty/FlexSlider/demo/fonts/webfonts/geo-semibold/ttf/style_169898.ttf
  33. BIN thirdparty/FlexSlider/demo/fonts/webfonts/geo-semibold/woff/style_169898.woff
  34. BIN thirdparty/FlexSlider/demo/images/kitchen_adventurer_caramel.jpg
  35. BIN thirdparty/FlexSlider/demo/images/kitchen_adventurer_cheesecake_brownie.jpg
  36. BIN thirdparty/FlexSlider/demo/images/kitchen_adventurer_donut.jpg
  37. BIN thirdparty/FlexSlider/demo/images/kitchen_adventurer_lemon.jpg
  38. BIN thirdparty/FlexSlider/demo/images/logo.png
  39. +143 −0 thirdparty/FlexSlider/demo/index.html
  40. +16 −0 thirdparty/FlexSlider/demo/js/demo.js
  41. +4 −0 thirdparty/FlexSlider/demo/js/froogaloop.js
  42. +205 −0 thirdparty/FlexSlider/demo/js/jquery.easing.js
  43. +11 −0 thirdparty/FlexSlider/demo/js/jquery.fitvid.js
  44. +84 −0 thirdparty/FlexSlider/demo/js/jquery.mousewheel.js
  45. +2 −0 thirdparty/FlexSlider/demo/js/modernizr.js
  46. +91 −0 thirdparty/FlexSlider/demo/js/shBrushCss.js
  47. +52 −0 thirdparty/FlexSlider/demo/js/shBrushJScript.js
  48. +69 −0 thirdparty/FlexSlider/demo/js/shBrushXml.js
  49. +17 −0 thirdparty/FlexSlider/demo/js/shCore.js
  50. +143 −0 thirdparty/FlexSlider/demo/thumbnail-controlnav.html
  51. +253 −0 thirdparty/FlexSlider/demo/thumbnail-slider.html
  52. +205 −0 thirdparty/FlexSlider/demo/video.html
  53. +75 −0 thirdparty/FlexSlider/flexslider.css
  54. BIN thirdparty/FlexSlider/images/bg_direction_nav.png
  55. +37 −0 thirdparty/FlexSlider/jquery.flexslider-min.js
  56. +882 −0 thirdparty/FlexSlider/jquery.flexslider.js
79 README.md
@@ -0,0 +1,79 @@
+# silverstripe-flexslider
+
+A module for Silverstripe 3.0 that uses the [FlexSlider 2 library](https://github.com/woothemes/FlexSlider) to create sliders. Sliders can be created from within the cms or by instantiating a new FlexSlider Object in php.
+
+## Requirements
+
+Silverstripe 3.0
+
+## Features
+
+- create sliders in the cms (also configure flexslider options in the cms)
+- create sliders of existing objects
+- multiple sliders per page
+- comes with a shortcode to embed cms defined sliders inside the website content
+
+## Install
+
+Download the module and unzip it. Make sure the folder name is "flexslider".
+Add to your _config.php: `Object::add_extension('Page', 'FlexSliderExtension');`
+
+## Usage
+
+### a) embedding a slider that was setup in the cms
+
+Sliders that are setup in the cms, can be output right from the template.
+For example in Page.ss: `$FlexSlider(2,960,450)`
+This will output the slider with the id=2 in your page.
+The values for width (960) and height (450) in this example are just to scale the images in the slides.
+All images of slider 2 will be cropped to these dimensions.
+The slider itself will by default use 100% of the avaialble width in the template.
+So make sure you set some styles in your css, like `.flexslider_2 { width: 400px }` or wrap it in an additional element, like `<div class="slider_wrapper">$FlexSlider(2,960,450)</div>`
+
+### b) using the shortcode
+
+Sliders that are setup in the cms, can also be displayed by using a shortcode.
+Shortcode example: `[FlexSlider id="2" width="400" height="300"]`. This allowes the website administrator to create and embed sliders everywhere. Unlike a) this shortcode will also add style="width: 400px" to the html
+
+### c) make a slider of already existing objects
+
+Lets say you already have many products in your database (with an image). You can output them in a slider by adding a function in your Page.php, like:
+
+`
+public function productSlider() {
+
+ $productSlider = new FlexSlider();
+ $productSlider->ID = "allProducts"; // a cheap trick to identify this slider. will be added as class="flexslider_allProducts" to the template
+ $productSlider->setDatalist(Product::get());
+ $productSlider->setFieldMapping(array( "Picture" => "Photo",
+ "Title" => "Created",
+ "Description" => "SlideDesc",
+ "InternalLink" => "URL" // function URL() must return a Page Object. Or use ExternalLink which must return a string
+ ));
+ // optional
+ $productSlider->setImageWidth(119);
+ // optional
+ $productSlider->setImageHeight(100);
+ // optional
+ $productSlider->setOptions(array("animation" => "slide",
+ "easing" => "linear",
+ "direction" => "vertical",
+ "reverse" => 0,
+ "animationLoop" => 0,
+ "slideshow" => 0,
+ "slideshowSpeed" => 7000,
+ "animationSpeed" => 400,
+ "randomize" => 0,
+ "showControlNav" => 1));
+ // optional
+ $productSlider->addExtraClass("employees");
+
+ return $productSlider;
+}`
+
+In your template file you just need to call `$productSlider`
+
+## Changelog
+
+v1.0 (2012-10-06)
+initial version
2 _config.php
@@ -0,0 +1,2 @@
+<?php
+ShortcodeParser::get('default')->register('FlexSlider',array('FlexSlider','FlexSliderShortCodeHandler'));
140 code/FlexSlide.php
@@ -0,0 +1,140 @@
+<?php
+/**
+* a single slide of a flexslider
+*
+* @package silverstripe-flexslider
+*/
+class FlexSlide extends DataObject {
+
+ public static $singular_name = 'Slide';
+ public static $plural_name = 'Slides';
+
+ public static $db = array('Position' => 'Int(2)',
+ 'SlideTitle' => 'Varchar',
+ 'SlideDescription' => 'Varchar',
+ 'ExternalLink' => 'Varchar',
+ 'isEnabled' => 'Boolean');
+
+ public static $has_one = array('FlexSlider' => 'FlexSlider',
+ 'Picture' => 'Image',
+ 'InternalLink' => 'SiteTree');
+
+ public static $many_many = array();
+
+ public static $belongs_many_many = array();
+
+ // gridfield sorting
+ public static $default_sort = "Position ASC";
+
+ static $searchable_fields = array(
+ 'SlideTitle'
+ );
+
+ // column names of grid (translated to the current admin language)
+ static $field_labels = array('Picture.CMSThumbnail' => 'Image',
+ 'isEnabledText' => 'enabled',
+ 'SlideTitle' => 'Title',
+ 'SlideDescription' => 'Description'
+ );
+
+ // columns in Grid
+ static $summary_fields = array(
+ 'Picture.CMSThumbnail',
+ 'SlideTitle',
+ 'SlideDescription',
+ 'isEnabledText'
+ );
+
+ // form to add/edit records
+ public function getCMSFields() {
+
+ $fields = parent::getCMSFields();
+ $fields->removeByName("FlexSliderID");
+
+ // Main
+ $field_Picture = new UploadField('Picture', _t("FlexSlider.Picture"));
+ $field_Picture->setFolderName("FlexSlides");
+ $field_Picture->setConfig('allowedMaxFileNumber', 1);
+
+ $field_Position = new NumericField("Position", _t("FlexSlider.Position"));
+ $field_Position->RightTitle(_t("FlexSlider.PositionExplain"));
+ $field_SlideTitle = new TextField("SlideTitle", _t("FlexSlider.Title"));
+ $field_SlideDescription = new TextField("SlideDescription", _t("FlexSlider.Description"));
+ $field_InternalLink = new TreeDropdownField("InternalLinkID", _t('FlexSlider.InternalLink'), 'SiteTree');
+ $field_removeInternalLink = new CheckboxField("doRemoveInternalLink", _t("FlexSlider.doRemoveInternalLink"));
+ $field_ExternalLink = new TextField("ExternalLink", _t("FlexSlider.ExternalLink"));
+ $field_isEnabled = new CheckboxField("isEnabled", _t("FlexSlider.isEnabled"));
+
+ $fields->addFieldToTab('Root.Main', $field_Position);
+ $fields->addFieldToTab('Root.Main', $field_Picture);
+ $fields->addFieldToTab('Root.Main', $field_SlideTitle);
+ $fields->addFieldToTab('Root.Main', $field_SlideDescription);
+ $fields->addFieldToTab('Root.Main', $field_InternalLink);
+ $fields->addFieldToTab('Root.Main', $field_removeInternalLink);
+ $fields->addFieldToTab('Root.Main', $field_ExternalLink);
+ $fields->addFieldToTab('Root.Main', $field_isEnabled);
+
+ return $fields;
+ }
+
+ // validator (requires https://github.com/lx-berlin/NetefxValidator)
+ /*
+ public function getCMSValidator() {
+
+ $rule_DateUntil_empty = new NetefxValidatorRuleEMPTY ("DateUntil");
+ $rule_DateUntil_After_DateFrom = new NetefxValidatorRuleFUNCTION ("DateUntil", '', 'error', array('NetefxValidatorLibraryDate', 'UntilIsMinDaysAfterFrom', array('dateFrom' => 'DateFrom','dateUntil' => 'DateUntil', 'min' => 0)));
+ $rule_DateUntil_empty_OR_After_DateFrom = new NetefxValidatorRuleOR ("DateUntil", 'Date Until must be equal or after DateFrom', 'error', array($rule_DateUntil_empty, $rule_DateUntil_After_DateFrom));
+ $rule_TitleEN_required = new NetefxValidatorRuleREQUIRED ("TitleEN");
+ $rule_DescriptionEN_required = new NetefxValidatorRuleREQUIRED ("DescriptionEN");
+ $rule_CityEN_required = new NetefxValidatorRuleREQUIRED ("CityEN");
+
+ $validator = new NetefxValidator($rule_DateUntil_empty_OR_After_DateFrom,
+ $rule_TitleEN_required,
+ $rule_DescriptionEN_required,
+ $rule_CityEN_required);
+ return $validator;
+ }
+ */
+
+ public function onBeforeWrite() {
+ parent::onBeforeWrite();
+
+ if ($this->doRemoveInternalLink) {
+ $this->InternalLinkID = 0;
+ $this->doRemoveInternalLink = false;
+ }
+ }
+
+ public function onBeforeDelete() {
+ parent::onBeforeDelete();
+ }
+
+ public function onAfterWrite() {
+ parent::onAfterWrite();
+ }
+
+ // instead of 1/0 we want "yes"
+ public function isEnabledText() {
+ return ($this->isEnabled) ? _t("FlexSlider.Yes") : "";
+ }
+
+ public function flexCroppedImage($imageWidth,$imageHeight) {
+ $Picture = $this->Picture();
+ if (!$Picture->exists()) return false;
+ return $Picture->croppedImage($imageWidth,$imageHeight);
+ }
+
+ /**
+ * returns either an internal link, an external link or an empty string
+ *
+ */
+ public function getSlideTarget() {
+
+ $link = "";
+ if ($this->InternalLink()->ID > 0) { $link = $this->InternalLink()->Link(); }
+ else if ($this->ExternalLink != "") { $link = $this->ExternalLink; }
+
+ return $link;
+ }
+
+}
300 code/FlexSlider.php
@@ -0,0 +1,300 @@
+<?php
+/**
+* A slider for Silverstripe 3 (uses FlexSlider2: https://github.com/woothemes/FlexSlider)
+*
+* @package silverstripe-flexslider
+*/
+class FlexSlider extends DataObject {
+
+ public static $singular_name = 'Slider';
+ public static $plural_name = 'Sliders';
+
+ public $imageWidth = 1280; // if no imageWidth is set, images will by default be resized to 1280x800, which should be big enough for all websites
+ public $imageHeight = 800;
+ public $FieldMapping = null;
+ public $cssWidth = false; // when a FlexSlider is added by a Shortcode, we want to add style="width: 1280px"
+
+ /**
+ * @var $extraClasses array Extra CSS-classes for the flexslider
+ */
+ protected $extraClasses;
+
+ public static $db = array('Title' => 'Varchar',
+ 'animation' => 'Enum("slide,fade","slide")',
+ 'easing' => 'Enum("linear,swing,easeInQuad,easeOutQuad,easeOutExpo","linear")',
+ 'direction' => 'Enum("horizontal,vertical","horizontal")',
+ 'reverse' => 'Boolean',
+ 'dynamicLoading' => 'Boolean',
+ 'animationLoop' => 'Boolean',
+ 'slideshow' => 'Boolean',
+ 'slideshowSpeed' => 'Int(7000)',
+ 'animationSpeed' => 'Int(600)',
+ 'randomize' => 'Boolean',
+ 'showControlNav' => 'Boolean'
+ );
+
+ public static $has_many = array('FlexSlides' => 'FlexSlide');
+
+ // defaults
+ public function populateDefaults() {
+ $this->animation = "slide";
+ $this->easing = "linear";
+ $this->direction = "horizontal";
+ $this->reverse = 0;
+ $this->animationLoop = 0;
+ $this->slideshow = 0;
+ $this->slideshowSpeed = 7000;
+ $this->animationSpeed = 600;
+ $this->randomize = 0;
+ $this->showControlNav = 1;
+ parent::populateDefaults();
+ }
+
+ // column names of grid (translated to the current admin language)
+ static $field_labels = array('NoSlides' => 'Number of Slides');
+
+ // columns in Grid
+ static $summary_fields = array(
+ 'ID',
+ 'Title',
+ //'NoSlides'
+ );
+
+ public function getCMSFields() {
+
+ $fields = parent::getCMSFields();
+
+ $fields->removeByName("Title");
+ $fields->removeByName("animation");
+ $fields->removeByName("easing");
+ $fields->removeByName("direction");
+ $fields->removeByName("reverse");
+ $fields->removeByName("dynamicLoading");
+ $fields->removeByName("animationLoop");
+ $fields->removeByName("slideshow");
+ $fields->removeByName("slideshowSpeed");
+ $fields->removeByName("animationSpeed");
+ $fields->removeByName("randomize");
+ $fields->removeByName("showControlNav");
+
+ $animationTypes = $this->dbObject("animation")->enumValues();
+ $easingTypes = $this->dbObject("easing")->enumValues();
+ $directions = $this->dbObject("direction")->enumValues();
+
+ // Main
+ $field_Title = new TextField("Title", _t("FlexSlider.Title"));
+ $field_Title->setRightTitle(_t("FlexSlider.TitleDescription"));
+ $field_slideshow = new CheckboxField("slideshow", _t("FlexSlider.slideshow"));
+ $field_animationLoop = new CheckboxField("animationLoop", _t("FlexSlider.animationLoop"));
+ $field_animation = new Dropdownfield("animation", _t("FlexSlider.animationType"), $animationTypes);
+ $field_direction = new Dropdownfield("direction", _t("FlexSlider.direction"), $directions);
+ $field_easing = new Dropdownfield("easing", _t("FlexSlider.easingType"), $easingTypes);
+ $field_easing->setRightTitle(_t("FlexSlider.easingTypeDescription"));
+ $field_slideshowSpeed = new NumericField("slideshowSpeed", _t("FlexSlider.slideshowSpeed"));
+ $field_slideshowSpeed->setRightTitle(_t("FlexSlider.slideshowSpeedDescription"));
+ $field_animationSpeed = new NumericField("animationSpeed", _t("FlexSlider.animationSpeed"));
+ $field_animationSpeed->setRightTitle(_t("FlexSlider.animationSpeedDescription"));
+ $field_randomize = new CheckboxField("randomize", _t("FlexSlider.randomize"));
+ $field_showControlNav = new CheckboxField("showControlNav", _t("FlexSlider.showControlNav"));
+
+ $fields->addFieldToTab('Root.Main', $field_Title);
+ $fields->addFieldToTab('Root.Main', $field_slideshow);
+ $fields->addFieldToTab('Root.Main', $field_animationLoop);
+ $fields->addFieldToTab('Root.Main', $field_animation);
+ $fields->addFieldToTab('Root.Main', $field_direction);
+ $fields->addFieldToTab('Root.Main', $field_easing);
+ $fields->addFieldToTab('Root.Main', $field_slideshowSpeed);
+ $fields->addFieldToTab('Root.Main', $field_animationSpeed);
+ $fields->addFieldToTab('Root.Main', $field_randomize);
+ $fields->addFieldToTab('Root.Main', $field_showControlNav);
+
+ return $fields;
+ }
+
+ public function NoSlides() {
+ return $this->FlexSlides()->Count();
+ }
+
+ public function setDatalist($datalist) {
+ if (!$datalist) user_error("you need to pass a datalist to setDatalist()", E_USER_NOTICE);
+ $this->DataList = $datalist;
+ }
+
+ /**
+ * Add a CSS-class to the fieldset
+ *
+ * @param $class String
+ */
+ public function addExtraClass($class) {
+ $this->extraClasses[$class] = $class;
+ return $this;
+ }
+
+ /**
+ * Compiles all CSS-classes. Optionally includes a "nolabel"-class
+ * if no title was set on the formfield.
+ * Uses {@link Message()} and {@link MessageType()} to add validatoin
+ * error classes which can be used to style the contained tags.
+ *
+ * @return string CSS-classnames
+ */
+ public function extraClass() {
+ $classnames = "";
+ if ($this->extraClasses) {
+ foreach ($this->extraClasses AS $classname) {
+ $classnames.= " flexslider_".$classname;
+ }
+ }
+ return $classnames;
+ }
+
+ /**
+ * adds style="width: 123" to the FlexSlider
+ *
+ * @param mixed $width (either boolean yes/no or int)
+ */
+ public function setCSSWidth($width) {
+ if (!$width) $this->cssWidth = false;
+ elseif ($width > 1) $this->cssWidth = $width;
+ elseif ($width==true) $this->cssWidth = $this->imageWidth;
+ }
+
+ /**
+ * @param array $fieldmapping (e.g. array("Title" => "Fullname", "Description" => "Text"))
+ */
+ public function setFieldMapping ($fieldmapping) {
+ if (!isset($fieldmapping["Picture"])) user_error("you need specify at least 'Picture'", E_USER_NOTICE);
+ $this->FieldMapping = $fieldmapping;
+ }
+
+ /**
+ * @param array $options
+ */
+ public function setOptions($options) {
+ foreach ($options AS $option => $value) {
+ $this->$option = $value;
+ }
+ }
+
+ public function setImageWidth($width) {
+ if ((int)$width > 0) $this->imageWidth = $width;
+ }
+
+ public function setImageHeight($height) {
+ if ((int)$height > 0) $this->imageHeight = $height;
+ }
+
+ public function forTemplate() {
+
+ // flex slider configuration
+ $flexslider_config = array("sliderID" => $this->ID,
+ "settings_animationType" => $this->animation,
+ "settings_easing" => $this->easing,
+ "settings_dynamicLoading" => $this->dynamicLoading,
+ "settings_direction" => $this->direction,
+ "settings_reverse" => $this->reverse,
+ "settings_animationLoop" => $this->animationLoop,
+ "settings_doSlideshow" => $this->slideshow,
+ "settings_slideshowSpeed" => $this->slideshowSpeed,
+ "settings_animationSpeed" => $this->animationSpeed,
+ "settings_randomize" => $this->randomize,
+ "settings_showControlNav" => $this->showControlNav
+ );
+
+ // load all needed Javascript
+ Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.min.js');
+ //Requirements::javascript('//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.js');
+ Requirements::javascript(project() . '/javascript/jquery.easing.1.3.js');
+ Requirements::javascript('flexslider/thirdparty/FlexSlider/jquery.flexslider-min.js');
+ Requirements::javascriptTemplate('flexslider/javascript/flexslider.template.js', $flexslider_config);
+
+ // load css
+ Requirements::css('flexslider/thirdparty/FlexSlider/flexslider.css'); // original css of flexslider
+ Requirements::css('flexslider/css/flexslider.css'); // additional css for flexslider module for silverstripe
+ Requirements::css($this->ThemeDir().'/css/FlexSlider.css'); // look for a custom FlexSlider.css in the projects themes folder
+
+
+ return $this->renderWith('FlexSlider');
+ }
+
+ public function getSlides() {
+
+ // getting the slides of a flexslider that was created in the cms
+ if ($this->FlexSlides()->exists()) {
+ $FlexSlides = $this->FlexSlides()->filter("isEnabled",1);
+ if (!$FlexSlides->exists()) return false;
+ }
+ // getting the slides of a flexslider that was instanced with "$Slider = new FlexSlider(); $Slider->setDatalist($datalist);"
+ elseif ($this->DataList) {
+ $FlexSlides = $this->createSlidesFromDataList();
+ }
+
+ return $FlexSlides;
+ }
+
+ /**
+ * If the slided Objects are created with $productSlider->setDatalist(Product::get()),
+ * wen need to build an ArrayList of them
+ */
+ public function createSlidesFromDataList() {
+
+ $slide_title = false;
+ $slide_description = false;
+ $slide_internallink = false;
+ $slide_externallink = false;
+
+ $slide_picture = $this->FieldMapping["Picture"];
+ if (isset($this->FieldMapping["Title"])) $slide_title = $this->FieldMapping["Title"];
+ if (isset($this->FieldMapping["Description"])) $slide_description = $this->FieldMapping["Description"];
+ if (isset($this->FieldMapping["InternalLink"])) $slide_internallink = $this->FieldMapping["InternalLink"];
+ if (isset($this->FieldMapping["ExternalLink"])) $slide_externallink = $this->FieldMapping["ExternalLink"];
+
+ $FlexSlides = new ArrayList();
+ foreach ($this->DataList AS $Obj) {
+ $FlexSlide = new FlexSlide();
+
+ // Picture
+ if ($Obj->hasMethod($slide_picture)) $FlexSlide->PictureID = $Obj->$slide_picture()->ID;
+ // SlideTitle
+ if ($slide_title) {
+ if (isset($Obj->$slide_title)) $FlexSlide->SlideTitle = $Obj->$slide_title;
+ elseif ($Obj->hasMethod($slide_title)) $FlexSlide->SlideTitle = $Obj->$slide_title();
+ }
+ // SlideDescription
+ if ($slide_description) {
+ if (isset($Obj->$slide_description)) $FlexSlide->SlideDescription = $Obj->$slide_description;
+ elseif ($Obj->hasMethod($slide_description)) $FlexSlide->SlideDescription = $Obj->$slide_description();
+ }
+ // InternalLink
+ if ($slide_internallink) {
+ if ($Obj->hasMethod($slide_internallink)) $FlexSlide->InternalLinkID = $Obj->$slide_internallink()->ID;
+ }
+ // ExternalLink
+ if ($slide_externallink) {
+ if (isset($Obj->$slide_externallink)) $FlexSlide->ExternalLink = $Obj->$slide_externallink;
+ elseif ($Obj->hasMethod($slide_externallink)) $FlexSlide->ExternalLink = $Obj->$slide_externallink();
+ }
+
+ $FlexSlides->push($FlexSlide);
+ }
+ return $FlexSlides;
+ }
+
+
+ /**
+ * @example [FlexSlider id="2" width="400" height="300"]
+ */
+ public static function FlexSliderShortCodeHandler($arguments) {
+
+ if (!isset($arguments['id'])) return;
+
+ $imageWidth = (isset($arguments['width'])) && ((int)$arguments['width']>0) ? (int)$arguments['width'] : null;
+ $imageHeight = (isset($arguments['height'])) && ((int)$arguments['height']>0) ? (int)$arguments['height'] : null;
+
+ $newPage = new Page();
+ $fs = $newPage->FlexSlider($arguments['id'], $arguments['width'], $arguments['height']);
+ $fs->setCSSWidth(true);
+ return $fs->forTemplate();
+ }
+
+}
18 code/FlexSliderAdmin.php
@@ -0,0 +1,18 @@
+<?php
+class FlexSliderAdmin extends ModelAdmin {
+
+ public static $managed_models = array('FlexSlider');
+
+ // disable the importer
+ public static $model_importers = array();
+
+ // Linked as /admin/slides/
+ static $url_segment = 'slides';
+
+ // title in cms navigation
+ static $menu_title = 'Slider';
+
+ // menu icon
+ static $menu_icon = 'flexslider/images/icons/flexslider_icon.png';
+
+}
19 code/FlexSliderExtension.php
@@ -0,0 +1,19 @@
+<?php
+class FlexSliderExtension extends DataExtension {
+
+ /**
+ * @example in template: $FlexSlider(2, 960, 450)
+ */
+ public function FlexSlider($ID=1, $imageWidth=null, $imageHeight=null) {
+
+ $FlexSlider = FlexSlider::get()->byID($ID);
+ if (!$FlexSlider) return false;
+
+ // set imageWidth and imageHeight
+ if ($imageWidth) $FlexSlider->setImageWidth($imageWidth);
+ if ($imageHeight) $FlexSlider->setImageHeight($imageHeight);
+
+ return $FlexSlider;
+ }
+
+}
42 css/flexslider.css
@@ -0,0 +1,42 @@
+/**
+* set margins to 0px
+*/
+.flexslider .slides { margin: 0px; }
+.flexslider .slides li { margin: 0px; }
+.flexslider .flex-control-nav { margin: 0px; }
+.flexslider .flex-control-paging { margin: 0px; }
+.flexslider .flex-direction-nav { margin: 0px; }
+
+/**
+* Additional Styles
+*/
+
+/* Caption style */
+/* IE rgba() hack */
+.flex-caption {
+ background:none;
+ -ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4C000000,endColorstr=#4C000000);
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4C000000,endColorstr=#4C000000); zoom: 1;
+}
+.flex-caption {
+ width: 96%;
+ padding: 2%;
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ background: rgba(0,0,0,.3);
+ color: #fff;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.3);
+ font-size: 14px;
+ line-height: 18px;
+}
+
+.flex-caption-inner { }
+.flex-caption-inner.heading { display: block; font-weight: bold; }
+.flex-caption-inner.description { display: block; }
+
+/**
+* Bugfix: ist keine Slideshow aktiviert (nur manuelles scrollen), dann sind auf dem ersten und letzten Slide jeweils die deaktivierten navi-buttons ausserhalb des Containers zu sehen
+*/
+.flexslider .flex-direction-nav .flex-disabled {display:none;}
+.flexslider:hover .flex-direction-nav .flex-disabled {display:block; opacity: .3!important; filter:alpha(opacity=30); cursor: default;}
BIN images/icons/flexslider_icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 javascript/flexslider.template.js
@@ -0,0 +1,23 @@
+$(document).ready(function() {
+ $('.flexslider_$sliderID').flexslider({
+ animation: "$settings_animationType", // funktioniert
+ easing: "$settings_easing", // man sieht irgendwie keinen Unterschied zwischen den verschiedenen Optionen
+ direction: "$settings_direction", // funktioniert
+ reverse: $settings_reverse, // funktioniert
+ animationLoop: $settings_animationLoop, // funktioniert
+ slideshow: $settings_doSlideshow, // funktioniert
+ slideshowSpeed: "$settings_slideshowSpeed", // funktioniert
+ animationSpeed: "$settings_animationSpeed", // funktioniert
+ randomize: $settings_randomize, // funktioniert
+ controlNav: $settings_showControlNav // funktioniert
+ //before: FLXslideBeforeHandler
+ });
+
+});
+
+FLXslideBeforeHandler = function() {
+ //console.log("before!");
+ //FLXaddContentToSlides();
+}
+
+//FLXaddContentToSlides = function() {}
25 lang/de.yml
@@ -0,0 +1,25 @@
+de:
+ FlexSlider:
+ Yes: "Ja"
+ Title: "Titel"
+ TitleDescription: "Dient nur der Übersicht im CMS"
+ Description: "Text"
+ ExternalLink: "externer Link"
+ isEnabled: "ist aktiv"
+ Picture: "Bild"
+ InternalLink: "interner Link"
+ doRemoveInternalLink: "internen Link entfernen"
+ Position: "Position"
+ PositionExplain: "dient der Festlegung der Reihenfolge [0-99]"
+ animationType: "Animationsart"
+ easingType: "Be- und entschleunigungsart der Slides"
+ easingTypeDescription: "Änderung dieses Parameters zeigt zur Zeit keinen Effekt"
+ direction: "Bewegungsrichtung"
+ animationLoop: "Slideshow dauerhaft wiederholen"
+ slideshow: "Slideshow: Slides automatisch bewegen"
+ slideshowSpeed: "Frequenz der Slidewechsel"
+ slideshowSpeedDescription: "Ein Wert von 5000 bedeutet, dass die Slides alle 5 Sekunden wechseln."
+ animationSpeed: "Geschwindigkeit der Animationsart"
+ animationSpeedDescription: "Ein Wert von 2000 bedeutet, dass die Überblendung zum nächsten Slide 2 Sekunden dauert."
+ randomize: "Zufällige Reihenfolge"
+ showControlNav: "Paging anzeigen"
25 lang/en.yml
@@ -0,0 +1,25 @@
+en:
+ FlexSlider:
+ Yes: "Yes"
+ Title: "title"
+ TitleDescription: "Only for overview in cms"
+ Description: "description"
+ ExternalLink: "external link"
+ isEnabled: "enabled"
+ Picture: "Picture"
+ InternalLink: "internal link"
+ doRemoveInternalLink: "remove internal link"
+ Position: "position"
+ PositionExplain: "determs the order of the slides [0-99]"
+ animationType: "Type of animation"
+ easingType: "De- and acceleration of the slides"
+ easingTypeDescription: "Changing this parameter does not show any effect right now"
+ direction: "Direction"
+ animationLoop: "Loop slideshow"
+ slideshow: "Slideshow: slides move automatically"
+ slideshowSpeed: "Speed of changing slides"
+ slideshowSpeedDescription: "A value of 5000 means, that the slides change every 5 seconds."
+ animationSpeed: "Speed of type of animation"
+ animationSpeedDescription: "A value of 2000 means, that it takes 2 seconds to fade/slide to the next slide."
+ randomize: "Random order"
+ showControlNav: "Show paging"
19 templates/Includes/FlexSlider.ss
@@ -0,0 +1,19 @@
+<div class="flexslider flexslider_{$ID} $extraClass" <% if $cssWidth %>style="width: {$cssWidth}px"<% end_if %>>
+ <ul class="slides">
+ <% control getSlides %>
+ <% if $Picture %>
+ <li>
+ <% if $getSlideTarget %><a href="$getSlideTarget" target="_blank"><% end_if %>
+ $flexCroppedImage($Top.imageWidth, $Top.imageHeight)
+ <% if $getSlideTarget %></a><% end_if %>
+ <% if $SlideTitle || $SlideDescription %>
+ <p class="flex-caption">
+ <% if $SlideTitle %><span class="flex-caption-inner heading">$SlideTitle</span><% end_if %>
+ <% if $SlideDescription %><span class="flex-caption-inner description">$SlideDescription</span><% end_if %>
+ </p>
+ <% end_if %>
+ </li>
+ <% end_if %>
+ <% end_control %>
+ </ul>
+</div>
130 thirdparty/FlexSlider/README.mdown
@@ -0,0 +1,130 @@
+# FlexSlider 2
+http://www.woothemes.com/flexslider/ - Copyright (c) 2012 WooThemes
+
+Documentation guides for properties and theming are coming soon. Shortly thereafter, the download builder will be released, where you can create minified FlexSlider scripts that contain only the properties you need. It's a brave new world.
+
+## General Notes
+FlexSlider is no longer licensed under the MIT license. FlexSlider now shares the common licensed used for all WooThemes themes, GPLv2.
+
+In an effort to move the plugin forward, support for jQuery 1.3.2 has been dropped. The plugin now requires jQuery 1.4.2+. If you don't have access to the later versions of jQuery, [FlexSlider 1.8](https://github.com/woothemes/FlexSlider/tree/flexslider1) should be a perfectly suitable substitute for your needs!
+
+Your old styles and properties *might not work out of the box*. Some property names have been changed, noted below, as well as namespacing prefixes being applied to all elements. This means that `.flex-direction-nav .next` is now `.flex-direction-nav .flex-next` by default. The namespacing property is exposed, free for you to change.
+
+## Updates
+No more overflow hidden woes! The plugin now generates a viewport element to handle the tedious task of working around overflow hidden. Yay!
+
+The slider element is now accessible outside of the callback API via the jQuery .data() method. Example use: `$('#slider').data('flexslider')`
+
+Helper strings have been added for performing actions quickly on FlexSlider elements. Example uses:
+
+- `$('#slider').flexslider("play") //Play slideshow`
+- `$('#slider').flexslider("pause") //Pause slideshow`
+- `$('#slider').flexslider("next") //Go to next slide`
+- `$('#slider').flexslider("prev") //Go to previous slide`
+- `$('#slider').flexslider(3) //Go fourth slide`
+
+Two new methods are available for adding/removing slides, `slider.addSlide()` and `slider.removeSlide()`. More details about this coming soon.
+
+- `slider.addSlide(obj, pos)` accepts two parameters, a string/jQuery object and an index.
+- `slider.removeSlide(obj)` accepts one parameter, either an object to be removed, or an index.
+
+## Examples
+
+- [Basic Slider](http://flexslider.woothemes.com/)
+- [Slider w/thumbnail controlNav pattern](http://flexslider.woothemes.com/thumbnail-controlnav.html)
+- [Slider w/thumbnail slider](http://flexslider.woothemes.com/thumbnail-slider.html)
+- [Basic Carousel](http://flexslider.woothemes.com/basic-carousel.html)
+- [Carousel with min and max ranges](http://flexslider.woothemes.com/carousel-min-max.html)
+- [Video with Vimeo API](http://flexslider.woothemes.com/video.html)
+
+
+## Properties
+
+### namespace: *{new}*
+`namespace` controls the prefixes attached to elements created by the plugin. In previous releases, only certain elements were tagged with a prefix class, which was causing class generalization issues for some users. FlexSlider now prefixes all generated elements with the appropriate namespace.
+
+*Hint: `namespace` can be an empty string.*
+
+### selector: *{new}*
+The markup structure for FlexSlider has been limited to a "ul.slide li" pattern in previous versions of FlexSlider; no longer. You can now take full control of the markup structure used for your FlexSlider. The `selector` pattern "{container} > {slide}" is mandatory, allowing the plugin to predictably interpret the selector property. Omitting the ">" from the selector is not suggested, but is possible if your markup doesn't follow the immediate descendant pattern.
+
+*Examples: "section > article", ".slides > .slide", "#hero .slide"*
+
+### easing: *{new}*
+`easing` allows support for jQuery easing! Default options provided by jQuery are "swing" and "linear," but more can be used by included the jQuery Easing plugin. *If you chose a non-existent easing method, the slider will break.*
+
+*Note: You need to set `useCCS: false` to force transitions in browsers that support translate3d.*
+*Optional: [jQuery Easing Plugin](http://gsgd.co.uk/sandbox/jquery/easing/)*
+
+### direction: *{changed}*
+Previously called "slideDirection" in v1.8 and below.
+
+### reverse: *{new}*
+`reverse` will reverse the animation direction of the slider. Meaning, horizontal sliders can move from right to left, and vertical sliders can move bottom to top.
+
+### smoothHeight: *{new}*
+`smoothHeight` allows for smooth height transitions between slides. This property currently works for the fade and horizontal slide animation. The property has no effect on horizontal sliding carousels, however.
+
+### startAt: *{changed}*
+Previously called "slideToStart" in v1.8 and below.
+
+### animationSpeed: *{changed}*
+Previously called "animationDuration" in v1.8 and below.
+
+### initDelay: *{new}*
+`initDelay` will delay the initial slideshow of a slider, given in milliseconds. The slider will still initialize, generating controls and displaying the first image, but the slideshow will wait until the `initDelay` time has completed before starting the slideshow.
+
+### useCSS: *{new}*
+`useCSS` allow users to override using CSS3 for animation. Translate3d still has numerous bugs that can crop up and wreak havoc, so this is a great property to play with if you are experiencing unexplainable issues in Webkit browsers.
+
+*Hint: Use conditionals to enable/disable the use of CSS3 on desktops and mobile devices. Mobile devices, in my experience, do not share many of the translate3d bugs seen on desktop browsers.*
+
+### touch: *{new}*
+`touch` allows users to exclude touch swipe functionality from their sliders.
+
+### keyboard: *{changed}*
+Previously called "keyboardNav" in v1.8 and below.
+
+### multipleKeyboard *{new}*
+`multipleKeyboard` allows users to override the default plugin keyboard behavior, enabling keyboard control of more than one slider on the page. This means that all visible sliders will animate, at the same time, via keyboard input.
+
+*Hint: You can use `multipleKeyboard` to allow keyboard navigation on pages where multiple sliders are present, but only one is visible.*
+
+### mousewheel: *{updated}*
+`mousewheel` now requires the jQuery Mousewheel plugin. There are a few reasons for this, but primarily because there is no need for FlexSlider itself to reinvent the awkward complexity of mousewheel interactivity that is handled perfectly by the Mousewheel plugin.
+
+*Required: [jQuery Mousewheel Plugin](https://github.com/brandonaaron/jquery-mousewheel)*
+
+### controlsContainer: *{updated}*
+`controlsContainer` is one of the more painstaking, potentially confusing properties within FlexSlider. First, the property is no longer required to workaround `overflow: hidden` on slide animation. Second, the property now accepts a **jQuery object**, giving you precise control over the object you want. The plugin no longer attempts to guess what element you are selecting.
+
+### sync: *{new}*
+`sync` is a new property that will allow other slider(s) to hook into the current slider via a given selector. The selector should describe an object that has already been initialized as a FlexSlider. Right now, `sync` will synchronize animation, play, and pause behaviors. More behaviors can be added in the future as the property matures.
+
+*[Example of sync being used](http://flex.madebymufffin.com/examples/basic-carousel.html)*
+
+### asNavFor: *{new}*
+Description to be added.
+
+### itemWidth: *{new}*
+`itemWidth` is the primary property for the new carousel options. Without this property, your slider is not considered a carousel. To use `itemWidth`, give an integer value of the width of your individual slides. This should include borders and paddings applied to your slides; a total width measurement.
+
+### itemMargin: *{new}*
+`itemMargin` describes the gutter between the slide elements. If each slide has a margin-left of 10px, your itemMargin value would be 10. If elements have margin: 0 10px, your itemMargin would be 20.
+
+### minItems: *{new}*
+`minItems` describes the minimum number of slide elements that should be visible in the carousel. When the slider reaches the minimum item count, the slides will resize fluidly with the slider.
+
+### maxItems: *{new}*
+`maxItems` describes the maximum number of slide elements that should be visible in the carousel. When the slider reaches the maximum item count, the slides will resize fluidly with the sider.
+
+### move: *{new}*
+`move` determines how many slides should be animated within the carousel. When left at 0, the slider will animate the number of visible slides. If any value greater than 0 is given, the slider will animate that number of slides in the carousel on each animation interval.
+
+*Hint: The move property will be ignored if the value is higher than the number of visible slides, which can be utilized in responsive design.*
+
+### added: *{new}*
+`added()` is a new callback event fired in the new slider.addSlide() function.
+
+### removed: *{new}*
+`removed()` is a new callback event fired in the new slider.removeSlide() function.
173 thirdparty/FlexSlider/demo/basic-carousel.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html class="no-js" lang="en">
+<head>
+ <meta content="charset=utf-8">
+ <title>FlexSlider 2</title>
+ <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
+
+ <!-- Syntax Highlighter -->
+ <link href="css/shCore.css" rel="stylesheet" type="text/css" />
+ <link href="css/shThemeDefault.css" rel="stylesheet" type="text/css" />
+ <!-- Demo CSS -->
+ <link rel="stylesheet" href="css/demo.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="../flexslider.css" type="text/css" media="screen" />
+
+ <!-- Modernizr -->
+ <script src="js/modernizr.js"></script>
+
+</head>
+<body class="loading">
+
+ <div id="top">
+
+ <a href="http://www.woothemes.com" title="WooThemes">
+ <img src="images/logo.png" alt="WooThemes" />
+ </a>
+
+ </div>
+
+ <div id="container" class="cf">
+ <header role="navigation">
+ <h1>FlexSlider 2</h1>
+ <h2>The best responsive slider. Period.</h2>
+ <a class="button green" href="https://github.com/woothemes/FlexSlider/zipball/master">Download Flexslider</a>
+ <nav>
+ <h3>Other Examples</h3>
+ <ul>
+ <li><a href="index.html">Basic Slider</a></li>
+ <li><a href="thumbnail-controlnav.html">Slider w/thumbnail controlNav pattern</a></li>
+ <li><a href="thumbnail-slider.html">Slider w/thumbnail slider</a></li>
+ <li><a class="active" href="basic-carousel.html">Basic Carousel</a></li>
+ <li><a href="carousel-min-max.html">Carousel with min and max ranges</a></li>
+ <li><a href="video.html">Video & the api (vimeo)</a></li>
+ </ul>
+ </nav>
+ </header>
+
+ <div id="main" role="main">
+ <section class="slider">
+ <div class="flexslider carousel">
+ <ul class="slides">
+ <li>
+ <img src="images/kitchen_adventurer_cheesecake_brownie.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_lemon.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_donut.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_caramel.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_cheesecake_brownie.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_lemon.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_donut.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_caramel.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_cheesecake_brownie.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_lemon.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_donut.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_caramel.jpg" />
+ </li>
+ </ul>
+ </div>
+ </section>
+ <aside>
+ <div class="cf">
+ <h3>Basic Carousel</h3>
+ <ul class="toggle cf">
+ <li class="js"><a href="#view-js">JS</a></li>
+ <li class="html"><a href="#view-html">HTML</a></li>
+ </ul>
+ </div>
+ <div id="view-js" class="code">
+ <pre class="brush: js; toolbar: false; gutter: false;">
+ $(window).load(function() {
+ $('.flexslider').flexslider({
+ animation: "slide",
+ animationLoop: false,
+ itemWidth: 210,
+ itemMargin: 5
+ });
+ });
+ </pre>
+ </div>
+ <div id="view-html" class="code">
+ <pre class="brush: xml; toolbar: false; gutter: false;">
+ &lt;!-- Place somewhere in the &lt;body&gt; of your page -->
+ &lt;div class="flexslider">
+ &lt;ul class="slides">
+ &lt;li>
+ &lt;img src="slide1.jpg" />
+ &lt;/li>
+ &lt;li>
+ &lt;img src="slide2.jpg" />
+ &lt;/li>
+ &lt;li>
+ &lt;img src="slide3.jpg" />
+ &lt;/li>
+ &lt;li>
+ &lt;img src="slide4.jpg" />
+ &lt;/li>
+ &lt;!-- items mirrored twice, total of 12 -->
+ &lt;/ul>
+ &lt;/div>
+ </pre>
+ </div>
+ </aside>
+ </div>
+
+ </div>
+
+ <!-- jQuery -->
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
+ <script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.min.js">\x3C/script>')</script>
+
+ <!-- FlexSlider -->
+ <script defer src="../jquery.flexslider.js"></script>
+
+ <script type="text/javascript">
+ $(function(){
+ SyntaxHighlighter.all();
+ });
+ $(window).load(function(){
+ $('.flexslider').flexslider({
+ animation: "slide",
+ animationLoop: false,
+ itemWidth: 210,
+ itemMargin: 5,
+ start: function(slider){
+ $('body').removeClass('loading');
+ }
+ });
+ });
+ </script>
+
+
+ <!-- Syntax Highlighter -->
+ <script type="text/javascript" src="js/shCore.js"></script>
+ <script type="text/javascript" src="js/shBrushXml.js"></script>
+ <script type="text/javascript" src="js/shBrushJScript.js"></script>
+
+ <!-- Optional FlexSlider Additions -->
+ <script src="js/jquery.easing.js"></script>
+ <script src="js/jquery.mousewheel.js"></script>
+ <script defer src="js/demo.js"></script>
+
+</body>
+</html>
178 thirdparty/FlexSlider/demo/carousel-min-max.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html>
+<html class="no-js" lang="en">
+<head>
+ <meta content="charset=utf-8">
+ <title>FlexSlider 2</title>
+ <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
+
+ <!-- Syntax Highlighter -->
+ <link href="css/shCore.css" rel="stylesheet" type="text/css" />
+ <link href="css/shThemeDefault.css" rel="stylesheet" type="text/css" />
+ <!-- Demo CSS -->
+ <link rel="stylesheet" href="css/demo.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="../flexslider.css" type="text/css" media="screen" />
+
+ <!-- Modernizr -->
+ <script src="js/modernizr.js"></script>
+
+</head>
+<body class="loading">
+
+ <div id="top">
+
+ <a href="http://www.woothemes.com" title="WooThemes">
+ <img src="images/logo.png" alt="WooThemes" />
+ </a>
+
+ </div>
+
+ <div id="container" class="cf">
+ <header role="navigation">
+ <h1>FlexSlider 2</h1>
+ <h2>The best responsive slider. Period.</h2>
+ <a class="button green" href="https://github.com/woothemes/FlexSlider/zipball/master">Download Flexslider</a>
+ <nav>
+ <h3>Other Examples</h3>
+ <ul>
+ <li><a href="index.html">Basic Slider</a></li>
+ <li><a href="thumbnail-controlnav.html">Slider w/thumbnail controlNav pattern</a></li>
+ <li><a href="thumbnail-slider.html">Slider w/thumbnail slider</a></li>
+ <li><a href="basic-carousel.html">Basic Carousel</a></li>
+ <li><a class="active" href="carousel-min-max.html">Carousel with min and max ranges</a></li>
+ <li><a href="video.html">Video & the api (vimeo)</a></li>
+ </ul>
+ </nav>
+ </header>
+
+ <div id="main" role="main">
+ <section class="slider">
+ <div class="flexslider carousel">
+ <ul class="slides">
+ <li>
+ <img src="images/kitchen_adventurer_cheesecake_brownie.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_lemon.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_donut.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_caramel.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_cheesecake_brownie.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_lemon.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_donut.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_caramel.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_cheesecake_brownie.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_lemon.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_donut.jpg" />
+ </li>
+ <li>
+ <img src="images/kitchen_adventurer_caramel.jpg" />
+ </li>
+ </ul>
+ </div>
+ </section>
+ <aside>
+ <div class="cf">
+ <h3>Carousel With Min &amp; Max Ranges</h3>
+ <ul class="toggle cf">
+ <li class="js"><a href="#view-js">JS</a></li>
+ <li class="html"><a href="#view-html">HTML</a></li>
+ </ul>
+ </div>
+ <div id="view-js" class="code">
+ <pre class="brush: js; toolbar: false; gutter: false;">
+ // Can also be used with $(document).ready()
+ $(window).load(function() {
+ $('.flexslider').flexslider({
+ animation: "slide",
+ animationLoop: false,
+ itemWidth: 210,
+ itemMargin: 5,
+ minItems: 2,
+ maxItems: 4
+ });
+ });
+ </pre>
+ </div>
+ <div id="view-html" class="code">
+ <pre class="brush: xml; toolbar: false; gutter: false;">
+ &lt;!-- Place somewhere in the &lt;body&gt; of your page -->
+ &lt;div class="flexslider">
+ &lt;ul class="slides">
+ &lt;li>
+ &lt;img src="slide1.jpg" />
+ &lt;/li>
+ &lt;li>
+ &lt;img src="slide2.jpg" />
+ &lt;/li>
+ &lt;li>
+ &lt;img src="slide3.jpg" />
+ &lt;/li>
+ &lt;li>
+ &lt;img src="slide4.jpg" />
+ &lt;/li>
+ &lt;!-- items mirrored twice, total of 12 -->
+ &lt;/ul>
+ &lt;/div>
+ </pre>
+ </div>
+ </aside>
+ </div>
+
+ </div>
+
+ <!-- jQuery -->
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
+ <script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.min.js">\x3C/script>')</script>
+
+ <!-- FlexSlider -->
+ <script defer src="../jquery.flexslider.js"></script>
+
+ <script type="text/javascript">
+ $(function(){
+ SyntaxHighlighter.all();
+ });
+ $(window).load(function(){
+ $('.flexslider').flexslider({
+ animation: "slide",
+ animationLoop: false,
+ itemWidth: 210,
+ itemMargin: 5,
+ minItems: 2,
+ maxItems: 4,
+ start: function(slider){
+ $('body').removeClass('loading');
+ }
+ });
+ });
+ </script>
+
+
+ <!-- Syntax Highlighter -->
+ <script type="text/javascript" src="js/shCore.js"></script>
+ <script type="text/javascript" src="js/shBrushXml.js"></script>
+ <script type="text/javascript" src="js/shBrushJScript.js"></script>
+
+ <!-- Optional FlexSlider Additions -->
+ <script src="js/jquery.easing.js"></script>
+ <script src="js/jquery.mousewheel.js"></script>
+ <script defer src="js/demo.js"></script>
+
+</body>
+</html>
241 thirdparty/FlexSlider/demo/css/demo.css
@@ -0,0 +1,241 @@
+/* Reset Styles
+***********************/
+html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,b, u, i, center,dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td,article, aside, canvas, details, embed,figure, figcaption, footer, header, hgroup,menu, nav, output, ruby, section, summary,time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,footer, header, hgroup, menu, nav, section {display: block;}
+body {line-height: 1;}
+ol, ul {list-style: none;}
+blockquote, q demo
+blockquote:before, blockquote:after,q:before, q:after {content: ''; content: none;}
+table {border-collapse: collapse; border-spacing: 0;}
+strong {font-weight: bold;}
+em {font-style: italic;}
+
+
+/*
+ * MyFonts Webfont Build ID 1114443, 2011-09-02T06:08:04-0400 - REGULAR
+ * MyFonts Webfont Build ID 1118460, 2011-09-05T07:13:16-0400 - MEDIUM
+ * MyFonts Webfont Build ID 825795, 2011-05-26T03:42:08-0400 - SEMIBOLD
+ *
+ * The fonts listed in this notice are subject to the End User License
+ * Agreement(s) entered into by the website owner. All other parties are
+ * explicitly restricted from using the Licensed Webfonts(s).
+ *
+ * You may obtain a valid license at the URLs below
+ *
+ * License: http://www.myfonts.com/viewlicense?type=web&buildid=1114443 - REGULAR
+ * License: http://www.myfonts.com/viewlicense?type=web&buildid=1118460 - MEDIUM
+ * License: http://www.myfonts.com/viewlicense?1056 - SEMIBOLD
+ *
+ * Webfont: Geogrotesque SemiBold
+ * URL: http://new.myfonts.com/fonts/emtype/geogrotesque/semibold/
+ * Foundry: Emtype Foundry
+ * Copyright: Copyright © 2009 by Eduardo Manso. All rights reserved.
+ * Licensed pageviews: 10,000,000/month
+ *
+ * © 2011 Bitstream Inc
+*/
+
+/* GEO - Semibold */
+@font-face {font-family: 'Geogrotesque-SemiBold';src: url('../fonts/webfonts/geo-semibold/eot/style_169898.eot');src: url('../fonts/webfonts/geo-semibold/eot/style_169898.eot?#iefix') format('embedded-opentype'),url('../fonts/webfonts/geo-semibold/woff/style_169898.woff') format('woff'),url('../fonts/webfonts/geo-semibold/ttf/style_169898.ttf') format('truetype'),url('../fonts/webfonts/geo-semibold/svg/style_169898.svg#Geogrotesque-SemiBold') format('svg');}
+
+/* GEO - Medium */
+@font-face {font-family: 'Geogrotesque-Medium';src: url('../fonts/webfonts/geo-medium/eot/1110FC_0.eot');src: url('../fonts/webfonts/geo-medium/eot/1110FC_0.eot?#iefix') format('embedded-opentype'),url('../fonts/webfonts/geo-medium/woff/1110FC_0.woff') format('woff'),url('../fonts/webfonts/geo-medium/ttf/1110FC_0.ttf') format('truetype'),url('webfonts/1110FC_0.svg#wf') format('svg');}
+
+/* GEO - Regular */
+ @font-face {font-family: 'Geogrotesque-Regular';src: url('../fonts/webfonts/geo-regular/eot/11014B_0.eot');src: url('../fonts/webfonts/geo-regular/eot/11014B_0.eot?#iefix') format('embedded-opentype'),url('../fonts/webfonts/geo-regular/woff/11014B_0.woff') format('woff'),url('../fonts/webfonts/geo-regular/ttf/11014B_0.ttf') format('truetype'),url('../fonts/webfonts/geo-regular/svg/11014B_0.svg#wf') format('svg');}
+
+
+
+/* General
+***********************/
+body {
+ background: #fff; font-size: 14px; font-family: Helvetica, 'Arial', sans-serif; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
+ height: auto;
+ background: rgb(113,153,183); /* Old browsers */
+ background: -moz-radial-gradient(top, ellipse cover, rgba(113,153,183,1) 0%, rgba(48,100,148,1) 100%); /* FF3.6+ */
+ background: -webkit-gradient(radial, top center, 0px, center center, 100%, color-stop(0%,rgba(113,153,183,1)), color-stop(100%,rgba(48,100,148,1))); /* Chrome,Safari4+ */
+ background: -webkit-radial-gradient(top, ellipse cover, rgba(113,153,183,1) 0%,rgba(48,100,148,1) 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-radial-gradient(top, ellipse cover, rgba(113,153,183,1) 0%,rgba(48,100,148,1) 100%); /* Opera 12+ */
+ background: -ms-radial-gradient(top, ellipse cover, rgba(113,153,183,1) 0%,rgba(48,100,148,1) 100%); /* IE10+ */
+ background: radial-gradient(top, ellipse cover, rgba(113,153,183,1) 0%,rgba(48,100,148,1) 100%); /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7199b7', endColorstr='#306494',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
+}
+a {color: #fff; text-decoration: none;}
+
+h3 { margin: 0 0 8px; color: #fff; font: normal 24px Geogrotesque-semibold, Helvetica, Arial, sans-serif; text-shadow: 0 1px 0 #2F4C63; }
+p {font-size: 14px; line-height: 18px;}
+
+.toggle {margin: 2px 0 0 14px; float: left; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; }
+.toggle li {float: left;}
+.toggle li a {width: 50px; padding: 6px 0; text-align: center; display: block; text-shadow: 1px 1px 0 #fff; font-size: 12px; font-weight: 600; color: #666; -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; -o-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
+
+background: #ffffff; /* Old browsers */
+background: -moz-linear-gradient(top, #ffffff 0%, #ededed 100%); /* FF3.6+ */
+background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#ededed)); /* Chrome,Safari4+ */
+background: -webkit-linear-gradient(top, #ffffff 0%,#ededed 100%); /* Chrome10+,Safari5.1+ */
+background: -o-linear-gradient(top, #ffffff 0%,#ededed 100%); /* Opera 11.10+ */
+background: -ms-linear-gradient(top, #ffffff 0%,#ededed 100%); /* IE10+ */
+background: linear-gradient(top, #ffffff 0%,#ededed 100%); /* W3C */
+filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ededed',GradientType=0 ); /* IE6-9 */
+
+box-shadow: inset 1px 1px 0 #fff, inset -1px -1px 0 #fff;
+-moz-box-shadow: inset 1px 1px 0 #fff, inset -1px -1px 0 #fff;
+-webkit-box-shadow: inset 1px 1px 0 #fff, inset -1px -1px 0 #fff;
+
+}
+.toggle li:first-child a {-webkit-border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; -o-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px;}
+.toggle li a:hover { background: #ededed; color: #222; }
+.toggle li a.active { background: #c8e0f3; color: #325874; cursor: default; box-shadow: inset 0 0 3px rgba(0,0,0,0.4); -moz-box-shadow: inset 0 0 3px rgba(0,0,0,0.4); -webkit-box-shadow: inset 0 0 3px rgba(0,0,0,0.4); }
+
+#slider {margin: 0 0 10px!important;}
+#carousel li {margin-right: 5px;}
+#carousel img {display: block; opacity: .5; cursor: pointer;}
+#carousel img:hover {opacity: 1;}
+#carousel .flex-active-slide img {opacity: 1; cursor: default;}
+
+
+/* Loading
+***********************/
+.loading aside {opacity: 0;}
+aside {width: 100%; float: left; opacity: 1; -webkit-transition: opacity 1s ease;}
+aside h3 {float: left;}
+
+/* Layout
+***********************/
+#top { position: relative; z-index: 999; height:65px; padding: 5px 0; border-bottom: 1px solid #577794;
+
+background: rgb(226,232,239); /* Old browsers */
+background: -moz-linear-gradient(top, rgba(226,232,239,1) 0%, rgba(210,219,228,1) 100%); /* FF3.6+ */
+background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(226,232,239,1)), color-stop(100%,rgba(210,219,228,1))); /* Chrome,Safari4+ */
+background: -webkit-linear-gradient(top, rgba(226,232,239,1) 0%,rgba(210,219,228,1) 100%); /* Chrome10+,Safari5.1+ */
+background: -o-linear-gradient(top, rgba(226,232,239,1) 0%,rgba(210,219,228,1) 100%); /* Opera 11.10+ */
+background: -ms-linear-gradient(top, rgba(226,232,239,1) 0%,rgba(210,219,228,1) 100%); /* IE10+ */
+background: linear-gradient(top, rgba(226,232,239,1) 0%,rgba(210,219,228,1) 100%); /* W3C */
+
+ }
+#top { text-align: center; }
+#top .top-inner { max-width: 800px; width: auto; }
+#top img { float: none; display: inline; margin-top: 12px; }
+#container {padding: 60px 40px 100px; border-top: 1px solid #93b6d2;}
+header {width: 420px; float: left;}
+#main {margin-left: 420px; margin-top: -25px;overflow: hidden;}
+
+/* Header
+***********************/
+header h1 { font-family: Geogrotesque-Semibold, Helvetica, Arial, sans-serif; margin: 0 0 10px; text-shadow: 0 1px 0 #2F4C63; color: #fff; font-size: 42px; }
+header h2 { margin: 0 0 30px; font: normal 20px Geogrotesque-regular, Helvetica, Arial, sans-serif; text-shadow: 0 1px 1px #555; color: #fff; }
+header .button { margin: 0 0 50px; padding: 10px 15px 10px 15px; display: block; float: left; position: relative; -webkit-transition: all .2s ease; -moz-transition: all .2s ease; transition: all .2s ease;}
+nav {clear: both;}
+nav h3 {margin: 0 0 10px; padding: 0 0 3px; font-size: 18px;text-shadow: 0 1px 1px #555; color: #fff; font-family: Geogrotesque-Regular, Helvetica, Arial, sans-serif; border-bottom: 1px solid #fff; border-bottom: 1px solid rgba(255,255,255,0.5); display: inline-block; }
+nav li {margin: 0 0 7px; font-size: 15px; text-transform: lowercase;}
+nav li a:hover,
+nav li a.active {border-bottom: 1px dotted #fff; border-bottom: 1px dotted rgba(255,255,255,0.3); background: none;}
+nav li a.active { cursor: default; }
+
+/* SyntaxHighlighter
+***********************/
+.syntaxhighlighter {width: auto!important; font-size: 13px !important; line-height: 21px !important; font-family: Courier, "Courier New", monospace; -webkit-border-radius: 4px; -moz-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; background-color: #fff !important; box-shadow: inset 0 0 3px rgba(0,0,0,0.3); -moz-box-shadow: inset 0 0 3px rgba(0,0,0,0.3); -webkit-box-shadow: inset 0 0 3px rgba(0,0,0,0.3);}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {color: #ff5454 !important;}
+.syntaxhighlighter .line.alt1,
+.syntaxhighlighter .line.alt2 {width: 100% !important; padding: 0 !important; background-color: #fff !important;}
+.syntaxhighlighter .line.highlighted.alt1,
+.syntaxhighlighter .line.highlighted.alt2 {background-color: #fff !important;}
+.syntaxhighlighter table td.code {width: auto !important; padding: 10px 12px!important;}
+.syntaxhighlighter table td.code .line {width: auto !important; padding: 0 !important;}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {color: #cc7ac6!important;}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {color: #888!important;}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {color: #999!important;}
+.syntaxhighlighter .keyword {color: #2a93b9!important;}
+
+/* --Clearfix */
+.cf:before,
+.cf:after {content:""; display:table;}
+.cf:after {clear:both;}
+.cf {zoom:1;}
+
+/* Media Queries
+***********************/
+
+.button {
+ display: inline-block;
+ margin: 2px 0;
+ padding: 5px 15px 3px;
+ border: 1px solid #336693;
+ border-bottom-color: #336693;
+ color: #fff!important;
+ text-align: center;
+ text-decoration: none !important;
+ text-shadow: 0 -1px 0 hsla(0,0%,0%,.3);
+ text-transform: uppercase;
+ font: bold 12px/16px sans-serif;
+ cursor:pointer;
+
+ /*Border radius*/
+ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px;
+
+ /*Background*/
+ background: #274d70; /*Fallback*/
+ background: -webkit-gradient( linear, left top, left bottom, color-stop(.2, #336693), color-stop(1, #274d70));
+ background: -moz-linear-gradient( center top, #336693 20%, #274d70 100% );
+
+ /*Box shadow*/
+ -webkit-box-shadow: inset 0 1px 0 hsla(0,100%,100%,.3) /*Top*/, inset 0 0 2px hsla(0,100%,100%,.3) /*Shine*/, 0 1px 2px hsla(0, 0%, 0%, .29) /*Shadow*/;
+ -moz-box-shadow: inset 0 1px 0 hsla(0,100%,100%,.3) /*Top*/, inset 0 0 2px hsla(0,100%,100%,.3) /*Shine*/, 0 1px 2px hsla(0, 0%, 0%, .29) /*Shadow*/;
+ box-shadow: inset 0 1px 0 hsla(0,100%,100%,.3) /*Top*/, inset 0 0 2px hsla(0,100%,100%,.3) /*Shine*/, 0 1px 2px hsla(0, 0%, 0%, .29) /*Shadow*/;
+}
+
+.button:hover {
+ color: #fff;
+ text-decoration: none!important;
+ /*Background*/
+ background: #396083; /*Fallback*/
+ background: -webkit-gradient( linear, left top, left bottom, color-stop(.2, #3c77ab), color-stop(1, #396083) );
+ background: -moz-linear-gradient( center top, #3c77ab 20%, #396083 100% );
+}
+
+/* GREEN */
+
+.button.green {
+ border: 1px solid #467d16;
+ border-bottom-color: #467d16;
+
+ /*Background*/
+ background: #447e12; /*Fallback*/
+ background: -webkit-gradient( linear, left top, left bottom, color-stop(.2, #71b02f), color-stop(1, #447e12));
+ background: -moz-linear-gradient( center top, #71b02f 20%, #447e12 100% );
+}
+
+.button.green:hover {
+ /*Background*/
+ background: #508e1b; /*Fallback*/
+ background: -webkit-gradient( linear, left top, left bottom, color-stop(.2, #7cbc3a), color-stop(1, #508e1b));
+ background: -moz-linear-gradient( center top, #7cbc3a 20%, #508e1b 100% );
+}
+
+
+/* Media Queries
+***********************/
+@media screen and (max-width: 960px) {
+ #container {padding: 35px;}
+ header {width: 380px;}
+ #main {margin-left: 380px;}
+}
+@media screen and (max-width: 768px) {
+ #container {padding: 20px 30px;}
+ header {width: 100%; float: none; text-align: center;}
+ header h1 {margin: 0 auto 10px;}
+ header .button,
+ header nav {display: none;}
+ #main {margin-left: 0;}
+}
+@media screen and (max-width: 500px) {
+ header h1 {width: 246px; }
+}
226 thirdparty/FlexSlider/demo/css/shCore.css
@@ -0,0 +1,226 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
117 thirdparty/FlexSlider/demo/css/shThemeDefault.css
@@ -0,0 +1,117 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #e0e0e0 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: black !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #6ce26c !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #6ce26c !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: blue !important;
+ background: white !important;
+ border: 1px solid #6ce26c !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: blue !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #6ce26c !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: black !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: blue !important;
+}
+.syntaxhighlighter .keyword {
+ color: #006699 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #006699 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
BIN thirdparty/FlexSlider/demo/fonts/webfonts/geo-medium/eot/1110FC_0.eot
Binary file not shown.
411 thirdparty/FlexSlider/demo/fonts/webfonts/geo-medium/svg/1110FC_0.svg
@@ -0,0 +1,411 @@
+<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
+<metadata version="1.0"><uniqueid id="com.myfonts.emtype.geogrotesque.medium.wfkit2.6JtN"/><vendor name="MyFonts" url="http://www.myfonts.com/"/><credits><credit name="Eduardo Manso" url="http://www.myfonts.com/person/manso/eduardo/"/></credits><description><text lang="en">This is a Webfont from MyFonts. Full information about this font:
+http://www.myfonts.com/fonts/emtype/geogrotesque/
+</text></description><license url="http://www.myfonts.com/viewlicense?lid=1146"/><copyright><text lang="en">Copyright (c) 2009 by Eduardo Manso. All rights reserved.</text></copyright><trademark><text lang="en">Geogrotesque is a trademark of Eduardo Manso.</text></trademark></metadata>
+<defs >
+<font id="wf" horiz-adv-x="418" ><font-face
+ font-family="Geogrotesque Md"
+ units-per-em="1000"
+ panose-1="2 0 0 0 0 0 0 0 0 0"
+ ascent="776"
+ descent="-224"
+ alphabetic="0" />
+<missing-glyph horiz-adv-x="854" d="M674 94Q570 -8 425 -8Q281 -8 179 94Q76 195 76 341Q76 485 179 588Q281 690 425 690Q572 690 674 588Q777 485 777 341T674 94ZM662 106Q761 205 761 341T662 576Q564 674 425 674Q289 674 191 576Q92 477 92 341Q92 204
+191 106Q289 8 425 8Q564 8 662 106ZM537 177L427 287L317 177Q304 164 290 178L261 207Q248 220 261 233L371 343L261 453Q247 467 260 480L289 509Q303 523 317 509L427 398L538 509Q552 522 564 510L593 481Q607 467 593 453L482 343L593 232Q606 219 592 205L563
+176Q550 164 537 177Z" />
+<glyph unicode=" " glyph-name="space" horiz-adv-x="211" />
+<glyph unicode="!" glyph-name="exclam" horiz-adv-x="264" d="M181 390L172 190Q171 171 154 171H110Q93 171 92 190L82 390V660Q82 680 101 680H163Q181 680 181 660V390ZM180 99V19Q180 0 162 0H101Q82 0 82 19V99Q82 118 101 118H162Q180 118 180 99Z" />
+<glyph unicode="&quot;" glyph-name="quotedbl" horiz-adv-x="392" d="M158 493Q158 473 140 473H99Q81 473 80 493L72 660Q71 680 91 680H148Q167 680 166 660L158 493ZM314 493Q314 473 295 473H254Q237 473 236 493L228 660Q227 680 246 680H303Q323 680 322
+660L314 493Z" />
+<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="663" d="M95 271H171L198 365H139Q120 365 120 384V416Q120 434 139 434H217L242 522Q247 542 266 542H308Q327 542 322 522L297 434H437L462 522Q467 542 485 542H527Q546 542 541 522L516 434H568Q587
+434 587 416V384Q587 365 568 365H496L470 271H524Q543 271 543 253V221Q543 202 524 202H450L426 115Q420 95 403 95H360Q340 95 346 115L371 202H231L206 115Q200 95 183 95H141Q121 95 127 115L152 202H95Q76 202 76 221V253Q76 271 95 271ZM277 365L250 271H390L417
+365H277Z" />
+<glyph unicode="$" glyph-name="dollar" horiz-adv-x="532" d="M361 449V473Q361 526 266 526Q173 526 173 473V456Q173 424 215 410L365 358Q455 327 455 260V204Q455 161 421 129T317 87V20Q317 0 299 0H240Q221 0 221 20V86Q147 94 112 126T76 204V229Q76 247
+93 247H146Q163 247 163 229V208Q163 155 265 155T367 208V235Q367 265 314 283L164 335Q133 346 110 373T86 436V473Q86 518 118 551T221 593V660Q221 680 240 680H299Q317 680 317 660V593Q384 583 416 550T448 473V449Q448 431 430 431H378Q361 431 361 449Z"
+/>
+<glyph unicode="%" glyph-name="percent" horiz-adv-x="815" d="M76 481V585Q76 687 220 687T364 585V481Q364 378 220 378T76 481ZM285 484V582Q285 623 220 623T155 582V484Q155 443 220 443T285 484ZM660 97V195Q660 235 595 235T530 195V97Q530 55 595 55T660
+97ZM451 93V197Q451 300 595 300T739 197V93Q739 -9 595 -9T451 93ZM607 660L297 20Q287 0 270 0H220Q212 0 210 7T211 20L522 660Q531 680 549 680H598Q607 680 609 674T607 660Z" />
+<glyph unicode="&amp;" glyph-name="ampersand" horiz-adv-x="682" d="M297 396H625Q644 396 644 377V334Q644 315 625 315H557V145Q557 76 501 34T316 -8Q76 -8 76 142V243Q76 333 165 358Q120 371 102 397T84 466V538Q84 688 292 688Q502 688 502 535V509Q502
+490 484 490H425Q407 490 407 509V522Q407 565 381 586T293 607T206 586T180 522V480Q180 437 206 417T297 396ZM172 73T317 73T462 158V315H289Q225 315 199 295T172 231V158Q172 73 317 73Z" />
+<glyph unicode="&apos;" glyph-name="quotesingle" horiz-adv-x="236" d="M166 660L158 493Q157 473 140 473H99Q81 473 80 493L72 660Q71 680 91 680H148Q167 680 166 660Z" />
+<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="355" d="M76 -81V571Q76 708 274 708H282Q301 708 301 689V647Q301 627 282 627H274Q220 627 197 611T174 561V-71Q174 -104 197 -120T274 -137H282Q301 -137 301 -157V-199Q301 -218 282 -218H274Q76
+-218 76 -81Z" />
+<glyph unicode=")" glyph-name="parenright" horiz-adv-x="355" d="M278 571V-81Q278 -218 80 -218H73Q54 -218 54 -199V-157Q54 -137 73 -137H80Q134 -137 157 -121T180 -71V561Q180 594 157 610T80 627H73Q54 627 54 647V689Q54 708 73 708H80Q278 708 278 571Z" />
+<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="523" d="M256 322Q237 322 238 342L244 467L135 396Q119 386 109 404L95 431Q86 449 103 457L212 512L103 569Q87 578 95 594L109 622Q118 640 135 629L245 558L238 690Q237 709 257 709H287Q306 709 305
+690L298 559L406 629Q423 640 432 622L446 594Q455 578 438 569L329 512L438 457Q455 448 446 431L432 403Q423 385 406 396L299 465L305 342Q306 322 287 322H256Z" />
+<glyph unicode="+" glyph-name="plus" horiz-adv-x="571" d="M245 143V298H90Q71 298 71 317V360Q71 379 90 379H245V534Q245 554 263 554H305Q324 554 324 534V379H481Q500 379 500 360V317Q500 298 481 298H324V143Q324 124 305 124H263Q245 124 245 143Z" />
+<glyph unicode="," glyph-name="comma" horiz-adv-x="232" d="M75 35V99Q75 118 93 118H154Q172 118 172 99V30Q172 -70 53 -103Q35 -107 29 -91L15 -50Q8 -32 27 -26Q75 -7 75 35Z" />
+<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="448" d="M90 328H358Q377 328 377 310V268Q377 250 358 250H90Q71 250 71 268V310Q71 328 90 328Z" />
+<glyph unicode="." glyph-name="period" horiz-adv-x="233" d="M165 99V19Q165 0 147 0H87Q68 0 68 19V99Q68 118 87 118H147Q165 118 165 99Z" />
+<glyph unicode="/" glyph-name="slash" horiz-adv-x="368" d="M344 679L136 -128Q130 -148 113 -148H49Q29 -148 34 -128L243 679Q248 699 265 699H330Q349 699 344 679Z" />
+<glyph unicode="0" glyph-name="zero" horiz-adv-x="550" d="M58 146V534Q58 603 108 645T275 688Q392 688 442 646T493 534V146Q493 77 443 35T275 -8Q159 -8 109 34T58 146ZM395 162V518Q395 605 275 605Q211 605 184 583T156 518V162Q156 119 183 97T275 75Q395
+75 395 162Z" />
+<glyph unicode="1" glyph-name="one" horiz-adv-x="550" d="M90 636L319 685Q326 687 331 683T337 667V83H484Q503 83 503 65V19Q503 0 484 0H89Q70 0 70 19V65Q70 83 89 83H239V578L90 549Q71 546 71 565V614Q71 631 90 636Z" />
+<glyph unicode="2" glyph-name="two" horiz-adv-x="550" d="M173 83H477Q496 83 496 65V19Q496 0 477 0H94Q75 0 75 19V209Q75 230 82 246T102 272T126 288T151 299L345 371Q396 390 396 436V519Q396 562 369 584T277 606T186 584T159 519V476Q159 456 141 456H83Q64
+456 64 476V534Q64 688 277 688Q493 688 493 534V438Q493 336 401 302L231 241Q214 235 204 230T183 211T173 179V83Z" />
+<glyph unicode="3" glyph-name="three" horiz-adv-x="550" d="M189 396H266Q330 396 356 416T382 480V522Q382 565 357 586T270 607Q207 607 182 586T156 522V509Q156 490 137 490H79Q61 490 61 509V535Q61 688 271 688Q479 688 479 538V466Q479 423 461 397T397
+358Q486 333 486 243V142Q486 -8 272 -8Q56 -8 56 145V171Q56 190 74 190H133Q151 190 151 171V158Q151 73 271 73Q390 73 390 158V231Q390 274 364 294T273 315H189Q170 315 170 334V377Q170 396 189 396Z" />
+<glyph unicode="4" glyph-name="four" horiz-adv-x="550" d="M271 660L142 285H377V660Q377 680 396 680H457Q475 680 475 660V20Q475 0 457 0H396Q377 0 377 20V202H60Q41 202 41 221V261Q41 270 46 287L173 660Q179 680 196 680H257Q278 680 271 660Z" />
+<glyph unicode="5" glyph-name="five" horiz-adv-x="550" d="M103 680H450Q470 680 470 661V616Q470 597 450 597H183V425H274Q382 425 435 386T488 280V144Q488 -9 276 -9T64 144V170Q64 190 83 190H141Q160 190 160 170V158Q160 115 186 94T275 72Q339 72 364
+93T390 158V266Q390 344 273 344H103Q85 344 85 364V660Q85 680 103 680Z" />
+<glyph unicode="6" glyph-name="six" horiz-adv-x="550" d="M64 146V538Q64 603 112 645T275 688Q483 688 483 538V516Q483 497 464 497H406Q388 497 388 516V524Q388 607 275 607Q161 607 161 524V368Q200 410 289 410Q396 410 443 368T490 256V146Q490 -8 277
+-8T64 146ZM393 159V242Q393 286 367 307T277 329Q161 329 161 250V159Q161 116 187 95T277 73T367 94T393 159Z" />
+<glyph unicode="7" glyph-name="seven" horiz-adv-x="550" d="M68 680H488Q507 680 507 661V621Q507 610 503 601L253 20Q244 0 229 0H159Q137 0 146 20L396 597H68Q48 597 48 616V661Q48 680 68 680Z" />
+<glyph unicode="8" glyph-name="eight" horiz-adv-x="550" d="M72 469V534Q72 605 116 646T275 688T434 647T478 534V469Q478 383 394 358Q487 332 487 246V146Q487 -8 275 -8T63 146V246Q63 332 156 358Q72 383 72 469ZM391 159V231Q391 274 365 295T275 317T186
+296T160 231V159Q160 116 185 95T275 73T365 94T391 159ZM383 484V521Q383 565 360 586T275 607T191 586T168 521V484Q168 439 190 418T275 397T360 418T383 484Z" />
+<glyph unicode="9" glyph-name="nine" horiz-adv-x="550" d="M486 534V142Q486 77 439 35T276 -8Q68 -8 68 142V164Q68 183 87 183H145Q163 183 163 164V156Q163 116 188 95T276 73Q338 73 363 94T389 156V311Q351 270 261 270Q155 270 108 313T60 424V534Q60
+688 274 688Q486 688 486 534ZM389 434V521Q389 564 363 585T274 607Q210 607 184 586T157 521V438Q157 394 183 373T274 351Q336 351 362 372T389 434Z" />
+<glyph unicode=":" glyph-name="colon" horiz-adv-x="233" d="M165 99V19Q165 0 147 0H87Q68 0 68 19V99Q68 118 87 118H147Q165 118 165 99ZM165 476V396Q165 377 147 377H87Q68 377 68 396V476Q68 496 87 496H147Q165 496 165 476Z" />
+<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="278" d="M218 476V396Q218 377 200 377H140Q121 377 121 396V476Q121 496 140 496H200Q218 496 218 476ZM121 35V99Q121 118 140 118H200Q218 118 218 99V30Q218 -70 99 -103Q81 -107 75 -91L61 -50Q54
+-32 73 -26Q100 -15 110 -1T121 35Z" />
+<glyph unicode="&lt;" glyph-name="less" horiz-adv-x="532" d="M442 455L164 339L442 225Q461 217 461 203V147Q461 136 456 131T442 130L88 286Q71 294 71 307V372Q71 386 88 393L442 550Q451 554 456 549T461 532V476Q461 467 457 463T442 455Z" />
+<glyph unicode="=" glyph-name="equal" horiz-adv-x="585" d="M90 462H495Q514 462 514 444V401Q514 382 495 382H90Q71 382 71 401V444Q71 462 90 462ZM90 272H495Q514 272 514 254V211Q514 192 495 192H90Q71 192 71 211V254Q71 272 90 272Z" />
+<glyph unicode="&gt;" glyph-name="greater" horiz-adv-x="532" d="M368 339L90 453Q71 461 71 475V533Q71 544 76 549T90 551L444 394Q461 387 461 373V306Q461 292 444 285L90 128Q81 124 76 129T71 146V204Q71 214 75 218T90 226L368 339Z" />
+<glyph unicode="?" glyph-name="question" horiz-adv-x="566" d="M215 190V264Q215 325 279 357L359 398Q404 423 404 468V519Q404 606 282 606T160 519V476Q160 456 142 456H84Q65 456 65 476V534Q65 603 115 645T282 688Q499 688 501 534V471Q501 372 414 330L359
+304Q313 282 313 240V190Q313 171 295 171H233Q215 171 215 190ZM313 99V19Q313 0 295 0H233Q215 0 215 19V99Q215 118 233 118H295Q313 118 313 99Z" />
+<glyph unicode="@" glyph-name="at" horiz-adv-x="895" d="M628 -134H448Q358 -134 291 -123T185 -94T122 -49T90 4T82 64V439Q82 472 90 498T122 551T185 596T291 625T448 636T604 625T710 596T774 552T806 499T814 439V177Q814 33 660 33Q562 33 533 96Q459
+33 373 33Q253 33 253 146Q253 161 254 169L269 322Q282 458 407 458Q476 458 546 405L550 431Q553 450 571 450H622Q639 450 638 431L614 195Q605 104 666 104Q721 104 721 190V435Q721 475 700 500T617 542T448 558Q292 558 233 527T174 435V68Q174 7 233 -24T448
+-55H628Q647 -55 647 -74V-115Q647 -134 628 -134ZM360 304L349 193Q348 184 348 173Q348 122 412 122Q457 122 519 159V170L536 330Q482 373 435 373Q366 373 360 304Z" />
+<glyph unicode="A" glyph-name="A" horiz-adv-x="538" d="M244 680H306Q324 680 330 661L524 19Q530 0 509 0H446Q429 0 424 19L377 174H166L120 19Q115 0 98 0H40Q20 0 26 19L220 661Q226 680 244 680ZM356 252L300 434Q292 458 283 511T273 580Q273 579 269
+551T258 489T245 436L188 252H356Z" />
+<glyph unicode="B" glyph-name="B" horiz-adv-x="587" d="M306 0H100Q82 0 82 20V660Q82 680 100 680H277Q504 680 504 535V472Q504 389 420 357Q533 326 533 235V150Q533 0 306 0ZM306 311H179V81H306Q436 81 436 167V228Q436 311 306 311ZM277 599H179V387H284Q407
+387 407 474V520Q407 561 376 580T277 599Z" />
+<glyph unicode="C" glyph-name="C" horiz-adv-x="559" d="M513 209V146Q513 -8 292 -8T71 146V534Q71 688 292 688T513 534V485Q513 465 495 465H437Q418 465 418 485V518Q418 605 293 605Q169 605 169 518V162Q169 75 293 75Q418 75 418 162V209Q418 228 437
+228H495Q513 228 513 209Z" />
+<glyph unicode="D" glyph-name="D" horiz-adv-x="608" d="M309 0H98Q82 0 82 20V660Q82 680 100 680H309Q429 680 483 637T537 526V154Q537 86 483 43T309 0ZM309 597H179V83H309Q439 83 439 170V510Q439 597 309 597Z" />
+<glyph unicode="E" glyph-name="E" horiz-adv-x="519" d="M453 0H100Q82 0 82 20V660Q82 680 100 680H442Q461 680 461 661V616Q461 597 442 597H179V395H424Q444 395 444 376V333Q444 314 424 314H179V83H453Q472 83 472 65V19Q472 0 453 0Z" />
+<glyph unicode="F" glyph-name="F" horiz-adv-x="524" d="M100 680H467Q486 680 486 661V616Q486 597 467 597H179V394H449Q468 394 468 375V329Q468 310 449 310H179V20Q179 0 161 0H100Q82 0 82 20V660Q82 680 100 680Z" />
+<glyph unicode="G" glyph-name="G" horiz-adv-x="573" d="M299 340H494Q513 340 513 322V146Q513 -8 292 -8T71 146V534Q71 688 292 688T513 534V490Q513 471 495 471H437Q418 471 418 490V518Q418 605 293 605Q169 605 169 518V162Q169 75 293 75Q418 75 418
+161V257H299Q280 257 280 276V322Q280 340 299 340Z" />
+<glyph unicode="H" glyph-name="H" horiz-adv-x="619" d="M179 660V397H439V660Q439 680 457 680H519Q537 680 537 660V20Q537 0 519 0H457Q439 0 439 20V314H179V20Q179 0 161 0H100Q82 0 82 20V660Q82 680 100 680H161Q179 680 179 660Z" />
+<glyph unicode="I" glyph-name="I" horiz-adv-x="261" d="M179 660V20Q179 0 161 0H100Q82 0 82 20V660Q82 680 100 680H161Q179 680 179 660Z" />
+<glyph unicode="J" glyph-name="J" horiz-adv-x="504" d="M120 197V162Q120 119 144 97T227 75Q284 75 307 97T330 162V660Q330 680 348 680H409Q428 680 428 660V146Q428 -8 227 -8Q24 -8 24 146V197Q24 217 43 217H102Q120 217 120 197Z" />
+<glyph unicode="K" glyph-name="K" horiz-adv-x="564" d="M287 345L546 19Q552 12 549 6T537 0H458Q442 0 429 19L205 302H180V19Q180 0 161 0H100Q82 0 82 19V661Q82 680 100 680H161Q180 680 180 661V375H204L413 661Q428 680 444 680H510Q520 680 522 674T519
+661L287 345Z" />
+<glyph unicode="L" glyph-name="L" horiz-adv-x="485" d="M180 660V83H436Q455 83 455 65V19Q455 0 436 0H98Q82 0 82 20V660Q82 680 101 680H162Q180 680 180 660Z" />
+<glyph unicode="M" glyph-name="M" horiz-adv-x="734" d="M653 661V19Q653 0 635 0H576Q558 0 558 19V478Q558 477 549 448T534 404L418 123Q410 103 393 103H341Q325 103 317 123L193 416Q190 424 186 434T180 453T176 468L174 476V19Q174 0 156 0H100Q82 0 82
+19V661Q82 680 100 680H156Q168 680 173 669L346 267Q361 230 367 207Q371 221 389 266L559 671Q563 680 576 680H635Q653 680 653 661Z" />
+<glyph unicode="N" glyph-name="N" horiz-adv-x="618" d="M536 661V19Q536 0 518 0H463Q451 0 445 9L210 421Q202 434 195 447T185 469T178 486L174 493V19Q174 0 156 0H100Q82 0 82 19V661Q82 680 100 680H156Q167 680 172 672L413 251L444 187V661Q444 680 463
+680H518Q536 680 536 661Z" />
+<glyph unicode="O" glyph-name="O" horiz-adv-x="597" d="M71 146V534Q71 602 124 645T298 688T472 645T526 534V146Q526 78 472 35T298 -8T125 35T71 146ZM428 162V518Q428 605 298 605Q169 605 169 518V162Q169 75 298 75Q428 75 428 162Z" />
+<glyph unicode="P" glyph-name="P" horiz-adv-x="572" d="M303 253H179V20Q179 0 161 0H100Q82 0 82 20V660Q82 680 100 680H303Q423 680 476 637T530 526V407Q530 339 477 296T303 253ZM303 597H179V336H303Q433 336 433 423V510Q433 597 303 597Z" />
+<glyph unicode="Q" glyph-name="Q" horiz-adv-x="596" d="M526 534V146Q526 26 381 -1L504 -111Q519 -125 506 -138L475 -172Q463 -186 449 -173L270 -7Q165 -2 118 39T71 146V534Q71 602 124 645T298 688T472 645T526 534ZM169 520V160Q169 73 298 73Q428 73
+428 160V520Q428 607 298 607Q169 607 169 520Z" />
+<glyph unicode="R" glyph-name="R" horiz-adv-x="594" d="M303 269H179V20Q179 0 161 0H100Q82 0 82 20V660Q82 680 100 680H303Q423 680 476 637T530 526V422Q530 315 413 282L533 20Q537 11 532 6T515 0H455Q443 0 435 16Q434 17 434 18T433 20L320 269H303ZM303
+597H179V352H303Q433 352 433 439V510Q433 597 303 597Z" />
+<glyph unicode="S" glyph-name="S" horiz-adv-x="568" d="M410 490V521Q410 606 289 606T168 521V501Q168 453 219 434L401 365Q511 323 511 229V146Q511 78 458 35T287 -8T116 35T62 146V204Q62 224 81 224H140Q158 224 158 204V159Q158 74 286 74Q415 74 415
+159V206Q415 229 401 246T372 271T331 288L162 353Q126 367 100 400T73 477V534Q73 602 123 645T288 688T453 645T505 534V490Q505 471 487 471H428Q410 471 410 490Z" />
+<glyph unicode="T" glyph-name="T" horiz-adv-x="487" d="M34 680H452Q471 680 471 661V616Q471 597 452 597H292V20Q292 0 274 0H212Q194 0 194 20V597H34Q15 597 15 616V661Q15 680 34 680Z" />
+<glyph unicode="U" glyph-name="U" horiz-adv-x="607" d="M174 660V162Q174 75 303 75Q434 75 434 162V660Q434 680 452 680H513Q531 680 531 660V146Q531 78 477 35T303 -8T130 35T76 146V660Q76 680 95 680H156Q174 680 174 660Z" />
+<glyph unicode="V" glyph-name="V" horiz-adv-x="538" d="M306 0H244Q226 0 220 19L26 661Q20 680 40 680H107Q123 680 129 661L253 246Q259 227 264 197T273 145L276 124Q290 208 301 244L426 661Q432 680 448 680H509Q530 680 524 661L330 19Q324 0 306 0Z" />
+<glyph unicode="W" glyph-name="W" horiz-adv-x="817" d="M468 661L572 245Q576 227 580 207T586 172L588 158Q588 159 590 169T594 192T599 220T605 245L711 661Q716 680 733 680H787Q805 680 801 661L639 19Q635 0 615 0H555Q538 0 533 19L426 443Q422 457 413
+521Q406 470 399 442L291 19Q287 0 268 0H208Q191 0 186 19L23 661Q19 680 38 680H100Q118 680 123 661L227 245L243 167Q248 199 260 245L366 661Q371 680 388 680H445Q463 680 468 661Z" />
+<glyph unicode="X" glyph-name="X" horiz-adv-x="561" d="M337 347L529 19Q533 12 531 6T519 0H448Q431 0 420 19L277 261L142 19Q131 0 115 0H49Q40 0 38 7T40 22L227 349L46 659Q33 680 54 680H125Q141 680 153 661L289 430L418 661Q428 680 445 680H511Q530
+680 520 661L337 347Z" />
+<glyph unicode="Y" glyph-name="Y" horiz-adv-x="529" d="M134 661L259 397Q270 370 275 352Q275 354 280 371T291 397L424 661Q434 680 446 680H507Q530 680 520 661L324 270V19Q324 0 306 0H245Q226 0 226 19V259L28 661Q18 680 42 680H111Q124 680 134 661Z" />
+<glyph unicode="Z" glyph-name="Z" horiz-adv-x="500" d="M79 680H431Q451 680 451 661V618Q451 609 447 601L160 83H448Q467 83 467 65V19Q467 0 448 0H62Q43 0 43 19V65Q43 72 48 82L332 597H79Q60 597 60 616V661Q60 680 79 680Z" />
+<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="378" d="M76 -191V679Q76 699 95 699H299Q318 699 318 680V635Q318 616 299 616H174V-128H299Q318 -128 318 -147V-192Q318 -211 299 -211H95Q76 -211 76 -191Z" />
+<glyph unicode="\" glyph-name="backslash" horiz-adv-x="368" d="M243 -128L34 679Q29 699 49 699H113Q131 699 136 679L344 -128Q349 -148 330 -148H265Q249 -148 243 -128Z" />
+<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="378" d="M301 679V-191Q301 -211 283 -211H79Q60 -211 60 -192V-147Q60 -128 79 -128H203V616H79Q60 616 60 635V680Q60 699 79 699H283Q301 699 301 679Z" />
+<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="565" d="M401 308L285 584L171 308Q163 288 150 288H93Q83 288 78 293T76 308L232 662Q241 680 253 680H318Q332 680 339 662L496 308Q500 299 495 294T479 288H422Q409 288 401 308Z" />
+<glyph unicode="_" glyph-name="underscore" horiz-adv-x="443" d="M41 -80H402Q421 -80 421 -98V-141Q421 -160 402 -160H41Q22 -160 22 -141V-98Q22 -80 41 -80Z" />
+<glyph unicode="`" glyph-name="grave" horiz-adv-x="324" d="M170 577L94 689Q80 708 103 708H165Q181 708 191 690L250 583Q260 565 241 565H194Q180 565 170 577Z" />
+<glyph unicode="a" glyph-name="a" horiz-adv-x="510" d="M67 354V369Q67 504 256 504T445 369V20Q445 0 427 0H375Q357 0 356 20L354 49Q282 -8 196 -8Q129 -8 92 26T55 113V161Q55 213 91 247T194 282H352V359Q352 392 331 409T255 427Q200 427 178 411T156
+362V354Q156 334 137 334H85Q67 334 67 354ZM220 71Q287 71 352 122V208H214Q178 208 163 193T148 147V127Q148 71 220 71Z" />
+<glyph unicode="b" glyph-name="b" horiz-adv-x="531" d="M143 0H90Q71 0 71 20V679Q71 699 90 699H148Q166 699 166 679V447Q241 504 330 504Q401 504 436 468T471 368V128Q471 64 436 28T330 -8Q238 -8 164 50L162 20Q161 0 143 0ZM376 143V353Q376 418 302
+418Q233 418 166 366V129Q236 78 302 78Q376 78 376 143Z" />
+<glyph unicode="c" glyph-name="c" horiz-adv-x="484" d="M252 504Q443 504 443 367V349Q443 330 425 330H371Q352 330 352 349V360Q352 393 330 409T253 426Q199 426 177 410T155 360V136Q155 103 177 87T253 70Q308 70 330 86T352 136V156Q352 175 371 175H425Q443
+175 443 156V129Q443 -8 251 -8Q60 -8 60 129V367Q60 504 252 504Z" />
+<glyph unicode="d" glyph-name="d" horiz-adv-x="531" d="M369 20L367 50Q291 -8 201 -8Q130 -8 95 28T60 128V368Q60 432 95 468T201 504Q287 504 365 447V679Q365 699 383 699H441Q460 699 460 679V20Q460 0 441 0H388Q370 0 369 20ZM155 353V143Q155 78 229
+78Q295 78 365 129V366Q298 418 229 418Q155 418 155 353Z" />
+<glyph unicode="e" glyph-name="e" horiz-adv-x="495" d="M442 367V245Q442 227 425 227H153V135Q153 102 174 85T253 68T331 85T353 135V146Q353 165 372 165H423Q442 165 442 146V129Q442 -8 251 -8T60 129V367Q60 504 253 504Q442 504 442 367ZM153 361V298H353V361Q353
+428 253 428T153 361Z" />