diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index dae05eb..8bcadea --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .sass-cache/ sftp-config.json - +.ftppass +node_modules/ diff --git a/.jshintrc b/.jshintrc new file mode 100755 index 0000000..295b882 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,26 @@ +{ + "node": true, + "browser": true, + "es5": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 2, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "regexp": true, + "undef": true, + "unused": true, + "strict": true, + "trailing": false, + "smarttabs": true, + "globals" : { + "jQuery": true, + "Modernizr": true + } +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100755 index 0000000..35e06c8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,8 @@ +# Changelog + +## 2.0.0 (10 December 2013) + +* Added Changelog +* Added grunt support +* Added new UI +* Fixed some bugs diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100755 index 0000000..b401baa --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,314 @@ +/*! + * http://timpietrusky.com + * @author Tim Pietrusky + */ + +'use strict'; + +/** + * Livereload and connect variables + */ +var LIVERELOAD_PORT = 35729; +var lrSnippet = require('connect-livereload')({ + port: LIVERELOAD_PORT +}); +var mountFolder = function (connect, dir) { + return connect.static(require('path').resolve(dir)); +}; + +/** + * Grunt module + */ +module.exports = function (grunt) { + + /** + * Dynamically load npm tasks + */ + require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); + + /** + * FireShell Grunt config + */ + grunt.initConfig({ + + pkg: grunt.file.readJSON('package.json'), + + + + + + /** + * Set project info + */ + project: { + src: 'src', + src_js_vendor : '<%= project.src %>/js/vendor', + app: 'app', + skin: '<%= project.app %>/skin', + css: [ + '<%= project.src %>/scss/style.scss' + ], + js: [ + '<%= project.src %>/js/vendor/libs.js', + '<%= project.src %>/js/vendor/ga.js', + '<%= project.src %>/js/core/*.js', + '<%= project.src %>/js/*.js' + ] + }, + + + + + + /** + * Project banner + * Dynamically appended to CSS/JS files + * Inherits text from package.json + */ + tag: { + banner: '/*!\n' + + ' * <%= pkg.name %>\n' + + ' * <%= pkg.title %>\n' + + ' * <%= pkg.url %>\n' + + ' * @author <%= pkg.author %>\n' + + ' * @version <%= pkg.version %>\n' + + ' * Copyright <%= pkg.copyright %>. <%= pkg.license %> licensed.\n' + + ' */\n' + }, + + + + + + /** + * Connect port/livereload + * https://github.com/gruntjs/grunt-contrib-connect + * Starts a local webserver and injects + * livereload snippet + */ + connect: { + options: { + port: '9000', + hostname: '*' + }, + livereload: { + options: { + middleware: function (connect) { + return [lrSnippet, mountFolder(connect, 'app')]; + } + } + } + }, + + + + + + /** + * JSHint + * https://github.com/gruntjs/grunt-contrib-jshint + * Manage the options inside .jshintrc file + */ + jshint: { + files: ['src/js/*.js'], + options: { + jshintrc: '.jshintrc' + } + }, + + + + + + /** + * Concatenate JavaScript files + * https://github.com/gruntjs/grunt-contrib-concat + * Imports all .js files and appends project banner + */ + concat: { + options: { + stripBanners: true, + nonull: true, + banner: '<%= tag.banner %>' + }, + dev: { + files: { + '<%= project.skin %>/js/scripts.min.js': '<%= project.js %>' + } + } + }, + + + + + + /** + * Uglify (minify) JavaScript files + * https://github.com/gruntjs/grunt-contrib-uglify + * Compresses and minifies all JavaScript files into one + */ + uglify: { + options: { + banner: "<%= tag.banner %>" + }, + dist: { + files: { + '<%= project.skin %>/js/scripts.min.js': '<%= project.js %>' + } + } + }, + + + + + + /** + * Compile Sass/SCSS files + * https://github.com/gruntjs/grunt-contrib-sass + * Compiles all Sass/SCSS files and appends project banner + */ + compass: { + dev: { + options: { + sassDir: '<%= project.src %>/scss', + cssDir: '<%= project.skin %>/css', + watch: true + } + }, + dist: { + options: { + sassDir: '<%= project.src %>/scss', + cssDir: '<%= project.skin %>/css', + outputStyle: 'compressed', + environment: 'production' + } + } + }, + + + + + + /** + * Opens the web server in the browser + * https://github.com/jsoverson/grunt-open + */ + open: { + server: { + path: 'http://weloveiconfonts.local' + } + }, + + + + + + /** + * Runs tasks against changed watched files + * https://github.com/gruntjs/grunt-contrib-watch + * Watching development files and run concat/compile tasks + * Livereload the browser once complete + */ + watch: { + concat: { + files: '<%= project.src %>/js/{,*/}*.js', + tasks: ['concat:dev', 'jshint'] + }, + livereload: { + options: { + livereload: LIVERELOAD_PORT + }, + files: [ + '<%= project.app %>/{,*/}*.html', + '<%= project.skin %>/css/*.css', + '<%= project.skin %>/js/{,*/}*.js', + '<%= project.skin %>/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' + ] + } + }, + + + + + + /* + * We use "compass watch" and "watch" at the same time + */ + concurrent: { + target1: ['compass', 'watch'] + }, + + + + + + /* + * Deploy to a server with FTP + */ + ftpush: { + build: { + auth: { + host: '185.21.101.189', + port: 21, + authKey: 'key1' + }, + src: 'app', + dest: '/var/www/beta.weloveiconfonts.com', + exclusions: ['app/.gitignore'] + } + }, + + + + + + /* + * Deploy to a server with SFTP + */ + 'sftp-deploy': { + build: { + auth: { + host: '185.21.101.189', + port: 22, + authKey: 'key1' + }, + src: 'app', + dest: '/var/www/beta.weloveiconfonts.com', + exclusions: ['app/.gitignore'], + server_sep: '/' + } + }, + }); + + + + + + /** + * Default task + * Run `grunt` on the command line + */ + grunt.registerTask('default', [ + 'jshint', + 'connect:livereload', + 'open', + 'concurrent:target1' + ]); + + + + + + /** + * Build task + * Run `grunt build` on the command line + * Then compress all JS/CSS files + */ + grunt.registerTask('build', [ + 'compass:dist', + 'jshint', + 'uglify', + 'sftp-deploy' + ]); + +}; diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/app/.htaccess b/app/.htaccess new file mode 100755 index 0000000..9998c1c --- /dev/null +++ b/app/.htaccess @@ -0,0 +1,38 @@ + + #RewriteEngine On + + #RewriteCond %{HTTP_HOST} ^api\. + #RewriteCond %{REQUEST_URI} !^/api/$ [NC] + #RewriteCond %{REQUEST_FILENAME} !-f + #RewriteRule (.*) /api/$1 [L] + + #RewriteCond %{HTTP_HOST} ^/api + #RewriteCond %{REQUEST_URI} !/api/$ [NC] + #RewriteCond %{REQUEST_FILENAME} !-f + #RewriteRule (.*) /api/$1 [L] + + RewriteEngine On + RewriteBase / + RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] + RewriteRule ^(.*)$ http://%1/$1 [R=301,L] + + + + + + + # Compression + AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/javascript + + + + + + + ## Expire after some time + + ExpiresActive on + ExpiresDefault "access plus 1 month" + + + diff --git a/app/api/code/Fonts.php b/app/api/code/Fonts.php new file mode 100755 index 0000000..2b51848 --- /dev/null +++ b/app/api/code/Fonts.php @@ -0,0 +1,159 @@ +output = ""; + } + + /** + * Available fonts + */ + private $fonts = array( + 'brandico' => array( + 'family' => 'brandico', + 'filename' => 'brandico', + 'svgID' => 'brandico', + 'weight' => 'normal', + 'style' => 'normal', + ), + + 'entypo' => array( + 'family' => 'entypo', + 'filename' => 'entypo', + 'svgID' => 'entypo', + 'weight' => 'normal', + 'style' => 'normal', + ), + + 'fontawesome' => array( + 'family' => 'FontAwesome', + 'filename' => 'fontawesome-webfont', + 'svgID' => 'FontAwesomeRegular', + 'weight' => 'normal', + 'style' => 'normal', + ), + + 'fontelico' => array( + 'family' => 'fontelico', + 'filename' => 'fontelico', + 'svgID' => 'fontelico', + 'weight' => 'normal', + 'style' => 'normal', + ), + + 'iconicfill' => array( + 'family' => 'IconicFill', + 'filename' => 'iconic_fill', + 'svgID' => 'IconicFill', + 'weight' => 'normal', + 'style' => 'normal', + ), + + 'iconicstroke' => array( + 'family' => 'IconicStroke', + 'filename' => 'iconic_stroke', + 'svgID' => 'IconicStroke', + 'weight' => 'normal', + 'style' => 'normal', + ), + + 'maki' => array( + 'family' => 'maki', + 'filename' => 'maki', + 'svgID' => 'maki', + 'weight' => 'normal', + 'style' => 'normal', + ), + + 'openwebicons' => array( + 'family' => 'OpenWeb Icons', + 'filename' => 'openwebicons', + 'svgID' => 'openweb_iconsregular', + 'weight' => 'normal', + 'style' => 'normal', + ), + + 'typicons' => array( + 'family' => 'Typicons', + 'filename' => 'typicons-regular-webfont', + 'svgID' => 'TypiconsRegular', + 'weight' => 'normal', + 'style' => 'normal', + ), + + 'zocial' => array( + 'family' => 'zocial', + 'filename' => 'zocial-regular-webfont', + 'svgID' => 'zocialregular', + 'weight' => 'normal', + 'style' => 'normal' + ), + + 'christmas' => array( + 'family' => 'webfont7696', + 'filename' => 'christmas', + 'svgID' => 'christmas', + 'weight' => 'normal', + 'style' => 'normal' + ), + ); + + /** + * Returns the output for the font-family $name. + * + * @return String $output + */ + public function getFamily($name) { + if (isset($this->fonts[$name])) { + $this->output = ""; + $this->createOutput($name); + } else { + // Error-handling + } + + if (!empty($this->output)) { + return $this->output; + } + } + + public function getFont($name) { + $return = ""; + + if (isset($this->fonts[$name])) { + $return = $this->fonts[$name]; + } + + return $return; + } + + /** + * Creates the CSS stuff (@font-face + ::before) for the font $name + * and saves it into $output. + */ + protected function createOutput($name) { + $font = (object) $this->fonts[$name]; + + // Create font-face + $this->output = " +@font-face { + font-family: '" . $font->family . "'; + font-style: ' . $font->style . '; + font-weight: ' . $font->weight . '; + src: url('" . Leet::$url_api . $name . "/" . $font->filename . ".eot'); + src: url('" . Leet::$url_api . $name . "/" . $font->filename . ".eot?#iefix') format('eot'), + url('" . Leet::$url_api . $name . "/" . $font->filename . ".woff') format('woff'), + url('" . Leet::$url_api . $name . "/" . $font->filename . ".ttf') format('truetype'), + url('" . Leet::$url_api . $name . "/" . $font->filename . ".svg#" . $font->svgID . "') format('svg'); +} +"; + + // Load CSS + $css = file_get_contents("fonts/$name/$name-min.css", FILE_USE_INCLUDE_PATH); + $this->output .= $css; + } +} + +?> \ No newline at end of file diff --git a/app/api/code/Leet.php b/app/api/code/Leet.php new file mode 100755 index 0000000..8297482 --- /dev/null +++ b/app/api/code/Leet.php @@ -0,0 +1,108 @@ +setIpAddress($_SERVER['REMOTE_ADDR']); + $visitor->setUserAgent($_SERVER['HTTP_USER_AGENT']); + $visitor->setScreenResolution('1024x768'); + + // Assemble Session information + $session = new GoogleAnalytics\Session(); + + // Assemble Page information + $page = new GoogleAnalytics\Page($_SERVER['REQUEST_URI']); + $page->setTitle('We Love Icon Fonts'); + + // Track page view + $tracker->trackPageview($page, $session, $visitor); + } + } +} + +?> \ No newline at end of file diff --git a/app/api/code/Request.php b/app/api/code/Request.php new file mode 100755 index 0000000..b6cb621 --- /dev/null +++ b/app/api/code/Request.php @@ -0,0 +1,83 @@ +init(); + } + + protected function init() { + // Request method + $this->method = $_SERVER['REQUEST_METHOD']; + + // Get the resource without query + $this->resource = $this->stripQueryString($_SERVER['REQUEST_URI']); + + // Get the resource parts + $this->resource_parts = $this->splitResourceString($this->resource); + } + + private function stripQueryString($uri) { + $questionMarkPosition = strpos($uri, '?'); + + if($questionMarkPosition !== false) { + return substr($uri,0,$questionMarkPosition); + } + + return $uri; + } + + private function splitResourceString($resourceString) { + $parts = array_filter(explode('/', $resourceString), array($this, 'resourceFilter')); + + if (!empty($parts)) { + return array_combine(range(0, count($parts)-1), $parts); + } else { + return $parts; + } + } + + private function resourceFilter($input) { + return trim($input) != ''; + } + + public function getResourcePart($id) { + $return = ""; + + if (isset($this->resource_parts[$id])) { + $return = $this->resource_parts[$id]; + } + + return $return; + } + + public function getResourcePath($depth = null) { + $return = ""; + + if (!is_null($depth)) { + for ($i = 0; $i < $depth; $i++) { + $return .= $this->resource_parts[$i] . "/"; + } + } else { + $return = implode('/', $this->resource_parts); + } + + return $return; + } + + public function getParam($param) { + $return = ""; + + if (isset($_GET[$param])) { + $return = $_GET[$param]; + } + + return $return; + } +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Campaign.php b/app/api/code/php-ga/GoogleAnalytics/Campaign.php new file mode 100755 index 0000000..2ca31ad --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Campaign.php @@ -0,0 +1,378 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +use UnitedPrototype\GoogleAnalytics\Internals\Util; + +use DateTime; + +/** + * You should serialize this object and store it in e.g. the user database to keep it + * persistent for the same user permanently (similar to the "__umtz" cookie of + * the GA Javascript client). + */ +class Campaign { + + /** + * See self::TYPE_* constants, will be mapped to "__utmz" parameter. + * + * @see Internals\ParameterHolder::$__utmz + * @var string + */ + protected $type; + + /** + * Time of the creation of this campaign, will be mapped to "__utmz" parameter. + * + * @see Internals\ParameterHolder::$__utmz + * @var DateTime + */ + protected $creationTime; + + /** + * Response Count, will be mapped to "__utmz" parameter. + * + * Is also used to determine whether the campaign is new or repeated, + * which will be mapped to "utmcn" and "utmcr" parameters. + * + * @see Internals\ParameterHolder::$__utmz + * @see Internals\ParameterHolder::$utmcn + * @see Internals\ParameterHolder::$utmcr + * @var int + */ + protected $responseCount = 0; + + /** + * Campaign ID, a.k.a. "utm_id" query parameter for ga.js + * Will be mapped to "__utmz" parameter. + * + * @see Internals\ParameterHolder::$__utmz + * @var int + */ + protected $id; + + /** + * Source, a.k.a. "utm_source" query parameter for ga.js. + * Will be mapped to "utmcsr" key in "__utmz" parameter. + * + * @see Internals\ParameterHolder::$__utmz + * @var string + */ + protected $source; + + /** + * Google AdWords Click ID, a.k.a. "gclid" query parameter for ga.js. + * Will be mapped to "utmgclid" key in "__utmz" parameter. + * + * @see Internals\ParameterHolder::$__utmz + * @var string + */ + protected $gClickId; + + /** + * DoubleClick (?) Click ID. Will be mapped to "utmdclid" key in "__utmz" parameter. + * + * @see Internals\ParameterHolder::$__utmz + * @var string + */ + protected $dClickId; + + /** + * Name, a.k.a. "utm_campaign" query parameter for ga.js. + * Will be mapped to "utmccn" key in "__utmz" parameter. + * + * @see Internals\ParameterHolder::$__utmz + * @var string + */ + protected $name; + + /** + * Medium, a.k.a. "utm_medium" query parameter for ga.js. + * Will be mapped to "utmcmd" key in "__utmz" parameter. + * + * @see Internals\ParameterHolder::$__utmz + * @var string + */ + protected $medium; + + /** + * Terms/Keywords, a.k.a. "utm_term" query parameter for ga.js. + * Will be mapped to "utmctr" key in "__utmz" parameter. + * + * @see Internals\ParameterHolder::$__utmz + * @var string + */ + protected $term; + + /** + * Ad Content Description, a.k.a. "utm_content" query parameter for ga.js. + * Will be mapped to "utmcct" key in "__utmz" parameter. + * + * @see Internals\ParameterHolder::$__utmz + * @var string + */ + protected $content; + + + /** + * @const string + */ + const TYPE_DIRECT = 'direct'; + /** + * @const string + */ + const TYPE_ORGANIC = 'organic'; + /** + * @const string + */ + const TYPE_REFERRAL = 'referral'; + + + /** + * @see createFromReferrer + * @param string $type See TYPE_* constants + */ + public function __construct($type) { + if(!in_array($type, array(self::TYPE_DIRECT, self::TYPE_ORGANIC, self::TYPE_REFERRAL))) { + Tracker::_raiseError('Campaign type has to be one of the Campaign::TYPE_* constant values.', __METHOD__); + } + + $this->type = $type; + + switch($type) { + // See http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/campaign/CampaignManager.as#375 + case self::TYPE_DIRECT: + $this->name = '(direct)'; + $this->source = '(direct)'; + $this->medium = '(none)'; + break; + // See http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/campaign/CampaignManager.as#340 + case self::TYPE_REFERRAL: + $this->name = '(referral)'; + $this->medium = 'referral'; + break; + // See http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/campaign/CampaignManager.as#280 + case self::TYPE_ORGANIC: + $this->name = '(organic)'; + $this->medium = 'organic'; + break; + } + + $this->creationTime = new DateTime(); + } + + /** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/campaign/CampaignManager.as#333 + * @param string $url + * @return \UnitedPrototype\GoogleAnalytics\Campaign + */ + public static function createFromReferrer($url) { + $instance = new static(self::TYPE_REFERRAL); + $urlInfo = parse_url($url); + $instance->source = $urlInfo['host']; + $instance->content = $urlInfo['path']; + + return $instance; + } + + /** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/campaign/CampaignTracker.as#153 + */ + public function validate() { + // NOTE: gaforflash states that id and gClickId must also be specified, + // but that doesn't seem to be correct + if(!$this->source) { + Tracker::_raiseError('Campaigns need to have at least the "source" attribute defined.', __METHOD__); + } + } + + /** + * @param string $type + */ + public function setType($type) { + $this->type = $type; + } + + /** + * @return string + */ + public function getType() { + return $this->type; + } + + /** + * @param DateTime $creationTime + */ + public function setCreationTime(DateTime $creationTime) { + $this->creationTime = $creationTime; + } + + /** + * @return DateTime + */ + public function getCreationTime() { + return $this->creationTime; + } + + /** + * @param int $esponseCount + */ + public function setResponseCount($responseCount) { + $this->responseCount = (int)$responseCount; + } + + /** + * @return int + */ + public function getResponseCount() { + return $this->responseCount; + } + + /** + * @param int $byAmount + */ + public function increaseResponseCount($byAmount = 1) { + $this->responseCount += $byAmount; + } + + /** + * @param int $id + */ + public function setId($id) { + $this->id = $id; + } + + /** + * @return int + */ + public function getId() { + return $this->id; + } + + /** + * @param string $source + */ + public function setSource($source) { + $this->source = $source; + } + + /** + * @return string + */ + public function getSource() { + return $this->source; + } + + /** + * @param string $gClickId + */ + public function setGClickId($gClickId) { + $this->gClickId = $gClickId; + } + + /** + * @return string + */ + public function getGClickId() { + return $this->gClickId; + } + + /** + * @param string $dClickId + */ + public function setDClickId($dClickId) { + $this->dClickId = $dClickId; + } + + /** + * @return string + */ + public function getDClickId() { + return $this->dClickId; + } + + /** + * @param string $name + */ + public function setName($name) { + $this->name = $name; + } + + /** + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @param string $medium + */ + public function setMedium($medium) { + $this->medium = $medium; + } + + /** + * @return string + */ + public function getMedium() { + return $this->medium; + } + + /** + * @param string $term + */ + public function setTerm($term) { + $this->term = $term; + } + + /** + * @return string + */ + public function getTerm() { + return $this->term; + } + + /** + * @param string $content + */ + public function setContent($content) { + $this->content = $content; + } + + /** + * @return string + */ + public function getContent() { + return $this->content; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Config.php b/app/api/code/php-ga/GoogleAnalytics/Config.php new file mode 100755 index 0000000..7f19142 --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Config.php @@ -0,0 +1,295 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +/** + * Note: Doesn't necessarily have to be consistent across requests, as it doesn't + * alter the actual tracking result. + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/core/GIFRequest.as + */ +class Config { + + /** + * How strict should errors get handled? After all, we do just do some + * tracking stuff here, and errors shouldn't break an application's + * functionality in production. + * RECOMMENDATION: Exceptions during deveopment, warnings in production. + * + * Assign any value of the self::ERROR_SEVERITY_* constants. + * + * @see Tracker::_raiseError() + * @var int + */ + protected $errorSeverity = self::ERROR_SEVERITY_EXCEPTIONS; + + /** + * Ignore all errors completely. + */ + const ERROR_SEVERITY_SILENCE = 0; + /** + * Trigger PHP errors with a E_USER_WARNING error level. + */ + const ERROR_SEVERITY_WARNINGS = 1; + /** + * Throw UnitedPrototype\GoogleAnalytics\Exception exceptions. + */ + const ERROR_SEVERITY_EXCEPTIONS = 2; + + /** + * Whether to just queue all requests on HttpRequest::fire() and actually send + * them on PHP script shutdown after all other tasks are done. + * + * This has two advantages: + * 1) It effectively doesn't affect app performance + * 2) It can e.g. handle custom variables that were set after scheduling a request + * + * @see Internals\Request\HttpRequest::fire() + * @var bool + */ + protected $sendOnShutdown = false; + + /** + * Whether to make asynchronous requests to GA without waiting for any + * response (speeds up doing requests). + * + * @see Internals\Request\HttpRequest::send() + * @var bool + */ + protected $fireAndForget = false; + + /** + * Logging callback, registered via setLoggingCallback(). Will be fired + * whenever a request gets sent out and receives the full HTTP request + * as the first and the full HTTP response (or null if the "fireAndForget" + * option or simulation mode are used) as the second argument. + * + * @var \Closure + */ + protected $loggingCallback; + + /** + * Seconds (float allowed) to wait until timeout when connecting to the + * Google analytics endpoint host + * + * @see Internals\Request\HttpRequest::send() + * @var float + */ + protected $requestTimeout = 1; + + // FIXME: Add SSL support, https://ssl.google-analytics.com + + /** + * Google Analytics tracking request endpoint host. Can be set to null to + * silently simulate (and log) requests without actually sending them. + * + * @see Internals\Request\HttpRequest::send() + * @var string + */ + protected $endPointHost = 'www.google-analytics.com'; + + /** + * Google Analytics tracking request endpoint path + * + * @see Internals\Request\HttpRequest::send() + * @var string + */ + protected $endPointPath = '/__utm.gif'; + + /** + * Whether to anonymize IP addresses within Google Analytics by stripping + * the last IP address block, will be mapped to "aip" parameter + * + * @see Internals\ParameterHolder::$aip + * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApi_gat.html#_gat._anonymizeIp + * @var bool + */ + protected $anonymizeIpAddresses = false; + + /** + * Defines a new sample set size (0-100) for Site Speed data collection. + * By default, a fixed 1% sampling of your site visitors make up the data pool from which + * the Site Speed metrics are derived. + * + * @see Page::$loadTime + * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html#_gat.GA_Tracker_._setSiteSpeedSampleRate + * @var int + */ + protected $sitespeedSampleRate = 1; + + + /** + * @param array $properties + */ + public function __construct(array $properties = array()) { + foreach($properties as $property => $value) { + // PHP doesn't care about case in method names + $setterMethod = 'set' . $property; + + if(method_exists($this, $setterMethod)) { + $this->$setterMethod($value); + } else { + return Tracker::_raiseError('There is no setting "' . $property . '".', __METHOD__); + } + } + } + + /** + * @return int See self::ERROR_SEVERITY_* constants + */ + public function getErrorSeverity() { + return $this->errorSeverity; + } + + /** + * @param int $errorSeverity See self::ERROR_SEVERITY_* constants + */ + public function setErrorSeverity($errorSeverity) { + $this->errorSeverity = $errorSeverity; + } + + /** + * @return bool + */ + public function getSendOnShutdown() { + return $this->sendOnShutdown; + } + + /** + * @param bool $sendOnShutdown + */ + public function setSendOnShutdown($sendOnShutdown) { + $this->sendOnShutdown = $sendOnShutdown; + } + + /** + * @return bool + */ + public function getFireAndForget() { + return $this->fireAndForget; + } + + /** + * @param bool $fireAndForget + */ + public function setFireAndForget($fireAndForget) { + $this->fireAndForget = (bool)$fireAndForget; + } + + /** + * @return \Closure|null + */ + public function getLoggingCallback() { + return $this->loggingCallback; + } + + /** + * @param \Closure $callback + */ + public function setLoggingCallback(\Closure $callback) { + $this->loggingCallback = $callback; + } + + /** + * @return float + */ + public function getRequestTimeout() { + return $this->requestTimeout; + } + + /** + * @param float $requestTimeout + */ + public function setRequestTimeout($requestTimeout) { + $this->requestTimeout = (float)$requestTimeout; + } + + /** + * @return string|null + */ + public function getEndPointHost() { + return $this->endPointHost; + } + + /** + * @param string|null $endPointHost + */ + public function setEndPointHost($endPointHost) { + $this->endPointHost = $endPointHost; + } + + /** + * @return string + */ + public function getEndPointPath() { + return $this->endPointPath; + } + + /** + * @param string $endPointPath + */ + public function setEndPointPath($endPointPath) { + $this->endPointPath = $endPointPath; + } + + /** + * @return bool + */ + public function getAnonymizeIpAddresses() { + return $this->anonymizeIpAddresses; + } + + /** + * @param bool $anonymizeIpAddresses + */ + public function setAnonymizeIpAddresses($anonymizeIpAddresses) { + $this->anonymizeIpAddresses = $anonymizeIpAddresses; + } + + /** + * @return int + */ + public function getSitespeedSampleRate() { + return $this->sitespeedSampleRate; + } + + /** + * @param int $sitespeedSampleRate + */ + public function setSitespeedSampleRate($sitespeedSampleRate) { + if((int)$sitespeedSampleRate != (float)$sitespeedSampleRate || $sitespeedSampleRate < 0 || $sitespeedSampleRate > 100) { + return Tracker::_raiseError('For consistency with ga.js, sample rates must be specified as a number between 0 and 100.', __METHOD__); + } + + $this->sitespeedSampleRate = (int)$sitespeedSampleRate; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/CustomVariable.php b/app/api/code/php-ga/GoogleAnalytics/CustomVariable.php new file mode 100755 index 0000000..71dfc3b --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/CustomVariable.php @@ -0,0 +1,180 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +use UnitedPrototype\GoogleAnalytics\Internals\Util; + +/** + * @link http://code.google.com/apis/analytics/docs/tracking/gaTrackingCustomVariables.html + */ +class CustomVariable { + + /** + * @var int + */ + protected $index; + + /** + * WATCH OUT: It's a known issue that GA will not decode URL-encoded characters + * in custom variable names and values properly, so spaces will show up + * as "%20" in the interface etc. + * + * @link http://www.google.com/support/forum/p/Google%20Analytics/thread?tid=2cdb3ec0be32e078 + * @var string + */ + protected $name; + + /** + * WATCH OUT: It's a known issue that GA will not decode URL-encoded characters + * in custom variable names and values properly, so spaces will show up + * as "%20" in the interface etc. + * + * @link http://www.google.com/support/forum/p/Google%20Analytics/thread?tid=2cdb3ec0be32e078 + * @var mixed + */ + protected $value; + + /** + * See SCOPE_* constants + * + * @var int + */ + protected $scope = self::SCOPE_PAGE; + + + /** + * @const int + */ + const SCOPE_VISITOR = 1; + /** + * @const int + */ + const SCOPE_SESSION = 2; + /** + * @const int + */ + const SCOPE_PAGE = 3; + + + /** + * @param int $index + * @param string $name + * @param mixed $value + * @param int $scope See SCOPE_* constants + */ + public function __construct($index = null, $name = null, $value = null, $scope = null) { + if($index !== null) $this->setIndex($index); + if($name !== null) $this->setName($name); + if($value !== null) $this->setValue($value); + if($scope !== null) $this->setScope($scope); + } + + public function validate() { + // According to the GA documentation, there is a limit to the combined size of + // name and value of 64 bytes after URL encoding, + // see http://code.google.com/apis/analytics/docs/tracking/gaTrackingCustomVariables.html#varTypes + // and http://xahlee.org/js/google_analytics_tracker_2010-07-01_expanded.js line 563 + // This limit was increased to 128 bytes BEFORE encoding with the 2012-01 release of ga.js however, + // see http://code.google.com/apis/analytics/community/gajs_changelog.html + if(strlen($this->name . $this->value) > 128) { + Tracker::_raiseError('Custom Variable combined name and value length must not be larger than 128 bytes.', __METHOD__); + } + } + + /** + * @return int + */ + public function getIndex() { + return $this->index; + } + + /** + * @link http://code.google.com/intl/de-DE/apis/analytics/docs/tracking/gaTrackingCustomVariables.html#usage + * @param int $index + */ + public function setIndex($index) { + // Custom Variables are limited to five slots officially, but there seems to be a + // trick to allow for more of them which we could investigate at a later time (see + // http://analyticsimpact.com/2010/05/24/get-more-than-5-custom-variables-in-google-analytics/) + if($index < 1 || $index > 5) { + Tracker::_raiseError('Custom Variable index has to be between 1 and 5.', __METHOD__); + } + + $this->index = (int)$index; + } + + /** + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) { + $this->name = $name; + } + + /** + * @return mixed + */ + public function getValue() { + return $this->value; + } + + /** + * @param mixed $value + */ + public function setValue($value) { + $this->value = $value; + } + + /** + * @return int + */ + public function getScope() { + return $this->scope; + } + + /** + * @param int $scope + */ + public function setScope($scope) { + if(!in_array($scope, array(self::SCOPE_PAGE, self::SCOPE_SESSION, self::SCOPE_VISITOR))) { + Tracker::_raiseError('Custom Variable scope has to be one of the CustomVariable::SCOPE_* constant values.', __METHOD__); + } + + $this->scope = (int)$scope; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Event.php b/app/api/code/php-ga/GoogleAnalytics/Event.php new file mode 100755 index 0000000..ad649ee --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Event.php @@ -0,0 +1,169 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +/** + * @link http://code.google.com/apis/analytics/docs/tracking/eventTrackerOverview.html + * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiEventTracking.html + */ +class Event { + + /** + * The general event category (e.g. "Videos"). + * + * @var string + */ + protected $category; + + /** + * The action for the event (e.g. "Play"). + * + * @var string + */ + protected $action; + + /** + * An optional descriptor for the event (e.g. the video's title). + * + * @var string + */ + protected $label; + + /** + * An optional value associated with the event. You can see your event values in the Overview, + * Categories, and Actions reports, where they are listed by event or aggregated across events, + * depending upon your report view. + * + * @var int + */ + protected $value; + + /** + * Default value is false. By default, event hits will impact a visitor's bounce rate. + * By setting this parameter to true, this event hit will not be used in bounce rate calculations. + * + * @var bool + */ + protected $noninteraction = false; + + + /** + * @param string $category + * @param string $action + * @param string $label + * @param int $value + * @param bool $noninteraction + */ + public function __construct($category = null, $action = null, $label = null, $value = null, $noninteraction = null) { + if($category !== null) $this->setCategory($category); + if($action !== null) $this->setAction($action); + if($label !== null) $this->setLabel($label); + if($value !== null) $this->setValue($value); + if($noninteraction !== null) $this->setNoninteraction($noninteraction); + } + + public function validate() { + if($this->category === null || $this->action === null) { + Tracker::_raiseError('Events need at least to have a category and action defined.', __METHOD__); + } + } + + /** + * @return string + */ + public function getCategory() { + return $this->category; + } + + /** + * @param string $category + */ + public function setCategory($category) { + $this->category = $category; + } + + /** + * @return string + */ + public function getAction() { + return $this->action; + } + + /** + * @param string $action + */ + public function setAction($action) { + $this->action = $action; + } + + /** + * @return string + */ + public function getLabel() { + return $this->label; + } + + /** + * @param string $label + */ + public function setLabel($label) { + $this->label = $label; + } + + /** + * @return int + */ + public function getValue() { + return $this->value; + } + + /** + * @param int $value + */ + public function setValue($value) { + $this->value = (int)$value; + } + + /** + * @return bool + */ + public function getNoninteraction() { + return $this->noninteraction; + } + + /** + * @param bool $value + */ + public function setNoninteraction($value) { + $this->noninteraction = (bool)$value; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Exception.php b/app/api/code/php-ga/GoogleAnalytics/Exception.php new file mode 100755 index 0000000..e01dd0a --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Exception.php @@ -0,0 +1,39 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +/** + * @see Config::$errorSeverity + * @see Tracker::_raiseError() + */ +class Exception extends \Exception { + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Internals/ParameterHolder.php b/app/api/code/php-ga/GoogleAnalytics/Internals/ParameterHolder.php new file mode 100755 index 0000000..15d75aa --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Internals/ParameterHolder.php @@ -0,0 +1,536 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics\Internals; + +use UnitedPrototype\GoogleAnalytics\Tracker; + +/** + * This simple class is mainly meant to be a well-documented overview of all + * possible GA tracking parameters. + * + * @link http://code.google.com/apis/analytics/docs/tracking/gaTrackingTroubleshooting.html#gifParameters + */ +class ParameterHolder { + + // - - - - - - - - - - - - - - - - - General parameters - - - - - - - - - - - - - - - - - + + /** + * Google Analytics client version, e.g. "4.7.2" + * @var string + */ + public $utmwv = Tracker::VERSION; + + /** + * Google Analytics account ID, e.g. "UA-1234567-8" + * @var string + */ + public $utmac; + + /** + * Host Name, e.g. "www.example.com" + * @var string + */ + public $utmhn; + + /** + * Indicates the type of request, which is one of null (for page), "event", + * "tran", "item", "social", "var" (deprecated) or "error" (used by ga.js + * for internal client error logging). + * @var string + */ + public $utmt; + + /** + * Contains the amount of requests done in this session. Added in ga.js v4.9.2. + * @var int + */ + public $utms; + + /** + * Unique ID (random number) generated for each GIF request + * @var int + */ + public $utmn; + + /** + * Contains all cookie values, see below + * @var string + */ + public $utmcc; + + /** + * Extensible Parameter, used for events and custom variables + * @var string + */ + public $utme; + + /** + * Event "non-interaction" parameter. By default, the event hit will impact a visitor's bounce rate. + * By setting this parameter to 1, this event hit will not be used in bounce rate calculations. + * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiEventTracking.html + * @var int + */ + public $utmni; + + /** + * Whether to anonymize IP addresses within Google Analytics by stripping + * the last IP address block, either null or 1 + * @var int + */ + public $aip; + + /** + * Used for GA-internal statistical client function usage and error tracking, + * not implemented in php-ga as of now, but here for documentation completeness. + * @link http://glucik.blogspot.com/2011/02/utmu-google-analytics-request-parameter.html + * @var string + */ + public $utmu; + + + // - - - - - - - - - - - - - - - - - Page parameters - - - - - - - - - - - - - - - - - + + /** + * Page request URI, e.g. "/path/page.html" + * @var string + */ + public $utmp; + + /** + * Page title + * @var string + */ + public $utmdt; + + /** + * Charset encoding (e.g. "UTF-8") or "-" as default + * @var string + */ + public $utmcs = '-'; + + /** + * Referer URL, e.g. "http://www.example.com/path/page.html", "-" as default + * or "0" for internal referers + * @var string + */ + public $utmr = '-'; + + + // - - - - - - - - - - - - - - - - - Visitor parameters - - - - - - - - - - - - - - - - - + + /** + * IP Address of the end user, e.g. "123.123.123.123", found in GA for Mobile examples, + * but sadly seems to be ignored in normal GA use + * + * @link http://github.com/mptre/php-ga/blob/master/ga.php + * @var string + */ + public $utmip; + + /** + * Visitor's locale string (all lower-case, country part optional), e.g. "de-de" + * @var string + */ + public $utmul; + + /** + * Visitor's Flash version, e.g. "9.0 r28" or "-" as default + * @var string + */ + public $utmfl = '-'; + + /** + * Visitor's Java support, either 0 or 1 or "-" as default + * @var int|string + */ + public $utmje = '-'; + + /** + * Visitor's screen color depth, e.g. "32-bit" + * @var string + */ + public $utmsc; + + /** + * Visitor's screen resolution, e.g. "1024x768" + * @var string + */ + public $utmsr; + + /** + * Visitor tracking cookie parameter. + * + * This cookie is typically written to the browser upon the first visit to your site from that web browser. + * If the cookie has been deleted by the browser operator, and the browser subsequently visits your site, + * a new __utma cookie is written with a different unique ID. + * + * This cookie is used to determine unique visitors to your site and it is updated with each page view. + * Additionally, this cookie is provided with a unique ID that Google Analytics uses to ensure both the + * validity and accessibility of the cookie as an extra security measure. + * + * Expiration: + * 2 years from set/update. + * + * Format: + * __utma=..... + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/data/UTMA.as + * @var int + */ + public $__utma; + + + // - - - - - - - - - - - - - - - - - Session parameters - - - - - - - - - - - - - - - - - + + /** + * Hit id for revenue per page tracking for AdSense, a random per-session ID + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/core/DocumentInfo.as#117 + * @var int + */ + public $utmhid; + + /** + * Session timeout cookie parameter. + * Will never be sent with requests, but stays here for documentation completeness. + * + * This cookie is used to establish and continue a user session with your site. + * When a user views a page on your site, the Google Analytics code attempts to update this cookie. + * If it does not find the cookie, a new one is written and a new session is established. + * + * Each time a user visits a different page on your site, this cookie is updated to expire in 30 minutes, + * thus continuing a single session for as long as user activity continues within 30-minute intervals. + * + * This cookie expires when a user pauses on a page on your site for longer than 30 minutes. + * You can modify the default length of a user session with the setSessionTimeout() method. + * + * Expiration: + * 30 minutes from set/update. + * + * Format: + * __utmb=... + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/data/UTMB.as + * @var string + */ + public $__utmb; + + /** + * Session tracking cookie parameter. + * Will never be sent with requests, but stays here for documentation completeness. + * + * This cookie operates in conjunction with the __utmb cookie to determine whether or not + * to establish a new session for the user. + * In particular, this cookie is not provided with an expiration date, + * so it expires when the user exits the browser. + * + * Should a user visit your site, exit the browser and then return to your website within 30 minutes, + * the absence of the __utmc cookie indicates that a new session needs to be established, + * despite the fact that the __utmb cookie has not yet expired. + * + * Expiration: + * Not set. + * + * Format: + * __utmc= + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/data/UTMC.as + * @var string + */ + public $__utmc; + + + // - - - - - - - - - - - - - - - - - E-Commerce parameters - - - - - - - - - - - - - - - - - + + /** + * Product Code. This is the sku code for a given product, e.g. "989898ajssi" + * @var string + */ + public $utmipc; + + /** + * Product Name, e.g. "T-Shirt" + * @var string + */ + public $utmipn; + + /** + * Unit Price. Value is set to numbers only, e.g. 19.95 + * @var float + */ + public $utmipr; + + /** + * Unit Quantity, e.g. 4 + * @var int + */ + public $utmiqt; + + /** + * Variations on an item, e.g. "white", "black", "green" etc. + * @var string + */ + public $utmiva; + + /** + * Order ID, e.g. "a2343898" + * @var string + */ + public $utmtid; + + /** + * Affiliation + * @var string + */ + public $utmtst; + + /** + * Total Cost, e.g. 20.00 + * @var float + */ + public $utmtto; + + /** + * Tax Cost, e.g. 4.23 + * @var float + */ + public $utmttx; + + /** + * Shipping Cost, e.g. 3.95 + * @var float + */ + public $utmtsp; + + /** + * Billing City, e.g. "Cologne" + * @var string + */ + public $utmtci; + + /** + * Billing Region, e.g. "North Rhine-Westphalia" + * @var string + */ + public $utmtrg; + + /** + * Billing Country, e.g. "Germany" + * @var string + */ + public $utmtco; + + + // - - - - - - - - - - - - - - - - - Campaign parameters - - - - - - - - - - - - - - - - - + + /** + * Starts a new campaign session. Either utmcn or utmcr is present on any given request, + * but never both at the same time. Changes the campaign tracking data; but does not start + * a new session. Either 1 or not set. + * + * Found in gaforflash but not in ga.js, so we do not use it, but it will stay here for + * documentation completeness. + * + * @deprecated + * @var int + */ + public $utmcn; + + /** + * Indicates a repeat campaign visit. This is set when any subsequent clicks occur on the + * same link. Either utmcn or utmcr is present on any given request, but never both at the + * same time. Either 1 or not set. + * + * Found in gaforflash but not in ga.js, so we do not use it, but it will stay here for + * documentation completeness. + * + * @deprecated + * @var int + */ + public $utmcr; + + /** + * Campaign ID, a.k.a. "utm_id" query parameter for ga.js + * @var string + */ + public $utmcid; + + /** + * Source, a.k.a. "utm_source" query parameter for ga.js + * @var string + */ + public $utmcsr; + + /** + * Google AdWords Click ID, a.k.a. "gclid" query parameter for ga.js + * @var string + */ + public $utmgclid; + + /** + * Not known for sure, but expected to be a DoubleClick Ad Click ID. + * @var string + */ + public $utmdclid; + + /** + * Name, a.k.a. "utm_campaign" query parameter for ga.js + * @var string + */ + public $utmccn; + + /** + * Medium, a.k.a. "utm_medium" query parameter for ga.js + * @var string + */ + public $utmcmd; + + /** + * Terms/Keywords, a.k.a. "utm_term" query parameter for ga.js + * @var string + */ + public $utmctr; + + /** + * Ad Content Description, a.k.a. "utm_content" query parameter for ga.js + * @var string + */ + public $utmcct; + + /** + * Unknown so far. Found in ga.js. + * @var int + */ + public $utmcvr; + + /** + * Campaign tracking cookie parameter. + * + * This cookie stores the type of referral used by the visitor to reach your site, + * whether via a direct method, a referring link, a website search, or a campaign such as an ad or an email link. + * + * It is used to calculate search engine traffic, ad campaigns and page navigation within your own site. + * The cookie is updated with each page view to your site. + * + * Expiration: + * 6 months from set/update. + * + * Format: + * __utmz=.... + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/data/UTMZ.as + * @var string + */ + public $__utmz; + + + // - - - - - - - - - - - - - - - - - Social Tracking parameters - - - - - - - - - - - - - - - - - + + /** + * The network on which the action occurs (e.g. Facebook, Twitter). + * @var string + */ + public $utmsn; + + /** + * The type of action that happens (e.g. Like, Send, Tweet). + * @var string + */ + public $utmsa; + + /** + * The page URL from which the action occurred. + * @var string + */ + public $utmsid; + + + // - - - - - - - - - - - - - - - - - Google Website Optimizer (GWO) parameters - - - - - - - - - - - - - - - - - + + // TODO: Implementation needed + /** + * Website Optimizer cookie parameter. + * + * This cookie is used by Website Optimizer and only set when Website Optimizer is used in combination + * with GA. See the Google Website Optimizer Help Center for details. + * + * Expiration: + * 2 years from set/update. + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/data/UTMX.as + * @var string + */ + public $__utmx; + + + // - - - - - - - - - - - - - - - - - Custom Variables parameters (deprecated) - - - - - - - - - - - - - - - - - + + // TODO: Implementation needed? + /** + * Deprecated custom variables cookie parameter. + * + * This cookie parameter is no longer relevant as of migration from setVar() to + * setCustomVar() and hence not supported by this library, but will stay here for + * documentation completeness. + * + * The __utmv cookie passes the information provided via the setVar() method, + * which you use to create a custom user segment. + * + * Expiration: + * 2 years from set/update. + * + * Format: + * __utmv=. + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/data/UTMV.as + * @deprecated + * @var string + */ + public $__utmv; + + + /** + * Converts this parameter holder to a pure PHP array, filtering out all properties + * prefixed with an underscore ("_"). + * + * @return array + */ + public function toArray() { + $array = array(); + foreach($this as $property => $value) { + if($property[0] != '_') { + $array[$property] = $value; + } + } + return $array; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Internals/Request/EventRequest.php b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/EventRequest.php new file mode 100755 index 0000000..77a605c --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/EventRequest.php @@ -0,0 +1,109 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics\Internals\Request; + +use UnitedPrototype\GoogleAnalytics\Event; + +use UnitedPrototype\GoogleAnalytics\Internals\X10; + +class EventRequest extends Request { + + /** + * @var \UnitedPrototype\GoogleAnalytics\Event + */ + protected $event; + + + /** + * @const int + */ + const X10_EVENT_PROJECT_ID = 5; + + + /** + * @return string + */ + protected function getType() { + return Request::TYPE_EVENT; + } + + /** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/v4/Tracker.as#1503 + * + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildParameters() { + $p = parent::buildParameters(); + + $x10 = new X10(); + + $x10->clearKey(self::X10_EVENT_PROJECT_ID); + $x10->clearValue(self::X10_EVENT_PROJECT_ID); + + // Object / Category + $x10->setKey(self::X10_EVENT_PROJECT_ID, X10::OBJECT_KEY_NUM, $this->event->getCategory()); + + // Event Type / Action + $x10->setKey(self::X10_EVENT_PROJECT_ID, X10::TYPE_KEY_NUM, $this->event->getAction()); + + if($this->event->getLabel() !== null) { + // Event Description / Label + $x10->setKey(self::X10_EVENT_PROJECT_ID, X10::LABEL_KEY_NUM, $this->event->getLabel()); + } + + if($this->event->getValue() !== null) { + $x10->setValue(self::X10_EVENT_PROJECT_ID, X10::VALUE_VALUE_NUM, $this->event->getValue()); + } + + $p->utme .= $x10->renderUrlString(); + + if($this->event->getNoninteraction()) { + $p->utmni = 1; + } + + return $p; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Event + */ + public function getEvent() { + return $this->event; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Event $event + */ + public function setEvent(Event $event) { + $this->event = $event; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Internals/Request/HttpRequest.php b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/HttpRequest.php new file mode 100755 index 0000000..2ba81ae --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/HttpRequest.php @@ -0,0 +1,239 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics\Internals\Request; + +use UnitedPrototype\GoogleAnalytics\Config; + +use UnitedPrototype\GoogleAnalytics\Internals\Util; + +/** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/core/GIFRequest.as + */ +abstract class HttpRequest { + + /** + * Indicates the type of request, will be mapped to "utmt" parameter + * + * @see ParameterHolder::$utmt + * @var string + */ + protected $type; + + /** + * @var \UnitedPrototype\GoogleAnalytics\Config + */ + protected $config; + + /** + * @var string + */ + protected $xForwardedFor; + + /** + * @var string + */ + protected $userAgent; + + + /** + * @param \UnitedPrototype\GoogleAnalytics\Config $config + */ + public function __construct(Config $config = null) { + $this->setConfig($config ? $config : new Config()); + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Config + */ + public function getConfig() { + return $this->config; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Config $config + */ + public function setConfig(Config $config) { + $this->config = $config; + } + + /** + * @param string $value + */ + protected function setXForwardedFor($value) { + $this->xForwardedFor = $value; + } + + /** + * @param string $value + */ + protected function setUserAgent($value) { + $this->userAgent = $value; + } + + /** + * @return string + */ + protected function buildHttpRequest() { + $parameters = $this->buildParameters(); + + // This constant is supported as the 4th argument of http_build_query() + // from PHP 5.3.6 on and will tell it to use rawurlencode() instead of urlencode() + // internally, see http://code.google.com/p/php-ga/issues/detail?id=3 + if(defined('PHP_QUERY_RFC3986')) { + // http_build_query() does automatically skip all array entries + // with null values, exactly what we want here + $queryString = http_build_query($parameters->toArray(), '', '&', PHP_QUERY_RFC3986); + } else { + // Manually replace "+"s with "%20" for backwards-compatibility + $queryString = str_replace('+', '%20', http_build_query($parameters->toArray(), '', '&')); + } + // Mimic Javascript's encodeURIComponent() encoding for the query + // string just to be sure we are 100% consistent with GA's Javascript client + $queryString = Util::convertToUriComponentEncoding($queryString); + + // Recent versions of ga.js use HTTP POST requests if the query string is too long + $usePost = strlen($queryString) > 2036; + + if(!$usePost) { + $r = 'GET ' . $this->config->getEndpointPath() . '?' . $queryString . ' HTTP/1.0' . "\r\n"; + } else { + // FIXME: The "/p" shouldn't be hardcoded here, instead we need a GET and a POST endpoint... + $r = 'POST /p' . $this->config->getEndpointPath() . ' HTTP/1.0' . "\r\n"; + } + $r .= 'Host: ' . $this->config->getEndpointHost() . "\r\n"; + + if($this->userAgent) { + $r .= 'User-Agent: ' . str_replace(array("\n", "\r"), '', $this->userAgent) . "\r\n"; + } + + if($this->xForwardedFor) { + // Sadly "X-Fowarded-For" is not supported by GA so far, + // see e.g. http://www.google.com/support/forum/p/Google+Analytics/thread?tid=017691c9e71d4b24, + // but we include it nonetheless for the pure sake of correctness (and hope) + $r .= 'X-Forwarded-For: ' . str_replace(array("\n", "\r"), '', $this->xForwardedFor) . "\r\n"; + } + + if($usePost) { + // Don't ask me why "text/plain", but ga.js says so :) + $r .= 'Content-Type: text/plain' . "\r\n"; + $r .= 'Content-Length: ' . strlen($queryString) . "\r\n"; + } + + $r .= 'Connection: close' . "\r\n"; + $r .= "\r\n\r\n"; + + if($usePost) { + $r .= $queryString; + } + + return $r; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected abstract function buildParameters(); + + /** + * This method should only be called directly or indirectly by fire(), but must + * remain public as it can be called by a closure function. + * + * Sends either a normal HTTP request with response or an asynchronous request + * to Google Analytics without waiting for the response. Will always return + * null in the latter case, or false if any connection problems arise. + * + * @see HttpRequest::fire() + * @param string $request + * @return null|string|bool + */ + public function _send() { + $request = $this->buildHttpRequest(); + $response = null; + + // Do not actually send the request if endpoint host is set to null + if($this->config->getEndpointHost() !== null) { + $timeout = $this->config->getRequestTimeout(); + + $socket = fsockopen($this->config->getEndpointHost(), 80, $errno, $errstr, $timeout); + if(!$socket) return false; + + if($this->config->getFireAndForget()) { + stream_set_blocking($socket, false); + } + + $timeoutS = intval($timeout); + $timeoutUs = ($timeout - $timeoutS) * 100000; + stream_set_timeout($socket, $timeoutS, $timeoutUs); + + // Ensure that the full request is sent (see http://code.google.com/p/php-ga/issues/detail?id=11) + $sentData = 0; + $toBeSentData = strlen($request); + while($sentData < $toBeSentData) { + $sentData += fwrite($socket, $request); + } + + if(!$this->config->getFireAndForget()) { + while(!feof($socket)) { + $response .= fgets($socket, 512); + } + } + + fclose($socket); + } + + if($loggingCallback = $this->config->getLoggingCallback()) { + $loggingCallback($request, $response); + } + + return $response; + } + + /** + * Simply delegates to send() if config option "sendOnShutdown" is disabled + * or enqueues the request by registering a PHP shutdown function. + */ + public function fire() { + if($this->config->getSendOnShutdown()) { + // This dumb variable assignment is needed as PHP prohibits using + // $this in closure use statements + $instance = $this; + // We use a closure here to retain the current values/states of + // this instance and $request (as the use statement will copy them + // into its own scope) + register_shutdown_function(function() use($instance) { + $instance->_send(); + }); + } else { + $this->_send(); + } + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Internals/Request/ItemRequest.php b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/ItemRequest.php new file mode 100755 index 0000000..cfd668c --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/ItemRequest.php @@ -0,0 +1,106 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics\Internals\Request; + +use UnitedPrototype\GoogleAnalytics\Item; + +use UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder; + +class ItemRequest extends Request { + + /** + * @var \UnitedPrototype\GoogleAnalytics\Item + */ + protected $item; + + + /** + * @return string + */ + protected function getType() { + return Request::TYPE_ITEM; + } + + /** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/ecommerce/Item.as#61 + * + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildParameters() { + $p = parent::buildParameters(); + + $p->utmtid = $this->item->getOrderId(); + $p->utmipc = $this->item->getSku(); + $p->utmipn = $this->item->getName(); + $p->utmiva = $this->item->getVariation(); + $p->utmipr = $this->item->getPrice(); + $p->utmiqt = $this->item->getQuantity(); + + return $p; + } + + /** + * The GA Javascript client doesn't send any visitor information for + * e-commerce requests, so we don't either. + * + * @param \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder $p + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildVisitorParameters(ParameterHolder $p) { + return $p; + } + + /** + * The GA Javascript client doesn't send any custom variables for + * e-commerce requests, so we don't either. + * + * @param \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder $p + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildCustomVariablesParameter(ParameterHolder $p) { + return $p; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Item + */ + public function getItem() { + return $this->item; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Item $item + */ + public function setItem(Item $item) { + $this->item = $item; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Internals/Request/PageviewRequest.php b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/PageviewRequest.php new file mode 100755 index 0000000..f99f367 --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/PageviewRequest.php @@ -0,0 +1,108 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics\Internals\Request; + +use UnitedPrototype\GoogleAnalytics\Page; + +use UnitedPrototype\GoogleAnalytics\Internals\X10; + +class PageviewRequest extends Request { + + /** + * @var \UnitedPrototype\GoogleAnalytics\Page + */ + protected $page; + + + /** + * @const int + */ + const X10_SITESPEED_PROJECT_ID = 14; + + + /** + * @return string + */ + protected function getType() { + return Request::TYPE_PAGE; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildParameters() { + $p = parent::buildParameters(); + + $p->utmp = $this->page->getPath(); + $p->utmdt = $this->page->getTitle(); + if($this->page->getCharset() !== null) { + $p->utmcs = $this->page->getCharset(); + } + if($this->page->getReferrer() !== null) { + $p->utmr = $this->page->getReferrer(); + } + + if($this->page->getLoadTime() !== null) { + // Sample sitespeed measurements + if($p->utmn % 100 < $this->config->getSitespeedSampleRate()) { + $x10 = new X10(); + + $x10->clearKey(self::X10_SITESPEED_PROJECT_ID); + $x10->clearValue(self::X10_SITESPEED_PROJECT_ID); + + // Taken from ga.js code + $key = max(min(floor($this->page->getLoadTime() / 100), 5000), 0) * 100; + $x10->setKey(self::X10_SITESPEED_PROJECT_ID, X10::OBJECT_KEY_NUM, $key); + + $x10->setValue(self::X10_SITESPEED_PROJECT_ID, X10::VALUE_VALUE_NUM, $this->page->getLoadTime()); + + $p->utme .= $x10->renderUrlString(); + } + } + + return $p; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Page + */ + public function getPage() { + return $this->page; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Page $page + */ + public function setPage(Page $page) { + $this->page = $page; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Internals/Request/Request.php b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/Request.php new file mode 100755 index 0000000..d634304 --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/Request.php @@ -0,0 +1,363 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics\Internals\Request; + +use UnitedPrototype\GoogleAnalytics\Tracker; +use UnitedPrototype\GoogleAnalytics\Visitor; +use UnitedPrototype\GoogleAnalytics\Session; +use UnitedPrototype\GoogleAnalytics\CustomVariable; + +use UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder; +use UnitedPrototype\GoogleAnalytics\Internals\Util; +use UnitedPrototype\GoogleAnalytics\Internals\X10; + +abstract class Request extends HttpRequest { + + /** + * @var \UnitedPrototype\GoogleAnalytics\Tracker + */ + protected $tracker; + + /** + * @var \UnitedPrototype\GoogleAnalytics\Visitor + */ + protected $visitor; + + /** + * @var \UnitedPrototype\GoogleAnalytics\Session + */ + protected $session; + + + /** + * @const string + */ + const TYPE_PAGE = null; + /** + * @const string + */ + const TYPE_EVENT = 'event'; + /** + * @const string + */ + const TYPE_TRANSACTION = 'tran'; + /** + * @const string + */ + const TYPE_ITEM = 'item'; + /** + * @const string + */ + const TYPE_SOCIAL = 'social'; + /** + * This type of request is deprecated in favor of encoding custom variables + * within the "utme" parameter, but we include it here for completeness + * + * @see ParameterHolder::$__utmv + * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html#_gat.GA_Tracker_._setVar + * @deprecated + * @const string + */ + const TYPE_CUSTOMVARIABLE = 'var'; + + /** + * @const int + */ + const X10_CUSTOMVAR_NAME_PROJECT_ID = 8; + /** + * @const int + */ + const X10_CUSTOMVAR_VALUE_PROJECT_ID = 9; + /** + * @const int + */ + const X10_CUSTOMVAR_SCOPE_PROJECT_ID = 11; + + /** + * @const string + */ + const CAMPAIGN_DELIMITER = '|'; + + + /** + * Indicates the type of request, will be mapped to "utmt" parameter + * + * @see ParameterHolder::$utmt + * @return string See Request::TYPE_* constants + */ + protected abstract function getType(); + + /** + * @return string + */ + protected function buildHttpRequest() { + $this->setXForwardedFor($this->visitor->getIpAddress()); + $this->setUserAgent($this->visitor->getUserAgent()); + + // Increment session track counter for each request + $this->session->increaseTrackCount(); + + // See http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/v4/Configuration.as?r=237#48 + // and http://code.google.com/intl/de-DE/apis/analytics/docs/tracking/eventTrackerGuide.html#implementationConsiderations + if($this->session->getTrackCount() > 500) { + Tracker::_raiseError('Google Analytics does not guarantee to process more than 500 requests per session.', __METHOD__); + } + + if($this->tracker->getCampaign()) { + $this->tracker->getCampaign()->increaseResponseCount(); + } + + return parent::buildHttpRequest(); + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildParameters() { + $p = new ParameterHolder(); + + $p->utmac = $this->tracker->getAccountId(); + $p->utmhn = $this->tracker->getDomainName(); + + $p->utmt = $this->getType(); + $p->utmn = Util::generate32bitRandom(); + + // The "utmip" parameter is only relevant if a mobile analytics + // ID (MO-123456-7) was given, + // see http://code.google.com/p/php-ga/issues/detail?id=9 + $p->utmip = $this->visitor->getIpAddress(); + + $p->aip = $this->tracker->getConfig()->getAnonymizeIpAddresses() ? 1 : null; + if($p->aip) { + // Anonymize last IP block + $p->utmip = substr($p->utmip, 0, strrpos($p->utmip, '.')) . '.0'; + } + + $p->utmhid = $this->session->getSessionId(); + $p->utms = $this->session->getTrackCount(); + + $p = $this->buildVisitorParameters($p); + $p = $this->buildCustomVariablesParameter($p); + $p = $this->buildCampaignParameters($p); + $p = $this->buildCookieParameters($p); + + return $p; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder $p + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildVisitorParameters(ParameterHolder $p) { + // Ensure correct locale format, see https://developer.mozilla.org/en/navigator.language + $p->utmul = strtolower(str_replace('_', '-', $this->visitor->getLocale())); + + if($this->visitor->getFlashVersion() !== null) { + $p->utmfl = $this->visitor->getFlashVersion(); + } + if($this->visitor->getJavaEnabled() !== null) { + $p->utmje = $this->visitor->getJavaEnabled(); + } + if($this->visitor->getScreenColorDepth() !== null) { + $p->utmsc = $this->visitor->getScreenColorDepth() . '-bit'; + } + $p->utmsr = $this->visitor->getScreenResolution(); + + return $p; + } + + /** + * @link http://xahlee.org/js/google_analytics_tracker_2010-07-01_expanded.js line 575 + * @param \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder $p + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildCustomVariablesParameter(ParameterHolder $p) { + $customVars = $this->tracker->getCustomVariables(); + if($customVars) { + if(count($customVars) > 5) { + // See http://code.google.com/intl/de-DE/apis/analytics/docs/tracking/gaTrackingCustomVariables.html#usage + Tracker::_raiseError('The sum of all custom variables cannot exceed 5 in any given request.', __METHOD__); + } + + $x10 = new X10(); + + $x10->clearKey(self::X10_CUSTOMVAR_NAME_PROJECT_ID); + $x10->clearKey(self::X10_CUSTOMVAR_VALUE_PROJECT_ID); + $x10->clearKey(self::X10_CUSTOMVAR_SCOPE_PROJECT_ID); + + foreach($customVars as $customVar) { + // Name and value get encoded here, + // see http://xahlee.org/js/google_analytics_tracker_2010-07-01_expanded.js line 563 + $name = Util::encodeUriComponent($customVar->getName()); + $value = Util::encodeUriComponent($customVar->getValue()); + + $x10->setKey(self::X10_CUSTOMVAR_NAME_PROJECT_ID, $customVar->getIndex(), $name); + $x10->setKey(self::X10_CUSTOMVAR_VALUE_PROJECT_ID, $customVar->getIndex(), $value); + if($customVar->getScope() !== null && $customVar->getScope() != CustomVariable::SCOPE_PAGE) { + $x10->setKey(self::X10_CUSTOMVAR_SCOPE_PROJECT_ID, $customVar->getIndex(), $customVar->getScope()); + } + } + + $p->utme .= $x10->renderUrlString(); + } + + return $p; + } + + /** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/core/GIFRequest.as#123 + * @param \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder $p + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildCookieParameters(ParameterHolder $p) { + $domainHash = $this->generateDomainHash(); + + $p->__utma = $domainHash . '.'; + $p->__utma .= $this->visitor->getUniqueId() . '.'; + $p->__utma .= $this->visitor->getFirstVisitTime()->format('U') . '.'; + $p->__utma .= $this->visitor->getPreviousVisitTime()->format('U') . '.'; + $p->__utma .= $this->visitor->getCurrentVisitTime()->format('U') . '.'; + $p->__utma .= $this->visitor->getVisitCount(); + + $p->__utmb = $domainHash . '.'; + $p->__utmb .= $this->session->getTrackCount() . '.'; + // FIXME: What does "token" mean? I only encountered a value of 10 in my tests. + $p->__utmb .= 10 . '.'; + $p->__utmb .= $this->session->getStartTime()->format('U'); + + $p->__utmc = $domainHash; + + $cookies = array(); + $cookies[] = '__utma=' . $p->__utma . ';'; + if($p->__utmz) { + $cookies[] = '__utmz=' . $p->__utmz . ';'; + } + if($p->__utmv) { + $cookies[] = '__utmv=' . $p->__utmv . ';'; + } + + $p->utmcc = implode('+', $cookies); + + return $p; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder $p + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildCampaignParameters(ParameterHolder $p) { + $campaign = $this->tracker->getCampaign(); + if($campaign) { + $p->__utmz = $this->generateDomainHash() . '.'; + $p->__utmz .= $campaign->getCreationTime()->format('U') . '.'; + $p->__utmz .= $this->visitor->getVisitCount() . '.'; + $p->__utmz .= $campaign->getResponseCount() . '.'; + + // See http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/campaign/CampaignTracker.as#236 + $data = array( + 'utmcid' => $campaign->getId(), + 'utmcsr' => $campaign->getSource(), + 'utmgclid' => $campaign->getGClickId(), + 'utmdclid' => $campaign->getDClickId(), + 'utmccn' => $campaign->getName(), + 'utmcmd' => $campaign->getMedium(), + 'utmctr' => $campaign->getTerm(), + 'utmcct' => $campaign->getContent(), + ); + foreach($data as $key => $value) { + if($value !== null && $value !== '') { + // Only spaces and pluses get escaped in gaforflash and ga.js, so we do the same + $p->__utmz .= $key . '=' . str_replace(array('+', ' '), '%20', $value) . static::CAMPAIGN_DELIMITER; + } + } + $p->__utmz = rtrim($p->__utmz, static::CAMPAIGN_DELIMITER); + } + + return $p; + } + + /** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/v4/Tracker.as#585 + * @return string + */ + protected function generateDomainHash() { + $hash = 1; + + if($this->tracker->getAllowHash()) { + $hash = Util::generateHash($this->tracker->getDomainName()); + } + + return $hash; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Tracker + */ + public function getTracker() { + return $this->tracker; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Tracker $tracker + */ + public function setTracker(Tracker $tracker) { + $this->tracker = $tracker; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Visitor + */ + public function getVisitor() { + return $this->visitor; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Visitor $visitor + */ + public function setVisitor(Visitor $visitor) { + $this->visitor = $visitor; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Session + */ + public function getSession() { + return $this->session; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Session $session + */ + public function setSession(Session $session) { + $this->session = $session; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Internals/Request/SocialInteractionRequest.php b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/SocialInteractionRequest.php new file mode 100755 index 0000000..c592c88 --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/SocialInteractionRequest.php @@ -0,0 +1,82 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics\Internals\Request; + +use UnitedPrototype\GoogleAnalytics\SocialInteraction; + +class SocialinteractionRequest extends PageviewRequest { + + /** + * @var \UnitedPrototype\GoogleAnalytics\SocialInteraction + */ + protected $socialInteraction; + + + /** + * @return string + */ + protected function getType() { + return Request::TYPE_SOCIAL; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildParameters() { + $p = parent::buildParameters(); + + $p->utmsn = $this->socialInteraction->getNetwork(); + $p->utmsa = $this->socialInteraction->getAction(); + $p->utmsid = $this->socialInteraction->getTarget(); + if($p->utmsid === null) { + // Default to page path like ga.js, + // see http://code.google.com/apis/analytics/docs/tracking/gaTrackingSocial.html#settingUp + $p->utmsid = $this->page->getPath(); + } + + return $p; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\SocialInteraction + */ + public function getSocialInteraction() { + return $this->socialInteraction; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\SocialInteraction $socialInteraction + */ + public function setSocialInteraction(SocialInteraction $socialInteraction) { + $this->socialInteraction = $socialInteraction; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Internals/Request/TransactionRequest.php b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/TransactionRequest.php new file mode 100755 index 0000000..8cf6f1d --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Internals/Request/TransactionRequest.php @@ -0,0 +1,108 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics\Internals\Request; + +use UnitedPrototype\GoogleAnalytics\Transaction; + +use UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder; + +class TransactionRequest extends Request { + + /** + * @var \UnitedPrototype\GoogleAnalytics\Transaction + */ + protected $transaction; + + + /** + * @return string + */ + protected function getType() { + return Request::TYPE_TRANSACTION; + } + + /** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/ecommerce/Transaction.as#76 + * + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildParameters() { + $p = parent::buildParameters(); + + $p->utmtid = $this->transaction->getOrderId(); + $p->utmtst = $this->transaction->getAffiliation(); + $p->utmtto = $this->transaction->getTotal(); + $p->utmttx = $this->transaction->getTax(); + $p->utmtsp = $this->transaction->getShipping(); + $p->utmtci = $this->transaction->getCity(); + $p->utmtrg = $this->transaction->getRegion(); + $p->utmtco = $this->transaction->getCountry(); + + return $p; + } + + /** + * The GA Javascript client doesn't send any visitor information for + * e-commerce requests, so we don't either. + * + * @param \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder $p + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildVisitorParameters(ParameterHolder $p) { + return $p; + } + + /** + * The GA Javascript client doesn't send any custom variables for + * e-commerce requests, so we don't either. + * + * @param \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder $p + * @return \UnitedPrototype\GoogleAnalytics\Internals\ParameterHolder + */ + protected function buildCustomVariablesParameter(ParameterHolder $p) { + return $p; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Transaction + */ + public function getTransaction() { + return $this->transaction; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Transaction $transaction + */ + public function setTransaction(Transaction $transaction) { + $this->transaction = $transaction; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Internals/Util.php b/app/api/code/php-ga/GoogleAnalytics/Internals/Util.php new file mode 100755 index 0000000..b430903 --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Internals/Util.php @@ -0,0 +1,105 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics\Internals; + +/** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/core/Utils.as + */ +class Util { + + /** + * This class does only have public static methods, no instantiation necessary + */ + private function __construct() { } + + + /** + * Mimics Javascript's encodeURIComponent() function for consistency with the GA Javascript client. + * + * @param mixed $value + * @return string + */ + public static function encodeUriComponent($value) { + return static::convertToUriComponentEncoding(rawurlencode($value)); + } + + /** + * Here as a separate method so it can also be applied to e.g. a http_build_query() result. + * + * @link http://stackoverflow.com/questions/1734250/what-is-the-equivalent-of-javascripts-encodeuricomponent-in-php/1734255#1734255 + * @link http://devpro.it/examples/php_js_escaping.php + * + * @param string $encodedValue + * @return string + */ + public static function convertToUriComponentEncoding($encodedValue) { + return str_replace(array('%21', '%2A', '%27', '%28', '%29'), array('!', '*', "'", '(', ')'), $encodedValue); + } + + /** + * Generates a 32bit random number. + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/core/Utils.as#33 + * @return int + */ + public static function generate32bitRandom() { + return round((rand() / getrandmax()) * 0x7fffffff); + } + + /** + * Generates a hash for input string. + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/core/Utils.as#44 + * @param string $string + * @return int + */ + public static function generateHash($string) { + $string = (string)$string; + $hash = 1; + + if($string !== null && $string !== '') { + $hash = 0; + + $length = strlen($string); + for($pos = $length - 1; $pos >= 0; $pos--) { + $current = ord($string[$pos]); + $hash = (($hash << 6) & 0xfffffff) + $current + ($current << 14); + $leftMost7 = $hash & 0xfe00000; + if($leftMost7 != 0) { + $hash ^= $leftMost7 >> 21; + } + } + } + + return $hash; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Internals/X10.php b/app/api/code/php-ga/GoogleAnalytics/Internals/X10.php new file mode 100755 index 0000000..03700f4 --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Internals/X10.php @@ -0,0 +1,331 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics\Internals; + +/** + * This is nearly a 1:1 PHP port of the gaforflash X10 class code. + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/data/X10.as + */ +class X10 { + + /** + * @var array + */ + protected $projectData = array(); + + + /** + * @var string + */ + protected $KEY = 'k'; + + /** + * @var string + */ + protected $VALUE = 'v'; + + /** + * @var array + */ + protected $SET = array('k', 'v'); + + /** + * Opening delimiter for wrapping a set of values belonging to the same type. + * @var string + */ + protected $DELIM_BEGIN = '('; + + /** + * Closing delimiter for wrapping a set of values belonging to the same type. + * @var string + */ + protected $DELIM_END = ')'; + + /** + * Delimiter between two consecutive num/value pairs. + * @var string + */ + protected $DELIM_SET = '*'; + + /** + * Delimiter between a num and its corresponding value. + * @var string + */ + protected $DELIM_NUM_VALUE = '!'; + + /** + * Mapping of escapable characters to their escaped forms. + * + * @var array + */ + protected $ESCAPE_CHAR_MAP = array( + "'" => "'0", + ')' => "'1", + '*' => "'2", + '!' => "'3", + ); + + /** + * @var int + */ + protected $MINIMUM = 1; + + + /** + * @const int + */ + const OBJECT_KEY_NUM = 1; + /** + * @const int + */ + const TYPE_KEY_NUM = 2; + /** + * @const int + */ + const LABEL_KEY_NUM = 3; + /** + * @const int + */ + const VALUE_VALUE_NUM = 1; + + + /** + * @param int $projectId + * @return bool + */ + protected function hasProject($projectId) { + return isset($this->projectData[$projectId]); + } + + /** + * @param int $projectId + * @param int $num + * @param mixed $value + */ + public function setKey($projectId, $num, $value) { + $this->setInternal($projectId, $this->KEY, $num, $value); + } + + /** + * @param int $projectId + * @param int $num + * @return mixed + */ + public function getKey($projectId, $num) { + return $this->getInternal($projectId, $this->KEY, $num); + } + + /** + * @param int $projectId + */ + public function clearKey($projectId) { + $this->clearInternal($projectId, $this->KEY); + } + + /** + * @param int $projectId + * @param int $num + * @param mixed $value + */ + public function setValue($projectId, $num, $value) { + $this->setInternal($projectId, $this->VALUE, $num, $value); + } + + /** + * @param int $projectId + * @param int $num + * @return mixed + */ + public function getValue($projectId, $num) { + return $this->getInternal($projectId, $this->VALUE, $num); + } + + /** + * @param int $projectId + */ + public function clearValue($projectId) { + $this->clearInternal($projectId, $this->VALUE); + } + + /** + * Shared internal implementation for setting an X10 data type. + * + * @param int $projectId + * @param string $type + * @param int $num + * @param mixed $value + */ + protected function setInternal($projectId, $type, $num, $value) { + if(!isset($this->projectData[$projectId])) { + $this->projectData[$projectId] = array(); + } + if(!isset($this->projectData[$projectId][$type])) { + $this->projectData[$projectId][$type] = array(); + } + + $this->projectData[$projectId][$type][$num] = $value; + } + + /** + * Shared internal implementation for getting an X10 data type. + * + * @param int $projectId + * @param string $type + * @param int $num + * @return mixed + */ + protected function getInternal($projectId, $type, $num) { + if(isset($this->projectData[$projectId][$type][$num])) { + return $this->projectData[$projectId][$type][$num]; + } else { + return null; + } + } + + /** + * Shared internal implementation for clearing all X10 data of a type from a + * certain project. + * + * @param int $projectId + * @param string $type + */ + protected function clearInternal($projectId, $type) { + if(isset($this->projectData[$projectId]) && isset($this->projectData[$projectId][$type])) { + unset($this->projectData[$projectId][$type]); + } + } + + /** + * Escape X10 string values to remove ambiguity for special characters. + * + * @see X10::$escapeCharMap + * @param string $value + * @return string + */ + protected function escapeExtensibleValue($value) { + $result = ''; + + $value = (string)$value; + $length = strlen($value); + for($i = 0; $i < $length; $i++) { + $char = $value[$i]; + + if(isset($this->ESCAPE_CHAR_MAP[$char])) { + $result .= $this->ESCAPE_CHAR_MAP[$char]; + } else { + $result .= $char; + } + } + + return $result; + } + + /** + * Given a data array for a certain type, render its string encoding. + * + * @param array $data + * @return string + */ + protected function renderDataType(array $data) { + $result = array(); + + $lastI = 0; + ksort($data, SORT_NUMERIC); + foreach($data as $i => $entry) { + if(isset($entry)) { + $str = ''; + + // Check if we need to append the number. If the last number was + // outputted, or if this is the assumed minimum, then we don't. + if($i != $this->MINIMUM && $i - 1 != $lastI) { + $str .= $i; + $str .= $this->DELIM_NUM_VALUE; + } + + $str .= $this->escapeExtensibleValue($entry); + $result[] = $str; + } + + $lastI = $i; + } + + return $this->DELIM_BEGIN . implode($this->DELIM_SET, $result) . $this->DELIM_END; + } + + /** + * Given a project array, render its string encoding. + * + * @param array $project + * @return string + */ + protected function renderProject(array $project) { + $result = ''; + + // Do we need to output the type string? As an optimization we do not + // output the type string if it's the first type, or if the previous + // type was present. + $needTypeQualifier = false; + + $length = count($this->SET); + for($i = 0; $i < $length; $i++) { + if(isset($project[$this->SET[$i]])) { + $data = $project[$this->SET[$i]]; + + if($needTypeQualifier) { + $result .= $this->SET[$i]; + } + $result .= $this->renderDataType($data); + $needTypeQualifier = false; + } else { + $needTypeQualifier = true; + } + } + + return $result; + } + + /** + * Generates the URL parameter string for the current internal extensible data state. + * + * @return string + */ + public function renderUrlString() { + $result = ''; + + foreach($this->projectData as $projectId => $project) { + $result .= $projectId . $this->renderProject($project); + } + + return $result; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Item.php b/app/api/code/php-ga/GoogleAnalytics/Item.php new file mode 100755 index 0000000..3e5205c --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Item.php @@ -0,0 +1,180 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +/** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/ecommerce/Item.as + */ +class Item { + + /** + * Order ID, e.g. "a2343898", will be mapped to "utmtid" parameter + * + * @see Internals\ParameterHolder::$utmtid + * @var string + */ + protected $orderId; + + /** + * Product Code. This is the sku code for a given product, e.g. "989898ajssi", + * will be mapped to "utmipc" parameter + * + * @see Internals\ParameterHolder::$utmipc + * @var string + */ + protected $sku; + + /** + * Product Name, e.g. "T-Shirt", will be mapped to "utmipn" parameter + * + * @see Internals\ParameterHolder::$utmipn + * @var string + */ + protected $name; + + /** + * Variations on an item, e.g. "white", "black", "green" etc., will be mapped + * to "utmiva" parameter + * + * @see Internals\ParameterHolder::$utmiva + * @var string + */ + protected $variation; + + /** + * Unit Price. Value is set to numbers only (e.g. 19.95), will be mapped to + * "utmipr" parameter + * + * @see Internals\ParameterHolder::$utmipr + * @var float + */ + protected $price; + + /** + * Unit Quantity, e.g. 4, will be mapped to "utmiqt" parameter + * + * @see Internals\ParameterHolder::$utmiqt + * @var int + */ + protected $quantity = 1; + + + public function validate() { + if($this->sku === null) { + Tracker::_raiseError('Items need to have a sku/product code defined.', __METHOD__); + } + } + + /** + * @return string + */ + public function getOrderId() { + return $this->orderId; + } + + /** + * @param string $orderId + */ + public function setOrderId($orderId) { + $this->orderId = $orderId; + } + + /** + * @return string + */ + public function getSku() { + return $this->sku; + } + + /** + * @param string $sku + */ + public function setSku($sku) { + $this->sku = $sku; + } + + /** + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) { + $this->name = $name; + } + + /** + * @return string + */ + public function getVariation() { + return $this->variation; + } + + /** + * @param string $variation + */ + public function setVariation($variation) { + $this->variation = $variation; + } + + /** + * @return float + */ + public function getPrice() { + return $this->price; + } + + /** + * @param float $price + */ + public function setPrice($price) { + $this->price = (float)$price; + } + + /** + * @return int + */ + public function getQuantity() { + return $this->quantity; + } + + /** + * @param int $quantity + */ + public function setQuantity($quantity) { + $this->quantity = (int)$quantity; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Page.php b/app/api/code/php-ga/GoogleAnalytics/Page.php new file mode 100755 index 0000000..466c23c --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Page.php @@ -0,0 +1,172 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +class Page { + + /** + * Page request URI, e.g. "/path/page.html", will be mapped to + * "utmp" parameter + * + * @see Internals\ParameterHolder::$utmp + * @var string + */ + protected $path; + + /** + * Page title, will be mapped to "utmdt" parameter + * + * @see Internals\ParameterHolder::$utmdt + * @var string + */ + protected $title; + + /** + * Charset encoding (e.g. "UTF-8"), will be mapped to "utmcs" parameter + * + * @see Internals\ParameterHolder::$utmcs + * @var string + */ + protected $charset; + + /** + * Referer URL, e.g. "http://www.example.com/path/page.html", will be + * mapped to "utmr" parameter + * + * @see Internals\ParameterHolder::$utmr + * @var string + */ + protected $referrer; + + /** + * Page load time in milliseconds, will be encoded into "utme" parameter. + * + * @see Internals\ParameterHolder::$utme + * @var int + */ + protected $loadTime; + + + /** + * Constant to mark referrer as a site-internal one. + * + * @see Page::$referrer + * @const string + */ + const REFERRER_INTERNAL = '0'; + + + /** + * @param string $path + */ + public function __construct($path) { + $this->setPath($path); + } + + /** + * @param string $path + */ + public function setPath($path) { + if($path && $path[0] != '/') { + Tracker::_raiseError('The page path should always start with a slash ("/").', __METHOD__); + } + + $this->path = $path; + } + + /** + * @return string + */ + public function getPath() { + return $this->path; + } + + /** + * @param string $title + */ + public function setTitle($title) { + $this->title = $title; + } + + /** + * @return string + */ + public function getTitle() { + return $this->title; + } + + /** + * @param string $charset + */ + public function setCharset($encoding) { + $this->charset = $encoding; + } + + /** + * @return string + */ + public function getCharset() { + return $this->charset; + } + + /** + * @param string $referrer + */ + public function setReferrer($referrer) { + $this->referrer = $referrer; + } + + /** + * @return string + */ + public function getReferrer() { + return $this->referrer; + } + + /** + * @param int $loadTime + */ + public function setLoadTime($loadTime) { + if((int)$loadTime != (float)$loadTime) { + return Tracker::_raiseError('Page load time must be specified in integer milliseconds.', __METHOD__); + } + + $this->loadTime = (int)$loadTime; + } + + /** + * @return int + */ + public function getLoadTime() { + return $this->loadTime; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Session.php b/app/api/code/php-ga/GoogleAnalytics/Session.php new file mode 100755 index 0000000..46a382e --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Session.php @@ -0,0 +1,161 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +use UnitedPrototype\GoogleAnalytics\Internals\Util; + +use DateTime; + +/** + * You should serialize this object and store it in the user session to keep it + * persistent between requests (similar to the "__umtb" cookie of + * the GA Javascript client). + */ +class Session { + + /** + * A unique per-session ID, will be mapped to "utmhid" parameter + * + * @see Internals\ParameterHolder::$utmhid + * @var int + */ + protected $sessionId; + + /** + * The amount of pageviews that were tracked within this session so far, + * will be part of the "__utmb" cookie parameter. + * + * Will get incremented automatically upon each request. + * + * @see Internals\ParameterHolder::$__utmb + * @see Internals\Request\Request::buildHttpRequest() + * @var int + */ + protected $trackCount; + + /** + * Timestamp of the start of this new session, will be part of the "__utmb" + * cookie parameter + * + * @see Internals\ParameterHolder::$__utmb + * @var DateTime + */ + protected $startTime; + + + public function __construct() { + $this->setSessionId($this->generateSessionId()); + $this->setTrackCount(0); + $this->setStartTime(new DateTime()); + } + + /** + * Will extract information for the "trackCount" and "startTime" + * properties from the given "__utmb" cookie value. + * + * @see Internals\ParameterHolder::$__utmb + * @see Internals\Request\Request::buildCookieParameters() + * @param string $value + * @return $this + */ + public function fromUtmb($value) { + $parts = explode('.', $value); + if(count($parts) != 4) { + Tracker::_raiseError('The given "__utmb" cookie value is invalid.', __METHOD__); + return $this; + } + + $this->setTrackCount($parts[1]); + $this->setStartTime(new DateTime('@' . $parts[3])); + + // Allow chaining + return $this; + } + + /** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/core/DocumentInfo.as#52 + * @return int + */ + protected function generateSessionId() { + // TODO: Integrate AdSense support + return Util::generate32bitRandom(); + } + + /** + * @return int + */ + public function getSessionId() { + return $this->sessionId; + } + + /** + * @param int $sessionId + */ + public function setSessionId($sessionId) { + $this->sessionId = $sessionId; + } + + /** + * @return int + */ + public function getTrackCount() { + return $this->trackCount; + } + + /** + * @param int $trackCount + */ + public function setTrackCount($trackCount) { + $this->trackCount = (int)$trackCount; + } + + /** + * @param int $byAmount + */ + public function increaseTrackCount($byAmount = 1) { + $this->trackCount += $byAmount; + } + + /** + * @return DateTime + */ + public function getStartTime() { + return $this->startTime; + } + + /** + * @param DateTime $startTime + */ + public function setStartTime(DateTime $startTime) { + $this->startTime = $startTime; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/SocialInteraction.php b/app/api/code/php-ga/GoogleAnalytics/SocialInteraction.php new file mode 100755 index 0000000..bfe2644 --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/SocialInteraction.php @@ -0,0 +1,123 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +class SocialInteraction { + + /** + * Required. A string representing the social network being tracked (e.g. "Facebook", "Twitter", "LinkedIn", ...), + * will be mapped to "utmsn" parameter + * + * @see Internals\ParameterHolder::$utmsn + * @var string + */ + protected $network; + + /** + * Required. A string representing the social action being tracked (e.g. "Like", "Share", "Tweet", ...), + * will be mapped to "utmsa" parameter + * + * @see Internals\ParameterHolder::$utmsa + * @var string + */ + protected $action; + + /** + * Optional. A string representing the URL (or resource) which receives the action. For example, + * if a user clicks the Like button on a page on a site, the the target might be set to the title + * of the page, or an ID used to identify the page in a content management system. In many cases, + * the page you Like is the same page you are on. So if this parameter is not given, we will default + * to using the path of the corresponding Page object. + * + * @see Internals\ParameterHolder::$utmsid + * @var string + */ + protected $target; + + + /** + * @param string $path + */ + public function __construct($network = null, $action = null, $target = null) { + if($network !== null) $this->setNetwork($network); + if($action !== null) $this->setAction($action); + if($target !== null) $this->setTarget($target); + } + + public function validate() { + if($this->network === null || $this->action === null) { + Tracker::_raiseError('Social interactions need to have at least the "network" and "action" attributes defined.', __METHOD__); + } + } + + /** + * @param string $network + */ + public function setNetwork($network) { + $this->network = $network; + } + + /** + * @return string + */ + public function getNetwork() { + return $this->network; + } + + /** + * @param string $action + */ + public function setAction($action) { + $this->action = $action; + } + + /** + * @return string + */ + public function getAction() { + return $this->action; + } + + /** + * @param string $target + */ + public function setTarget($target) { + $this->target = $target; + } + + /** + * @return string + */ + public function getTarget() { + return $this->target; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Tracker.php b/app/api/code/php-ga/GoogleAnalytics/Tracker.php new file mode 100755 index 0000000..0e37c7d --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Tracker.php @@ -0,0 +1,344 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +use UnitedPrototype\GoogleAnalytics\Internals\Util; +use UnitedPrototype\GoogleAnalytics\Internals\Request\PageviewRequest; +use UnitedPrototype\GoogleAnalytics\Internals\Request\EventRequest; +use UnitedPrototype\GoogleAnalytics\Internals\Request\TransactionRequest; +use UnitedPrototype\GoogleAnalytics\Internals\Request\ItemRequest; +use UnitedPrototype\GoogleAnalytics\Internals\Request\SocialInteractionRequest; + +class Tracker { + + /** + * Google Analytics client version on which this library is built upon, + * will be mapped to "utmwv" parameter. + * + * This doesn't necessarily mean that all features of the corresponding + * ga.js version are implemented but rather that the requests comply + * with these of ga.js. + * + * @link http://code.google.com/apis/analytics/docs/gaJS/changelog.html + * @const string + */ + const VERSION = '5.2.5'; // As of 25.02.2012 + + + /** + * The configuration to use for all tracker instances. + * + * @var \UnitedPrototype\GoogleAnalytics\Config + */ + protected static $config; + + /** + * Google Analytics account ID, e.g. "UA-1234567-8", will be mapped to + * "utmac" parameter + * + * @see Internals\ParameterHolder::$utmac + * @var string + */ + protected $accountId; + + /** + * Host Name, e.g. "www.example.com", will be mapped to "utmhn" parameter + * + * @see Internals\ParameterHolder::$utmhn + * @var string + */ + protected $domainName; + + /** + * Whether to generate a unique domain hash, default is true to be consistent + * with the GA Javascript Client + * + * @link http://code.google.com/apis/analytics/docs/tracking/gaTrackingSite.html#setAllowHash + * @see Internals\Request\Request::generateDomainHash() + * @var bool + */ + protected $allowHash = true; + + /** + * @var array + */ + protected $customVariables = array(); + + /** + * @var \UnitedPrototype\GoogleAnalytics\Campaign + */ + protected $campaign; + + + /** + * @param string $accountId + * @param string $domainName + * @param \UnitedPrototype\GoogleAnalytics\Config $config + */ + public function __construct($accountId, $domainName, Config $config = null) { + static::setConfig($config ? $config : new Config()); + + $this->setAccountId($accountId); + $this->setDomainName($domainName); + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Config + */ + public static function getConfig() { + return static::$config; + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Config $value + */ + public static function setConfig(Config $value) { + static::$config = $value; + } + + /** + * @param string $value + */ + public function setAccountId($value) { + if(!preg_match('/^(UA|MO)-[0-9]*-[0-9]*$/', $value)) { + static::_raiseError('"' . $value . '" is not a valid Google Analytics account ID.', __METHOD__); + } + + $this->accountId = $value; + } + + /** + * @return string + */ + public function getAccountId() { + return $this->accountId; + } + + /** + * @param string $value + */ + public function setDomainName($value) { + $this->domainName = $value; + } + + /** + * @return string + */ + public function getDomainName() { + return $this->domainName; + } + + /** + * @param bool $value + */ + public function setAllowHash($value) { + $this->allowHash = (bool)$value; + } + + /** + * @return bool + */ + public function getAllowHash() { + return $this->allowHash; + } + + /** + * Equivalent of _setCustomVar() in GA Javascript client. + * + * @link http://code.google.com/apis/analytics/docs/tracking/gaTrackingCustomVariables.html + * @param \UnitedPrototype\GoogleAnalytics\CustomVariable $customVariable + */ + public function addCustomVariable(CustomVariable $customVariable) { + // Ensure that all required parameters are set + $customVariable->validate(); + + $index = $customVariable->getIndex(); + $this->customVariables[$index] = $customVariable; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\CustomVariable[] + */ + public function getCustomVariables() { + return $this->customVariables; + } + + /** + * Equivalent of _deleteCustomVar() in GA Javascript client. + * + * @param int $index + */ + public function removeCustomVariable($index) { + unset($this->customVariables[$index]); + } + + /** + * @param \UnitedPrototype\GoogleAnalytics\Campaign $campaign Isn't really optional, but can be set to null + */ + public function setCampaign(Campaign $campaign = null) { + if($campaign) { + // Ensure that all required parameters are set + $campaign->validate(); + } + + $this->campaign = $campaign; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Campaign|null + */ + public function getCampaign() { + return $this->campaign; + } + + /** + * Equivalent of _trackPageview() in GA Javascript client. + * + * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html#_gat.GA_Tracker_._trackPageview + * @param \UnitedPrototype\GoogleAnalytics\Page $page + * @param \UnitedPrototype\GoogleAnalytics\Session $session + * @param \UnitedPrototype\GoogleAnalytics\Visitor $visitor + */ + public function trackPageview(Page $page, Session $session, Visitor $visitor) { + $request = new PageviewRequest(static::$config); + $request->setPage($page); + $request->setSession($session); + $request->setVisitor($visitor); + $request->setTracker($this); + $request->fire(); + } + + /** + * Equivalent of _trackEvent() in GA Javascript client. + * + * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiEventTracking.html#_gat.GA_EventTracker_._trackEvent + * @param \UnitedPrototype\GoogleAnalytics\Event $event + * @param \UnitedPrototype\GoogleAnalytics\Session $session + * @param \UnitedPrototype\GoogleAnalytics\Visitor $visitor + */ + public function trackEvent(Event $event, Session $session, Visitor $visitor) { + // Ensure that all required parameters are set + $event->validate(); + + $request = new EventRequest(static::$config); + $request->setEvent($event); + $request->setSession($session); + $request->setVisitor($visitor); + $request->setTracker($this); + $request->fire(); + } + + /** + * Combines _addTrans(), _addItem() (indirectly) and _trackTrans() of GA Javascript client. + * Although the naming of "_addTrans()" would suggest multiple possible transactions + * per request, there is just one allowed actually. + * + * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiEcommerce.html#_gat.GA_Tracker_._addTrans + * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiEcommerce.html#_gat.GA_Tracker_._addItem + * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiEcommerce.html#_gat.GA_Tracker_._trackTrans + * + * @param \UnitedPrototype\GoogleAnalytics\Transaction $transaction + * @param \UnitedPrototype\GoogleAnalytics\Session $session + * @param \UnitedPrototype\GoogleAnalytics\Visitor $visitor + */ + public function trackTransaction(Transaction $transaction, Session $session, Visitor $visitor) { + // Ensure that all required parameters are set + $transaction->validate(); + + $request = new TransactionRequest(static::$config); + $request->setTransaction($transaction); + $request->setSession($session); + $request->setVisitor($visitor); + $request->setTracker($this); + $request->fire(); + + // Every item gets a separate request, + // see http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/v4/Tracker.as#312 + foreach($transaction->getItems() as $item) { + // Ensure that all required parameters are set + $item->validate(); + + $request = new ItemRequest(static::$config); + $request->setItem($item); + $request->setSession($session); + $request->setVisitor($visitor); + $request->setTracker($this); + $request->fire(); + } + } + + /** + * Equivalent of _trackSocial() in GA Javascript client. + * + * @link http://code.google.com/apis/analytics/docs/tracking/gaTrackingSocial.html#settingUp + * @param \UnitedPrototype\GoogleAnalytics\SocialInteraction $socialInteraction + * @param \UnitedPrototype\GoogleAnalytics\Page $page + * @param \UnitedPrototype\GoogleAnalytics\Session $session + * @param \UnitedPrototype\GoogleAnalytics\Visitor $visitor + */ + public function trackSocial(SocialInteraction $socialInteraction, Page $page, Session $session, Visitor $visitor) { + $request = new SocialInteractionRequest(static::$config); + $request->setSocialInteraction($socialInteraction); + $request->setPage($page); + $request->setSession($session); + $request->setVisitor($visitor); + $request->setTracker($this); + $request->fire(); + } + + /** + * For internal use only. Will trigger an error according to the current + * Config::$errorSeverity setting. + * + * @see Config::$errorSeverity + * @param string $message + * @param string $method + */ + public static function _raiseError($message, $method) { + $method = str_replace(__NAMESPACE__ . '\\', '', $method); + $message = $method . '(): ' . $message; + + $errorSeverity = isset(static::$config) ? static::$config->getErrorSeverity() : Config::ERROR_SEVERITY_EXCEPTIONS; + + switch($errorSeverity) { + case Config::ERROR_SEVERITY_SILENCE: + // Do nothing + break; + case Config::ERROR_SEVERITY_WARNINGS: + trigger_error($message, E_USER_WARNING); + break; + case Config::ERROR_SEVERITY_EXCEPTIONS: + throw new Exception($message); + break; + } + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Transaction.php b/app/api/code/php-ga/GoogleAnalytics/Transaction.php new file mode 100755 index 0000000..033545e --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Transaction.php @@ -0,0 +1,252 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +/** + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/ecommerce/Transaction.as + */ +class Transaction { + + /** + * Order ID, e.g. "a2343898", will be mapped to "utmtid" parameter + * + * @see Internals\ParameterHolder::$utmtid + * @var string + */ + protected $orderId; + + /** + * Affiliation, Will be mapped to "utmtst" parameter + * + * @see Internals\ParameterHolder::$utmtst + * @var string + */ + protected $affiliation; + + /** + * Total Cost, will be mapped to "utmtto" parameter + * + * @see Internals\ParameterHolder::$utmtto + * @var float + */ + protected $total; + + /** + * Tax Cost, will be mapped to "utmttx" parameter + * + * @see Internals\ParameterHolder::$utmttx + * @var float + */ + protected $tax; + + /** + * Shipping Cost, values as for unit and price, e.g. 3.95, will be mapped to + * "utmtsp" parameter + * + * @see Internals\ParameterHolder::$utmtsp + * @var float + */ + protected $shipping; + + /** + * Billing City, e.g. "Cologne", will be mapped to "utmtci" parameter + * + * @see Internals\ParameterHolder::$utmtci + * @var string + */ + protected $city; + + /** + * Billing Region, e.g. "North Rhine-Westphalia", will be mapped to "utmtrg" parameter + * + * @see Internals\ParameterHolder::$utmtrg + * @var string + */ + protected $region; + + /** + * Billing Country, e.g. "Germany", will be mapped to "utmtco" parameter + * + * @see Internals\ParameterHolder::$utmtco + * @var string + */ + protected $country; + + /** + * @see Transaction::addItem() + * @var \UnitedPrototype\GoogleAnalytics\Item[] + */ + protected $items = array(); + + + public function validate() { + if(!$this->items) { + Tracker::_raiseError('Transactions need to consist of at least one item.', __METHOD__); + } + } + + /** + * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiEcommerce.html#_gat.GA_Tracker_._addItem + * @param \UnitedPrototype\GoogleAnalytics\Item $item + */ + public function addItem(Item $item) { + // Associated items inherit the transaction's order ID + $item->setOrderId($this->orderId); + + $sku = $item->getSku(); + $this->items[$sku] = $item; + } + + /** + * @return \UnitedPrototype\GoogleAnalytics\Item[] + */ + public function getItems() { + return $this->items; + } + + /** + * @return string + */ + public function getOrderId() { + return $this->orderId; + } + + /** + * @param string $orderId + */ + public function setOrderId($orderId) { + $this->orderId = $orderId; + + // Update order IDs of all associated items too + foreach($this->items as $item) { + $item->setOrderId($orderId); + } + } + + /** + * @return string + */ + public function getAffiliation() { + return $this->affiliation; + } + + /** + * @param string $affiliation + */ + public function setAffiliation($affiliation) { + $this->affiliation = $affiliation; + } + + /** + * @return float + */ + public function getTotal() { + return $this->total; + } + + /** + * @param float $total + */ + public function setTotal($total) { + $this->total = $total; + } + + /** + * @return float + */ + public function getTax() { + return $this->tax; + } + + /** + * @param float $tax + */ + public function setTax($tax) { + $this->tax = $tax; + } + + /** + * @return float + */ + public function getShipping() { + return $this->shipping; + } + + /** + * @param float $shipping + */ + public function setShipping($shipping) { + $this->shipping = $shipping; + } + + /** + * @return string + */ + public function getCity() { + return $this->city; + } + + /** + * @param string $city + */ + public function setCity($city) { + $this->city = $city; + } + + /** + * @return string + */ + public function getRegion() { + return $this->region; + } + + /** + * @param string $region + */ + public function setRegion($region) { + $this->region = $region; + } + + /** + * @return string + */ + public function getCountry() { + return $this->country; + } + + /** + * @param string $country + */ + public function setCountry($country) { + $this->country = $country; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/GoogleAnalytics/Visitor.php b/app/api/code/php-ga/GoogleAnalytics/Visitor.php new file mode 100755 index 0000000..07998a4 --- /dev/null +++ b/app/api/code/php-ga/GoogleAnalytics/Visitor.php @@ -0,0 +1,463 @@ + + * @copyright Copyright (c) 2010 United Prototype GmbH (http://unitedprototype.com) + */ + +namespace UnitedPrototype\GoogleAnalytics; + +use UnitedPrototype\GoogleAnalytics\Internals\Util; + +use DateTime; + +/** + * You should serialize this object and store it in the user database to keep it + * persistent for the same user permanently (similar to the "__umta" cookie of + * the GA Javascript client). + */ +class Visitor { + + /** + * Unique user ID, will be part of the "__utma" cookie parameter + * + * @see Internals\ParameterHolder::$__utma + * @var int + */ + protected $uniqueId; + + /** + * Time of the very first visit of this user, will be part of the "__utma" + * cookie parameter + * + * @see Internals\ParameterHolder::$__utma + * @var DateTime + */ + protected $firstVisitTime; + + /** + * Time of the previous visit of this user, will be part of the "__utma" + * cookie parameter + * + * @see Internals\ParameterHolder::$__utma + * @see addSession + * @var DateTime + */ + protected $previousVisitTime; + + /** + * Time of the current visit of this user, will be part of the "__utma" + * cookie parameter + * + * @see Internals\ParameterHolder::$__utma + * @see addSession + * @var DateTime + */ + protected $currentVisitTime; + + /** + * Amount of total visits by this user, will be part of the "__utma" + * cookie parameter + * + * @see Internals\ParameterHolder::$__utma + * @var int + */ + protected $visitCount; + + /** + * IP Address of the end user, e.g. "123.123.123.123", will be mapped to "utmip" parameter + * and "X-Forwarded-For" request header + * + * @see Internals\ParameterHolder::$utmip + * @see Internals\Request\HttpRequest::$xForwardedFor + * @var string + */ + protected $ipAddress; + + /** + * User agent string of the end user, will be mapped to "User-Agent" request header + * + * @see Internals\Request\HttpRequest::$userAgent + * @var string + */ + protected $userAgent; + + /** + * Locale string (country part optional), e.g. "de-DE", will be mapped to "utmul" parameter + * + * @see Internals\ParameterHolder::$utmul + * @var string + */ + protected $locale; + + /** + * Visitor's Flash version, e.g. "9.0 r28", will be maped to "utmfl" parameter + * + * @see Internals\ParameterHolder::$utmfl + * @var string + */ + protected $flashVersion; + + /** + * Visitor's Java support, will be mapped to "utmje" parameter + * + * @see Internals\ParameterHolder::$utmje + * @var bool + */ + protected $javaEnabled; + + /** + * Visitor's screen color depth, e.g. 32, will be mapped to "utmsc" parameter + * + * @see Internals\ParameterHolder::$utmsc + * @var string + */ + protected $screenColorDepth; + + /** + * Visitor's screen resolution, e.g. "1024x768", will be mapped to "utmsr" parameter + * + * @see Internals\ParameterHolder::$utmsr + * @var string + */ + protected $screenResolution; + + + /** + * Creates a new visitor without any previous visit information. + */ + public function __construct() { + // ga.js sets all three timestamps to now for new visitors, so we do the same + $now = new DateTime(); + $this->setFirstVisitTime($now); + $this->setPreviousVisitTime($now); + $this->setCurrentVisitTime($now); + + $this->setVisitCount(1); + } + + /** + * Will extract information for the "uniqueId", "firstVisitTime", "previousVisitTime", + * "currentVisitTime" and "visitCount" properties from the given "__utma" cookie + * value. + * + * @see Internals\ParameterHolder::$__utma + * @see Internals\Request\Request::buildCookieParameters() + * @param string $value + * @return $this + */ + public function fromUtma($value) { + $parts = explode('.', $value); + if(count($parts) != 6) { + Tracker::_raiseError('The given "__utma" cookie value is invalid.', __METHOD__); + return $this; + } + + $this->setUniqueId($parts[1]); + $this->setFirstVisitTime(new DateTime('@' . $parts[2])); + $this->setPreviousVisitTime(new DateTime('@' . $parts[3])); + $this->setCurrentVisitTime(new DateTime('@' . $parts[4])); + $this->setVisitCount($parts[5]); + + // Allow chaining + return $this; + } + + /** + * Will extract information for the "ipAddress", "userAgent" and "locale" properties + * from the given $_SERVER variable. + * + * @param array $value + * @return $this + */ + public function fromServerVar(array $value) { + if(!empty($value['REMOTE_ADDR'])) { + $ip = null; + foreach(array('X_FORWARDED_FOR', 'REMOTE_ADDR') as $key) { + if(!empty($value[$key]) && !$ip) { + $ips = explode(',', $value[$key]); + $ip = trim($ips[(count($ips) - 1)]); + + // Double-check if the address has a valid format + if(!preg_match('/^[\d+]{1,3}\.[\d+]{1,3}\.[\d+]{1,3}\.[\d+]{1,3}$/i', $ip)) { + $ip = null; + } + // Exclude private IP address ranges + if(preg_match('#^(?:127\.0\.0\.1|10\.|192\.168\.|172\.(?:1[6-9]|2[0-9]|3[0-1])\.)#', $ip)) { + $ip = null; + } + } + } + + if($ip) { + $this->setIpAddress($ip); + } + } + + if(!empty($value['HTTP_USER_AGENT'])) { + $this->setUserAgent($value['HTTP_USER_AGENT']); + } + + if(!empty($value['HTTP_ACCEPT_LANGUAGE'])) { + $parsedLocales = array(); + if(preg_match_all('/(^|\s*,\s*)([a-zA-Z]{1,8}(-[a-zA-Z]{1,8})*)\s*(;\s*q\s*=\s*(1(\.0{0,3})?|0(\.[0-9]{0,3})))?/i', $value['HTTP_ACCEPT_LANGUAGE'], $matches)) { + $matches[2] = array_map(function($part) { return str_replace('-', '_', $part); }, $matches[2]); + $matches[5] = array_map(function($part) { return $part === '' ? 1 : $part; }, $matches[5]); + $parsedLocales = array_combine($matches[2], $matches[5]); + arsort($parsedLocales, SORT_NUMERIC); + $parsedLocales = array_keys($parsedLocales); + } + + if($parsedLocales) { + $this->setLocale($parsedLocales[0]); + } + } + + // Allow chaining + return $this; + } + + /** + * Generates a hashed value from user-specific properties. + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/v4/Tracker.as#542 + * @return int + */ + protected function generateHash() { + // TODO: Emulate orginal Google Analytics client library generation more closely + $string = $this->userAgent; + $string .= $this->screenResolution . $this->screenColorDepth; + return Util::generateHash($string); + } + + /** + * Generates a unique user ID from the current user-specific properties. + * + * @link http://code.google.com/p/gaforflash/source/browse/trunk/src/com/google/analytics/v4/Tracker.as#563 + * @return int + */ + protected function generateUniqueId() { + // There seems to be an error in the gaforflash code, so we take the formula + // from http://xahlee.org/js/google_analytics_tracker_2010-07-01_expanded.js line 711 + // instead ("&" instead of "*") + return ((Util::generate32bitRandom() ^ $this->generateHash()) & 0x7fffffff); + } + + /** + * @see generateUniqueId + * @param int $value + */ + public function setUniqueId($value) { + if($value < 0 || $value > 0x7fffffff) { + Tracker::_raiseError('Visitor unique ID has to be a 32-bit integer between 0 and ' . 0x7fffffff . '.', __METHOD__); + } + + $this->uniqueId = (int)$value; + } + + /** + * Will be generated on first call (if not set already) to include as much + * user-specific information as possible. + * + * @return int + */ + public function getUniqueId() { + if($this->uniqueId === null) { + $this->uniqueId = $this->generateUniqueId(); + } + return $this->uniqueId; + } + + /** + * Updates the "previousVisitTime", "currentVisitTime" and "visitCount" + * fields based on the given session object. + * + * @param Session $session + */ + public function addSession(Session $session) { + $startTime = $session->getStartTime(); + if($startTime != $this->currentVisitTime) { + $this->previousVisitTime = $this->currentVisitTime; + $this->currentVisitTime = $startTime; + ++$this->visitCount; + } + } + + /** + * @param DateTime $value + */ + public function setFirstVisitTime(DateTime $value) { + $this->firstVisitTime = $value; + } + + /** + * @return DateTime + */ + public function getFirstVisitTime() { + return $this->firstVisitTime; + } + + /** + * @param DateTime $value + */ + public function setPreviousVisitTime(DateTime $value) { + $this->previousVisitTime = $value; + } + + /** + * @return DateTime + */ + public function getPreviousVisitTime() { + return $this->previousVisitTime; + } + + /** + * @param DateTime $value + */ + public function setCurrentVisitTime(DateTime $value) { + $this->currentVisitTime = $value; + } + + /** + * @return DateTime + */ + public function getCurrentVisitTime() { + return $this->currentVisitTime; + } + + /** + * @param int $value + */ + public function setVisitCount($value) { + $this->visitCount = (int)$value; + } + + /** + * @return int + */ + public function getVisitCount() { + return $this->visitCount; + } + + /** + * @param string $value + */ + public function setIpAddress($value) { + $this->ipAddress = $value; + } + + /** + * @return string + */ + public function getIpAddress() { + return $this->ipAddress; + } + + /** + * @param string $value + */ + public function setUserAgent($value) { + $this->userAgent = $value; + } + + /** + * @return string + */ + public function getUserAgent() { + return $this->userAgent; + } + + /** + * @param string $value + */ + public function setLocale($value) { + $this->locale = $value; + } + + /** + * @return string + */ + public function getLocale() { + return $this->locale; + } + + /** + * @param string $value + */ + public function setFlashVersion($value) { + $this->flashVersion = $value; + } + + /** + * @return string + */ + public function getFlashVersion() { + return $this->flashVersion; + } + + /** + * @param bool $value + */ + public function setJavaEnabled($value) { + $this->javaEnabled = (bool)$value; + } + + /** + * @return bool + */ + public function getJavaEnabled() { + return $this->javaEnabled; + } + + /** + * @param int $value + */ + public function setScreenColorDepth($value) { + $this->screenColorDepth = (int)$value; + } + + /** + * @return string + */ + public function getScreenColorDepth() { + return $this->screenColorDepth; + } + + /** + * @param string $value + */ + public function setScreenResolution($value) { + $this->screenResolution = $value; + } + + /** + * @return string + */ + public function getScreenResolution() { + return $this->screenResolution; + } + +} + +?> \ No newline at end of file diff --git a/app/api/code/php-ga/LICENSE b/app/api/code/php-ga/LICENSE new file mode 100755 index 0000000..0c34e0d --- /dev/null +++ b/app/api/code/php-ga/LICENSE @@ -0,0 +1,167 @@ +[http://www.gnu.org/licenses/lgpl.html] + + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/app/api/code/php-ga/autoload.php b/app/api/code/php-ga/autoload.php new file mode 100755 index 0000000..a55393d --- /dev/null +++ b/app/api/code/php-ga/autoload.php @@ -0,0 +1,16 @@ + diff --git a/app/api/fonts/.htaccess b/app/api/fonts/.htaccess new file mode 100755 index 0000000..53cc1de --- /dev/null +++ b/app/api/fonts/.htaccess @@ -0,0 +1,5 @@ + + + Header set Access-Control-Allow-Origin "*" + + \ No newline at end of file diff --git a/app/api/fonts/brandico/brandico-extract.json b/app/api/fonts/brandico/brandico-extract.json new file mode 100755 index 0000000..36fbfbe --- /dev/null +++ b/app/api/fonts/brandico/brandico-extract.json @@ -0,0 +1,34 @@ +{ + "brandico-facebook":"\f300", + "brandico-facebook-rect":"\f301", + "brandico-twitter":"\f302", + "brandico-twitter-bird":"\f303", + "brandico-vimeo":"\f30f", + "brandico-vimeo-rect":"\f30e", + "brandico-tumblr":"\f311", + "brandico-tumblr-rect":"\f310", + "brandico-googleplus-rect":"\f309", + "brandico-github-text":"\f307", + "brandico-github":"\f308", + "brandico-skype":"\f30b", + "brandico-icq":"\f304", + "brandico-yandex":"\f305", + "brandico-yandex-rect":"\f306", + "brandico-vkontakte-rect":"\f30a", + "brandico-odnoklassniki":"\f30c", + "brandico-odnoklassniki-rect":"\f30d", + "brandico-friendfeed":"\f312", + "brandico-friendfeed-rect":"\f313", + "brandico-blogger":"\f314", + "brandico-blogger-rect":"\f315", + "brandico-deviantart":"\f316", + "brandico-jabber":"\f317", + "brandico-lastfm":"\f318", + "brandico-lastfm-rect":"\f319", + "brandico-linkedin":"\f31a", + "brandico-linkedin-rect":"\f31b", + "brandico-picasa":"\f31c", + "brandico-wordpress":"\f31d", + "brandico-instagram":"\f31e", + "brandico-instagram-filled":"\f31f" +} \ No newline at end of file diff --git a/app/api/fonts/brandico/brandico-min.css b/app/api/fonts/brandico/brandico-min.css new file mode 100755 index 0000000..2ea7d11 --- /dev/null +++ b/app/api/fonts/brandico/brandico-min.css @@ -0,0 +1 @@ +.brandico-facebook:before{content:"\f300"}.brandico-facebook-rect:before{content:"\f301"}.brandico-twitter:before{content:"\f302"}.brandico-twitter-bird:before{content:"\f303"}.brandico-vimeo:before{content:"\f30f"}.brandico-vimeo-rect:before{content:"\f30e"}.brandico-tumblr:before{content:"\f311"}.brandico-tumblr-rect:before{content:"\f310"}.brandico-googleplus-rect:before{content:"\f309"}.brandico-github-text:before{content:"\f307"}.brandico-github:before{content:"\f308"}.brandico-skype:before{content:"\f30b"}.brandico-icq:before{content:"\f304"}.brandico-yandex:before{content:"\f305"}.brandico-yandex-rect:before{content:"\f306"}.brandico-vkontakte-rect:before{content:"\f30a"}.brandico-odnoklassniki:before{content:"\f30c"}.brandico-odnoklassniki-rect:before{content:"\f30d"}.brandico-friendfeed:before{content:"\f312"}.brandico-friendfeed-rect:before{content:"\f313"}.brandico-blogger:before{content:"\f314"}.brandico-blogger-rect:before{content:"\f315"}.brandico-deviantart:before{content:"\f316"}.brandico-jabber:before{content:"\f317"}.brandico-lastfm:before{content:"\f318"}.brandico-lastfm-rect:before{content:"\f319"}.brandico-linkedin:before{content:"\f31a"}.brandico-linkedin-rect:before{content:"\f31b"}.brandico-picasa:before{content:"\f31c"}.brandico-wordpress:before{content:"\f31d"}.brandico-instagram:before{content:"\f31e"}.brandico-instagram-filled:before{content:"\f31f"} \ No newline at end of file diff --git a/app/api/fonts/brandico/brandico.css b/app/api/fonts/brandico/brandico.css new file mode 100755 index 0000000..75a6974 --- /dev/null +++ b/app/api/fonts/brandico/brandico.css @@ -0,0 +1,40 @@ +/* + brandico + + "Crowdsourced" collection of popular logos, mostly for use in fontello + https://github.com/fontello/brandico.font + + Licence: http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL +*/ +.brandico-facebook:before { content: "\f300"; } +.brandico-facebook-rect:before { content: "\f301"; } +.brandico-twitter:before { content: "\f302"; } +.brandico-twitter-bird:before { content: "\f303"; } +.brandico-vimeo:before { content: "\f30f"; } +.brandico-vimeo-rect:before { content: "\f30e"; } +.brandico-tumblr:before { content: "\f311"; } +.brandico-tumblr-rect:before { content: "\f310"; } +.brandico-googleplus-rect:before { content: "\f309"; } +.brandico-github-text:before { content: "\f307"; } +.brandico-github:before { content: "\f308"; } +.brandico-skype:before { content: "\f30b"; } +.brandico-icq:before { content: "\f304"; } +.brandico-yandex:before { content: "\f305"; } +.brandico-yandex-rect:before { content: "\f306"; } +.brandico-vkontakte-rect:before { content: "\f30a"; } +.brandico-odnoklassniki:before { content: "\f30c"; } +.brandico-odnoklassniki-rect:before { content: "\f30d"; } +.brandico-friendfeed:before { content: "\f312"; } +.brandico-friendfeed-rect:before { content: "\f313"; } +.brandico-blogger:before { content: "\f314"; } +.brandico-blogger-rect:before { content: "\f315"; } +.brandico-deviantart:before { content: "\f316"; } +.brandico-jabber:before { content: "\f317"; } +.brandico-lastfm:before { content: "\f318"; } +.brandico-lastfm-rect:before { content: "\f319"; } +.brandico-linkedin:before { content: "\f31a"; } +.brandico-linkedin-rect:before { content: "\f31b"; } +.brandico-picasa:before { content: "\f31c"; } +.brandico-wordpress:before { content: "\f31d"; } +.brandico-instagram:before { content: "\f31e"; } +.brandico-instagram-filled:before { content: "\f31f"; } \ No newline at end of file diff --git a/app/api/fonts/brandico/brandico.eot b/app/api/fonts/brandico/brandico.eot new file mode 100755 index 0000000..10d8ba1 Binary files /dev/null and b/app/api/fonts/brandico/brandico.eot differ diff --git a/app/api/fonts/brandico/brandico.svg b/app/api/fonts/brandico/brandico.svg new file mode 100755 index 0000000..7bbf46c --- /dev/null +++ b/app/api/fonts/brandico/brandico.svg @@ -0,0 +1,153 @@ + + + + +Created by FontForge 20110222 at Sat Nov 10 00:13:48 2012 + By Vitaly,,, +(C) 2012 by Vitaly Puzrin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/api/fonts/brandico/brandico.ttf b/app/api/fonts/brandico/brandico.ttf new file mode 100755 index 0000000..0682fd7 Binary files /dev/null and b/app/api/fonts/brandico/brandico.ttf differ diff --git a/app/api/fonts/brandico/brandico.woff b/app/api/fonts/brandico/brandico.woff new file mode 100755 index 0000000..5748bec Binary files /dev/null and b/app/api/fonts/brandico/brandico.woff differ diff --git a/app/api/fonts/build.js b/app/api/fonts/build.js new file mode 100755 index 0000000..7cf7a46 --- /dev/null +++ b/app/api/fonts/build.js @@ -0,0 +1,58 @@ +home +var fs = require('fs'), + compressor = require('node-minify'), + sys = require('sys'), + exec = require('child_process').exec; + + +var folder = '.', + stuff = []; + +function getFiles(folder) { + var files = fs.readdirSync(folder); + folder += '/'; + + // Ignore shit + if (folder == '.git/') { + return false; + } + + for (var i = 0; i < files.length; i++) { + if (files[i] != 'build.js') { + // Query the entry + stats = fs.lstatSync(folder + files[i]); + + // Is it a directory? + if (stats.isDirectory()) { + getFiles(files[i]); + } else { + if ((folder + files[i]).search('-min.') == -1) { + stuff.push(folder + files[i]); + } + } + } + } + + return stuff; +} + +// Get files to minify +getFiles(folder); + +// Minify +for (var i = 0; i < stuff.length; i++) { + var file = stuff[i]; + + if (file.search('.css') != -1) { + new compressor.minify({ + type: 'yui-css', + fileIn: file, + fileOut: file.replace('.css', '-min.css'), + callback: function(err){ + if (err != null) { + console.log(err); + } + } + }); + } +} \ No newline at end of file diff --git a/app/api/fonts/christmas/christmas.css b/app/api/fonts/christmas/christmas.css new file mode 100755 index 0000000..d7ccabc --- /dev/null +++ b/app/api/fonts/christmas/christmas.css @@ -0,0 +1,2 @@ +.christmas-crystal-one:before { content: "C"; } +.christmas-crystal-two:before { content: "D"; } \ No newline at end of file diff --git a/app/api/fonts/christmas/christmas.woff b/app/api/fonts/christmas/christmas.woff new file mode 100755 index 0000000..6701ce1 Binary files /dev/null and b/app/api/fonts/christmas/christmas.woff differ diff --git a/app/api/fonts/entypo/entypo-extract.json b/app/api/fonts/entypo/entypo-extract.json new file mode 100755 index 0000000..b73e67a --- /dev/null +++ b/app/api/fonts/entypo/entypo-extract.json @@ -0,0 +1,286 @@ +{ + "entypo-note":"\\266a", + "entypo-note-beamed":"\\266b", + "entypo-music":"\\1f3b5", + "entypo-search":"\\1f50d", + "entypo-flashlight":"\\1f526", + "entypo-mail":"\\2709", + "entypo-heart":"\\2665", + "entypo-heart-empty":"\\2661", + "entypo-star":"\\2605", + "entypo-star-empty":"\\2606", + "entypo-user":"\\1f464", + "entypo-users":"\\1f465", + "entypo-user-add":"\\e700", + "entypo-video":"\\1f3ac", + "entypo-picture":"\\1f304", + "entypo-camera":"\\1f4f7", + "entypo-layout":"\\268f", + "entypo-menu":"\\2630", + "entypo-check":"\\2713", + "entypo-cancel":"\\2715", + "entypo-cancel-circled":"\\2716", + "entypo-cancel-squared":"\\274e", + "entypo-plus":"\\2b", + "entypo-plus-circled":"\\2795", + "entypo-plus-squared":"\\229e", + "entypo-minus":"\\2d", + "entypo-minus-circled":"\\2796", + "entypo-minus-squared":"\\229f", + "entypo-help":"\\2753", + "entypo-help-circled":"\\e704", + "entypo-info":"\\2139", + "entypo-info-circled":"\\e705", + "entypo-back":"\\1f519", + "entypo-home":"\\2302", + "entypo-link":"\\1f517", + "entypo-attach":"\\1f4ce", + "entypo-lock":"\\1f512", + "entypo-lock-open":"\\1f513", + "entypo-eye":"\\e70a", + "entypo-tag":"\\e70c", + "entypo-bookmark":"\\1f516", + "entypo-bookmarks":"\\1f4d1", + "entypo-flag":"\\2691", + "entypo-thumbs-up":"\\1f44d", + "entypo-thumbs-down":"\\1f44e", + "entypo-download":"\\1f4e5", + "entypo-upload":"\\1f4e4", + "entypo-upload-cloud":"\\e711", + "entypo-reply":"\\e712", + "entypo-reply-all":"\\e713", + "entypo-forward":"\\27a6", + "entypo-quote":"\\275e", + "entypo-code":"\\e714", + "entypo-export":"\\e715", + "entypo-pencil":"\\270e", + "entypo-feather":"\\2712", + "entypo-print":"\\e716", + "entypo-retweet":"\\e717", + "entypo-keyboard":"\\2328", + "entypo-comment":"\\e718", + "entypo-chat":"\\e720", + "entypo-bell":"\\1f514", + "entypo-attention":"\\26a0", + "entypo-alert":"\\1f4a5'", + "entypo-vcard":"\\e722", + "entypo-address":"\\e723", + "entypo-location":"\\e724", + "entypo-map":"\\e727", + "entypo-direction":"\\27a2", + "entypo-compass":"\\e728", + "entypo-cup":"\\2615", + "entypo-trash":"\\e729", + "entypo-doc":"\\e730", + "entypo-docs":"\\e736", + "entypo-doc-landscape":"\\e737", + "entypo-doc-text":"\\1f4c4", + "entypo-doc-text-inv":"\\e731", + "entypo-newspaper":"\\1f4f0", + "entypo-book-open":"\\1f4d6", + "entypo-book":"\\1f4d5", + "entypo-folder":"\\1f4c1", + "entypo-archive":"\\e738", + "entypo-box":"\\1f4e6", + "entypo-rss":"\\e73a", + "entypo-phone":"\\e73a", + "entypo-cog":"\\2699", + "entypo-tools":"\\2692", + "entypo-share":"\\e73c", + "entypo-shareable":"\\e73e", + "entypo-basket":"\\e73d", + "entypo-bag":"\\1f45c'", + "entypo-calendar":"\\1f4c5", + "entypo-login":"\\e740", + "entypo-logout":"\\e741", + "entypo-mic":"\\1f3a4", + "entypo-mute":"\\1f507", + "entypo-sound":"\\1f50a", + "entypo-volume":"\\e742", + "entypo-clock":"\\1f554", + "entypo-hourglass":"\\23f3", + "entypo-lamp":"\\1f4a1", + "entypo-light-down":"\\1f505", + "entypo-light-up":"\\1f506", + "entypo-adjust":"\\25d1", + "entypo-block":"\\1f6ab", + "entypo-resize-full":"\\e744", + "entypo-resize-small":"\\e746", + "entypo-popup":"\\e74c", + "entypo-publish":"\\e74d", + "entypo-window":"\\e74e", + "entypo-arrow-combo":"\\e74f", + "entypo-down-circled":"\\e758", + "entypo-left-circled":"\\e759", + "entypo-right-circled":"\\e75a", + "entypo-up-circled":"\\e75b", + "entypo-down-open":"\\e75c", + "entypo-left-open":"\\e75d", + "entypo-right-open":"\\e75e", + "entypo-up-open":"\\e75f", + "entypo-down-open-mini":"\\e760", + "entypo-left-open-mini":"\\e761", + "entypo-right-open-mini":"\\e762", + "entypo-up-open-mini":"\\e763", + "entypo-down-open-big":"\\e764", + "entypo-left-open-big":"\\e765", + "entypo-right-open-big":"\\e766", + "entypo-up-open-big":"\\e767", + "entypo-down":"\\2b07", + "entypo-left":"\\2b05", + "entypo-right":"\\27a1", + "entypo-up":"\\2b06", + "entypo-down-dir":"\\25be", + "entypo-left-dir":"\\25c2", + "entypo-right-dir":"\\25b8", + "entypo-up-dir":"\\25b4", + "entypo-down-bold":"\\e4b0", + "entypo-left-bold":"\\e4ad", + "entypo-right-bold":"\\e4ae", + "entypo-up-bold":"\\e4af", + "entypo-down-thin":"\\2193", + "entypo-left-thin":"\\2190", + "entypo-right-thin":"\\2192", + "entypo-up-thin":"\\2191", + "entypo-ccw":"\\27f2", + "entypo-cw":"\\27f3", + "entypo-arrows-ccw":"\\1f504", + "entypo-level-down":"\\21b3", + "entypo-level-up":"\\21b0", + "entypo-shuffle":"\\1f500", + "entypo-loop":"\\1f501", + "entypo-switch":"\\21c6", + "entypo-play":"\\25b6", + "entypo-stop":"\\25a0", + "entypo-pause":"\\2389", + "entypo-record":"\\26ab", + "entypo-to-end":"\\23ed", + "entypo-to-start":"\\23ee", + "entypo-fast-forward":"\\23e9", + "entypo-fast-backward":"\\23ea", + "entypo-progress-0":"\\e768", + "entypo-progress-1":"\\e769", + "entypo-progress-2":"\\e76a", + "entypo-progress-3":"\\e76b", + "entypo-target":"\\1f3af", + "entypo-palette":"\\1f3a8", + "entypo-list":"\\e005", + "entypo-list-add":"\\e003", + "entypo-signal":"\\1f4f6", + "entypo-trophy":"\\1f3c6", + "entypo-battery":"\\1f50b", + "entypo-back-in-time":"\\e771", + "entypo-monitor":"\\1f4bb", + "entypo-mobile":"\\1f4f1", + "entypo-network":"\\e776", + "entypo-cd":"\\1f4bf", + "entypo-inbox":"\\e777", + "entypo-install":"\\e778", + "entypo-globe":"\\1f30e", + "entypo-cloud":"\\2601", + "entypo-cloud-thunder":"\\26c8", + "entypo-flash":"\\26a1", + "entypo-moon":"\\263d", + "entypo-flight":"\\2708", + "entypo-paper-plane":"\\e79b", + "entypo-leaf":"\\1f342", + "entypo-lifebuoy":"\\e788", + "entypo-mouse":"\\e789", + "entypo-briefcase":"\\1f4bc", + "entypo-suitcase":"\\e78e", + "entypo-dot":"\\e78b", + "entypo-dot-2":"\\e78c", + "entypo-dot-3":"\\e78d", + "entypo-brush":"\\e79a", + "entypo-magnet":"\\e7a1", + "entypo-infinity":"\\221e", + "entypo-erase":"\\232b", + "entypo-chart-pie":"\\e751", + "entypo-chart-line":"\\1f4c8", + "entypo-chart-bar":"\\1f4ca", + "entypo-chart-area":"\\1f53e", + "entypo-tape":"\\2707", + "entypo-graduation-cap":"\\1f393", + "entypo-language":"\\e752", + "entypo-ticket":"\\1f3ab", + "entypo-water":"\\1f4a6", + "entypo-droplet":"\\1f4a7", + "entypo-air":"\\e753", + "entypo-credit-card":"\\1f4b3", + "entypo-floppy":"\\1f4be", + "entypo-clipboard":"\\1f4cb", + "entypo-megaphone":"\\1f4e3", + "entypo-database":"\\e754", + "entypo-drive":"\\e755", + "entypo-bucket":"\\e756", + "entypo-thermometer":"\\e757", + "entypo-key":"\\1f511", + "entypo-flow-cascade":"\\e790", + "entypo-flow-branch":"\\e791", + "entypo-flow-tree":"\\e792", + "entypo-flow-line":"\\e793", + "entypo-flow-parallel":"\\e794", + "entypo-rocket":"\\1f680", + "entypo-gauge":"\\e7a2", + "entypo-traffic-cone":"\\e7a3", + "entypo-cc":"\\e7a5", + "entypo-cc-by":"\\e7a6", + "entypo-cc-nc":"\\e7a7", + "entypo-cc-nc-eu":"\\e7a8", + "entypo-cc-nc-jp":"\\e7a9", + "entypo-cc-sa":"\\e7aa", + "entypo-cc-nd":"\\e7ab", + "entypo-cc-pd":"\\e7ac", + "entypo-cc-zero":"\\e7ad", + "entypo-cc-share":"\\e7ae", + "entypo-cc-remix":"\\e7af", + "entypo-github":"\\f300", + "entypo-github-circled":"\\f301", + "entypo-flickr":"\\f303", + "entypo-flickr-circled":"\\f304", + "entypo-vimeo":"\\f306", + "entypo-vimeo-circled":"\\f307", + "entypo-twitter":"\\f309", + "entypo-twitter-circled":"\\f30a", + "entypo-facebook":"\\f30c", + "entypo-facebook-circled":"\\f30d", + "entypo-facebook-squared":"\\f30e", + "entypo-gplus":"\\f30f", + "entypo-gplus-circled":"\\f310", + "entypo-pinterest":"\\f312", + "entypo-pinterest-circled":"\\f313", + "entypo-tumblr":"\\f315", + "entypo-tumblr-circled":"\\f316", + "entypo-linkedin":"\\f318", + "entypo-linkedin-circled":"\\f319", + "entypo-dribbble":"\\f31b", + "entypo-dribbble-circled":"\\f31c", + "entypo-stumbleupon":"\\f31e", + "entypo-stumbleupon-circled":"\\f31f", + "entypo-lastfm":"\\f321", + "entypo-lastfm-circled":"\\f322", + "entypo-rdio":"\\f324", + "entypo-rdio-circled":"\\f325", + "entypo-spotify":"\\f327", + "entypo-spotify-circled":"\\f328", + "entypo-qq":"\\f32a", + "entypo-instagrem":"\\f32d", + "entypo-dropbox":"\\f330", + "entypo-evernote":"\\f333", + "entypo-flattr":"\\f336", + "entypo-skype":"\\f339", + "entypo-skype-circled":"\\f33a", + "entypo-renren":"\\f33c", + "entypo-sina-weibo":"\\f33f", + "entypo-paypal":"\\f342", + "entypo-picasa":"\\f345", + "entypo-soundcloud":"\\f348", + "entypo-mixi":"\\f34b", + "entypo-behance":"\\f34e", + "entypo-google-circles":"\\f351", + "entypo-vkontakte":"\\f354", + "entypo-smashing":"\\f357", + "entypo-sweden":"\\f601", + "entypo-db-shape":"\\f600", + "entypo-logo-db":"\\f603" +} \ No newline at end of file diff --git a/app/api/fonts/entypo/entypo-min.css b/app/api/fonts/entypo/entypo-min.css new file mode 100755 index 0000000..0279645 --- /dev/null +++ b/app/api/fonts/entypo/entypo-min.css @@ -0,0 +1 @@ +.entypo-note:before{content:"\266a"}.entypo-note-beamed:before{content:"\266b"}.entypo-music:before{content:"\1f3b5"}.entypo-search:before{content:"\1f50d"}.entypo-flashlight:before{content:"\1f526"}.entypo-mail:before{content:"\2709"}.entypo-heart:before{content:"\2665"}.entypo-heart-empty:before{content:"\2661"}.entypo-star:before{content:"\2605"}.entypo-star-empty:before{content:"\2606"}.entypo-user:before{content:"\1f464"}.entypo-users:before{content:"\1f465"}.entypo-user-add:before{content:"\e700"}.entypo-video:before{content:"\1f3ac"}.entypo-picture:before{content:"\1f304"}.entypo-camera:before{content:"\1f4f7"}.entypo-layout:before{content:"\268f"}.entypo-menu:before{content:"\2630"}.entypo-check:before{content:"\2713"}.entypo-cancel:before{content:"\2715"}.entypo-cancel-circled:before{content:"\2716"}.entypo-cancel-squared:before{content:"\274e"}.entypo-plus:before{content:"\2b"}.entypo-plus-circled:before{content:"\2795"}.entypo-plus-squared:before{content:"\229e"}.entypo-minus:before{content:"\2d"}.entypo-minus-circled:before{content:"\2796"}.entypo-minus-squared:before{content:"\229f"}.entypo-help:before{content:"\2753"}.entypo-help-circled:before{content:"\e704"}.entypo-info:before{content:"\2139"}.entypo-info-circled:before{content:"\e705"}.entypo-back:before{content:"\1f519"}.entypo-home:before{content:"\2302"}.entypo-link:before{content:"\1f517"}.entypo-attach:before{content:"\1f4ce"}.entypo-lock:before{content:"\1f512"}.entypo-lock-open:before{content:"\1f513"}.entypo-eye:before{content:"\e70a"}.entypo-tag:before{content:"\e70c"}.entypo-bookmark:before{content:"\1f516"}.entypo-bookmarks:before{content:"\1f4d1"}.entypo-flag:before{content:"\2691"}.entypo-thumbs-up:before{content:"\1f44d"}.entypo-thumbs-down:before{content:"\1f44e"}.entypo-download:before{content:"\1f4e5"}.entypo-upload:before{content:"\1f4e4"}.entypo-upload-cloud:before{content:"\e711"}.entypo-reply:before{content:"\e712"}.entypo-reply-all:before{content:"\e713"}.entypo-forward:before{content:"\27a6"}.entypo-quote:before{content:"\275e"}.entypo-code:before{content:"\e714"}.entypo-export:before{content:"\e715"}.entypo-pencil:before{content:"\270e"}.entypo-feather:before{content:"\2712"}.entypo-print:before{content:"\e716"}.entypo-retweet:before{content:"\e717"}.entypo-keyboard:before{content:"\2328"}.entypo-comment:before{content:"\e718"}.entypo-chat:before{content:"\e720"}.entypo-bell:before{content:"\1f514"}.entypo-attention:before{content:"\26a0"}.entypo-alert:before{content:"\1f4a5'"}.entypo-vcard:before{content:"\e722"}.entypo-address:before{content:"\e723"}.entypo-location:before{content:"\e724"}.entypo-map:before{content:"\e727"}.entypo-direction:before{content:"\27a2"}.entypo-compass:before{content:"\e728"}.entypo-cup:before{content:"\2615"}.entypo-trash:before{content:"\e729"}.entypo-doc:before{content:"\e730"}.entypo-docs:before{content:"\e736"}.entypo-doc-landscape:before{content:"\e737"}.entypo-doc-text:before{content:"\1f4c4"}.entypo-doc-text-inv:before{content:"\e731"}.entypo-newspaper:before{content:"\1f4f0"}.entypo-book-open:before{content:"\1f4d6"}.entypo-book:before{content:"\1f4d5"}.entypo-folder:before{content:"\1f4c1"}.entypo-archive:before{content:"\e738"}.entypo-box:before{content:"\1f4e6"}.entypo-rss:before{content:"\e73a"}.entypo-phone:before{content:"\1f4dE"}.entypo-cog:before{content:"\2699"}.entypo-tools:before{content:"\2692"}.entypo-share:before{content:"\e73c"}.entypo-shareable:before{content:"\e73e"}.entypo-basket:before{content:"\e73d"}.entypo-bag:before{content:"\1f45c'"}.entypo-calendar:before{content:"\1f4c5"}.entypo-login:before{content:"\e740"}.entypo-logout:before{content:"\e741"}.entypo-mic:before{content:"\1f3a4"}.entypo-mute:before{content:"\1f507"}.entypo-sound:before{content:"\1f50a"}.entypo-volume:before{content:"\e742"}.entypo-clock:before{content:"\1f554"}.entypo-hourglass:before{content:"\23f3"}.entypo-lamp:before{content:"\1f4a1"}.entypo-light-down:before{content:"\1f505"}.entypo-light-up:before{content:"\1f506"}.entypo-adjust:before{content:"\25d1"}.entypo-block:before{content:"\1f6ab"}.entypo-resize-full:before{content:"\e744"}.entypo-resize-small:before{content:"\e746"}.entypo-popup:before{content:"\e74c"}.entypo-publish:before{content:"\e74d"}.entypo-window:before{content:"\e74e"}.entypo-arrow-combo:before{content:"\e74f"}.entypo-down-circled:before{content:"\e758"}.entypo-left-circled:before{content:"\e759"}.entypo-right-circled:before{content:"\e75a"}.entypo-up-circled:before{content:"\e75b"}.entypo-down-open:before{content:"\e75c"}.entypo-left-open:before{content:"\e75d"}.entypo-right-open:before{content:"\e75e"}.entypo-up-open:before{content:"\e75f"}.entypo-down-open-mini:before{content:"\e760"}.entypo-left-open-mini:before{content:"\e761"}.entypo-right-open-mini:before{content:"\e762"}.entypo-up-open-mini:before{content:"\e763"}.entypo-down-open-big:before{content:"\e764"}.entypo-left-open-big:before{content:"\e765"}.entypo-right-open-big:before{content:"\e766"}.entypo-up-open-big:before{content:"\e767"}.entypo-down:before{content:"\2b07"}.entypo-left:before{content:"\2b05"}.entypo-right:before{content:"\27a1"}.entypo-up:before{content:"\2b06"}.entypo-down-dir:before{content:"\25be"}.entypo-left-dir:before{content:"\25c2"}.entypo-right-dir:before{content:"\25b8"}.entypo-up-dir:before{content:"\25b4"}.entypo-down-bold:before{content:"\e4b0"}.entypo-left-bold:before{content:"\e4ad"}.entypo-right-bold:before{content:"\e4ae"}.entypo-up-bold:before{content:"\e4af"}.entypo-down-thin:before{content:"\2193"}.entypo-left-thin:before{content:"\2190"}.entypo-right-thin:before{content:"\2192"}.entypo-up-thin:before{content:"\2191"}.entypo-ccw:before{content:"\27f2"}.entypo-cw:before{content:"\27f3"}.entypo-arrows-ccw:before{content:"\1f504"}.entypo-level-down:before{content:"\21b3"}.entypo-level-up:before{content:"\21b0"}.entypo-shuffle:before{content:"\1f500"}.entypo-loop:before{content:"\1f501"}.entypo-switch:before{content:"\21c6"}.entypo-play:before{content:"\25b6"}.entypo-stop:before{content:"\25a0"}.entypo-pause:before{content:"\2389"}.entypo-record:before{content:"\26ab"}.entypo-to-end:before{content:"\23ed"}.entypo-to-start:before{content:"\23ee"}.entypo-fast-forward:before{content:"\23e9"}.entypo-fast-backward:before{content:"\23ea"}.entypo-progress-0:before{content:"\e768"}.entypo-progress-1:before{content:"\e769"}.entypo-progress-2:before{content:"\e76a"}.entypo-progress-3:before{content:"\e76b"}.entypo-target:before{content:"\1f3af"}.entypo-palette:before{content:"\1f3a8"}.entypo-list:before{content:"\e005"}.entypo-list-add:before{content:"\e003"}.entypo-signal:before{content:"\1f4f6"}.entypo-trophy:before{content:"\1f3c6"}.entypo-battery:before{content:"\1f50b"}.entypo-back-in-time:before{content:"\e771"}.entypo-monitor:before{content:"\1f4bb"}.entypo-mobile:before{content:"\1f4f1"}.entypo-network:before{content:"\e776"}.entypo-cd:before{content:"\1f4bf"}.entypo-inbox:before{content:"\e777"}.entypo-install:before{content:"\e778"}.entypo-globe:before{content:"\1f30e"}.entypo-cloud:before{content:"\2601"}.entypo-cloud-thunder:before{content:"\26c8"}.entypo-flash:before{content:"\26a1"}.entypo-moon:before{content:"\263d"}.entypo-flight:before{content:"\2708"}.entypo-paper-plane:before{content:"\e79b"}.entypo-leaf:before{content:"\1f342"}.entypo-lifebuoy:before{content:"\e788"}.entypo-mouse:before{content:"\e789"}.entypo-briefcase:before{content:"\1f4bc"}.entypo-suitcase:before{content:"\e78e"}.entypo-dot:before{content:"\e78b"}.entypo-dot-2:before{content:"\e78c"}.entypo-dot-3:before{content:"\e78d"}.entypo-brush:before{content:"\e79a"}.entypo-magnet:before{content:"\e7a1"}.entypo-infinity:before{content:"\221e"}.entypo-erase:before{content:"\232b"}.entypo-chart-pie:before{content:"\e751"}.entypo-chart-line:before{content:"\1f4c8"}.entypo-chart-bar:before{content:"\1f4ca"}.entypo-chart-area:before{content:"\1f53e"}.entypo-tape:before{content:"\2707"}.entypo-graduation-cap:before{content:"\1f393"}.entypo-language:before{content:"\e752"}.entypo-ticket:before{content:"\1f3ab"}.entypo-water:before{content:"\1f4a6"}.entypo-droplet:before{content:"\1f4a7"}.entypo-air:before{content:"\e753"}.entypo-credit-card:before{content:"\1f4b3"}.entypo-floppy:before{content:"\1f4be"}.entypo-clipboard:before{content:"\1f4cb"}.entypo-megaphone:before{content:"\1f4e3"}.entypo-database:before{content:"\e754"}.entypo-drive:before{content:"\e755"}.entypo-bucket:before{content:"\e756"}.entypo-thermometer:before{content:"\e757"}.entypo-key:before{content:"\1f511"}.entypo-flow-cascade:before{content:"\e790"}.entypo-flow-branch:before{content:"\e791"}.entypo-flow-tree:before{content:"\e792"}.entypo-flow-line:before{content:"\e793"}.entypo-flow-parallel:before{content:"\e794"}.entypo-rocket:before{content:"\1f680"}.entypo-gauge:before{content:"\e7a2"}.entypo-traffic-cone:before{content:"\e7a3"}.entypo-cc:before{content:"\e7a5"}.entypo-cc-by:before{content:"\e7a6"}.entypo-cc-nc:before{content:"\e7a7"}.entypo-cc-nc-eu:before{content:"\e7a8"}.entypo-cc-nc-jp:before{content:"\e7a9"}.entypo-cc-sa:before{content:"\e7aa"}.entypo-cc-nd:before{content:"\e7ab"}.entypo-cc-pd:before{content:"\e7ac"}.entypo-cc-zero:before{content:"\e7ad"}.entypo-cc-share:before{content:"\e7ae"}.entypo-cc-remix:before{content:"\e7af"}.entypo-github:before{content:"\f300"}.entypo-github-circled:before{content:"\f301"}.entypo-flickr:before{content:"\f303"}.entypo-flickr-circled:before{content:"\f304"}.entypo-vimeo:before{content:"\f306"}.entypo-vimeo-circled:before{content:"\f307"}.entypo-twitter:before{content:"\f309"}.entypo-twitter-circled:before{content:"\f30a"}.entypo-facebook:before{content:"\f30c"}.entypo-facebook-circled:before{content:"\f30d"}.entypo-facebook-squared:before{content:"\f30e"}.entypo-gplus:before{content:"\f30f"}.entypo-gplus-circled:before{content:"\f310"}.entypo-pinterest:before{content:"\f312"}.entypo-pinterest-circled:before{content:"\f313"}.entypo-tumblr:before{content:"\f315"}.entypo-tumblr-circled:before{content:"\f316"}.entypo-linkedin:before{content:"\f318"}.entypo-linkedin-circled:before{content:"\f319"}.entypo-dribbble:before{content:"\f31b"}.entypo-dribbble-circled:before{content:"\f31c"}.entypo-stumbleupon:before{content:"\f31e"}.entypo-stumbleupon-circled:before{content:"\f31f"}.entypo-lastfm:before{content:"\f321"}.entypo-lastfm-circled:before{content:"\f322"}.entypo-rdio:before{content:"\f324"}.entypo-rdio-circled:before{content:"\f325"}.entypo-spotify:before{content:"\f327"}.entypo-spotify-circled:before{content:"\f328"}.entypo-qq:before{content:"\f32a"}.entypo-instagrem:before{content:"\f32d"}.entypo-dropbox:before{content:"\f330"}.entypo-evernote:before{content:"\f333"}.entypo-flattr:before{content:"\f336"}.entypo-skype:before{content:"\f339"}.entypo-skype-circled:before{content:"\f33a"}.entypo-renren:before{content:"\f33c"}.entypo-sina-weibo:before{content:"\f33f"}.entypo-paypal:before{content:"\f342"}.entypo-picasa:before{content:"\f345"}.entypo-soundcloud:before{content:"\f348"}.entypo-mixi:before{content:"\f34b"}.entypo-behance:before{content:"\f34e"}.entypo-google-circles:before{content:"\f351"}.entypo-vkontakte:before{content:"\f354"}.entypo-smashing:before{content:"\f357"}.entypo-sweden:before{content:"\f601"}.entypo-db-shape:before{content:"\f600"}.entypo-logo-db:before{content:"\f603"} \ No newline at end of file diff --git a/app/api/fonts/entypo/entypo.css b/app/api/fonts/entypo/entypo.css new file mode 100755 index 0000000..a313ea3 --- /dev/null +++ b/app/api/fonts/entypo/entypo.css @@ -0,0 +1,290 @@ +/* + entypo.com by Daniel Bruce + Entypo is a set of 250+ carefully crafted pictograms + + Licence: http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL +*/ +.entypo-note:before { content: "\266a"; } +.entypo-note-beamed:before { content: "\266b"; } +.entypo-music:before { content: "\1f3b5"; } +.entypo-search:before { content: "\1f50d"; } +.entypo-flashlight:before { content: "\1f526"; } +.entypo-mail:before { content: "\2709"; } +.entypo-heart:before { content: "\2665"; } +.entypo-heart-empty:before { content: "\2661"; } +.entypo-star:before { content: "\2605"; } +.entypo-star-empty:before { content: "\2606"; } +.entypo-user:before { content: "\1f464"; } +.entypo-users:before { content: "\1f465"; } +.entypo-user-add:before { content: "\e700"; } +.entypo-video:before { content: "\1f3ac"; } +.entypo-picture:before { content: "\1f304"; } +.entypo-camera:before { content: "\1f4f7"; } +.entypo-layout:before { content: "\268f"; } +.entypo-menu:before { content: "\2630"; } +.entypo-check:before { content: "\2713"; } +.entypo-cancel:before { content: "\2715"; } +.entypo-cancel-circled:before { content: "\2716"; } +.entypo-cancel-squared:before { content: "\274e"; } +.entypo-plus:before { content: "\2b"; } +.entypo-plus-circled:before { content: "\2795"; } +.entypo-plus-squared:before { content: "\229e"; } +.entypo-minus:before { content: "\2d"; } +.entypo-minus-circled:before { content: "\2796"; } +.entypo-minus-squared:before { content: "\229f"; } +.entypo-help:before { content: "\2753"; } +.entypo-help-circled:before { content: "\e704"; } +.entypo-info:before { content: "\2139"; } +.entypo-info-circled:before { content: "\e705"; } +.entypo-back:before { content: "\1f519"; } +.entypo-home:before { content: "\2302"; } +.entypo-link:before { content: "\1f517"; } +.entypo-attach:before { content: "\1f4ce"; } +.entypo-lock:before { content: "\1f512"; } +.entypo-lock-open:before { content: "\1f513"; } +.entypo-eye:before { content: "\e70a"; } +.entypo-tag:before { content: "\e70c"; } +.entypo-bookmark:before { content: "\1f516"; } +.entypo-bookmarks:before { content: "\1f4d1"; } +.entypo-flag:before { content: "\2691"; } +.entypo-thumbs-up:before { content: "\1f44d"; } +.entypo-thumbs-down:before { content: "\1f44e"; } +.entypo-download:before { content: "\1f4e5"; } +.entypo-upload:before { content: "\1f4e4"; } +.entypo-upload-cloud:before { content: "\e711"; } +.entypo-reply:before { content: "\e712"; } +.entypo-reply-all:before { content: "\e713"; } +.entypo-forward:before { content: "\27a6"; } +.entypo-quote:before { content: "\275e"; } +.entypo-code:before { content: "\e714"; } +.entypo-export:before { content: "\e715"; } +.entypo-pencil:before { content: "\270e"; } +.entypo-feather:before { content: "\2712"; } +.entypo-print:before { content: "\e716"; } +.entypo-retweet:before { content: "\e717"; } +.entypo-keyboard:before { content: "\2328"; } +.entypo-comment:before { content: "\e718"; } +.entypo-chat:before { content: "\e720"; } +.entypo-bell:before { content: "\1f514"; } +.entypo-attention:before { content: "\26a0"; } +.entypo-alert:before { content: "\1f4a5'"; } +.entypo-vcard:before { content: "\e722"; } +.entypo-address:before { content: "\e723"; } +.entypo-location:before { content: "\e724"; } +.entypo-map:before { content: "\e727"; } +.entypo-direction:before { content: "\27a2"; } +.entypo-compass:before { content: "\e728"; } +.entypo-cup:before { content: "\2615"; } +.entypo-trash:before { content: "\e729"; } +.entypo-doc:before { content: "\e730"; } +.entypo-docs:before { content: "\e736"; } +.entypo-doc-landscape:before { content: "\e737"; } +.entypo-doc-text:before { content: "\1f4c4"; } +.entypo-doc-text-inv:before { content: "\e731"; } +.entypo-newspaper:before { content: "\1f4f0"; } +.entypo-book-open:before { content: "\1f4d6"; } +.entypo-book:before { content: "\1f4d5"; } +.entypo-folder:before { content: "\1f4c1"; } +.entypo-archive:before { content: "\e738"; } +.entypo-box:before { content: "\1f4e6"; } +.entypo-rss:before { content: "\e73a"; } +.entypo-phone:before { content: "\1f4dE"; } +.entypo-cog:before { content: "\2699"; } +.entypo-tools:before { content: "\2692"; } +.entypo-share:before { content: "\e73c"; } +.entypo-shareable:before { content: "\e73e"; } +.entypo-basket:before { content: "\e73d"; } +.entypo-bag:before { content: "\1f45c'"; } +.entypo-calendar:before { content: "\1f4c5"; } +.entypo-login:before { content: "\e740"; } +.entypo-logout:before { content: "\e741"; } +.entypo-mic:before { content: "\1f3a4"; } +.entypo-mute:before { content: "\1f507"; } +.entypo-sound:before { content: "\1f50a"; } +.entypo-volume:before { content: "\e742"; } +.entypo-clock:before { content: "\1f554"; } +.entypo-hourglass:before { content: "\23f3"; } +.entypo-lamp:before { content: "\1f4a1"; } +.entypo-light-down:before { content: "\1f505"; } +.entypo-light-up:before { content: "\1f506"; } +.entypo-adjust:before { content: "\25d1"; } +.entypo-block:before { content: "\1f6ab"; } +.entypo-resize-full:before { content: "\e744"; } +.entypo-resize-small:before { content: "\e746"; } +.entypo-popup:before { content: "\e74c"; } +.entypo-publish:before { content: "\e74d"; } +.entypo-window:before { content: "\e74e"; } +.entypo-arrow-combo:before { content: "\e74f"; } +.entypo-down-circled:before { content: "\e758"; } +.entypo-left-circled:before { content: "\e759"; } +.entypo-right-circled:before { content: "\e75a"; } +.entypo-up-circled:before { content: "\e75b"; } +.entypo-down-open:before { content: "\e75c"; } +.entypo-left-open:before { content: "\e75d"; } +.entypo-right-open:before { content: "\e75e"; } +.entypo-up-open:before { content: "\e75f"; } +.entypo-down-open-mini:before { content: "\e760"; } +.entypo-left-open-mini:before { content: "\e761"; } +.entypo-right-open-mini:before { content: "\e762"; } +.entypo-up-open-mini:before { content: "\e763"; } +.entypo-down-open-big:before { content: "\e764"; } +.entypo-left-open-big:before { content: "\e765"; } +.entypo-right-open-big:before { content: "\e766"; } +.entypo-up-open-big:before { content: "\e767"; } +.entypo-down:before { content: "\2b07"; } +.entypo-left:before { content: "\2b05"; } +.entypo-right:before { content: "\27a1"; } +.entypo-up:before { content: "\2b06"; } +.entypo-down-dir:before { content: "\25be"; } +.entypo-left-dir:before { content: "\25c2"; } +.entypo-right-dir:before { content: "\25b8"; } +.entypo-up-dir:before { content: "\25b4"; } +.entypo-down-bold:before { content: "\e4b0"; } +.entypo-left-bold:before { content: "\e4ad"; } +.entypo-right-bold:before { content: "\e4ae"; } +.entypo-up-bold:before { content: "\e4af"; } +.entypo-down-thin:before { content: "\2193"; } +.entypo-left-thin:before { content: "\2190"; } +.entypo-right-thin:before { content: "\2192"; } +.entypo-up-thin:before { content: "\2191"; } +.entypo-ccw:before { content: "\27f2"; } +.entypo-cw:before { content: "\27f3"; } +.entypo-arrows-ccw:before { content: "\1f504"; } +.entypo-level-down:before { content: "\21b3"; } +.entypo-level-up:before { content: "\21b0"; } +.entypo-shuffle:before { content: "\1f500"; } +.entypo-loop:before { content: "\1f501"; } +.entypo-switch:before { content: "\21c6"; } +.entypo-play:before { content: "\25b6"; } +.entypo-stop:before { content: "\25a0"; } +.entypo-pause:before { content: "\2389"; } +.entypo-record:before { content: "\26ab"; } +.entypo-to-end:before { content: "\23ed"; } +.entypo-to-start:before { content: "\23ee"; } +.entypo-fast-forward:before { content: "\23e9"; } +.entypo-fast-backward:before { content: "\23ea"; } +.entypo-progress-0:before { content: "\e768"; } +.entypo-progress-1:before { content: "\e769"; } +.entypo-progress-2:before { content: "\e76a"; } +.entypo-progress-3:before { content: "\e76b"; } +.entypo-target:before { content: "\1f3af"; } +.entypo-palette:before { content: "\1f3a8"; } +.entypo-list:before { content: "\e005"; } +.entypo-list-add:before { content: "\e003"; } +.entypo-signal:before { content: "\1f4f6"; } +.entypo-trophy:before { content: "\1f3c6"; } +.entypo-battery:before { content: "\1f50b"; } +.entypo-back-in-time:before { content: "\e771"; } +.entypo-monitor:before { content: "\1f4bb"; } +.entypo-mobile:before { content: "\1f4f1"; } +.entypo-network:before { content: "\e776"; } +.entypo-cd:before { content: "\1f4bf"; } +.entypo-inbox:before { content: "\e777"; } +.entypo-install:before { content: "\e778"; } +.entypo-globe:before { content: "\1f30e"; } +.entypo-cloud:before { content: "\2601"; } +.entypo-cloud-thunder:before { content: "\26c8"; } +.entypo-flash:before { content: "\26a1"; } +.entypo-moon:before { content: "\263d"; } +.entypo-flight:before { content: "\2708"; } +.entypo-paper-plane:before { content: "\e79b"; } +.entypo-leaf:before { content: "\1f342"; } +.entypo-lifebuoy:before { content: "\e788"; } +.entypo-mouse:before { content: "\e789"; } +.entypo-briefcase:before { content: "\1f4bc"; } +.entypo-suitcase:before { content: "\e78e"; } +.entypo-dot:before { content: "\e78b"; } +.entypo-dot-2:before { content: "\e78c"; } +.entypo-dot-3:before { content: "\e78d"; } +.entypo-brush:before { content: "\e79a"; } +.entypo-magnet:before { content: "\e7a1"; } +.entypo-infinity:before { content: "\221e"; } +.entypo-erase:before { content: "\232b"; } +.entypo-chart-pie:before { content: "\e751"; } +.entypo-chart-line:before { content: "\1f4c8"; } +.entypo-chart-bar:before { content: "\1f4ca"; } +.entypo-chart-area:before { content: "\1f53e"; } +.entypo-tape:before { content: "\2707"; } +.entypo-graduation-cap:before { content: "\1f393"; } +.entypo-language:before { content: "\e752"; } +.entypo-ticket:before { content: "\1f3ab"; } +.entypo-water:before { content: "\1f4a6"; } +.entypo-droplet:before { content: "\1f4a7"; } +.entypo-air:before { content: "\e753"; } +.entypo-credit-card:before { content: "\1f4b3"; } +.entypo-floppy:before { content: "\1f4be"; } +.entypo-clipboard:before { content: "\1f4cb"; } +.entypo-megaphone:before { content: "\1f4e3"; } +.entypo-database:before { content: "\e754"; } +.entypo-drive:before { content: "\e755"; } +.entypo-bucket:before { content: "\e756"; } +.entypo-thermometer:before { content: "\e757"; } +.entypo-key:before { content: "\1f511"; } +.entypo-flow-cascade:before { content: "\e790"; } +.entypo-flow-branch:before { content: "\e791"; } +.entypo-flow-tree:before { content: "\e792"; } +.entypo-flow-line:before { content: "\e793"; } +.entypo-flow-parallel:before { content: "\e794"; } +.entypo-rocket:before { content: "\1f680"; } +.entypo-gauge:before { content: "\e7a2"; } +.entypo-traffic-cone:before { content: "\e7a3"; } +.entypo-cc:before { content: "\e7a5"; } +.entypo-cc-by:before { content: "\e7a6"; } +.entypo-cc-nc:before { content: "\e7a7"; } +.entypo-cc-nc-eu:before { content: "\e7a8"; } +.entypo-cc-nc-jp:before { content: "\e7a9"; } +.entypo-cc-sa:before { content: "\e7aa"; } +.entypo-cc-nd:before { content: "\e7ab"; } +.entypo-cc-pd:before { content: "\e7ac"; } +.entypo-cc-zero:before { content: "\e7ad"; } +.entypo-cc-share:before { content: "\e7ae"; } +.entypo-cc-remix:before { content: "\e7af"; } +.entypo-github:before { content: "\f300"; } +.entypo-github-circled:before { content: "\f301"; } +.entypo-flickr:before { content: "\f303"; } +.entypo-flickr-circled:before { content: "\f304"; } +.entypo-vimeo:before { content: "\f306"; } +.entypo-vimeo-circled:before { content: "\f307"; } +.entypo-twitter:before { content: "\f309"; } +.entypo-twitter-circled:before { content: "\f30a"; } +.entypo-facebook:before { content: "\f30c"; } +.entypo-facebook-circled:before { content: "\f30d"; } +.entypo-facebook-squared:before { content: "\f30e"; } +.entypo-gplus:before { content: "\f30f"; } +.entypo-gplus-circled:before { content: "\f310"; } +.entypo-pinterest:before { content: "\f312"; } +.entypo-pinterest-circled:before { content: "\f313"; } +.entypo-tumblr:before { content: "\f315"; } +.entypo-tumblr-circled:before { content: "\f316"; } +.entypo-linkedin:before { content: "\f318"; } +.entypo-linkedin-circled:before { content: "\f319"; } +.entypo-dribbble:before { content: "\f31b"; } +.entypo-dribbble-circled:before { content: "\f31c"; } +.entypo-stumbleupon:before { content: "\f31e"; } +.entypo-stumbleupon-circled:before { content: "\f31f"; } +.entypo-lastfm:before { content: "\f321"; } +.entypo-lastfm-circled:before { content: "\f322"; } +.entypo-rdio:before { content: "\f324"; } +.entypo-rdio-circled:before { content: "\f325"; } +.entypo-spotify:before { content: "\f327"; } +.entypo-spotify-circled:before { content: "\f328"; } +.entypo-qq:before { content: "\f32a"; } +.entypo-instagrem:before { content: "\f32d"; } +.entypo-dropbox:before { content: "\f330"; } +.entypo-evernote:before { content: "\f333"; } +.entypo-flattr:before { content: "\f336"; } +.entypo-skype:before { content: "\f339"; } +.entypo-skype-circled:before { content: "\f33a"; } +.entypo-renren:before { content: "\f33c"; } +.entypo-sina-weibo:before { content: "\f33f"; } +.entypo-paypal:before { content: "\f342"; } +.entypo-picasa:before { content: "\f345"; } +.entypo-soundcloud:before { content: "\f348"; } +.entypo-mixi:before { content: "\f34b"; } +.entypo-behance:before { content: "\f34e"; } +.entypo-google-circles:before { content: "\f351"; } +.entypo-vkontakte:before { content: "\f354"; } +.entypo-smashing:before { content: "\f357"; } +.entypo-sweden:before { content: "\f601"; } +.entypo-db-shape:before { content: "\f600"; } +.entypo-logo-db:before { content: "\f603"; } \ No newline at end of file diff --git a/app/api/fonts/entypo/entypo.eot b/app/api/fonts/entypo/entypo.eot new file mode 100755 index 0000000..41f223e Binary files /dev/null and b/app/api/fonts/entypo/entypo.eot differ diff --git a/app/api/fonts/entypo/entypo.svg b/app/api/fonts/entypo/entypo.svg new file mode 100755 index 0000000..86b3b30 --- /dev/null +++ b/app/api/fonts/entypo/entypo.svg @@ -0,0 +1,834 @@ + + + + +Created by FontForge 20110222 at Sun Nov 11 15:34:13 2012 + By Vitaly,,, +Copyright (C) 2012 by Daniel Bruce + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/api/fonts/entypo/entypo.ttf b/app/api/fonts/entypo/entypo.ttf new file mode 100755 index 0000000..331ea3a Binary files /dev/null and b/app/api/fonts/entypo/entypo.ttf differ diff --git a/app/api/fonts/entypo/entypo.woff b/app/api/fonts/entypo/entypo.woff new file mode 100755 index 0000000..b0771de Binary files /dev/null and b/app/api/fonts/entypo/entypo.woff differ diff --git a/app/api/fonts/extract.js b/app/api/fonts/extract.js new file mode 100755 index 0000000..7b44cb6 --- /dev/null +++ b/app/api/fonts/extract.js @@ -0,0 +1,60 @@ +var fs = require('fs'), + compressor = require('node-minify'), + sys = require('sys'), + exec = require('child_process').exec; + + var StringExtensions=new function(){this.trim=function(){return this.replace(/^\s+|\s+$/g,"")};String.prototype.trim=this.trim;this.repeat=function(j){return Array(1+j).join(this)};String.prototype.repeat=this.repeat},CSSJSON=new function(){var j=/([^\:]+):([^\;]*);/,n=/(\/\*.*?\*\/)|([^\s\;\{\}][^\;\{\}]*(?=\{))|(\})|([^\;\{\}]+\;)/g;this.toJSON=function(b,d){return k(b,d)};var g=function(b){return"undefined"==typeof b||0==b.length||null==b},k=function(b,d){for(var c={},a=null,h=0;null!=(a=n.exec(b));)if(g(a[1]))if(g(a[2]))if(g(a[3])){if(!g(a[4])){var a= + a[4].trim(),e=j.exec(a);if(e){var a=e[1].trim(),f=e[2].trim();d?(e={},e.name=a,e.value=f,e.type="attr",c[h++]=e):c[a]=f}else c[h++]=a}}else break;else a=a[2].trim(),f=k(b,d),d?(e={},e.name=a,e.value=f,e.type="rule",c[h++]=e):c[a]=f;else a=a[1].trim(),c[h++]=a;return c};this.toCSS=function(b){return l(b)};var l=function(b,d){var c="";"undefined"==typeof d&&(d=0);for(i in b){var a=b[i];"number"==typeof i||parseInt(i)==i?c="object"==typeof a?"rule"==a.type?c+m(a.name,a.value,d):c+("\t".repeat(d)+a.name+ + ": "+a.value+";\n"):c+("\t".repeat(d)+a+"\n"):"string"==typeof i&&(c="object"==typeof a?c+m(i,a,d):c+("\t".repeat(d)+i+": "+a+";\n"))}return c},m=function(b,d,c){b="\t".repeat(c)+b+" {\n";b+=l(d,c+1);return b+="\t".repeat(c)+"}\n\n"}}; + + +var folder = '.', + stuff = []; + +function getFiles(folder) { + var files = fs.readdirSync(folder); + folder += '/'; + + // Ignore shit + if (folder == '.git/') { + return false; + } + + for (var i = 0; i < files.length; i++) { + if (files[i] != 'extract.js') { + // Query the entry + stats = fs.lstatSync(folder + files[i]); + + // Is it a directory? + if (stats.isDirectory()) { + getFiles(files[i]); + } else { + stuff.push(folder + files[i]); + } + } + } + + return stuff; +} + +// Get files to minify +getFiles(folder); + +// Minify +for (var i = 0; i < stuff.length; i++) { + var file = stuff[i]; + + if (file.search('-min.css') != -1) { + fs.readFile(file, "utf-8", function (err, data) { + if (err) throw err; + + var json = CSSJSON.toJSON(data); + console.log(json); + + fs.writeFile("./extract.txt", "Hey there!", function(err) { + if (err) throw err; + }); + }); + } + +} \ No newline at end of file diff --git a/app/api/fonts/extract.txt b/app/api/fonts/extract.txt new file mode 100755 index 0000000..ff3adba --- /dev/null +++ b/app/api/fonts/extract.txt @@ -0,0 +1 @@ +Hey there! \ No newline at end of file diff --git a/app/api/fonts/fontawesome/fontawesome-extract.json b/app/api/fonts/fontawesome/fontawesome-extract.json new file mode 100755 index 0000000..eac98b7 --- /dev/null +++ b/app/api/fonts/fontawesome/fontawesome-extract.json @@ -0,0 +1,251 @@ +{ + "fontawesome-glass":"\\f000", + "fontawesome-music":"\\f001", + "fontawesome-search":"\\f002", + "fontawesome-envelope":"\\f003", + "fontawesome-heart":"\\f004", + "fontawesome-star":"\\f005", + "fontawesome-star-empty":"\\f006", + "fontawesome-user":"\\f007", + "fontawesome-film":"\\f008", + "fontawesome-th-large":"\\f009", + "fontawesome-th":"\\f00a", + "fontawesome-th-list":"\\f00b", + "fontawesome-ok":"\\f00c", + "fontawesome-remove":"\\f00d", + "fontawesome-zoom-in":"\\f00e", + "fontawesome-zoom-out":"\\f010", + "fontawesome-off":"\\f011", + "fontawesome-signal":"\\f012", + "fontawesome-cog":"\\f013", + "fontawesome-trash":"\\f014", + "fontawesome-home":"\\f015", + "fontawesome-file":"\\f016", + "fontawesome-time":"\\f017", + "fontawesome-road":"\\f018", + "fontawesome-download-alt":"\\f019", + "fontawesome-download":"\\f01a", + "fontawesome-upload":"\\f01b", + "fontawesome-inbox":"\\f01c", + "fontawesome-play-circle":"\\f01d", + "fontawesome-repeat":"\\f01e", + "fontawesome-refresh":"\\f021", + "fontawesome-list-alt":"\\f022", + "fontawesome-lock":"\\f023", + "fontawesome-flag":"\\f024", + "fontawesome-headphones":"\\f025", + "fontawesome-volume-off":"\\f026", + "fontawesome-volume-down":"\\f027", + "fontawesome-volume-up":"\\f028", + "fontawesome-qrcode":"\\f029", + "fontawesome-barcode":"\\f02a", + "fontawesome-tag":"\\f02b", + "fontawesome-tags":"\\f02c", + "fontawesome-book":"\\f02d", + "fontawesome-bookmark":"\\f02e", + "fontawesome-print":"\\f02f", + "fontawesome-camera":"\\f030", + "fontawesome-font":"\\f031", + "fontawesome-bold":"\\f032", + "fontawesome-italic":"\\f033", + "fontawesome-text-height":"\\f034", + "fontawesome-text-width":"\\f035", + "fontawesome-align-left":"\\f036", + "fontawesome-align-center":"\\f037", + "fontawesome-align-right":"\\f038", + "fontawesome-align-justify":"\\f039", + "fontawesome-list":"\\f03a", + "fontawesome-indent-left":"\\f03b", + "fontawesome-indent-right":"\\f03c", + "fontawesome-facetime-video":"\\f03d", + "fontawesome-picture":"\\f03e", + "fontawesome-pencil":"\\f040", + "fontawesome-map-marker":"\\f041", + "fontawesome-adjust":"\\f042", + "fontawesome-tint":"\\f043", + "fontawesome-edit":"\\f044", + "fontawesome-share":"\\f045", + "fontawesome-check":"\\f046", + "fontawesome-move":"\\f047", + "fontawesome-step-backward":"\\f048", + "fontawesome-fast-backward":"\\f049", + "fontawesome-backward":"\\f04a", + "fontawesome-play":"\\f04b", + "fontawesome-pause":"\\f04c", + "fontawesome-stop":"\\f04d", + "fontawesome-forward":"\\f04e", + "fontawesome-fast-forward":"\\f050", + "fontawesome-step-forward":"\\f051", + "fontawesome-eject":"\\f052", + "fontawesome-chevron-left":"\\f053", + "fontawesome-chevron-right":"\\f054", + "fontawesome-plus-sign":"\\f055", + "fontawesome-minus-sign":"\\f056", + "fontawesome-remove-sign":"\\f057", + "fontawesome-ok-sign":"\\f058", + "fontawesome-question-sign":"\\f059", + "fontawesome-info-sign":"\\f05a", + "fontawesome-screenshot":"\\f05b", + "fontawesome-remove-circle":"\\f05c", + "fontawesome-ok-circle":"\\f05d", + "fontawesome-ban-circle":"\\f05e", + "fontawesome-arrow-left":"\\f060", + "fontawesome-arrow-right":"\\f061", + "fontawesome-arrow-up":"\\f062", + "fontawesome-arrow-down":"\\f063", + "fontawesome-share-alt":"\\f064", + "fontawesome-resize-full":"\\f065", + "fontawesome-resize-small":"\\f066", + "fontawesome-plus":"\\f067", + "fontawesome-minus":"\\f068", + "fontawesome-asterisk":"\\f069", + "fontawesome-exclamation-sign":"\\f06a", + "fontawesome-gift":"\\f06b", + "fontawesome-leaf":"\\f06c", + "fontawesome-fire":"\\f06d", + "fontawesome-eye-open":"\\f06e", + "fontawesome-eye-close":"\\f070", + "fontawesome-warning-sign":"\\f071", + "fontawesome-plane":"\\f072", + "fontawesome-calendar":"\\f073", + "fontawesome-random":"\\f074", + "fontawesome-comment":"\\f075", + "fontawesome-magnet":"\\f076", + "fontawesome-chevron-up":"\\f077", + "fontawesome-chevron-down":"\\f078", + "fontawesome-retweet":"\\f079", + "fontawesome-shopping-cart":"\\f07a", + "fontawesome-folder-close":"\\f07b", + "fontawesome-folder-open":"\\f07c", + "fontawesome-resize-vertical":"\\f07d", + "fontawesome-resize-horizontal":"\\f07e", + "fontawesome-bar-chart":"\\f080", + "fontawesome-twitter-sign":"\\f081", + "fontawesome-facebook-sign":"\\f082", + "fontawesome-camera-retro":"\\f083", + "fontawesome-key":"\\f084", + "fontawesome-cogs":"\\f085", + "fontawesome-comments":"\\f086", + "fontawesome-thumbs-up":"\\f087", + "fontawesome-thumbs-down":"\\f088", + "fontawesome-star-half":"\\f089", + "fontawesome-heart-empty":"\\f08a", + "fontawesome-signout":"\\f08b", + "fontawesome-linkedin-sign":"\\f08c", + "fontawesome-pushpin":"\\f08d", + "fontawesome-external-link":"\\f08e", + "fontawesome-signin":"\\f090", + "fontawesome-trophy":"\\f091", + "fontawesome-github-sign":"\\f092", + "fontawesome-upload-alt":"\\f093", + "fontawesome-lemon":"\\f094", + "fontawesome-phone":"\\f095", + "fontawesome-check-empty":"\\f096", + "fontawesome-bookmark-empty":"\\f097", + "fontawesome-phone-sign":"\\f098", + "fontawesome-twitter":"\\f099", + "fontawesome-facebook":"\\f09a", + "fontawesome-github":"\\f09b", + "fontawesome-unlock":"\\f09c", + "fontawesome-credit-card":"\\f09d", + "fontawesome-rss":"\\f09e", + "fontawesome-hdd":"\\f0a0", + "fontawesome-bullhorn":"\\f0a1", + "fontawesome-bell":"\\f0a2", + "fontawesome-certificate":"\\f0a3", + "fontawesome-hand-right":"\\f0a4", + "fontawesome-hand-left":"\\f0a5", + "fontawesome-hand-up":"\\f0a6", + "fontawesome-hand-down":"\\f0a7", + "fontawesome-circle-arrow-left":"\\f0a8", + "fontawesome-circle-arrow-right":"\\f0a9", + "fontawesome-circle-arrow-up":"\\f0aa", + "fontawesome-circle-arrow-down":"\\f0ab", + "fontawesome-globe":"\\f0ac", + "fontawesome-wrench":"\\f0ad", + "fontawesome-tasks":"\\f0ae", + "fontawesome-filter":"\\f0b0", + "fontawesome-briefcase":"\\f0b1", + "fontawesome-fullscreen":"\\f0b2", + "fontawesome-group":"\\f0c0", + "fontawesome-link":"\\f0c1", + "fontawesome-cloud":"\\f0c2", + "fontawesome-beaker":"\\f0c3", + "fontawesome-cut":"\\f0c4", + "fontawesome-copy":"\\f0c5", + "fontawesome-paper-clip":"\\f0c6", + "fontawesome-save":"\\f0c7", + "fontawesome-sign-blank":"\\f0c8", + "fontawesome-reorder":"\\f0c9", + "fontawesome-list-ul":"\\f0ca", + "fontawesome-list-ol":"\\f0cb", + "fontawesome-strikethrough":"\\f0cc", + "fontawesome-underline":"\\f0cd", + "fontawesome-table":"\\f0ce", + "fontawesome-magic":"\\f0d0", + "fontawesome-truck":"\\f0d1", + "fontawesome-pinterest":"\\f0d2", + "fontawesome-pinterest-sign":"\\f0d3", + "fontawesome-google-plus-sign":"\\f0d4", + "fontawesome-google-plus":"\\f0d5", + "fontawesome-money":"\\f0d6", + "fontawesome-caret-down":"\\f0d7", + "fontawesome-caret-up":"\\f0d8", + "fontawesome-caret-left":"\\f0d9", + "fontawesome-caret-right":"\\f0da", + "fontawesome-columns":"\\f0db", + "fontawesome-sort":"\\f0dc", + "fontawesome-sort-down":"\\f0dd", + "fontawesome-sort-up":"\\f0de", + "fontawesome-envelope-alt":"\\f0e0", + "fontawesome-linkedin":"\\f0e1", + "fontawesome-undo":"\\f0e2", + "fontawesome-legal":"\\f0e3", + "fontawesome-dashboard":"\\f0e4", + "fontawesome-comment-alt":"\\f0e5", + "fontawesome-comments-alt":"\\f0e6", + "fontawesome-bolt":"\\f0e7", + "fontawesome-sitemap":"\\f0e8", + "fontawesome-umbrella":"\\f0e9", + "fontawesome-paste":"\\f0ea", + "fontawesome-lightbulb":"\\f0eb", + "fontawesome-exchange":"\\f0ec", + "fontawesome-cloud-download":"\\f0ed", + "fontawesome-cloud-upload":"\\f0ee", + "fontawesome-user-md":"\\f0f0", + "fontawesome-stethoscope":"\\f0f1", + "fontawesome-suitcase":"\\f0f2", + "fontawesome-bell-alt":"\\f0f3", + "fontawesome-coffee":"\\f0f4", + "fontawesome-food":"\\f0f5", + "fontawesome-file-alt":"\\f0f6", + "fontawesome-building":"\\f0f7", + "fontawesome-hospital":"\\f0f8", + "fontawesome-ambulance":"\\f0f9", + "fontawesome-medkit":"\\f0fa", + "fontawesome-fighter-jet":"\\f0fb", + "fontawesome-beer":"\\f0fc", + "fontawesome-h-sign":"\\f0fd", + "fontawesome-plus-sign-alt":"\\f0fe", + "fontawesome-double-angle-left":"\\f100", + "fontawesome-double-angle-right":"\\f101", + "fontawesome-double-angle-up":"\\f102", + "fontawesome-double-angle-down":"\\f103", + "fontawesome-angle-left":"\\f104", + "fontawesome-angle-right":"\\f105", + "fontawesome-angle-up":"\\f106", + "fontawesome-angle-down":"\\f107", + "fontawesome-desktop":"\\f108", + "fontawesome-laptop":"\\f109", + "fontawesome-tablet":"\\f10a", + "fontawesome-mobile-phone":"\\f10b", + "fontawesome-circle-blank":"\\f10c", + "fontawesome-quote-left":"\\f10d", + "fontawesome-quote-right":"\\f10e", + "fontawesome-spinner":"\\f110", + "fontawesome-circle":"\\f111", + "fontawesome-reply":"\\f112", + "fontawesome-github-alt":"\\f113", + "fontawesome-folder-close-alt":"\\f114", + "fontawesome-folder-open-alt":"\\f115" +} \ No newline at end of file diff --git a/app/api/fonts/fontawesome/fontawesome-min.css b/app/api/fonts/fontawesome/fontawesome-min.css new file mode 100755 index 0000000..1e7386b --- /dev/null +++ b/app/api/fonts/fontawesome/fontawesome-min.css @@ -0,0 +1 @@ +.fontawesome-glass:before{content:"\f000"}.fontawesome-music:before{content:"\f001"}.fontawesome-search:before{content:"\f002"}.fontawesome-envelope:before{content:"\f003"}.fontawesome-heart:before{content:"\f004"}.fontawesome-star:before{content:"\f005"}.fontawesome-star-empty:before{content:"\f006"}.fontawesome-user:before{content:"\f007"}.fontawesome-film:before{content:"\f008"}.fontawesome-th-large:before{content:"\f009"}.fontawesome-th:before{content:"\f00a"}.fontawesome-th-list:before{content:"\f00b"}.fontawesome-ok:before{content:"\f00c"}.fontawesome-remove:before{content:"\f00d"}.fontawesome-zoom-in:before{content:"\f00e"}.fontawesome-zoom-out:before{content:"\f010"}.fontawesome-off:before{content:"\f011"}.fontawesome-signal:before{content:"\f012"}.fontawesome-cog:before{content:"\f013"}.fontawesome-trash:before{content:"\f014"}.fontawesome-home:before{content:"\f015"}.fontawesome-file:before{content:"\f016"}.fontawesome-time:before{content:"\f017"}.fontawesome-road:before{content:"\f018"}.fontawesome-download-alt:before{content:"\f019"}.fontawesome-download:before{content:"\f01a"}.fontawesome-upload:before{content:"\f01b"}.fontawesome-inbox:before{content:"\f01c"}.fontawesome-play-circle:before{content:"\f01d"}.fontawesome-repeat:before{content:"\f01e"}.fontawesome-refresh:before{content:"\f021"}.fontawesome-list-alt:before{content:"\f022"}.fontawesome-lock:before{content:"\f023"}.fontawesome-flag:before{content:"\f024"}.fontawesome-headphones:before{content:"\f025"}.fontawesome-volume-off:before{content:"\f026"}.fontawesome-volume-down:before{content:"\f027"}.fontawesome-volume-up:before{content:"\f028"}.fontawesome-qrcode:before{content:"\f029"}.fontawesome-barcode:before{content:"\f02a"}.fontawesome-tag:before{content:"\f02b"}.fontawesome-tags:before{content:"\f02c"}.fontawesome-book:before{content:"\f02d"}.fontawesome-bookmark:before{content:"\f02e"}.fontawesome-print:before{content:"\f02f"}.fontawesome-camera:before{content:"\f030"}.fontawesome-font:before{content:"\f031"}.fontawesome-bold:before{content:"\f032"}.fontawesome-italic:before{content:"\f033"}.fontawesome-text-height:before{content:"\f034"}.fontawesome-text-width:before{content:"\f035"}.fontawesome-align-left:before{content:"\f036"}.fontawesome-align-center:before{content:"\f037"}.fontawesome-align-right:before{content:"\f038"}.fontawesome-align-justify:before{content:"\f039"}.fontawesome-list:before{content:"\f03a"}.fontawesome-indent-left:before{content:"\f03b"}.fontawesome-indent-right:before{content:"\f03c"}.fontawesome-facetime-video:before{content:"\f03d"}.fontawesome-picture:before{content:"\f03e"}.fontawesome-pencil:before{content:"\f040"}.fontawesome-map-marker:before{content:"\f041"}.fontawesome-adjust:before{content:"\f042"}.fontawesome-tint:before{content:"\f043"}.fontawesome-edit:before{content:"\f044"}.fontawesome-share:before{content:"\f045"}.fontawesome-check:before{content:"\f046"}.fontawesome-move:before{content:"\f047"}.fontawesome-step-backward:before{content:"\f048"}.fontawesome-fast-backward:before{content:"\f049"}.fontawesome-backward:before{content:"\f04a"}.fontawesome-play:before{content:"\f04b"}.fontawesome-pause:before{content:"\f04c"}.fontawesome-stop:before{content:"\f04d"}.fontawesome-forward:before{content:"\f04e"}.fontawesome-fast-forward:before{content:"\f050"}.fontawesome-step-forward:before{content:"\f051"}.fontawesome-eject:before{content:"\f052"}.fontawesome-chevron-left:before{content:"\f053"}.fontawesome-chevron-right:before{content:"\f054"}.fontawesome-plus-sign:before{content:"\f055"}.fontawesome-minus-sign:before{content:"\f056"}.fontawesome-remove-sign:before{content:"\f057"}.fontawesome-ok-sign:before{content:"\f058"}.fontawesome-question-sign:before{content:"\f059"}.fontawesome-info-sign:before{content:"\f05a"}.fontawesome-screenshot:before{content:"\f05b"}.fontawesome-remove-circle:before{content:"\f05c"}.fontawesome-ok-circle:before{content:"\f05d"}.fontawesome-ban-circle:before{content:"\f05e"}.fontawesome-arrow-left:before{content:"\f060"}.fontawesome-arrow-right:before{content:"\f061"}.fontawesome-arrow-up:before{content:"\f062"}.fontawesome-arrow-down:before{content:"\f063"}.fontawesome-share-alt:before{content:"\f064"}.fontawesome-resize-full:before{content:"\f065"}.fontawesome-resize-small:before{content:"\f066"}.fontawesome-plus:before{content:"\f067"}.fontawesome-minus:before{content:"\f068"}.fontawesome-asterisk:before{content:"\f069"}.fontawesome-exclamation-sign:before{content:"\f06a"}.fontawesome-gift:before{content:"\f06b"}.fontawesome-leaf:before{content:"\f06c"}.fontawesome-fire:before{content:"\f06d"}.fontawesome-eye-open:before{content:"\f06e"}.fontawesome-eye-close:before{content:"\f070"}.fontawesome-warning-sign:before{content:"\f071"}.fontawesome-plane:before{content:"\f072"}.fontawesome-calendar:before{content:"\f073"}.fontawesome-random:before{content:"\f074"}.fontawesome-comment:before{content:"\f075"}.fontawesome-magnet:before{content:"\f076"}.fontawesome-chevron-up:before{content:"\f077"}.fontawesome-chevron-down:before{content:"\f078"}.fontawesome-retweet:before{content:"\f079"}.fontawesome-shopping-cart:before{content:"\f07a"}.fontawesome-folder-close:before{content:"\f07b"}.fontawesome-folder-open:before{content:"\f07c"}.fontawesome-resize-vertical:before{content:"\f07d"}.fontawesome-resize-horizontal:before{content:"\f07e"}.fontawesome-bar-chart:before{content:"\f080"}.fontawesome-twitter-sign:before{content:"\f081"}.fontawesome-facebook-sign:before{content:"\f082"}.fontawesome-camera-retro:before{content:"\f083"}.fontawesome-key:before{content:"\f084"}.fontawesome-cogs:before{content:"\f085"}.fontawesome-comments:before{content:"\f086"}.fontawesome-thumbs-up:before{content:"\f087"}.fontawesome-thumbs-down:before{content:"\f088"}.fontawesome-star-half:before{content:"\f089"}.fontawesome-heart-empty:before{content:"\f08a"}.fontawesome-signout:before{content:"\f08b"}.fontawesome-linkedin-sign:before{content:"\f08c"}.fontawesome-pushpin:before{content:"\f08d"}.fontawesome-external-link:before{content:"\f08e"}.fontawesome-signin:before{content:"\f090"}.fontawesome-trophy:before{content:"\f091"}.fontawesome-github-sign:before{content:"\f092"}.fontawesome-upload-alt:before{content:"\f093"}.fontawesome-lemon:before{content:"\f094"}.fontawesome-phone:before{content:"\f095"}.fontawesome-check-empty:before{content:"\f096"}.fontawesome-bookmark-empty:before{content:"\f097"}.fontawesome-phone-sign:before{content:"\f098"}.fontawesome-twitter:before{content:"\f099"}.fontawesome-facebook:before{content:"\f09a"}.fontawesome-github:before{content:"\f09b"}.fontawesome-unlock:before{content:"\f09c"}.fontawesome-credit-card:before{content:"\f09d"}.fontawesome-rss:before{content:"\f09e"}.fontawesome-hdd:before{content:"\f0a0"}.fontawesome-bullhorn:before{content:"\f0a1"}.fontawesome-bell:before{content:"\f0a2"}.fontawesome-certificate:before{content:"\f0a3"}.fontawesome-hand-right:before{content:"\f0a4"}.fontawesome-hand-left:before{content:"\f0a5"}.fontawesome-hand-up:before{content:"\f0a6"}.fontawesome-hand-down:before{content:"\f0a7"}.fontawesome-circle-arrow-left:before{content:"\f0a8"}.fontawesome-circle-arrow-right:before{content:"\f0a9"}.fontawesome-circle-arrow-up:before{content:"\f0aa"}.fontawesome-circle-arrow-down:before{content:"\f0ab"}.fontawesome-globe:before{content:"\f0ac"}.fontawesome-wrench:before{content:"\f0ad"}.fontawesome-tasks:before{content:"\f0ae"}.fontawesome-filter:before{content:"\f0b0"}.fontawesome-briefcase:before{content:"\f0b1"}.fontawesome-fullscreen:before{content:"\f0b2"}.fontawesome-group:before{content:"\f0c0"}.fontawesome-link:before{content:"\f0c1"}.fontawesome-cloud:before{content:"\f0c2"}.fontawesome-beaker:before{content:"\f0c3"}.fontawesome-cut:before{content:"\f0c4"}.fontawesome-copy:before{content:"\f0c5"}.fontawesome-paper-clip:before{content:"\f0c6"}.fontawesome-save:before{content:"\f0c7"}.fontawesome-sign-blank:before{content:"\f0c8"}.fontawesome-reorder:before{content:"\f0c9"}.fontawesome-list-ul:before{content:"\f0ca"}.fontawesome-list-ol:before{content:"\f0cb"}.fontawesome-strikethrough:before{content:"\f0cc"}.fontawesome-underline:before{content:"\f0cd"}.fontawesome-table:before{content:"\f0ce"}.fontawesome-magic:before{content:"\f0d0"}.fontawesome-truck:before{content:"\f0d1"}.fontawesome-pinterest:before{content:"\f0d2"}.fontawesome-pinterest-sign:before{content:"\f0d3"}.fontawesome-google-plus-sign:before{content:"\f0d4"}.fontawesome-google-plus:before{content:"\f0d5"}.fontawesome-money:before{content:"\f0d6"}.fontawesome-caret-down:before{content:"\f0d7"}.fontawesome-caret-up:before{content:"\f0d8"}.fontawesome-caret-left:before{content:"\f0d9"}.fontawesome-caret-right:before{content:"\f0da"}.fontawesome-columns:before{content:"\f0db"}.fontawesome-sort:before{content:"\f0dc"}.fontawesome-sort-down:before{content:"\f0dd"}.fontawesome-sort-up:before{content:"\f0de"}.fontawesome-envelope-alt:before{content:"\f0e0"}.fontawesome-linkedin:before{content:"\f0e1"}.fontawesome-undo:before{content:"\f0e2"}.fontawesome-legal:before{content:"\f0e3"}.fontawesome-dashboard:before{content:"\f0e4"}.fontawesome-comment-alt:before{content:"\f0e5"}.fontawesome-comments-alt:before{content:"\f0e6"}.fontawesome-bolt:before{content:"\f0e7"}.fontawesome-sitemap:before{content:"\f0e8"}.fontawesome-umbrella:before{content:"\f0e9"}.fontawesome-paste:before{content:"\f0ea"}.fontawesome-lightbulb:before{content:"\f0eb"}.fontawesome-exchange:before{content:"\f0ec"}.fontawesome-cloud-download:before{content:"\f0ed"}.fontawesome-cloud-upload:before{content:"\f0ee"}.fontawesome-user-md:before{content:"\f0f0"}.fontawesome-stethoscope:before{content:"\f0f1"}.fontawesome-suitcase:before{content:"\f0f2"}.fontawesome-bell-alt:before{content:"\f0f3"}.fontawesome-coffee:before{content:"\f0f4"}.fontawesome-food:before{content:"\f0f5"}.fontawesome-file-alt:before{content:"\f0f6"}.fontawesome-building:before{content:"\f0f7"}.fontawesome-hospital:before{content:"\f0f8"}.fontawesome-ambulance:before{content:"\f0f9"}.fontawesome-medkit:before{content:"\f0fa"}.fontawesome-fighter-jet:before{content:"\f0fb"}.fontawesome-beer:before{content:"\f0fc"}.fontawesome-h-sign:before{content:"\f0fd"}.fontawesome-plus-sign-alt:before{content:"\f0fe"}.fontawesome-double-angle-left:before{content:"\f100"}.fontawesome-double-angle-right:before{content:"\f101"}.fontawesome-double-angle-up:before{content:"\f102"}.fontawesome-double-angle-down:before{content:"\f103"}.fontawesome-angle-left:before{content:"\f104"}.fontawesome-angle-right:before{content:"\f105"}.fontawesome-angle-up:before{content:"\f106"}.fontawesome-angle-down:before{content:"\f107"}.fontawesome-desktop:before{content:"\f108"}.fontawesome-laptop:before{content:"\f109"}.fontawesome-tablet:before{content:"\f10a"}.fontawesome-mobile-phone:before{content:"\f10b"}.fontawesome-circle-blank:before{content:"\f10c"}.fontawesome-quote-left:before{content:"\f10d"}.fontawesome-quote-right:before{content:"\f10e"}.fontawesome-spinner:before{content:"\f110"}.fontawesome-circle:before{content:"\f111"}.fontawesome-reply:before{content:"\f112"}.fontawesome-github-alt:before{content:"\f113"}.fontawesome-folder-close-alt:before{content:"\f114"}.fontawesome-folder-open-alt:before{content:"\f115"} \ No newline at end of file diff --git a/app/api/fonts/fontawesome/fontawesome-webfont.eot b/app/api/fonts/fontawesome/fontawesome-webfont.eot new file mode 100755 index 0000000..7d81019 Binary files /dev/null and b/app/api/fonts/fontawesome/fontawesome-webfont.eot differ diff --git a/app/api/fonts/fontawesome/fontawesome-webfont.svg b/app/api/fonts/fontawesome/fontawesome-webfont.svg new file mode 100755 index 0000000..ba0afe5 --- /dev/null +++ b/app/api/fonts/fontawesome/fontawesome-webfont.svg @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/api/fonts/fontawesome/fontawesome-webfont.ttf b/app/api/fonts/fontawesome/fontawesome-webfont.ttf new file mode 100755 index 0000000..d461724 Binary files /dev/null and b/app/api/fonts/fontawesome/fontawesome-webfont.ttf differ diff --git a/app/api/fonts/fontawesome/fontawesome-webfont.woff b/app/api/fonts/fontawesome/fontawesome-webfont.woff new file mode 100755 index 0000000..3c89ae0 Binary files /dev/null and b/app/api/fonts/fontawesome/fontawesome-webfont.woff differ diff --git a/app/api/fonts/fontawesome/fontawesome.css b/app/api/fonts/fontawesome/fontawesome.css new file mode 100755 index 0000000..1f26d29 --- /dev/null +++ b/app/api/fonts/fontawesome/fontawesome.css @@ -0,0 +1,289 @@ +/* + * Font Awesome 3.0.1 + * the iconic font designed for use with Twitter Bootstrap + * ------------------------------------------------------- + * The full suite of pictographic icons, examples, and documentation + * can be found at: http://fortawesome.github.com/Font-Awesome/ + * + * License + * ------------------------------------------------------- + * - The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL + * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - + * http://opensource.org/licenses/mit-license.html + * - The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ + * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: + * "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" + + * Contact + * ------------------------------------------------------- + * Email: dave@davegandy.com + * Twitter: http://twitter.com/fortaweso_me + * Work: Lead Product Designer @ http://kyruus.com + */ +.fontawesome-glass:before { content: "\f000"; } +.fontawesome-music:before { content: "\f001"; } +.fontawesome-search:before { content: "\f002"; } +.fontawesome-envelope:before { content: "\f003"; } +.fontawesome-heart:before { content: "\f004"; } +.fontawesome-star:before { content: "\f005"; } +.fontawesome-star-empty:before { content: "\f006"; } +.fontawesome-user:before { content: "\f007"; } +.fontawesome-film:before { content: "\f008"; } +.fontawesome-th-large:before { content: "\f009"; } +.fontawesome-th:before { content: "\f00a"; } +.fontawesome-th-list:before { content: "\f00b"; } +.fontawesome-ok:before { content: "\f00c"; } +.fontawesome-remove:before { content: "\f00d"; } +.fontawesome-zoom-in:before { content: "\f00e"; } + +.fontawesome-zoom-out:before { content: "\f010"; } +.fontawesome-off:before { content: "\f011"; } +.fontawesome-signal:before { content: "\f012"; } +.fontawesome-cog:before { content: "\f013"; } +.fontawesome-trash:before { content: "\f014"; } +.fontawesome-home:before { content: "\f015"; } +.fontawesome-file:before { content: "\f016"; } +.fontawesome-time:before { content: "\f017"; } +.fontawesome-road:before { content: "\f018"; } +.fontawesome-download-alt:before { content: "\f019"; } +.fontawesome-download:before { content: "\f01a"; } +.fontawesome-upload:before { content: "\f01b"; } +.fontawesome-inbox:before { content: "\f01c"; } +.fontawesome-play-circle:before { content: "\f01d"; } +.fontawesome-repeat:before { content: "\f01e"; } + +/* \f020 doesn't work in Safari. all shifted one down */ +.fontawesome-refresh:before { content: "\f021"; } +.fontawesome-list-alt:before { content: "\f022"; } +.fontawesome-lock:before { content: "\f023"; } +.fontawesome-flag:before { content: "\f024"; } +.fontawesome-headphones:before { content: "\f025"; } +.fontawesome-volume-off:before { content: "\f026"; } +.fontawesome-volume-down:before { content: "\f027"; } +.fontawesome-volume-up:before { content: "\f028"; } +.fontawesome-qrcode:before { content: "\f029"; } +.fontawesome-barcode:before { content: "\f02a"; } +.fontawesome-tag:before { content: "\f02b"; } +.fontawesome-tags:before { content: "\f02c"; } +.fontawesome-book:before { content: "\f02d"; } +.fontawesome-bookmark:before { content: "\f02e"; } +.fontawesome-print:before { content: "\f02f"; } + +.fontawesome-camera:before { content: "\f030"; } +.fontawesome-font:before { content: "\f031"; } +.fontawesome-bold:before { content: "\f032"; } +.fontawesome-italic:before { content: "\f033"; } +.fontawesome-text-height:before { content: "\f034"; } +.fontawesome-text-width:before { content: "\f035"; } +.fontawesome-align-left:before { content: "\f036"; } +.fontawesome-align-center:before { content: "\f037"; } +.fontawesome-align-right:before { content: "\f038"; } +.fontawesome-align-justify:before { content: "\f039"; } +.fontawesome-list:before { content: "\f03a"; } +.fontawesome-indent-left:before { content: "\f03b"; } +.fontawesome-indent-right:before { content: "\f03c"; } +.fontawesome-facetime-video:before { content: "\f03d"; } +.fontawesome-picture:before { content: "\f03e"; } + +.fontawesome-pencil:before { content: "\f040"; } +.fontawesome-map-marker:before { content: "\f041"; } +.fontawesome-adjust:before { content: "\f042"; } +.fontawesome-tint:before { content: "\f043"; } +.fontawesome-edit:before { content: "\f044"; } +.fontawesome-share:before { content: "\f045"; } +.fontawesome-check:before { content: "\f046"; } +.fontawesome-move:before { content: "\f047"; } +.fontawesome-step-backward:before { content: "\f048"; } +.fontawesome-fast-backward:before { content: "\f049"; } +.fontawesome-backward:before { content: "\f04a"; } +.fontawesome-play:before { content: "\f04b"; } +.fontawesome-pause:before { content: "\f04c"; } +.fontawesome-stop:before { content: "\f04d"; } +.fontawesome-forward:before { content: "\f04e"; } + +.fontawesome-fast-forward:before { content: "\f050"; } +.fontawesome-step-forward:before { content: "\f051"; } +.fontawesome-eject:before { content: "\f052"; } +.fontawesome-chevron-left:before { content: "\f053"; } +.fontawesome-chevron-right:before { content: "\f054"; } +.fontawesome-plus-sign:before { content: "\f055"; } +.fontawesome-minus-sign:before { content: "\f056"; } +.fontawesome-remove-sign:before { content: "\f057"; } +.fontawesome-ok-sign:before { content: "\f058"; } +.fontawesome-question-sign:before { content: "\f059"; } +.fontawesome-info-sign:before { content: "\f05a"; } +.fontawesome-screenshot:before { content: "\f05b"; } +.fontawesome-remove-circle:before { content: "\f05c"; } +.fontawesome-ok-circle:before { content: "\f05d"; } +.fontawesome-ban-circle:before { content: "\f05e"; } + +.fontawesome-arrow-left:before { content: "\f060"; } +.fontawesome-arrow-right:before { content: "\f061"; } +.fontawesome-arrow-up:before { content: "\f062"; } +.fontawesome-arrow-down:before { content: "\f063"; } +.fontawesome-share-alt:before { content: "\f064"; } +.fontawesome-resize-full:before { content: "\f065"; } +.fontawesome-resize-small:before { content: "\f066"; } +.fontawesome-plus:before { content: "\f067"; } +.fontawesome-minus:before { content: "\f068"; } +.fontawesome-asterisk:before { content: "\f069"; } +.fontawesome-exclamation-sign:before { content: "\f06a"; } +.fontawesome-gift:before { content: "\f06b"; } +.fontawesome-leaf:before { content: "\f06c"; } +.fontawesome-fire:before { content: "\f06d"; } +.fontawesome-eye-open:before { content: "\f06e"; } + +.fontawesome-eye-close:before { content: "\f070"; } +.fontawesome-warning-sign:before { content: "\f071"; } +.fontawesome-plane:before { content: "\f072"; } +.fontawesome-calendar:before { content: "\f073"; } +.fontawesome-random:before { content: "\f074"; } +.fontawesome-comment:before { content: "\f075"; } +.fontawesome-magnet:before { content: "\f076"; } +.fontawesome-chevron-up:before { content: "\f077"; } +.fontawesome-chevron-down:before { content: "\f078"; } +.fontawesome-retweet:before { content: "\f079"; } +.fontawesome-shopping-cart:before { content: "\f07a"; } +.fontawesome-folder-close:before { content: "\f07b"; } +.fontawesome-folder-open:before { content: "\f07c"; } +.fontawesome-resize-vertical:before { content: "\f07d"; } +.fontawesome-resize-horizontal:before { content: "\f07e"; } + +.fontawesome-bar-chart:before { content: "\f080"; } +.fontawesome-twitter-sign:before { content: "\f081"; } +.fontawesome-facebook-sign:before { content: "\f082"; } +.fontawesome-camera-retro:before { content: "\f083"; } +.fontawesome-key:before { content: "\f084"; } +.fontawesome-cogs:before { content: "\f085"; } +.fontawesome-comments:before { content: "\f086"; } +.fontawesome-thumbs-up:before { content: "\f087"; } +.fontawesome-thumbs-down:before { content: "\f088"; } +.fontawesome-star-half:before { content: "\f089"; } +.fontawesome-heart-empty:before { content: "\f08a"; } +.fontawesome-signout:before { content: "\f08b"; } +.fontawesome-linkedin-sign:before { content: "\f08c"; } +.fontawesome-pushpin:before { content: "\f08d"; } +.fontawesome-external-link:before { content: "\f08e"; } + +.fontawesome-signin:before { content: "\f090"; } +.fontawesome-trophy:before { content: "\f091"; } +.fontawesome-github-sign:before { content: "\f092"; } +.fontawesome-upload-alt:before { content: "\f093"; } +.fontawesome-lemon:before { content: "\f094"; } +.fontawesome-phone:before { content: "\f095"; } +.fontawesome-check-empty:before { content: "\f096"; } +.fontawesome-bookmark-empty:before { content: "\f097"; } +.fontawesome-phone-sign:before { content: "\f098"; } +.fontawesome-twitter:before { content: "\f099"; } +.fontawesome-facebook:before { content: "\f09a"; } +.fontawesome-github:before { content: "\f09b"; } +.fontawesome-unlock:before { content: "\f09c"; } +.fontawesome-credit-card:before { content: "\f09d"; } +.fontawesome-rss:before { content: "\f09e"; } + +.fontawesome-hdd:before { content: "\f0a0"; } +.fontawesome-bullhorn:before { content: "\f0a1"; } +.fontawesome-bell:before { content: "\f0a2"; } +.fontawesome-certificate:before { content: "\f0a3"; } +.fontawesome-hand-right:before { content: "\f0a4"; } +.fontawesome-hand-left:before { content: "\f0a5"; } +.fontawesome-hand-up:before { content: "\f0a6"; } +.fontawesome-hand-down:before { content: "\f0a7"; } +.fontawesome-circle-arrow-left:before { content: "\f0a8"; } +.fontawesome-circle-arrow-right:before { content: "\f0a9"; } +.fontawesome-circle-arrow-up:before { content: "\f0aa"; } +.fontawesome-circle-arrow-down:before { content: "\f0ab"; } +.fontawesome-globe:before { content: "\f0ac"; } +.fontawesome-wrench:before { content: "\f0ad"; } +.fontawesome-tasks:before { content: "\f0ae"; } + +.fontawesome-filter:before { content: "\f0b0"; } +.fontawesome-briefcase:before { content: "\f0b1"; } +.fontawesome-fullscreen:before { content: "\f0b2"; } + +.fontawesome-group:before { content: "\f0c0"; } +.fontawesome-link:before { content: "\f0c1"; } +.fontawesome-cloud:before { content: "\f0c2"; } +.fontawesome-beaker:before { content: "\f0c3"; } +.fontawesome-cut:before { content: "\f0c4"; } +.fontawesome-copy:before { content: "\f0c5"; } +.fontawesome-paper-clip:before { content: "\f0c6"; } +.fontawesome-save:before { content: "\f0c7"; } +.fontawesome-sign-blank:before { content: "\f0c8"; } +.fontawesome-reorder:before { content: "\f0c9"; } +.fontawesome-list-ul:before { content: "\f0ca"; } +.fontawesome-list-ol:before { content: "\f0cb"; } +.fontawesome-strikethrough:before { content: "\f0cc"; } +.fontawesome-underline:before { content: "\f0cd"; } +.fontawesome-table:before { content: "\f0ce"; } + +.fontawesome-magic:before { content: "\f0d0"; } +.fontawesome-truck:before { content: "\f0d1"; } +.fontawesome-pinterest:before { content: "\f0d2"; } +.fontawesome-pinterest-sign:before { content: "\f0d3"; } +.fontawesome-google-plus-sign:before { content: "\f0d4"; } +.fontawesome-google-plus:before { content: "\f0d5"; } +.fontawesome-money:before { content: "\f0d6"; } +.fontawesome-caret-down:before { content: "\f0d7"; } +.fontawesome-caret-up:before { content: "\f0d8"; } +.fontawesome-caret-left:before { content: "\f0d9"; } +.fontawesome-caret-right:before { content: "\f0da"; } +.fontawesome-columns:before { content: "\f0db"; } +.fontawesome-sort:before { content: "\f0dc"; } +.fontawesome-sort-down:before { content: "\f0dd"; } +.fontawesome-sort-up:before { content: "\f0de"; } + +.fontawesome-envelope-alt:before { content: "\f0e0"; } +.fontawesome-linkedin:before { content: "\f0e1"; } +.fontawesome-undo:before { content: "\f0e2"; } +.fontawesome-legal:before { content: "\f0e3"; } +.fontawesome-dashboard:before { content: "\f0e4"; } +.fontawesome-comment-alt:before { content: "\f0e5"; } +.fontawesome-comments-alt:before { content: "\f0e6"; } +.fontawesome-bolt:before { content: "\f0e7"; } +.fontawesome-sitemap:before { content: "\f0e8"; } +.fontawesome-umbrella:before { content: "\f0e9"; } +.fontawesome-paste:before { content: "\f0ea"; } +.fontawesome-lightbulb:before { content: "\f0eb"; } +.fontawesome-exchange:before { content: "\f0ec"; } +.fontawesome-cloud-download:before { content: "\f0ed"; } +.fontawesome-cloud-upload:before { content: "\f0ee"; } + +.fontawesome-user-md:before { content: "\f0f0"; } +.fontawesome-stethoscope:before { content: "\f0f1"; } +.fontawesome-suitcase:before { content: "\f0f2"; } +.fontawesome-bell-alt:before { content: "\f0f3"; } +.fontawesome-coffee:before { content: "\f0f4"; } +.fontawesome-food:before { content: "\f0f5"; } +.fontawesome-file-alt:before { content: "\f0f6"; } +.fontawesome-building:before { content: "\f0f7"; } +.fontawesome-hospital:before { content: "\f0f8"; } +.fontawesome-ambulance:before { content: "\f0f9"; } +.fontawesome-medkit:before { content: "\f0fa"; } +.fontawesome-fighter-jet:before { content: "\f0fb"; } +.fontawesome-beer:before { content: "\f0fc"; } +.fontawesome-h-sign:before { content: "\f0fd"; } +.fontawesome-plus-sign-alt:before { content: "\f0fe"; } + +.fontawesome-double-angle-left:before { content: "\f100"; } +.fontawesome-double-angle-right:before { content: "\f101"; } +.fontawesome-double-angle-up:before { content: "\f102"; } +.fontawesome-double-angle-down:before { content: "\f103"; } +.fontawesome-angle-left:before { content: "\f104"; } +.fontawesome-angle-right:before { content: "\f105"; } +.fontawesome-angle-up:before { content: "\f106"; } +.fontawesome-angle-down:before { content: "\f107"; } +.fontawesome-desktop:before { content: "\f108"; } +.fontawesome-laptop:before { content: "\f109"; } +.fontawesome-tablet:before { content: "\f10a"; } +.fontawesome-mobile-phone:before { content: "\f10b"; } +.fontawesome-circle-blank:before { content: "\f10c"; } +.fontawesome-quote-left:before { content: "\f10d"; } +.fontawesome-quote-right:before { content: "\f10e"; } + +.fontawesome-spinner:before { content: "\f110"; } +.fontawesome-circle:before { content: "\f111"; } +.fontawesome-reply:before { content: "\f112"; } +.fontawesome-github-alt:before { content: "\f113"; } +.fontawesome-folder-close-alt:before { content: "\f114"; } +.fontawesome-folder-open-alt:before { content: "\f115"; } \ No newline at end of file diff --git a/app/api/fonts/fontelico/fontelico-extract.json b/app/api/fonts/fontelico/fontelico-extract.json new file mode 100755 index 0000000..25961bf --- /dev/null +++ b/app/api/fonts/fontelico/fontelico-extract.json @@ -0,0 +1,32 @@ +{ + "fontelico-emo-happy":"\\e800", + "fontelico-emo-wink":"\\e801", + "fontelico-emo-wink2":"\\e813", + "fontelico-emo-unhappy":"\\e802", + "fontelico-emo-sleep":"\\e803", + "fontelico-emo-thumbsup":"\\e804", + "fontelico-emo-devil":"\\e805", + "fontelico-emo-surprised":"\\e806", + "fontelico-emo-tongue":"\\e807", + "fontelico-emo-coffee":"\\e808", + "fontelico-emo-sunglasses":"\\e809", + "fontelico-emo-displeased":"\\e80a", + "fontelico-emo-beer":"\\e80b", + "fontelico-emo-grin":"\\e80c", + "fontelico-emo-angry":"\\e80d", + "fontelico-emo-saint":"\\e80e", + "fontelico-emo-cry":"\\e80f", + "fontelico-emo-shoot":"\\e810", + "fontelico-emo-squint":"\\e811", + "fontelico-emo-laugh":"\\e812", + "fontelico-spin1":"\\e830", + "fontelico-spin2":"\\e831", + "fontelico-spin3":"\\e832", + "fontelico-spin4":"\\e834", + "fontelico-spin5":"\\e838", + "fontelico-spin6":"\\e839", + "fontelico-firefox":"\\e840", + "fontelico-chrome":"\\e841", + "fontelico-opera":"\\e842", + "fontelico-ie":"\\e843" +} \ No newline at end of file diff --git a/app/api/fonts/fontelico/fontelico-min.css b/app/api/fonts/fontelico/fontelico-min.css new file mode 100755 index 0000000..322e9b7 --- /dev/null +++ b/app/api/fonts/fontelico/fontelico-min.css @@ -0,0 +1 @@ +.fontelico-emo-happy:before{content:'\e800'}.fontelico-emo-wink:before{content:'\e801'}.fontelico-emo-wink2:before{content:'\e813'}.fontelico-emo-unhappy:before{content:'\e802'}.fontelico-emo-sleep:before{content:'\e803'}.fontelico-emo-thumbsup:before{content:'\e804'}.fontelico-emo-devil:before{content:'\e805'}.fontelico-emo-surprised:before{content:'\e806'}.fontelico-emo-tongue:before{content:'\e807'}.fontelico-emo-coffee:before{content:'\e808'}.fontelico-emo-sunglasses:before{content:'\e809'}.fontelico-emo-displeased:before{content:'\e80a'}.fontelico-emo-beer:before{content:'\e80b'}.fontelico-emo-grin:before{content:'\e80c'}.fontelico-emo-angry:before{content:'\e80d'}.fontelico-emo-saint:before{content:'\e80e'}.fontelico-emo-cry:before{content:'\e80f'}.fontelico-emo-shoot:before{content:'\e810'}.fontelico-emo-squint:before{content:'\e811'}.fontelico-emo-laugh:before{content:'\e812'}.fontelico-spin1:before{content:'\e830'}.fontelico-spin2:before{content:'\e831'}.fontelico-spin3:before{content:'\e832'}.fontelico-spin4:before{content:'\e834'}.fontelico-spin5:before{content:'\e838'}.fontelico-spin6:before{content:'\e839'}.fontelico-firefox:before{content:'\e840'}.fontelico-chrome:before{content:'\e841'}.fontelico-opera:before{content:'\e842'}.fontelico-ie:before{content:'\e843'} \ No newline at end of file diff --git a/app/api/fonts/fontelico/fontelico.css b/app/api/fonts/fontelico/fontelico.css new file mode 100755 index 0000000..15fedb1 --- /dev/null +++ b/app/api/fonts/fontelico/fontelico.css @@ -0,0 +1,38 @@ +/* + Fontelico + + Just emoticons, loader and browser icons are part of this collection by Fontello. + https://github.com/fontello/fontelico.font + + Licence: http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL +*/ +.fontelico-emo-happy:before { content: '\e800'; } +.fontelico-emo-wink:before { content: '\e801'; } +.fontelico-emo-wink2:before { content: '\e813'; } +.fontelico-emo-unhappy:before { content: '\e802'; } +.fontelico-emo-sleep:before { content: '\e803'; } +.fontelico-emo-thumbsup:before { content: '\e804'; } +.fontelico-emo-devil:before { content: '\e805'; } +.fontelico-emo-surprised:before { content: '\e806'; } +.fontelico-emo-tongue:before { content: '\e807'; } +.fontelico-emo-coffee:before { content: '\e808'; } +.fontelico-emo-sunglasses:before { content: '\e809'; } +.fontelico-emo-displeased:before { content: '\e80a'; } +.fontelico-emo-beer:before { content: '\e80b'; } +.fontelico-emo-grin:before { content: '\e80c'; } +.fontelico-emo-angry:before { content: '\e80d'; } +.fontelico-emo-saint:before { content: '\e80e'; } +.fontelico-emo-cry:before { content: '\e80f'; } +.fontelico-emo-shoot:before { content: '\e810'; } +.fontelico-emo-squint:before { content: '\e811'; } +.fontelico-emo-laugh:before { content: '\e812'; } +.fontelico-spin1:before { content: '\e830'; } +.fontelico-spin2:before { content: '\e831'; } +.fontelico-spin3:before { content: '\e832'; } +.fontelico-spin4:before { content: '\e834'; } +.fontelico-spin5:before { content: '\e838'; } +.fontelico-spin6:before { content: '\e839'; } +.fontelico-firefox:before { content: '\e840'; } +.fontelico-chrome:before { content: '\e841'; } +.fontelico-opera:before { content: '\e842'; } +.fontelico-ie:before { content: '\e843'; } \ No newline at end of file diff --git a/app/api/fonts/fontelico/fontelico.eot b/app/api/fonts/fontelico/fontelico.eot new file mode 100755 index 0000000..b713c69 Binary files /dev/null and b/app/api/fonts/fontelico/fontelico.eot differ diff --git a/app/api/fonts/fontelico/fontelico.svg b/app/api/fonts/fontelico/fontelico.svg new file mode 100755 index 0000000..595eebc --- /dev/null +++ b/app/api/fonts/fontelico/fontelico.svg @@ -0,0 +1,146 @@ + + + + +Created by FontForge 20110222 at Wed Nov 21 15:58:00 2012 + By Vitaly,,, +Copyright (C) 2012 by Fontello project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/api/fonts/fontelico/fontelico.ttf b/app/api/fonts/fontelico/fontelico.ttf new file mode 100755 index 0000000..57c642e Binary files /dev/null and b/app/api/fonts/fontelico/fontelico.ttf differ diff --git a/app/api/fonts/fontelico/fontelico.woff b/app/api/fonts/fontelico/fontelico.woff new file mode 100755 index 0000000..8c7a77e Binary files /dev/null and b/app/api/fonts/fontelico/fontelico.woff differ diff --git a/app/api/fonts/iconicfill/iconic_fill.eot b/app/api/fonts/iconicfill/iconic_fill.eot new file mode 100755 index 0000000..4dd865f Binary files /dev/null and b/app/api/fonts/iconicfill/iconic_fill.eot differ diff --git a/app/api/fonts/iconicfill/iconic_fill.svg b/app/api/fonts/iconicfill/iconic_fill.svg new file mode 100755 index 0000000..1a4f29f --- /dev/null +++ b/app/api/fonts/iconicfill/iconic_fill.svg @@ -0,0 +1,539 @@ + + + + +Created by FontForge 20110222 at Tue Sep 18 01:22:17 2012 + By PJ Onori,,, +Icons by PJ Onori, font creation script by Yann + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/api/fonts/iconicfill/iconic_fill.ttf b/app/api/fonts/iconicfill/iconic_fill.ttf new file mode 100755 index 0000000..aa98a0f Binary files /dev/null and b/app/api/fonts/iconicfill/iconic_fill.ttf differ diff --git a/app/api/fonts/iconicfill/iconic_fill.woff b/app/api/fonts/iconicfill/iconic_fill.woff new file mode 100755 index 0000000..c0cdb56 Binary files /dev/null and b/app/api/fonts/iconicfill/iconic_fill.woff differ diff --git a/app/api/fonts/iconicfill/iconicfill-min.css b/app/api/fonts/iconicfill/iconicfill-min.css new file mode 100755 index 0000000..3800235 --- /dev/null +++ b/app/api/fonts/iconicfill/iconicfill-min.css @@ -0,0 +1 @@ +.iconic-lightbulb:before{content:'\e063'}.iconic-equalizer:before{content:'\e052'}.iconic-brush-alt:before{content:'\e01c'}.iconic-move:before{content:'\e03e'}.iconic-tag-fill:before{content:'\e02b'}.iconic-book-alt2:before{content:'\e06a'}.iconic-layers:before{content:'\e01f'}.iconic-chat-alt-fill:before{content:'\e007'}.iconic-layers-alt:before{content:'\e020'}.iconic-cloud-upload:before{content:'\e045'}.iconic-chart-alt:before{content:'\e029'}.iconic-fullscreen-exit-alt:before{content:'\e051'}.iconic-cloud-download:before{content:'\e044'}.iconic-paperclip:before{content:'\e08a'}.iconic-heart-fill:before{content:'\2764'}.iconic-mail:before{content:'\2709'}.iconic-pen-alt-fill:before{content:'\e005'}.iconic-check-alt:before{content:'\2714'}.iconic-battery-charging:before{content:'\e05d'}.iconic-lock-fill:before{content:'\e075'}.iconic-stop:before{content:'\e04a'}.iconic-arrow-up:before{content:'\2191'}.iconic-move-horizontal:before{content:'\e038'}.iconic-compass:before{content:'\e021'}.iconic-minus-alt:before{content:'\e009'}.iconic-battery-empty:before{content:'\e05c'}.iconic-comment-fill:before{content:'\e06d'}.iconic-map-pin-alt:before{content:'\e002'}.iconic-question-mark:before{content:'\003f'}.iconic-list:before{content:'\e055'}.iconic-upload:before{content:'\e043'}.iconic-reload:before{content:'\e030'}.iconic-loop-alt4:before{content:'\e035'}.iconic-loop-alt3:before{content:'\e034'}.iconic-loop-alt2:before{content:'\e033'}.iconic-loop-alt1:before{content:'\e032'}.iconic-left-quote:before{content:'\275d'}.iconic-x:before{content:'\2717'}.iconic-last:before{content:'\e04d'}.iconic-bars:before{content:'\e06f'}.iconic-arrow-left:before{content:'\2190'}.iconic-arrow-down:before{content:'\2193'}.iconic-download:before{content:'\e042'}.iconic-home:before{content:'\2302'}.iconic-calendar:before{content:'\e001'}.iconic-right-quote-alt:before{content:'\e012'}.iconic-unlock-fill:before{content:'\e076'}.iconic-fullscreen:before{content:'\e04e'}.iconic-dial:before{content:'\e058'}.iconic-plus-alt:before{content:'\e008'}.iconic-clock:before{content:'\e079'}.iconic-movie:before{content:'\e060'}.iconic-steering-wheel:before{content:'\e024'}.iconic-pen:before{content:'\270e'}.iconic-pin:before{content:'\e067'}.iconic-denied:before{content:'\26d4'}.iconic-left-quote-alt:before{content:'\e011'}.iconic-volume-mute:before{content:'\e071'}.iconic-umbrella:before{content:'\2602'}.iconic-list-nested:before{content:'\e056'}.iconic-arrow-up-alt1:before{content:'\e014'}.iconic-undo:before{content:'\e02f'}.iconic-pause:before{content:'\e049'}.iconic-bolt:before{content:'\26a1'}.iconic-article:before{content:'\e053'}.iconic-read-more:before{content:'\e054'}.iconic-beaker:before{content:'\e023'}.iconic-beaker-alt:before{content:'\e010'}.iconic-battery-full:before{content:'\e073'}.iconic-arrow-right:before{content:'\2192'}.iconic-iphone:before{content:'\e06e'}.iconic-arrow-up-alt2:before{content:'\e018'}.iconic-cog:before{content:'\2699'}.iconic-award-fill:before{content:'\e022'}.iconic-first:before{content:'\e04c'}.iconic-trash-fill:before{content:'\e05a'}.iconic-image:before{content:'\e027'}.iconic-comment-alt1-fill:before{content:'\e003'}.iconic-cd:before{content:'\e064'}.iconic-right-quote:before{content:'\275e'}.iconic-brush:before{content:'\e01b'}.iconic-cloud:before{content:'\2601'}.iconic-eye:before{content:'\e025'}.iconic-play-alt:before{content:'\e048'}.iconic-transfer:before{content:'\e041'}.iconic-pen-alt2:before{content:'\e006'}.iconic-camera:before{content:'\e070'}.iconic-move-horizontal-alt2:before{content:'\e03a'}.iconic-curved-arrow:before{content:'\2935'}.iconic-move-horizontal-alt1:before{content:'\e039'}.iconic-aperture:before{content:'\e026'}.iconic-reload-alt:before{content:'\e031'}.iconic-magnifying-glass:before{content:'\e074'}.iconic-calendar-alt-fill:before{content:'\e06c'}.iconic-fork:before{content:'\e046'}.iconic-box:before{content:'\e06b'}.iconic-map-pin-fill:before{content:'\e068'}.iconic-bars-alt:before{content:'\e00a'}.iconic-volume:before{content:'\e072'}.iconic-x-alt:before{content:'\2718'}.iconic-link:before{content:'\e077'}.iconic-move-vertical:before{content:'\e03b'}.iconic-eyedropper:before{content:'\e01e'}.iconic-spin:before{content:'\e036'}.iconic-rss:before{content:'\e02c'}.iconic-info:before{content:'\2139'}.iconic-target:before{content:'\e02a'}.iconic-cursor:before{content:'\e057'}.iconic-key-fill:before{content:'\26bf'}.iconic-minus:before{content:'\2796'}.iconic-book-alt:before{content:'\e00b'}.iconic-headphones:before{content:'\e061'}.iconic-hash:before{content:'\0023'}.iconic-arrow-left-alt1:before{content:'\e013'}.iconic-arrow-left-alt2:before{content:'\e017'}.iconic-fullscreen-exit:before{content:'\e050'}.iconic-share:before{content:'\e02e'}.iconic-fullscreen-alt:before{content:'\e04f'}.iconic-comment-alt2-fill:before{content:'\e004'}.iconic-moon-fill:before{content:'\263e'}.iconic-at:before{content:'\0040'}.iconic-chat:before{content:'\e05e'}.iconic-move-vertical-alt2:before{content:'\e03d'}.iconic-move-vertical-alt1:before{content:'\e03c'}.iconic-check:before{content:'\2713'}.iconic-mic:before{content:'\e05f'}.iconic-book:before{content:'\e069'}.iconic-move-alt1:before{content:'\e03f'}.iconic-move-alt2:before{content:'\e040'}.iconic-document-fill:before{content:'\e066'}.iconic-plus:before{content:'\2795'}.iconic-wrench:before{content:'\e078'}.iconic-play:before{content:'\e047'}.iconic-star:before{content:'\2605'}.iconic-document-alt-fill:before{content:'\e000'}.iconic-chart:before{content:'\e028'}.iconic-rain:before{content:'\26c6'}.iconic-folder-fill:before{content:'\e065'}.iconic-new-window:before{content:'\e059'}.iconic-user:before{content:'\e062'}.iconic-battery-half:before{content:'\e05b'}.iconic-aperture-alt:before{content:'\e00c'}.iconic-eject:before{content:'\e04b'}.iconic-arrow-down-alt1:before{content:'\e016'}.iconic-pilcrow:before{content:'\00b6'}.iconic-arrow-down-alt2:before{content:'\e01a'}.iconic-arrow-right-alt1:before{content:'\e015'}.iconic-arrow-right-alt2:before{content:'\e019'}.iconic-rss-alt:before{content:'\e02d'}.iconic-spin-alt:before{content:'\e037'}.iconic-sun-fill:before{content:'\2600'} \ No newline at end of file diff --git a/app/api/fonts/iconicfill/iconicfill.css b/app/api/fonts/iconicfill/iconicfill.css new file mode 100755 index 0000000..58355db --- /dev/null +++ b/app/api/fonts/iconicfill/iconicfill.css @@ -0,0 +1,160 @@ +/* + Iconic + + Iconic is an open source icon set in raster, vector and font formats + https://github.com/somerandomdude/Iconic + http://somerandomdude.com/work/iconic + + Licence: http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL +*/ +.iconic-lightbulb:before {content:'\e063';} +.iconic-equalizer:before {content:'\e052';} +.iconic-brush-alt:before {content:'\e01c';} +.iconic-move:before {content:'\e03e';} +.iconic-tag-fill:before {content:'\e02b';} +.iconic-book-alt2:before {content:'\e06a';} +.iconic-layers:before {content:'\e01f';} +.iconic-chat-alt-fill:before {content:'\e007';} +.iconic-layers-alt:before {content:'\e020';} +.iconic-cloud-upload:before {content:'\e045';} +.iconic-chart-alt:before {content:'\e029';} +.iconic-fullscreen-exit-alt:before {content:'\e051';} +.iconic-cloud-download:before {content:'\e044';} +.iconic-paperclip:before {content:'\e08a';} +.iconic-heart-fill:before {content:'\2764';} +.iconic-mail:before {content:'\2709';} +.iconic-pen-alt-fill:before {content:'\e005';} +.iconic-check-alt:before {content:'\2714';} +.iconic-battery-charging:before {content:'\e05d';} +.iconic-lock-fill:before {content:'\e075';} +.iconic-stop:before {content:'\e04a';} +.iconic-arrow-up:before {content:'\2191';} +.iconic-move-horizontal:before {content:'\e038';} +.iconic-compass:before {content:'\e021';} +.iconic-minus-alt:before {content:'\e009';} +.iconic-battery-empty:before {content:'\e05c';} +.iconic-comment-fill:before {content:'\e06d';} +.iconic-map-pin-alt:before {content:'\e002';} +.iconic-question-mark:before {content:'\003f';} +.iconic-list:before {content:'\e055';} +.iconic-upload:before {content:'\e043';} +.iconic-reload:before {content:'\e030';} +.iconic-loop-alt4:before {content:'\e035';} +.iconic-loop-alt3:before {content:'\e034';} +.iconic-loop-alt2:before {content:'\e033';} +.iconic-loop-alt1:before {content:'\e032';} +.iconic-left-quote:before {content:'\275d';} +.iconic-x:before {content:'\2717';} +.iconic-last:before {content:'\e04d';} +.iconic-bars:before {content:'\e06f';} +.iconic-arrow-left:before {content:'\2190';} +.iconic-arrow-down:before {content:'\2193';} +.iconic-download:before {content:'\e042';} +.iconic-home:before {content:'\2302';} +.iconic-calendar:before {content:'\e001';} +.iconic-right-quote-alt:before {content:'\e012';} +.iconic-unlock-fill:before {content:'\e076';} +.iconic-fullscreen:before {content:'\e04e';} +.iconic-dial:before {content:'\e058';} +.iconic-plus-alt:before {content:'\e008';} +.iconic-clock:before {content:'\e079';} +.iconic-movie:before {content:'\e060';} +.iconic-steering-wheel:before {content:'\e024';} +.iconic-pen:before {content:'\270e';} +.iconic-pin:before {content:'\e067';} +.iconic-denied:before {content:'\26d4';} +.iconic-left-quote-alt:before {content:'\e011';} +.iconic-volume-mute:before {content:'\e071';} +.iconic-umbrella:before {content:'\2602';} +.iconic-list-nested:before {content:'\e056';} +.iconic-arrow-up-alt1:before {content:'\e014';} +.iconic-undo:before {content:'\e02f';} +.iconic-pause:before {content:'\e049';} +.iconic-bolt:before {content:'\26a1';} +.iconic-article:before {content:'\e053';} +.iconic-read-more:before {content:'\e054';} +.iconic-beaker:before {content:'\e023';} +.iconic-beaker-alt:before {content:'\e010';} +.iconic-battery-full:before {content:'\e073';} +.iconic-arrow-right:before {content:'\2192';} +.iconic-iphone:before {content:'\e06e';} +.iconic-arrow-up-alt2:before {content:'\e018';} +.iconic-cog:before {content:'\2699';} +.iconic-award-fill:before {content:'\e022';} +.iconic-first:before {content:'\e04c';} +.iconic-trash-fill:before {content:'\e05a';} +.iconic-image:before {content:'\e027';} +.iconic-comment-alt1-fill:before {content:'\e003';} +.iconic-cd:before {content:'\e064';} +.iconic-right-quote:before {content:'\275e';} +.iconic-brush:before {content:'\e01b';} +.iconic-cloud:before {content:'\2601';} +.iconic-eye:before {content:'\e025';} +.iconic-play-alt:before {content:'\e048';} +.iconic-transfer:before {content:'\e041';} +.iconic-pen-alt2:before {content:'\e006';} +.iconic-camera:before {content:'\e070';} +.iconic-move-horizontal-alt2:before {content:'\e03a';} +.iconic-curved-arrow:before {content:'\2935';} +.iconic-move-horizontal-alt1:before {content:'\e039';} +.iconic-aperture:before {content:'\e026';} +.iconic-reload-alt:before {content:'\e031';} +.iconic-magnifying-glass:before {content:'\e074';} +.iconic-calendar-alt-fill:before {content:'\e06c';} +.iconic-fork:before {content:'\e046';} +.iconic-box:before {content:'\e06b';} +.iconic-map-pin-fill:before {content:'\e068';} +.iconic-bars-alt:before {content:'\e00a';} +.iconic-volume:before {content:'\e072';} +.iconic-x-alt:before {content:'\2718';} +.iconic-link:before {content:'\e077';} +.iconic-move-vertical:before {content:'\e03b';} +.iconic-eyedropper:before {content:'\e01e';} +.iconic-spin:before {content:'\e036';} +.iconic-rss:before {content:'\e02c';} +.iconic-info:before {content:'\2139';} +.iconic-target:before {content:'\e02a';} +.iconic-cursor:before {content:'\e057';} +.iconic-key-fill:before {content:'\26bf';} +.iconic-minus:before {content:'\2796';} +.iconic-book-alt:before {content:'\e00b';} +.iconic-headphones:before {content:'\e061';} +.iconic-hash:before {content:'\0023';} +.iconic-arrow-left-alt1:before {content:'\e013';} +.iconic-arrow-left-alt2:before {content:'\e017';} +.iconic-fullscreen-exit:before {content:'\e050';} +.iconic-share:before {content:'\e02e';} +.iconic-fullscreen-alt:before {content:'\e04f';} +.iconic-comment-alt2-fill:before {content:'\e004';} +.iconic-moon-fill:before {content:'\263e';} +.iconic-at:before {content:'\0040';} +.iconic-chat:before {content:'\e05e';} +.iconic-move-vertical-alt2:before {content:'\e03d';} +.iconic-move-vertical-alt1:before {content:'\e03c';} +.iconic-check:before {content:'\2713';} +.iconic-mic:before {content:'\e05f';} +.iconic-book:before {content:'\e069';} +.iconic-move-alt1:before {content:'\e03f';} +.iconic-move-alt2:before {content:'\e040';} +.iconic-document-fill:before {content:'\e066';} +.iconic-plus:before {content:'\2795';} +.iconic-wrench:before {content:'\e078';} +.iconic-play:before {content:'\e047';} +.iconic-star:before {content:'\2605';} +.iconic-document-alt-fill:before {content:'\e000';} +.iconic-chart:before {content:'\e028';} +.iconic-rain:before {content:'\26c6';} +.iconic-folder-fill:before {content:'\e065';} +.iconic-new-window:before {content:'\e059';} +.iconic-user:before {content:'\e062';} +.iconic-battery-half:before {content:'\e05b';} +.iconic-aperture-alt:before {content:'\e00c';} +.iconic-eject:before {content:'\e04b';} +.iconic-arrow-down-alt1:before {content:'\e016';} +.iconic-pilcrow:before {content:'\00b6';} +.iconic-arrow-down-alt2:before {content:'\e01a';} +.iconic-arrow-right-alt1:before {content:'\e015';} +.iconic-arrow-right-alt2:before {content:'\e019';} +.iconic-rss-alt:before {content:'\e02d';} +.iconic-spin-alt:before {content:'\e037';} +.iconic-sun-fill:before {content:'\2600';} \ No newline at end of file diff --git a/app/api/fonts/iconicstroke/iconic_stroke.eot b/app/api/fonts/iconicstroke/iconic_stroke.eot new file mode 100755 index 0000000..3a0ad69 Binary files /dev/null and b/app/api/fonts/iconicstroke/iconic_stroke.eot differ diff --git a/app/api/fonts/iconicstroke/iconic_stroke.svg b/app/api/fonts/iconicstroke/iconic_stroke.svg new file mode 100755 index 0000000..b5a39b1 --- /dev/null +++ b/app/api/fonts/iconicstroke/iconic_stroke.svg @@ -0,0 +1,553 @@ + + + + +Created by FontForge 20110222 at Tue Sep 18 01:22:26 2012 + By PJ Onori,,, +Icons by PJ Onori, font creation script by Yann + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/api/fonts/iconicstroke/iconic_stroke.ttf b/app/api/fonts/iconicstroke/iconic_stroke.ttf new file mode 100755 index 0000000..e8c6623 Binary files /dev/null and b/app/api/fonts/iconicstroke/iconic_stroke.ttf differ diff --git a/app/api/fonts/iconicstroke/iconic_stroke.woff b/app/api/fonts/iconicstroke/iconic_stroke.woff new file mode 100755 index 0000000..7b39362 Binary files /dev/null and b/app/api/fonts/iconicstroke/iconic_stroke.woff differ diff --git a/app/api/fonts/iconicstroke/iconicstroke-min.css b/app/api/fonts/iconicstroke/iconicstroke-min.css new file mode 100755 index 0000000..2fa2ca6 --- /dev/null +++ b/app/api/fonts/iconicstroke/iconicstroke-min.css @@ -0,0 +1 @@ +.iconic-lightbulb:before{content:'\e063'}.iconic-equalizer:before{content:'\e052'}.iconic-map-pin-stroke:before{content:'\e068'}.iconic-brush-alt:before{content:'\e01c'}.iconic-move:before{content:'\e03e'}.iconic-paperclip:before{content:'\e08a'}.iconic-pen-alt-stroke:before{content:'\e005'}.iconic-move-vertical:before{content:'\e03b'}.iconic-book-alt2:before{content:'\e06a'}.iconic-layers:before{content:'\e01f'}.iconic-pause:before{content:'\e049'}.iconic-layers-alt:before{content:'\e020'}.iconic-cloud-upload:before{content:'\e045'}.iconic-chart-alt:before{content:'\e029'}.iconic-fullscreen-exit-alt:before{content:'\e051'}.iconic-cloud-download:before{content:'\e044'}.iconic-comment-alt2-stroke:before{content:'\e004'}.iconic-mail:before{content:'\2709'}.iconic-check-alt:before{content:'\2718'}.iconic-document-stroke:before{content:'\e066'}.iconic-battery-charging:before{content:'\e05d'}.iconic-stop:before{content:'\e04a'}.iconic-arrow-up:before{content:'\2191'}.iconic-move-horizontal:before{content:'\e038'}.iconic-compass:before{content:'\e021'}.iconic-minus-alt:before{content:'\e009'}.iconic-battery-empty:before{content:'\e05c'}.iconic-map-pin-alt:before{content:'\e002'}.iconic-unlock-stroke:before{content:'\e076'}.iconic-lock-stroke:before{content:'\e075'}.iconic-question-mark:before{content:'\003f'}.iconic-list:before{content:'\e055'}.iconic-upload:before{content:'\e043'}.iconic-reload:before{content:'\e030'}.iconic-loop-alt4:before{content:'\e035'}.iconic-loop-alt3:before{content:'\e034'}.iconic-loop-alt2:before{content:'\e033'}.iconic-loop-alt1:before{content:'\e032'}.iconic-left-quote:before{content:'\275d'}.iconic-x:before{content:'\2713'}.iconic-last:before{content:'\e04d'}.iconic-document-alt-stroke:before{content:'\e000'}.iconic-bars:before{content:'\e06f'}.iconic-arrow-left:before{content:'\2190'}.iconic-arrow-down:before{content:'\2193'}.iconic-download:before{content:'\e042'}.iconic-home:before{content:'\2302'}.iconic-calendar:before{content:'\e001'}.iconic-right-quote-alt:before{content:'\e012'}.iconic-fullscreen:before{content:'\e04e'}.iconic-dial:before{content:'\e058'}.iconic-plus-alt:before{content:'\e008'}.iconic-clock:before{content:'\e079'}.iconic-movie:before{content:'\e060'}.iconic-steering-wheel:before{content:'\e024'}.iconic-pen:before{content:'\270e'}.iconic-tag-stroke:before{content:'\e02b'}.iconic-pin:before{content:'\e067'}.iconic-denied:before{content:'\26d4'}.iconic-left-quote-alt:before{content:'\e011'}.iconic-volume-mute:before{content:'\e071'}.iconic-arrow-up-alt2:before{content:'\e018'}.iconic-list-nested:before{content:'\e056'}.iconic-arrow-up-alt1:before{content:'\e014'}.iconic-comment-stroke:before{content:'\e06d'}.iconic-undo:before{content:'\e02f'}.iconic-umbrella:before{content:'\2602'}.iconic-bolt:before{content:'\26a1'}.iconic-article:before{content:'\e053'}.iconic-read-more:before{content:'\e054'}.iconic-beaker:before{content:'\e023'}.iconic-beaker-alt:before{content:'\e010'}.iconic-battery-full:before{content:'\e073'}.iconic-arrow-right:before{content:'\2192'}.iconic-new-window:before{content:'\e059'}.iconic-plus:before{content:'\2795'}.iconic-cog:before{content:'\2699'}.iconic-key-stroke:before{content:'\26bf'}.iconic-first:before{content:'\e04c'}.iconic-comment-alt1-stroke:before{content:'\e003'}.iconic-trash-stroke:before{content:'\e05a'}.iconic-image:before{content:'\e027'}.iconic-chat-alt-stroke:before{content:'\e007'}.iconic-cd:before{content:'\e064'}.iconic-right-quote:before{content:'\275e'}.iconic-brush:before{content:'\e01b'}.iconic-cloud:before{content:'\2601'}.iconic-eye:before{content:'\e025'}.iconic-play-alt:before{content:'\e048'}.iconic-transfer:before{content:'\e041'}.iconic-pen-alt2:before{content:'\e006'}.iconic-camera:before{content:'\e070'}.iconic-move-horizontal-alt2:before{content:'\e03a'}.iconic-curved-arrow:before{content:'\2935'}.iconic-move-horizontal-alt1:before{content:'\e039'}.iconic-aperture:before{content:'\e026'}.iconic-reload-alt:before{content:'\e031'}.iconic-magnifying-glass:before{content:'\e074'}.iconic-iphone:before{content:'\e06e'}.iconic-fork:before{content:'\e046'}.iconic-box:before{content:'\e06b'}.iconic-bars-alt:before{content:'\e00a'}.iconic-heart-stroke:before{content:'\2764'}.iconic-volume:before{content:'\e072'}.iconic-x-alt:before{content:'\2714'}.iconic-link:before{content:'\e077'}.iconic-moon-stroke:before{content:'\263e'}.iconic-eyedropper:before{content:'\e01e'}.iconic-spin:before{content:'\e036'}.iconic-rss:before{content:'\e02c'}.iconic-info:before{content:'\2139'}.iconic-target:before{content:'\e02a'}.iconic-cursor:before{content:'\e057'}.iconic-minus:before{content:'\2796'}.iconic-book-alt:before{content:'\e00b'}.iconic-headphones:before{content:'\e061'}.iconic-hash:before{content:'\0023'}.iconic-arrow-left-alt1:before{content:'\e013'}.iconic-arrow-left-alt2:before{content:'\e017'}.iconic-fullscreen-exit:before{content:'\e050'}.iconic-share:before{content:'\e02e'}.iconic-fullscreen-alt:before{content:'\e04f'}.iconic-at:before{content:'\0040'}.iconic-chat:before{content:'\e05e'}.iconic-move-vertical-alt2:before{content:'\e03d'}.iconic-move-vertical-alt1:before{content:'\e03c'}.iconic-check:before{content:'\2717'}.iconic-mic:before{content:'\e05f'}.iconic-calendar-alt-stroke:before{content:'\e06c'}.iconic-book:before{content:'\e069'}.iconic-move-alt1:before{content:'\e03f'}.iconic-move-alt2:before{content:'\e040'}.iconic-award-stroke:before{content:'\e022'}.iconic-wrench:before{content:'\e078'}.iconic-play:before{content:'\e047'}.iconic-star:before{content:'\2605'}.iconic-chart:before{content:'\e028'}.iconic-rain:before{content:'\26c6'}.iconic-folder-stroke:before{content:'\e065'}.iconic-sun-stroke:before{content:'\2600'}.iconic-user:before{content:'\e062'}.iconic-battery-half:before{content:'\e05b'}.iconic-aperture-alt:before{content:'\e00c'}.iconic-eject:before{content:'\e04b'}.iconic-arrow-down-alt1:before{content:'\e016'}.iconic-pilcrow:before{content:'\00b6'}.iconic-arrow-down-alt2:before{content:'\e01a'}.iconic-arrow-right-alt1:before{content:'\e015'}.iconic-arrow-right-alt2:before{content:'\e019'}.iconic-rss-alt:before{content:'\e02d'}.iconic-spin-alt:before{content:'\e037'} \ No newline at end of file diff --git a/app/api/fonts/iconicstroke/iconicstroke.css b/app/api/fonts/iconicstroke/iconicstroke.css new file mode 100755 index 0000000..22730e1 --- /dev/null +++ b/app/api/fonts/iconicstroke/iconicstroke.css @@ -0,0 +1,160 @@ +/* + Iconic + + Iconic is an open source icon set in raster, vector and font formats + https://github.com/somerandomdude/Iconic + http://somerandomdude.com/work/iconic + + Licence: http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL +*/ +.iconic-lightbulb:before {content:'\e063';} +.iconic-equalizer:before {content:'\e052';} +.iconic-map-pin-stroke:before {content:'\e068';} +.iconic-brush-alt:before {content:'\e01c';} +.iconic-move:before {content:'\e03e';} +.iconic-paperclip:before {content:'\e08a';} +.iconic-pen-alt-stroke:before {content:'\e005';} +.iconic-move-vertical:before {content:'\e03b';} +.iconic-book-alt2:before {content:'\e06a';} +.iconic-layers:before {content:'\e01f';} +.iconic-pause:before {content:'\e049';} +.iconic-layers-alt:before {content:'\e020';} +.iconic-cloud-upload:before {content:'\e045';} +.iconic-chart-alt:before {content:'\e029';} +.iconic-fullscreen-exit-alt:before {content:'\e051';} +.iconic-cloud-download:before {content:'\e044';} +.iconic-comment-alt2-stroke:before {content:'\e004';} +.iconic-mail:before {content:'\2709';} +.iconic-check-alt:before {content:'\2718';} +.iconic-document-stroke:before {content:'\e066';} +.iconic-battery-charging:before {content:'\e05d';} +.iconic-stop:before {content:'\e04a';} +.iconic-arrow-up:before {content:'\2191';} +.iconic-move-horizontal:before {content:'\e038';} +.iconic-compass:before {content:'\e021';} +.iconic-minus-alt:before {content:'\e009';} +.iconic-battery-empty:before {content:'\e05c';} +.iconic-map-pin-alt:before {content:'\e002';} +.iconic-unlock-stroke:before {content:'\e076';} +.iconic-lock-stroke:before {content:'\e075';} +.iconic-question-mark:before {content:'\003f';} +.iconic-list:before {content:'\e055';} +.iconic-upload:before {content:'\e043';} +.iconic-reload:before {content:'\e030';} +.iconic-loop-alt4:before {content:'\e035';} +.iconic-loop-alt3:before {content:'\e034';} +.iconic-loop-alt2:before {content:'\e033';} +.iconic-loop-alt1:before {content:'\e032';} +.iconic-left-quote:before {content:'\275d';} +.iconic-x:before {content:'\2713';} +.iconic-last:before {content:'\e04d';} +.iconic-document-alt-stroke:before {content:'\e000';} +.iconic-bars:before {content:'\e06f';} +.iconic-arrow-left:before {content:'\2190';} +.iconic-arrow-down:before {content:'\2193';} +.iconic-download:before {content:'\e042';} +.iconic-home:before {content:'\2302';} +.iconic-calendar:before {content:'\e001';} +.iconic-right-quote-alt:before {content:'\e012';} +.iconic-fullscreen:before {content:'\e04e';} +.iconic-dial:before {content:'\e058';} +.iconic-plus-alt:before {content:'\e008';} +.iconic-clock:before {content:'\e079';} +.iconic-movie:before {content:'\e060';} +.iconic-steering-wheel:before {content:'\e024';} +.iconic-pen:before {content:'\270e';} +.iconic-tag-stroke:before {content:'\e02b';} +.iconic-pin:before {content:'\e067';} +.iconic-denied:before {content:'\26d4';} +.iconic-left-quote-alt:before {content:'\e011';} +.iconic-volume-mute:before {content:'\e071';} +.iconic-arrow-up-alt2:before {content:'\e018';} +.iconic-list-nested:before {content:'\e056';} +.iconic-arrow-up-alt1:before {content:'\e014';} +.iconic-comment-stroke:before {content:'\e06d';} +.iconic-undo:before {content:'\e02f';} +.iconic-umbrella:before {content:'\2602';} +.iconic-bolt:before {content:'\26a1';} +.iconic-article:before {content:'\e053';} +.iconic-read-more:before {content:'\e054';} +.iconic-beaker:before {content:'\e023';} +.iconic-beaker-alt:before {content:'\e010';} +.iconic-battery-full:before {content:'\e073';} +.iconic-arrow-right:before {content:'\2192';} +.iconic-new-window:before {content:'\e059';} +.iconic-plus:before {content:'\2795';} +.iconic-cog:before {content:'\2699';} +.iconic-key-stroke:before {content:'\26bf';} +.iconic-first:before {content:'\e04c';} +.iconic-comment-alt1-stroke:before {content:'\e003';} +.iconic-trash-stroke:before {content:'\e05a';} +.iconic-image:before {content:'\e027';} +.iconic-chat-alt-stroke:before {content:'\e007';} +.iconic-cd:before {content:'\e064';} +.iconic-right-quote:before {content:'\275e';} +.iconic-brush:before {content:'\e01b';} +.iconic-cloud:before {content:'\2601';} +.iconic-eye:before {content:'\e025';} +.iconic-play-alt:before {content:'\e048';} +.iconic-transfer:before {content:'\e041';} +.iconic-pen-alt2:before {content:'\e006';} +.iconic-camera:before {content:'\e070';} +.iconic-move-horizontal-alt2:before {content:'\e03a';} +.iconic-curved-arrow:before {content:'\2935';} +.iconic-move-horizontal-alt1:before {content:'\e039';} +.iconic-aperture:before {content:'\e026';} +.iconic-reload-alt:before {content:'\e031';} +.iconic-magnifying-glass:before {content:'\e074';} +.iconic-iphone:before {content:'\e06e';} +.iconic-fork:before {content:'\e046';} +.iconic-box:before {content:'\e06b';} +.iconic-bars-alt:before {content:'\e00a';} +.iconic-heart-stroke:before {content:'\2764';} +.iconic-volume:before {content:'\e072';} +.iconic-x-alt:before {content:'\2714';} +.iconic-link:before {content:'\e077';} +.iconic-moon-stroke:before {content:'\263e';} +.iconic-eyedropper:before {content:'\e01e';} +.iconic-spin:before {content:'\e036';} +.iconic-rss:before {content:'\e02c';} +.iconic-info:before {content:'\2139';} +.iconic-target:before {content:'\e02a';} +.iconic-cursor:before {content:'\e057';} +.iconic-minus:before {content:'\2796';} +.iconic-book-alt:before {content:'\e00b';} +.iconic-headphones:before {content:'\e061';} +.iconic-hash:before {content:'\0023';} +.iconic-arrow-left-alt1:before {content:'\e013';} +.iconic-arrow-left-alt2:before {content:'\e017';} +.iconic-fullscreen-exit:before {content:'\e050';} +.iconic-share:before {content:'\e02e';} +.iconic-fullscreen-alt:before {content:'\e04f';} +.iconic-at:before {content:'\0040';} +.iconic-chat:before {content:'\e05e';} +.iconic-move-vertical-alt2:before {content:'\e03d';} +.iconic-move-vertical-alt1:before {content:'\e03c';} +.iconic-check:before {content:'\2717';} +.iconic-mic:before {content:'\e05f';} +.iconic-calendar-alt-stroke:before {content:'\e06c';} +.iconic-book:before {content:'\e069';} +.iconic-move-alt1:before {content:'\e03f';} +.iconic-move-alt2:before {content:'\e040';} +.iconic-award-stroke:before {content:'\e022';} +.iconic-wrench:before {content:'\e078';} +.iconic-play:before {content:'\e047';} +.iconic-star:before {content:'\2605';} +.iconic-chart:before {content:'\e028';} +.iconic-rain:before {content:'\26c6';} +.iconic-folder-stroke:before {content:'\e065';} +.iconic-sun-stroke:before {content:'\2600';} +.iconic-user:before {content:'\e062';} +.iconic-battery-half:before {content:'\e05b';} +.iconic-aperture-alt:before {content:'\e00c';} +.iconic-eject:before {content:'\e04b';} +.iconic-arrow-down-alt1:before {content:'\e016';} +.iconic-pilcrow:before {content:'\00b6';} +.iconic-arrow-down-alt2:before {content:'\e01a';} +.iconic-arrow-right-alt1:before {content:'\e015';} +.iconic-arrow-right-alt2:before {content:'\e019';} +.iconic-rss-alt:before {content:'\e02d';} +.iconic-spin-alt:before {content:'\e037';} diff --git a/app/api/fonts/maki/maki-extract.json b/app/api/fonts/maki/maki-extract.json new file mode 100755 index 0000000..052a597 --- /dev/null +++ b/app/api/fonts/maki/maki-extract.json @@ -0,0 +1,65 @@ +{ + "maki-aboveground-rail":"\\e800", + "maki-airfield":"\\e801", + "maki-airport":"\\e802", + "maki-art-gallery":"\\e803", + "maki-bar":"\\e804", + "maki-baseball":"\\e806", + "maki-basketball":"\\e807", + "maki-beer":"\\e808", + "maki-belowground-rail":"\\e809", + "maki-bicycle":"\\e80a", + "maki-bus":"\\e80b", + "maki-cafe":"\\e80c", + "maki-campsite":"\\e80d", + "maki-cemetery":"\\e80e", + "maki-cinema":"\\e80f", + "maki-college":"\\e810", + "maki-commerical-building":"\\e811", + "maki-credit-card":"\\e812", + "maki-cricket":"\\e813", + "maki-embassy":"\\e814", + "maki-fast-food":"\\e815", + "maki-ferry":"\\e816", + "maki-fire-station":"\\e817", + "maki-football":"\\e818", + "maki-fuel":"\\e819", + "maki-garden":"\\e81a", + "maki-giraffe":"\\e81b", + "maki-golf":"\\e81c", + "maki-grocery-store":"\\e81e", + "maki-harbor":"\\e81f", + "maki-heliport":"\\e820", + "maki-hospital":"\\e821", + "maki-industrial-building":"\\e822", + "maki-library":"\\e823", + "maki-lodging":"\\e824", + "maki-london-underground":"\\e825", + "maki-minefield":"\\e826", + "maki-monument":"\\e827", + "maki-museum":"\\e828", + "maki-pharmacy":"\\e829", + "maki-pitch":"\\e82a", + "maki-police":"\\e82b", + "maki-post":"\\e82c", + "maki-prison":"\\e82d", + "maki-rail":"\\e82e", + "maki-religious-christian":"\\e82f", + "maki-religious-islam":"\\e830", + "maki-religious-jewish":"\\e831", + "maki-restaurant":"\\e832", + "maki-roadblock":"\\e833", + "maki-school":"\\e834", + "maki-shop":"\\e835", + "maki-skiing":"\\e836", + "maki-soccer":"\\e837", + "maki-swimming":"\\e838", + "maki-tennis":"\\e839", + "maki-theatre":"\\e83a", + "maki-toilet":"\\e83b", + "maki-town-hall":"\\e83c", + "maki-trash":"\\e83d", + "maki-tree-1":"\\e83e", + "maki-tree-2":"\\e83f", + "maki-warehouse":"\\e840" +} \ No newline at end of file diff --git a/app/api/fonts/maki/maki-min.css b/app/api/fonts/maki/maki-min.css new file mode 100755 index 0000000..1a79f0a --- /dev/null +++ b/app/api/fonts/maki/maki-min.css @@ -0,0 +1 @@ +.maki-aboveground-rail:before{content:'\e800'}.maki-airfield:before{content:'\e801'}.maki-airport:before{content:'\e802'}.maki-art-gallery:before{content:'\e803'}.maki-bar:before{content:'\e804'}.maki-baseball:before{content:'\e806'}.maki-basketball:before{content:'\e807'}.maki-beer:before{content:'\e808'}.maki-belowground-rail:before{content:'\e809'}.maki-bicycle:before{content:'\e80a'}.maki-bus:before{content:'\e80b'}.maki-cafe:before{content:'\e80c'}.maki-campsite:before{content:'\e80d'}.maki-cemetery:before{content:'\e80e'}.maki-cinema:before{content:'\e80f'}.maki-college:before{content:'\e810'}.maki-commerical-building:before{content:'\e811'}.maki-credit-card:before{content:'\e812'}.maki-cricket:before{content:'\e813'}.maki-embassy:before{content:'\e814'}.maki-fast-food:before{content:'\e815'}.maki-ferry:before{content:'\e816'}.maki-fire-station:before{content:'\e817'}.maki-football:before{content:'\e818'}.maki-fuel:before{content:'\e819'}.maki-garden:before{content:'\e81a'}.maki-giraffe:before{content:'\e81b'}.maki-golf:before{content:'\e81c'}.maki-grocery-store:before{content:'\e81e'}.maki-harbor:before{content:'\e81f'}.maki-heliport:before{content:'\e820'}.maki-hospital:before{content:'\e821'}.maki-industrial-building:before{content:'\e822'}.maki-library:before{content:'\e823'}.maki-lodging:before{content:'\e824'}.maki-london-underground:before{content:'\e825'}.maki-minefield:before{content:'\e826'}.maki-monument:before{content:'\e827'}.maki-museum:before{content:'\e828'}.maki-pharmacy:before{content:'\e829'}.maki-pitch:before{content:'\e82a'}.maki-police:before{content:'\e82b'}.maki-post:before{content:'\e82c'}.maki-prison:before{content:'\e82d'}.maki-rail:before{content:'\e82e'}.maki-religious-christian:before{content:'\e82f'}.maki-religious-islam:before{content:'\e830'}.maki-religious-jewish:before{content:'\e831'}.maki-restaurant:before{content:'\e832'}.maki-roadblock:before{content:'\e833'}.maki-school:before{content:'\e834'}.maki-shop:before{content:'\e835'}.maki-skiing:before{content:'\e836'}.maki-soccer:before{content:'\e837'}.maki-swimming:before{content:'\e838'}.maki-tennis:before{content:'\e839'}.maki-theatre:before{content:'\e83a'}.maki-toilet:before{content:'\e83b'}.maki-town-hall:before{content:'\e83c'}.maki-trash:before{content:'\e83d'}.maki-tree-1:before{content:'\e83e'}.maki-tree-2:before{content:'\e83f'}.maki-warehouse:before{content:'\e840'} \ No newline at end of file diff --git a/app/api/fonts/maki/maki.css b/app/api/fonts/maki/maki.css new file mode 100755 index 0000000..2508534 --- /dev/null +++ b/app/api/fonts/maki/maki.css @@ -0,0 +1,72 @@ +/* + Maki + + Pixel-perfect icons for web cartography + https://github.com/mapbox/maki + http://mapbox.com/maki + + Licence: https://raw.github.com/mapbox/maki/gh-pages/LICENSE.txt +*/ +.maki-aboveground-rail:before { content: '\e800'; } +.maki-airfield:before { content: '\e801'; } +.maki-airport:before { content: '\e802'; } +.maki-art-gallery:before { content: '\e803'; } +.maki-bar:before { content: '\e804'; } +.maki-baseball:before { content: '\e806'; } +.maki-basketball:before { content: '\e807'; } +.maki-beer:before { content: '\e808'; } +.maki-belowground-rail:before { content: '\e809'; } +.maki-bicycle:before { content: '\e80a'; } +.maki-bus:before { content: '\e80b'; } +.maki-cafe:before { content: '\e80c'; } +.maki-campsite:before { content: '\e80d'; } +.maki-cemetery:before { content: '\e80e'; } +.maki-cinema:before { content: '\e80f'; } +.maki-college:before { content: '\e810'; } +.maki-commerical-building:before { content: '\e811'; } +.maki-credit-card:before { content: '\e812'; } +.maki-cricket:before { content: '\e813'; } +.maki-embassy:before { content: '\e814'; } +.maki-fast-food:before { content: '\e815'; } +.maki-ferry:before { content: '\e816'; } +.maki-fire-station:before { content: '\e817'; } +.maki-football:before { content: '\e818'; } +.maki-fuel:before { content: '\e819'; } +.maki-garden:before { content: '\e81a'; } +.maki-giraffe:before { content: '\e81b'; } +.maki-golf:before { content: '\e81c'; } +.maki-grocery-store:before { content: '\e81e'; } +.maki-harbor:before { content: '\e81f'; } +.maki-heliport:before { content: '\e820'; } +.maki-hospital:before { content: '\e821'; } +.maki-industrial-building:before { content: '\e822'; } +.maki-library:before { content: '\e823'; } +.maki-lodging:before { content: '\e824'; } +.maki-london-underground:before { content: '\e825'; } +.maki-minefield:before { content: '\e826'; } +.maki-monument:before { content: '\e827'; } +.maki-museum:before { content: '\e828'; } +.maki-pharmacy:before { content: '\e829'; } +.maki-pitch:before { content: '\e82a'; } +.maki-police:before { content: '\e82b'; } +.maki-post:before { content: '\e82c'; } +.maki-prison:before { content: '\e82d'; } +.maki-rail:before { content: '\e82e'; } +.maki-religious-christian:before { content: '\e82f'; } +.maki-religious-islam:before { content: '\e830'; } +.maki-religious-jewish:before { content: '\e831'; } +.maki-restaurant:before { content: '\e832'; } +.maki-roadblock:before { content: '\e833'; } +.maki-school:before { content: '\e834'; } +.maki-shop:before { content: '\e835'; } +.maki-skiing:before { content: '\e836'; } +.maki-soccer:before { content: '\e837'; } +.maki-swimming:before { content: '\e838'; } +.maki-tennis:before { content: '\e839'; } +.maki-theatre:before { content: '\e83a'; } +.maki-toilet:before { content: '\e83b'; } +.maki-town-hall:before { content: '\e83c'; } +.maki-trash:before { content: '\e83d'; } +.maki-tree-1:before { content: '\e83e'; } +.maki-tree-2:before { content: '\e83f'; } +.maki-warehouse:before { content: '\e840'; } \ No newline at end of file diff --git a/app/api/fonts/maki/maki.eot b/app/api/fonts/maki/maki.eot new file mode 100755 index 0000000..387b10b Binary files /dev/null and b/app/api/fonts/maki/maki.eot differ diff --git a/app/api/fonts/maki/maki.svg b/app/api/fonts/maki/maki.svg new file mode 100755 index 0000000..7ef699c --- /dev/null +++ b/app/api/fonts/maki/maki.svg @@ -0,0 +1,209 @@ + + + + +Created by FontForge 20110222 at Wed Nov 14 20:24:17 2012 + By Vitaly,,, +Copyright (C) Mapbox, LCC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/api/fonts/maki/maki.ttf b/app/api/fonts/maki/maki.ttf new file mode 100755 index 0000000..645ee7e Binary files /dev/null and b/app/api/fonts/maki/maki.ttf differ diff --git a/app/api/fonts/maki/maki.woff b/app/api/fonts/maki/maki.woff new file mode 100755 index 0000000..fa26d6f Binary files /dev/null and b/app/api/fonts/maki/maki.woff differ diff --git a/app/api/fonts/meteocons/meteocons-min.css b/app/api/fonts/meteocons/meteocons-min.css new file mode 100755 index 0000000..ef12a42 --- /dev/null +++ b/app/api/fonts/meteocons/meteocons-min.css @@ -0,0 +1 @@ +@font-face{font-family:'MeteoconsRegular';src:url('meteocons-webfont.eot');src:url('meteocons-webfont.eot?#iefix') format('embedded-opentype'),url('meteocons-webfont.woff') format('woff'),url('meteocons-webfont.ttf') format('truetype'),url('meteocons-webfont.svg#MeteoconsRegular') format('svg');font-weight:normal;font-style:normal} \ No newline at end of file diff --git a/app/api/fonts/meteocons/meteocons-webfont.eot b/app/api/fonts/meteocons/meteocons-webfont.eot new file mode 100755 index 0000000..af194db Binary files /dev/null and b/app/api/fonts/meteocons/meteocons-webfont.eot differ diff --git a/app/api/fonts/meteocons/meteocons-webfont.svg b/app/api/fonts/meteocons/meteocons-webfont.svg new file mode 100755 index 0000000..8be65ed --- /dev/null +++ b/app/api/fonts/meteocons/meteocons-webfont.svg @@ -0,0 +1,81 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Designer : Alessio Atzeni +Foundry : Alessio Atzeni +Foundry URL : http://www.alessioatzeni.com/meteocons/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/api/fonts/meteocons/meteocons-webfont.ttf b/app/api/fonts/meteocons/meteocons-webfont.ttf new file mode 100755 index 0000000..98de682 Binary files /dev/null and b/app/api/fonts/meteocons/meteocons-webfont.ttf differ diff --git a/app/api/fonts/meteocons/meteocons-webfont.woff b/app/api/fonts/meteocons/meteocons-webfont.woff new file mode 100755 index 0000000..d879cf3 Binary files /dev/null and b/app/api/fonts/meteocons/meteocons-webfont.woff differ diff --git a/app/api/fonts/meteocons/meteocons.css b/app/api/fonts/meteocons/meteocons.css new file mode 100755 index 0000000..ec4d000 --- /dev/null +++ b/app/api/fonts/meteocons/meteocons.css @@ -0,0 +1,11 @@ +@font-face { + font-family: 'MeteoconsRegular'; + src: url('meteocons-webfont.eot'); + src: url('meteocons-webfont.eot?#iefix') format('embedded-opentype'), + url('meteocons-webfont.woff') format('woff'), + url('meteocons-webfont.ttf') format('truetype'), + url('meteocons-webfont.svg#MeteoconsRegular') format('svg'); + font-weight: normal; + font-style: normal; + +} \ No newline at end of file diff --git a/app/api/fonts/modernpictograms/modernpics-webfont.eot b/app/api/fonts/modernpictograms/modernpics-webfont.eot new file mode 100755 index 0000000..4bf1194 Binary files /dev/null and b/app/api/fonts/modernpictograms/modernpics-webfont.eot differ diff --git a/app/api/fonts/modernpictograms/modernpics-webfont.svg b/app/api/fonts/modernpictograms/modernpics-webfont.svg new file mode 100755 index 0000000..19eacda --- /dev/null +++ b/app/api/fonts/modernpictograms/modernpics-webfont.svg @@ -0,0 +1,139 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Copyright c 2012 by John Caserta All rights reserved +Designer : John Caserta +Foundry : John Caserta +Foundry URL : httpthedesignofficeorg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/api/fonts/modernpictograms/modernpics-webfont.ttf b/app/api/fonts/modernpictograms/modernpics-webfont.ttf new file mode 100755 index 0000000..7a505fa Binary files /dev/null and b/app/api/fonts/modernpictograms/modernpics-webfont.ttf differ diff --git a/app/api/fonts/modernpictograms/modernpics-webfont.woff b/app/api/fonts/modernpictograms/modernpics-webfont.woff new file mode 100755 index 0000000..1dfeb52 Binary files /dev/null and b/app/api/fonts/modernpictograms/modernpics-webfont.woff differ diff --git a/app/api/fonts/modernpictograms/modernpictograms-min.css b/app/api/fonts/modernpictograms/modernpictograms-min.css new file mode 100755 index 0000000..1433184 --- /dev/null +++ b/app/api/fonts/modernpictograms/modernpictograms-min.css @@ -0,0 +1 @@ +@font-face{font-family:'ModernPictogramsNormal';src:url('modernpics-webfont.eot');src:url('modernpics-webfont.eot?#iefix') format('embedded-opentype'),url('modernpics-webfont.woff') format('woff'),url('modernpics-webfont.ttf') format('truetype'),url('modernpics-webfont.svg#ModernPictogramsNormal') format('svg');font-weight:normal;font-style:normal}.modernpictograms-camera:before{content:"A"}.modernpictograms-book:before{content:"B"}.modernpictograms-cd:before{content:"C"}.modernpictograms-download:before{content:"D"}.modernpictograms-eye:before{content:"E"}.modernpictograms-facebook-1:before{content:"F"}.modernpictograms-facebook-2:before{content:"G"}.modernpictograms-camera-1:before{content:"H"}.modernpictograms-trash:before{content:"I"}.modernpictograms-tag:before{content:"J"}.modernpictograms-document:before{content:"K"}.modernpictograms-thumb-down:before{content:"L"}.modernpictograms-ipod:before{content:"M"}.modernpictograms-phone-1:before{content:"N"}.modernpictograms-phone-2:before{content:"O"}.modernpictograms-play:before{content:"P"}.modernpictograms-tablet:before{content:"Q"}.modernpictograms-reload:before{content:"R"}.modernpictograms-screen:before{content:"S"}.modernpictograms-twitter-1:before{content:"T"}.modernpictograms-twitter-2:before{content:"U"}.modernpictograms-pen-paper:before{content:"V"}.modernpictograms-popup:before{content:"W"}.modernpictograms-x:before{content:"X"}.modernpictograms-megaphone:before{content:"Y"}.modernpictograms-menu:before{content:"Z"}.modernpictograms-newspaper:before{content:"a"}.modernpictograms-speech-bubble:before{content:"b"}.modernpictograms-telephone:before{content:"c"}.modernpictograms-printer:before{content:"d"}.modernpictograms-pencil-1:before{content:"e"}.modernpictograms-person-1:before{content:"f"}.modernpictograms-people:before{content:"g"}.modernpictograms-camera-2:before{content:"h"}.modernpictograms-shopping-cart:before{content:"i"}.modernpictograms-heart:before{content:"j"}.modernpictograms-person-2:before{content:"k"}.modernpictograms-thumb-up:before{content:"l"}.modernpictograms-envelope:before{content:"m"}.modernpictograms-lock:before{content:"n"}.modernpictograms-popout:before{content:"o"}.modernpictograms-house:before{content:"p"}.modernpictograms-open-lock:before{content:"q"}.modernpictograms-pencil-2:before{content:"r"}.modernpictograms-magnifying-glass:before{content:"s"}.modernpictograms-bird:before{content:"t"}.modernpictograms-exit-fullscreen:before{content:"u"}.modernpictograms-fullscreen:before{content:"v"}.modernpictograms-globe:before{content:"w"}.modernpictograms-close:before{content:"x"}.modernpictograms-zoom-in:before{content:"y"}.modernpictograms-zoom-out:before{content:"z"}.modernpictograms-lower-volume:before{content:"1"}.modernpictograms-raise-volume:before{content:"2"}.modernpictograms-grid:before{content:"3"}.modernpictograms-bulletlist:before{content:"4"}.modernpictograms-columns:before{content:"5"}.modernpictograms-line-graph:before{content:"6"}.modernpictograms-bar-graph:before{content:"7"}.modernpictograms-pie-chart:before{content:"8"}.modernpictograms-bell:before{content:"9"}.modernpictograms-mute:before{content:"0"}.modernpictograms-signal:before{content:"`"}.modernpictograms-squiggly:before{content:"~"}.modernpictograms-warning:before{content:"!"}.modernpictograms-atmark:before{content:"@"}.modernpictograms-bill:before{content:"#"}.modernpictograms-money:before{content:"$"}.modernpictograms-checkmark:before{content:"%"}.modernpictograms-rss:before{content:"^"}.modernpictograms-pin:before{content:","}.modernpictograms-star:before{content:"*"}.modernpictograms-tools:before{content:"("}.modernpictograms-badge:before{content:")"}.modernpictograms-triangle:before{content:"-"}.modernpictograms-cabinet:before{content:"_"}.modernpictograms-plus:before{content:"+"}.modernpictograms-info:before{content:"="}.modernpictograms-down-arrow:before{content:"["}.modernpictograms-clock-1:before{content:"{"}.modernpictograms-up-arrow:before{content:"]"}.modernpictograms-clock-2:before{content:"}"}.modernpictograms-stop:before{content:"'"}.modernpictograms-colon:before{content:":"}.modernpictograms-semicolon:before{content:";"}.modernpictograms-left-arrow:before{content:"<"}.modernpictograms-right-arrow:before{content:">"}.modernpictograms-question-mark:before{content:"?"}.modernpictograms-upsidedown-triangle:before{content:"/"} \ No newline at end of file diff --git a/app/api/fonts/modernpictograms/modernpictograms.css b/app/api/fonts/modernpictograms/modernpictograms.css new file mode 100755 index 0000000..d4e1760 --- /dev/null +++ b/app/api/fonts/modernpictograms/modernpictograms.css @@ -0,0 +1,105 @@ +/* Generated by Font Squirrel (http://www.fontsquirrel.com) on November 27, 2012 06:42:23 PM America/New_York */ + + + +@font-face { + font-family: 'ModernPictogramsNormal'; + src: url('modernpics-webfont.eot'); + src: url('modernpics-webfont.eot?#iefix') format('embedded-opentype'), + url('modernpics-webfont.woff') format('woff'), + url('modernpics-webfont.ttf') format('truetype'), + url('modernpics-webfont.svg#ModernPictogramsNormal') format('svg'); + font-weight: normal; + font-style: normal; + +} + +.modernpictograms-camera:before { content: "A"; } +.modernpictograms-book:before { content: "B"; } +.modernpictograms-cd:before { content: "C"; } +.modernpictograms-download:before { content: "D"; } +.modernpictograms-eye:before { content: "E"; } +.modernpictograms-facebook-1:before { content: "F"; } +.modernpictograms-facebook-2:before { content: "G"; } +.modernpictograms-camera-1:before { content: "H"; } +.modernpictograms-trash:before { content: "I"; } +.modernpictograms-tag:before { content: "J"; } +.modernpictograms-document:before { content: "K"; } +.modernpictograms-thumb-down:before { content: "L"; } +.modernpictograms-ipod:before { content: "M"; } +.modernpictograms-phone-1:before { content: "N"; } +.modernpictograms-phone-2:before { content: "O"; } +.modernpictograms-play:before { content: "P"; } +.modernpictograms-tablet:before { content: "Q"; } +.modernpictograms-reload:before { content: "R"; } +.modernpictograms-screen:before { content: "S"; } +.modernpictograms-twitter-1:before { content: "T"; } +.modernpictograms-twitter-2:before { content: "U"; } +.modernpictograms-pen-paper:before { content: "V"; } +.modernpictograms-popup:before { content: "W"; } +.modernpictograms-x:before { content: "X"; } +.modernpictograms-megaphone:before { content: "Y"; } +.modernpictograms-menu:before { content: "Z"; } +.modernpictograms-newspaper:before { content: "a"; } +.modernpictograms-speech-bubble:before { content: "b"; } +.modernpictograms-telephone:before { content: "c"; } +.modernpictograms-printer:before { content: "d"; } +.modernpictograms-pencil-1:before { content: "e"; } +.modernpictograms-person-1:before { content: "f"; } +.modernpictograms-people:before { content: "g"; } +.modernpictograms-camera-2:before { content: "h"; } +.modernpictograms-shopping-cart:before { content: "i"; } +.modernpictograms-heart:before { content: "j"; } +.modernpictograms-person-2:before { content: "k"; } +.modernpictograms-thumb-up:before {content: "l"; } +.modernpictograms-envelope:before { content: "m"; } +.modernpictograms-lock:before { content: "n"; } +.modernpictograms-popout:before { content: "o"; } +.modernpictograms-house:before { content: "p"; } +.modernpictograms-open-lock:before { content: "q"; } +.modernpictograms-pencil-2:before { content: "r"; } +.modernpictograms-magnifying-glass:before { content: "s"; } +.modernpictograms-bird:before { content: "t" } +.modernpictograms-exit-fullscreen:before { content: "u"; } +.modernpictograms-fullscreen:before { content: "v"; } +.modernpictograms-globe:before { content: "w"; } +.modernpictograms-close:before { content: "x"; } +.modernpictograms-zoom-in:before { content: "y"; } +.modernpictograms-zoom-out:before { content: "z"; } +.modernpictograms-lower-volume:before { content: "1"; } +.modernpictograms-raise-volume:before { content: "2"; } +.modernpictograms-grid:before { content: "3"; } +.modernpictograms-bulletlist:before { content: "4"; } +.modernpictograms-columns:before { content: "5"; } +.modernpictograms-line-graph:before { content: "6"; } +.modernpictograms-bar-graph:before { content: "7"; } +.modernpictograms-pie-chart:before { content: "8"; } +.modernpictograms-bell:before { content: "9"; } +.modernpictograms-mute:before { content: "0"; } +.modernpictograms-signal:before { content: "`"; } +.modernpictograms-squiggly:before { content: "~"; } +.modernpictograms-warning:before { content: "!"; } +.modernpictograms-atmark:before { content: "@"; } +.modernpictograms-bill:before { content: "#"; } +.modernpictograms-money:before { content: "$"; } +.modernpictograms-checkmark:before { content: "%"; } +.modernpictograms-rss:before { content: "^"; } +.modernpictograms-pin:before { content: ","; } +.modernpictograms-star:before { content: "*"; } +.modernpictograms-tools:before { content: "("; } +.modernpictograms-badge:before { content: ")"; } +.modernpictograms-triangle:before { content: "-"; } +.modernpictograms-cabinet:before { content: "_"; } +.modernpictograms-plus:before { content: "+"; } +.modernpictograms-info:before { content: "="; } +.modernpictograms-down-arrow:before { content: "["; } +.modernpictograms-clock-1:before { content: "{"; } +.modernpictograms-up-arrow:before { content: "]"; } +.modernpictograms-clock-2:before { content: "}"; } +.modernpictograms-stop:before { content: "'"; } +.modernpictograms-colon:before { content: ":"; } +.modernpictograms-semicolon:before { content: ";"; } +.modernpictograms-left-arrow:before { content: "<"; } +.modernpictograms-right-arrow:before { content: ">"; } +.modernpictograms-question-mark:before { content: "?"; } +.modernpictograms-upsidedown-triangle:before { content: "/"; } \ No newline at end of file diff --git a/app/api/fonts/openwebicons/openwebicons-extract.json b/app/api/fonts/openwebicons/openwebicons-extract.json new file mode 100755 index 0000000..b460442 --- /dev/null +++ b/app/api/fonts/openwebicons/openwebicons-extract.json @@ -0,0 +1,50 @@ +{ + "openwebicons-apml":"\\f001", + "openwebicons-open-share":"\\f00E", + "openwebicons-open-share-simple":"\\f00F", + "openwebicons-share":"\\f006", + "openwebicons-share-simple":"\\f007", + "openwebicons-feed":"\\f009", + "openwebicons-feed-simple":"\\f00A", + "openwebicons-ostatus":"\\f004", + "openwebicons-ostatus-simple":"\\f005", + "openwebicons-opml":"\\f003", + "openwebicons-activity":"\\f010", + "openwebicons-microformats":"\\f00C", + "openwebicons-geo":"\\f00B", + "openwebicons-opensearch":"\\f002", + "openwebicons-oauth":"\\f008", + "openwebicons-openid":"\\f00D", + "openwebicons-rdf":"\\f000", + "openwebicons-dataportability":"\\f013", + "openwebicons-federated":"\\f011", + "openwebicons-web-intents":"\\f014", + "openwebicons-open-web":"\\f012", + "openwebicons-xmpp":"\\f015", + "openwebicons-html5":"\\f016", + "openwebicons-css3":"\\f017", + "openwebicons-connectivity":"\\f018", + "openwebicons-semantics":"\\f019", + "openwebicons-opengraph":"\\f020", + "openwebicons-epub":"\\f021", + "openwebicons-qr":"\\f022", + "openwebicons-foaf":"\\f023", + "openwebicons-info-card":"\\f024", + "openwebicons-browserid":"\\f025", + "openwebicons-remote-storage":"\\f026", + "openwebicons-persona":"\\f027", + "openwebicons-odata":"\\f028", + "openwebicons-markdown":"\\f029", + "openwebicons-tosdr":"\\f030", + "openwebicons-cc":"\\f080", + "openwebicons-cc-by":"\\f081", + "openwebicons-cc-nc":"\\f082", + "openwebicons-cc-nc-eu":"\\f083", + "openwebicons-cc-nc-jp":"\\f084", + "openwebicons-cc-sa":"\\f085", + "openwebicons-cc-nd":"\\f086", + "openwebicons-cc-public":"\\f087", + "openwebicons-cc-zero":"\\f088", + "openwebicons-cc-share":"\\f089", + "openwebicons-cc-remix":"\\f08a" +} \ No newline at end of file diff --git a/app/api/fonts/openwebicons/openwebicons-min.css b/app/api/fonts/openwebicons/openwebicons-min.css new file mode 100755 index 0000000..a1dfcc1 --- /dev/null +++ b/app/api/fonts/openwebicons/openwebicons-min.css @@ -0,0 +1 @@ +.openwebicons-apml:before{content:"\f001"}.openwebicons-open-share:before{content:"\f00E"}.openwebicons-open-share-simple:before{content:"\f00F"}.openwebicons-share:before{content:"\f006"}.openwebicons-share-simple:before{content:"\f007"}.openwebicons-feed:before{content:"\f009"}.openwebicons-feed-simple:before{content:"\f00A"}.openwebicons-ostatus:before{content:"\f004"}.openwebicons-ostatus-simple:before{content:"\f005"}.openwebicons-opml:before{content:"\f003"}.openwebicons-activity:before{content:"\f010"}.openwebicons-microformats:before{content:"\f00C"}.openwebicons-geo:before{content:"\f00B"}.openwebicons-opensearch:before{content:"\f002"}.openwebicons-oauth:before{content:"\f008"}.openwebicons-openid:before{content:"\f00D"}.openwebicons-rdf:before{content:"\f000"}.openwebicons-dataportability:before{content:"\f013"}.openwebicons-federated:before{content:"\f011"}.openwebicons-web-intents:before{content:"\f014"}.openwebicons-open-web:before{content:"\f012"}.openwebicons-xmpp:before{content:"\f015"}.openwebicons-html5:before{content:"\f016"}.openwebicons-css3:before{content:"\f017"}.openwebicons-connectivity:before{content:"\f018"}.openwebicons-semantics:before{content:"\f019"}.openwebicons-opengraph:before{content:"\f020"}.openwebicons-epub:before{content:"\f021"}.openwebicons-qr:before{content:"\f022"}.openwebicons-foaf:before{content:"\f023"}.openwebicons-info-card:before{content:"\f024"}.openwebicons-browserid:before{content:"\f025"}.openwebicons-remote-storage:before{content:"\f026"}.openwebicons-persona:before{content:"\f027"}.openwebicons-odata:before{content:"\f028"}.openwebicons-markdown:before{content:"\f029"}.openwebicons-tosdr:before{content:"\f030"}.openwebicons-cc:before{content:"\f080"}.openwebicons-cc-by:before{content:"\f081"}.openwebicons-cc-nc:before{content:"\f082"}.openwebicons-cc-nc-eu:before{content:"\f083"}.openwebicons-cc-nc-jp:before{content:"\f084"}.openwebicons-cc-sa:before{content:"\f085"}.openwebicons-cc-nd:before{content:"\f086"}.openwebicons-cc-public:before{content:"\f087"}.openwebicons-cc-zero:before{content:"\f088"}.openwebicons-cc-share:before{content:"\f089"}.openwebicons-cc-remix:before{content:"\f08a"} \ No newline at end of file diff --git a/app/api/fonts/openwebicons/openwebicons.css b/app/api/fonts/openwebicons/openwebicons.css new file mode 100755 index 0000000..c1851de --- /dev/null +++ b/app/api/fonts/openwebicons/openwebicons.css @@ -0,0 +1,48 @@ +.openwebicons-apml:before { content: "\f001"; } +.openwebicons-open-share:before { content: "\f00E"; } +.openwebicons-open-share-simple:before { content: "\f00F"; } +.openwebicons-share:before { content: "\f006"; } +.openwebicons-share-simple:before { content: "\f007"; } +.openwebicons-feed:before { content: "\f009"; } +.openwebicons-feed-simple:before { content: "\f00A"; } +.openwebicons-ostatus:before { content: "\f004"; } +.openwebicons-ostatus-simple:before { content: "\f005"; } +.openwebicons-opml:before { content: "\f003"; } +.openwebicons-activity:before { content: "\f010"; } +.openwebicons-microformats:before { content: "\f00C"; } +.openwebicons-geo:before { content: "\f00B"; } +.openwebicons-opensearch:before { content: "\f002"; } +.openwebicons-oauth:before { content: "\f008"; } +.openwebicons-openid:before { content: "\f00D"; } +.openwebicons-rdf:before { content: "\f000"; } +.openwebicons-dataportability:before { content: "\f013"; } +.openwebicons-federated:before { content: "\f011"; } +.openwebicons-web-intents:before { content: "\f014"; } +.openwebicons-open-web:before { content: "\f012"; } +.openwebicons-xmpp:before { content: "\f015"; } +.openwebicons-html5:before { content: "\f016"; } +.openwebicons-css3:before { content: "\f017"; } +.openwebicons-connectivity:before { content: "\f018"; } +.openwebicons-semantics:before { content: "\f019"; } +.openwebicons-opengraph:before { content: "\f020"; } +.openwebicons-epub:before { content: "\f021"; } +.openwebicons-qr:before { content: "\f022"; } +.openwebicons-foaf:before { content: "\f023"; } +.openwebicons-info-card:before { content: "\f024"; } +.openwebicons-browserid:before { content: "\f025"; } +.openwebicons-remote-storage:before { content: "\f026"; } +.openwebicons-persona:before { content: "\f027"; } +.openwebicons-odata:before { content: "\f028"; } +.openwebicons-markdown:before { content: "\f029"; } +.openwebicons-tosdr:before { content: "\f030"; } +.openwebicons-cc:before { content: "\f080"; } +.openwebicons-cc-by:before { content: "\f081"; } +.openwebicons-cc-nc:before { content: "\f082"; } +.openwebicons-cc-nc-eu:before { content: "\f083"; } +.openwebicons-cc-nc-jp:before { content: "\f084"; } +.openwebicons-cc-sa:before { content: "\f085"; } +.openwebicons-cc-nd:before { content: "\f086"; } +.openwebicons-cc-public:before { content: "\f087"; } +.openwebicons-cc-zero:before { content: "\f088"; } +.openwebicons-cc-share:before { content: "\f089"; } +.openwebicons-cc-remix:before { content: "\f08a"; } \ No newline at end of file diff --git a/app/api/fonts/openwebicons/openwebicons.eot b/app/api/fonts/openwebicons/openwebicons.eot new file mode 100755 index 0000000..6d2b5d5 Binary files /dev/null and b/app/api/fonts/openwebicons/openwebicons.eot differ diff --git a/app/api/fonts/openwebicons/openwebicons.svg b/app/api/fonts/openwebicons/openwebicons.svg new file mode 100755 index 0000000..eb69176 --- /dev/null +++ b/app/api/fonts/openwebicons/openwebicons.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/api/fonts/openwebicons/openwebicons.ttf b/app/api/fonts/openwebicons/openwebicons.ttf new file mode 100755 index 0000000..6035858 Binary files /dev/null and b/app/api/fonts/openwebicons/openwebicons.ttf differ diff --git a/app/api/fonts/openwebicons/openwebicons.woff b/app/api/fonts/openwebicons/openwebicons.woff new file mode 100755 index 0000000..c248af4 Binary files /dev/null and b/app/api/fonts/openwebicons/openwebicons.woff differ diff --git a/app/api/fonts/sosa/sosa-min.css b/app/api/fonts/sosa/sosa-min.css new file mode 100755 index 0000000..c7d8c59 --- /dev/null +++ b/app/api/fonts/sosa/sosa-min.css @@ -0,0 +1 @@ +.sosa-warning:before{content:"!"}.sosa-money:before{content:"$"}.sosa-mobile:before{content:"/"}.sosa-headphones:before{content:"0"}.sosa-camera:before{content:"1"}.sosa-camcorder:before{content:"2"}.sosa-printer:before{content:"3"}.sosa-landline:before{content:"4"}.sosa-pda:before{content:"5"}.sosa-tablet:before{content:"6"}.sosa-laptop:before{content:"7"}.sosa-monitor:before{content:"8"}.sosa-microphone:before{content:"9"}.sosa-television:before{content:":"}.sosa-radio:before{content:";"}.sosa-note:before{content:"<"}.sosa-tetris:before{content:"="}.sosa-game:before{content:">"}.sosa-question:before{content:"?"}.sosa-video:before{content:"A"}.sosa-startquote:before{content:"B"}.sosa-endquote:before{content:"C"}.sosa-code:before{content:"D"}.sosa-bargraph:before{content:"E"}.sosa-piechart:before{content:"F"}.sosa-graph:before{content:"G"}.sosa-polaroid:before{content:"H"}.sosa-car:before{content:"J"}.sosa-truck:before{content:"K"}.sosa-bike:before{content:"L"}.sosa-motorcycle:before{content:"M"}.sosa-play:before{content:"N"}.sosa-pause:before{content:"O"}.sosa-stop:before{content:"P"}.sosa-forward:before{content:"Q"}.sosa-back:before{content:"R"}.sosa-fastforward:before{content:"S"}.sosa-fastback:before{content:"T"}.sosa-altarrows:before{content:"U"}.sosa-wrench:before{content:"V"}.sosa-simplecog:before{content:"W"}.sosa-cog:before{content:"X"}.sosa-cogs:before{content:"Y"}.sosa-chess:before{content:"Z"}.sosa-clock:before{content:"["}.sosa-magnifyingleft:before{content:'\ '}.sosa-magnifyingright:before{content:"]"}.sosa-zoomin:before{content:"^"}.sosa-zoomout:before{content:"_"}.sosa-penciltip:before{content:"`"}.sosa-pencil:before{content:"a"}.sosa-paperclip:before{content:"b"}.sosa-heart:before{content:"c"}.sosa-emptyheart:before{content:"d"}.sosa-star:before{content:"e"}.sosa-starempty:before{content:"f"}.sosa-chatbubble:before{content:"g"}.sosa-chatbubbles:before{content:"h"}.sosa-info:before{content:"i"}.sosa-flag:before{content:"j"}.sosa-tag:before{content:"k"}.sosa-tags:before{content:"l"}.sosa-bookmark:before{content:"m"}.sosa-map:before{content:"n"}.sosa-pin:before{content:"o"}.sosa-open:before{content:"p"}.sosa-share:before{content:"q"}.sosa-wireless:before{content:"r"}.sosa-signal:before{content:"s"}.sosa-twitter:before{content:"t"}.sosa-twitterlogo:before{content:"u"}.sosa-facebook:before{content:"v"}.sosa-flickr:before{content:"w"}.sosa-vimeo:before{content:"x"}.sosa-sync:before{content:"y"}.sosa-reload:before{content:"z"}.sosa-plus:before{content:"{"}.sosa-minus:before{content:"|"}.sosa-obelus:before{content:"}"}.sosa-multiply:before{content:"~"}.sosa-basket:before{content:"�"}.sosa-cart:before{content:"�"}.sosa-house:before{content:"�"}.sosa-closedmail:before{content:"�"}.sosa-openmail:before{content:"�"}.sosa-newmail:before{content:"�"}.sosa-person:before{content:"�"}.sosa-people:before{content:"�"}.sosa-download:before{content:"�"}.sosa-upload:before{content:"�"}.sosa-link:before{content:"�"}.sosa-exit:before{content:"�"}.sosa-check:before{content:"�"}.sosa-trash:before{content:"�"}.sosa-doc:before{content:"�"}.sosa-locked:before{content:"�"}.sosa-unlocked:before{content:"�"}.sosa-folder:before{content:"�"}.sosa-uparrow:before{content:"�"}.sosa-downarrow:before{content:"�"}.sosa-north:before{content:"�"}.sosa-south:before{content:"�"}.sosa-east:before{content:"�"}.sosa-west:before{content:"�"}.sosa-sun:before{content:"�"}.sosa-cloud:before{content:"�"}.sosa-cloudsun:before{content:"�"}.sosa-cloudrain:before{content:"�"}.sosa-cloudstorm:before{content:"�"}.sosa-snowflake:before{content:"�"}.sosa-cloudsnow:before{content:"�"}.sosa-clouddown:before{content:"�"}.sosa-dagger:before{content:"�"}.sosa-cloudnote:before{content:"�"}.sosa-pound:before{content:"�"}.sosa-euro:before{content:"�"}.sosa-leftarrow:before{content:"�"}.sosa-rightarrow:before{content:"�"} \ No newline at end of file diff --git a/app/api/fonts/sosa/sosa.css b/app/api/fonts/sosa/sosa.css new file mode 100755 index 0000000..a7bfbce --- /dev/null +++ b/app/api/fonts/sosa/sosa.css @@ -0,0 +1,118 @@ +.sosa-warning:before {content:"!";} +.sosa-money:before {content:"$";} +.sosa-mobile:before {content:"/";} +.sosa-headphones:before {content:"0";} +.sosa-camera:before {content:"1";} +.sosa-camcorder:before {content:"2";} +.sosa-printer:before {content:"3";} +.sosa-landline:before {content:"4";} +.sosa-pda:before {content:"5";} +.sosa-tablet:before {content:"6";} +.sosa-laptop:before {content:"7";} +.sosa-monitor:before {content:"8";} +.sosa-microphone:before {content:"9";} +.sosa-television:before {content:":";} +.sosa-radio:before {content:";";} +.sosa-note:before {content:"<";} +.sosa-tetris:before {content:"=";} +.sosa-game:before {content:">";} +.sosa-question:before {content:"?";} +.sosa-video:before {content:"A";} +.sosa-startquote:before {content:"B";} +.sosa-endquote:before {content:"C";} +.sosa-code:before {content:"D";} +.sosa-bargraph:before {content:"E";} +.sosa-piechart:before {content:"F";} +.sosa-graph:before {content:"G";} +.sosa-polaroid:before {content:"H";} +.sosa-car:before {content:"J";} +.sosa-truck:before {content:"K";} +.sosa-bike:before {content:"L";} +.sosa-motorcycle:before {content:"M";} +.sosa-play:before {content:"N";} +.sosa-pause:before {content:"O";} +.sosa-stop:before {content:"P";} +.sosa-forward:before {content:"Q";} +.sosa-back:before {content:"R";} +.sosa-fastforward:before {content:"S";} +.sosa-fastback:before {content:"T";} +.sosa-altarrows:before {content:"U";} +.sosa-wrench:before {content:"V";} +.sosa-simplecog:before {content:"W";} +.sosa-cog:before {content:"X";} +.sosa-cogs:before {content:"Y";} +.sosa-chess:before {content:"Z";} +.sosa-clock:before {content:"[";} +.sosa-magnifyingleft:before {content:'\ ';} +.sosa-magnifyingright:before {content:"]";} +.sosa-zoomin:before {content:"^";} +.sosa-zoomout:before {content:"_";} +.sosa-penciltip:before {content:"`";} +.sosa-pencil:before {content:"a";} +.sosa-paperclip:before {content:"b";} +.sosa-heart:before {content:"c";} +.sosa-emptyheart:before {content:"d";} +.sosa-star:before {content:"e";} +.sosa-starempty:before {content:"f";} +.sosa-chatbubble:before {content:"g";} +.sosa-chatbubbles:before {content:"h";} +.sosa-info:before {content:"i";} +.sosa-flag:before {content:"j";} +.sosa-tag:before {content:"k";} +.sosa-tags:before {content:"l";} +.sosa-bookmark:before {content:"m";} +.sosa-map:before {content:"n";} +.sosa-pin:before {content:"o";} +.sosa-open:before {content:"p";} +.sosa-share:before {content:"q";} +.sosa-wireless:before {content:"r";} +.sosa-signal:before {content:"s";} +.sosa-twitter:before {content:"t";} +.sosa-twitterlogo:before {content:"u";} +.sosa-facebook:before {content:"v";} +.sosa-flickr:before {content:"w";} +.sosa-vimeo:before {content:"x";} +.sosa-sync:before {content:"y";} +.sosa-reload:before {content:"z";} +.sosa-plus:before {content:"{";} +.sosa-minus:before {content:"|";} +.sosa-obelus:before {content:"}";} +.sosa-multiply:before {content:"~";} +.sosa-basket:before {content:"Ä";} +.sosa-cart:before {content:"Å";} +.sosa-house:before {content:"Ç";} +.sosa-closedmail:before {content:"É";} +.sosa-openmail:before {content:"Ñ";} +.sosa-newmail:before {content:"Ö";} +.sosa-person:before {content:"Ü";} +.sosa-people:before {content:"á";} +.sosa-download:before {content:"à";} +.sosa-upload:before {content:"â";} +.sosa-link:before {content:"ä";} +.sosa-exit:before {content:"ã";} +.sosa-check:before {content:"å";} +.sosa-trash:before {content:"ç";} +.sosa-doc:before {content:"é";} +.sosa-locked:before {content:"è";} +.sosa-unlocked:before {content:"ê";} +.sosa-folder:before {content:"ë";} +.sosa-uparrow:before {content:"í";} +.sosa-downarrow:before {content:"ì";} +.sosa-north:before {content:"î";} +.sosa-south:before {content:"ï";} +.sosa-east:before {content:"ñ";} +.sosa-west:before {content:"ó";} +.sosa-sun:before {content:"ò";} +.sosa-cloud:before {content:"ô";} +.sosa-cloudsun:before {content:"ö";} +.sosa-cloudrain:before {content:"õ";} +.sosa-cloudstorm:before {content:"ú";} +.sosa-snowflake:before {content:"ù";} +.sosa-cloudsnow:before {content:"û";} +.sosa-clouddown:before {content:"ü";} +.sosa-dagger:before {content:"†";} +.sosa-cloudnote:before {content:"°";} +.sosa-pound:before {content:"£";} +.sosa-euro:before {content:"€";} +.sosa-leftarrow:before {content:"‹";} +.sosa-rightarrow:before {content:"›";} \ No newline at end of file diff --git a/app/api/fonts/sosa/sosa.eot b/app/api/fonts/sosa/sosa.eot new file mode 100755 index 0000000..ec8c881 Binary files /dev/null and b/app/api/fonts/sosa/sosa.eot differ diff --git a/app/api/fonts/sosa/sosa.svg b/app/api/fonts/sosa/sosa.svg new file mode 100755 index 0000000..b83aaca --- /dev/null +++ b/app/api/fonts/sosa/sosa.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/api/fonts/sosa/sosa.ttf b/app/api/fonts/sosa/sosa.ttf new file mode 100755 index 0000000..238d5d9 Binary files /dev/null and b/app/api/fonts/sosa/sosa.ttf differ diff --git a/app/api/fonts/sosa/sosa.woff b/app/api/fonts/sosa/sosa.woff new file mode 100755 index 0000000..e53cb92 Binary files /dev/null and b/app/api/fonts/sosa/sosa.woff differ diff --git a/app/api/fonts/stateface/stateface-min.css b/app/api/fonts/stateface/stateface-min.css new file mode 100755 index 0000000..429a0ac --- /dev/null +++ b/app/api/fonts/stateface/stateface-min.css @@ -0,0 +1 @@ +@font-face{font-family:'StateFace';src:url('stateface-regular-webfont.eot');src:url('stateface-regular-webfont.eot?#iefix') format('embedded-opentype'),url('stateface-regular-webfont.woff') format('woff'),url('stateface-regular-webfont.ttf') format('truetype'),url('stateface-regular-webfont.svg#StateFaceRegular') format('svg');font-weight:normal;font-style:normal}.stateface-ak:before{content:"A"}.stateface-al:before{content:"B"}.stateface-ar:before{content:"C"}.stateface-az:before{content:"D"}.stateface-ca:before{content:"E"}.stateface-co:before{content:"F"}.stateface-ct:before{content:"G"}.stateface-dc:before{content:"y"}.stateface-de:before{content:"H"}.stateface-fl:before{content:"I"}.stateface-ga:before{content:"J"}.stateface-hi:before{content:"K"}.stateface-ia:before{content:"L"}.stateface-id:before{content:"M"}.stateface-il:before{content:"N"}.stateface-in:before{content:"O"}.stateface-ks:before{content:"P"}.stateface-ky:before{content:"Q"}.stateface-la:before{content:"R"}.stateface-ma:before{content:"S"}.stateface-md:before{content:"T"}.stateface-me:before{content:"U"}.stateface-mi:before{content:"V"}.stateface-mn:before{content:"W"}.stateface-mo:before{content:"X"}.stateface-ms:before{content:"Y"}.stateface-mt:before{content:"Z"}.stateface-nc:before{content:"a"}.stateface-nd:before{content:"b"}.stateface-ne:before{content:"c"}.stateface-nh:before{content:"d"}.stateface-nj:before{content:"e"}.stateface-nm:before{content:"f"}.stateface-nv:before{content:"g"}.stateface-ny:before{content:"h"}.stateface-oh:before{content:"i"}.stateface-ok:before{content:"j"}.stateface-or:before{content:"k"}.stateface-pa:before{content:"l"}.stateface-ri:before{content:"m"}.stateface-sc:before{content:"n"}.stateface-sd:before{content:"o"}.stateface-tn:before{content:"p"}.stateface-tx:before{content:"q"}.stateface-us:before{content:"z"}.stateface-ut:before{content:"r"}.stateface-va:before{content:"s"}.stateface-vt:before{content:"t"}.stateface-wa:before{content:"u"}.stateface-wi:before{content:"v"}.stateface-wv:before{content:"w"}.stateface-wy:before{content:"x"} \ No newline at end of file diff --git a/app/api/fonts/stateface/stateface-regular-webfont.eot b/app/api/fonts/stateface/stateface-regular-webfont.eot new file mode 100755 index 0000000..91eb857 Binary files /dev/null and b/app/api/fonts/stateface/stateface-regular-webfont.eot differ diff --git a/app/api/fonts/stateface/stateface-regular-webfont.svg b/app/api/fonts/stateface/stateface-regular-webfont.svg new file mode 100755 index 0000000..13c361d --- /dev/null +++ b/app/api/fonts/stateface/stateface-regular-webfont.svg @@ -0,0 +1,95 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Copyright 2012 ProPublica See LICENSE file for redistribution details +Designer : ProPublica +Foundry : USGS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/api/fonts/stateface/stateface-regular-webfont.ttf b/app/api/fonts/stateface/stateface-regular-webfont.ttf new file mode 100755 index 0000000..a661ac1 Binary files /dev/null and b/app/api/fonts/stateface/stateface-regular-webfont.ttf differ diff --git a/app/api/fonts/stateface/stateface-regular-webfont.woff b/app/api/fonts/stateface/stateface-regular-webfont.woff new file mode 100755 index 0000000..eec4371 Binary files /dev/null and b/app/api/fonts/stateface/stateface-regular-webfont.woff differ diff --git a/app/api/fonts/stateface/stateface.css b/app/api/fonts/stateface/stateface.css new file mode 100755 index 0000000..ad67c07 --- /dev/null +++ b/app/api/fonts/stateface/stateface.css @@ -0,0 +1,218 @@ + @font-face { + font-family: 'StateFace'; + src: url('stateface-regular-webfont.eot'); + src: url('stateface-regular-webfont.eot?#iefix') format('embedded-opentype'), + url('stateface-regular-webfont.woff') format('woff'), + url('stateface-regular-webfont.ttf') format('truetype'), + url('stateface-regular-webfont.svg#StateFaceRegular') format('svg'); + font-weight: normal; + font-style: normal; +} + +.stateface-ak:before { + content: "A"; +} + +.stateface-al:before { + content: "B"; +} + +.stateface-ar:before { + content: "C"; +} + +.stateface-az:before { + content: "D"; +} + +.stateface-ca:before { + content: "E"; +} + +.stateface-co:before { + content: "F"; +} + +.stateface-ct:before { + content: "G"; +} + +.stateface-dc:before { + content: "y"; +} + +.stateface-de:before { + content: "H"; +} + +.stateface-fl:before { + content: "I"; +} + +.stateface-ga:before { + content: "J"; +} + +.stateface-hi:before { + content: "K"; +} + +.stateface-ia:before { + content: "L"; +} + +.stateface-id:before { + content: "M"; +} + +.stateface-il:before { + content: "N"; +} + +.stateface-in:before { + content: "O"; +} + +.stateface-ks:before { + content: "P"; +} + +.stateface-ky:before { + content: "Q"; +} + +.stateface-la:before { + content: "R"; +} + +.stateface-ma:before { + content: "S"; +} + +.stateface-md:before { + content: "T"; +} + +.stateface-me:before { + content: "U"; +} + +.stateface-mi:before { + content: "V"; +} + +.stateface-mn:before { + content: "W"; +} + +.stateface-mo:before { + content: "X"; +} + +.stateface-ms:before { + content: "Y"; +} + +.stateface-mt:before { + content: "Z"; +} + +.stateface-nc:before { + content: "a"; +} + +.stateface-nd:before { + content: "b"; +} + +.stateface-ne:before { + content: "c"; +} + +.stateface-nh:before { + content: "d"; +} + +.stateface-nj:before { + content: "e"; +} + +.stateface-nm:before { + content: "f"; +} + +.stateface-nv:before { + content: "g"; +} + +.stateface-ny:before { + content: "h"; +} + +.stateface-oh:before { + content: "i"; +} + +.stateface-ok:before { + content: "j"; +} + +.stateface-or:before { + content: "k"; +} + +.stateface-pa:before { + content: "l"; +} + +.stateface-ri:before { + content: "m"; +} + +.stateface-sc:before { + content: "n"; +} + +.stateface-sd:before { + content: "o"; +} + +.stateface-tn:before { + content: "p"; +} + +.stateface-tx:before { + content: "q"; +} + +.stateface-us:before { + content: "z"; +} + +.stateface-ut:before { + content: "r"; +} + +.stateface-va:before { + content: "s"; +} + +.stateface-vt:before { + content: "t"; +} + +.stateface-wa:before { + content: "u"; +} + +.stateface-wi:before { + content: "v"; +} + +.stateface-wv:before { + content: "w"; +} + +.stateface-wy:before { + content: "x"; +} diff --git a/app/api/fonts/typicons/typicons-extract.json b/app/api/fonts/typicons/typicons-extract.json new file mode 100755 index 0000000..43af74c --- /dev/null +++ b/app/api/fonts/typicons/typicons-extract.json @@ -0,0 +1,89 @@ +{ + "typicons-location":"A", + "typicons-phone":"B", + "typicons-home":"C", + "typicons-camera":"D", + "typicons-left":"E", + "typicons-right":"F", + "typicons-up":"G", + "typicons-down":"H", + "typicons-refresh":"I", + "typicons-sync":"J", + "typicons-loop":"K", + "typicons-repeat":"L", + "typicons-shuffle":"M", + "typicons-rss":"N", + "typicons-cog":"O", + "typicons-spanner":"P", + "typicons-barChart":"Q", + "typicons-pieChart":"R", + "typicons-lineChart":"S", + "typicons-views":"T", + "typicons-zoomIn":"V", + "typicons-zoomOut":"U", + "typicons-export":"W", + "typicons-user":"X", + "typicons-group":"Y", + "typicons-microphone":"Z", + "typicons-globe":"a", + "typicons-thumbsUp":"b", + "typicons-thumbsDown":"c", + "typicons-tag":"d", + "typicons-tab":"e", + "typicons-warning":"f", + "typicons-tick":"g", + "typicons-beta":"h", + "typicons-unlock":"i", + "typicons-lock":"j", + "typicons-eject":"k", + "typicons-move":"l", + "typicons-expand":"m", + "typicons-cancel":"n", + "typicons-power":"o", + "typicons-compass":"p", + "typicons-radar":"q", + "typicons-directions":"r", + "typicons-pin":"s", + "typicons-mute":"t", + "typicons-volume":"u", + "typicons-world":"v", + "typicons-write":"w", + "typicons-minus":"x", + "typicons-equals":"y", + "typicons-feed":"z", + "typicons-batteryNone":"0", + "typicons-batteryLow":"1", + "typicons-batteryMid":"2", + "typicons-batteryHigh":"3", + "typicons-batteryPower":"4", + "typicons-plus":"5", + "typicons-times":"6", + "typicons-next":"7", + "typicons-previous":"8", + "typicons-edit":"9", + "typicons-cut":"'", + "typicons-anchor":"(", + "typicons-bookmark":")", + "typicons-music":"*", + "typicons-puzzle":"+", + "typicons-archive":",", + "typicons-mobile":"-", + "typicons-brightness":"/", + "typicons-flag":"{", + "typicons-info":"|", + "typicons-unknown":"}", + "typicons-chat":"~", + "typicons-mail":"[", + "typicons-message":"\\005C", + "typicons-delete":"]", + "typicons-backspace":"^", + "typicons-infinity":"_", + "typicons-key":"$", + "typicons-time":"%", + "typicons-grid":"\\0022", + "typicons-list":"\\0023", + "typicons-heart":";", + "typicons-star":"=", + "typicons-back":"?", + "typicons-forward":"@" +} \ No newline at end of file diff --git a/app/api/fonts/typicons/typicons-min.css b/app/api/fonts/typicons/typicons-min.css new file mode 100755 index 0000000..3affcbd --- /dev/null +++ b/app/api/fonts/typicons/typicons-min.css @@ -0,0 +1 @@ +.typicons-location:before{content:"A"}.typicons-phone:before{content:"B"}.typicons-home:before{content:"C"}.typicons-camera:before{content:"D"}.typicons-left:before{content:"E"}.typicons-right:before{content:"F"}.typicons-up:before{content:"G"}.typicons-down:before{content:"H"}.typicons-refresh:before{content:"I"}.typicons-sync:before{content:"J"}.typicons-loop:before{content:"K"}.typicons-repeat:before{content:"L"}.typicons-shuffle:before{content:"M"}.typicons-rss:before{content:"N"}.typicons-cog:before{content:"O"}.typicons-spanner:before{content:"P"}.typicons-barChart:before{content:"Q"}.typicons-pieChart:before{content:"R"}.typicons-lineChart:before{content:"S"}.typicons-views:before{content:"T"}.typicons-zoomIn:before{content:"V"}.typicons-zoomOut:before{content:"U"}.typicons-export:before{content:"W"}.typicons-user:before{content:"X"}.typicons-group:before{content:"Y"}.typicons-microphone:before{content:"Z"}.typicons-globe:before{content:"a"}.typicons-thumbsUp:before{content:"b"}.typicons-thumbsDown:before{content:"c"}.typicons-tag:before{content:"d"}.typicons-tab:before{content:"e"}.typicons-warning:before{content:"f"}.typicons-tick:before{content:"g"}.typicons-beta:before{content:"h"}.typicons-unlock:before{content:"i"}.typicons-lock:before{content:"j"}.typicons-eject:before{content:"k"}.typicons-move:before{content:"l"}.typicons-expand:before{content:"m"}.typicons-cancel:before{content:"n"}.typicons-power:before{content:"o"}.typicons-compass:before{content:"p"}.typicons-radar:before{content:"q"}.typicons-directions:before{content:"r"}.typicons-pin:before{content:"s"}.typicons-mute:before{content:"t"}.typicons-volume:before{content:"u"}.typicons-world:before{content:"v"}.typicons-write:before{content:"w"}.typicons-minus:before{content:"x"}.typicons-equals:before{content:"y"}.typicons-feed:before{content:"z"}.typicons-batteryNone:before{content:"0"}.typicons-batteryLow:before{content:"1"}.typicons-batteryMid:before{content:"2"}.typicons-batteryHigh:before{content:"3"}.typicons-batteryPower:before{content:"4"}.typicons-plus:before{content:"5"}.typicons-times:before{content:"6"}.typicons-next:before{content:"7"}.typicons-previous:before{content:"8"}.typicons-edit:before{content:"9"}.typicons-cut:before{content:"'"}.typicons-anchor:before{content:"("}.typicons-bookmark:before{content:")"}.typicons-music:before{content:"*"}.typicons-puzzle:before{content:"+"}.typicons-archive:before{content:","}.typicons-mobile:before{content:"-"}.typicons-brightness:before{content:"/"}.typicons-flag:before{content:"{"}.typicons-info:before{content:"|"}.typicons-unknown:before{content:"}"}.typicons-chat:before{content:"~"}.typicons-mail:before{content:"["}.typicons-message:before{content:"\005C"}.typicons-delete:before{content:"]"}.typicons-backspace:before{content:"^"}.typicons-infinity:before{content:"_"}.typicons-key:before{content:"$"}.typicons-time:before{content:"%"}.typicons-grid:before{content:"\0022"}.typicons-list:before{content:"\0023"}.typicons-heart:before{content:";"}.typicons-star:before{content:"="}.typicons-back:before{content:"?"}.typicons-forward:before{content:"@"} \ No newline at end of file diff --git a/app/api/fonts/typicons/typicons-regular-webfont.eot b/app/api/fonts/typicons/typicons-regular-webfont.eot new file mode 100755 index 0000000..a252ac8 Binary files /dev/null and b/app/api/fonts/typicons/typicons-regular-webfont.eot differ diff --git a/app/api/fonts/typicons/typicons-regular-webfont.svg b/app/api/fonts/typicons/typicons-regular-webfont.svg new file mode 100755 index 0000000..bcb4549 --- /dev/null +++ b/app/api/fonts/typicons/typicons-regular-webfont.svg @@ -0,0 +1,159 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Stephen Hutchings 2012 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/api/fonts/typicons/typicons-regular-webfont.ttf b/app/api/fonts/typicons/typicons-regular-webfont.ttf new file mode 100755 index 0000000..5094d91 Binary files /dev/null and b/app/api/fonts/typicons/typicons-regular-webfont.ttf differ diff --git a/app/api/fonts/typicons/typicons-regular-webfont.woff b/app/api/fonts/typicons/typicons-regular-webfont.woff new file mode 100755 index 0000000..d47d926 Binary files /dev/null and b/app/api/fonts/typicons/typicons-regular-webfont.woff differ diff --git a/app/api/fonts/typicons/typicons.css b/app/api/fonts/typicons/typicons.css new file mode 100755 index 0000000..4c6f2e3 --- /dev/null +++ b/app/api/fonts/typicons/typicons.css @@ -0,0 +1,98 @@ +/* + Typicons + + Free-to-use vector icons embedded in a webfont kit. + https://github.com/juancarloscruzd/typicons_kit + http://typicons.com + + 2012 by Stephen Hutchings + + Licence: http://creativecommons.org/licenses/by-sa/3.0/ +*/ +.typicons-location:before {content: "A";} +.typicons-phone:before {content: "B";} +.typicons-home:before {content: "C";} +.typicons-camera:before {content: "D";} +.typicons-left:before {content: "E";} +.typicons-right:before {content: "F";} +.typicons-up:before {content: "G";} +.typicons-down:before {content: "H";} +.typicons-refresh:before {content: "I";} +.typicons-sync:before {content: "J";} +.typicons-loop:before {content: "K";} +.typicons-repeat:before {content: "L";} +.typicons-shuffle:before {content: "M";} +.typicons-rss:before {content: "N";} +.typicons-cog:before {content: "O";} +.typicons-spanner:before {content: "P";} +.typicons-barChart:before {content: "Q";} +.typicons-pieChart:before {content: "R";} +.typicons-lineChart:before {content: "S";} +.typicons-views:before {content: "T";} +.typicons-zoomIn:before {content: "V";} +.typicons-zoomOut:before {content: "U";} +.typicons-export:before {content: "W";} +.typicons-user:before {content: "X";} +.typicons-group:before {content: "Y";} +.typicons-microphone:before {content: "Z";} +.typicons-globe:before {content: "a";} +.typicons-thumbsUp:before {content: "b";} +.typicons-thumbsDown:before {content: "c";} +.typicons-tag:before {content: "d";} +.typicons-tab:before {content: "e";} +.typicons-warning:before {content: "f";} +.typicons-tick:before {content: "g";} +.typicons-beta:before {content: "h";} +.typicons-unlock:before {content: "i";} +.typicons-lock:before {content: "j";} +.typicons-eject:before {content: "k";} +.typicons-move:before {content: "l";} +.typicons-expand:before {content: "m";} +.typicons-cancel:before {content: "n";} +.typicons-power:before {content: "o";} +.typicons-compass:before {content: "p";} +.typicons-radar:before {content: "q";} +.typicons-directions:before {content: "r";} +.typicons-pin:before {content: "s";} +.typicons-mute:before {content: "t";} +.typicons-volume:before {content: "u";} +.typicons-world:before {content: "v";} +.typicons-write:before {content: "w";} +.typicons-minus:before {content: "x";} +.typicons-equals:before {content: "y";} +.typicons-feed:before {content: "z";} +.typicons-batteryNone:before {content: "0";} +.typicons-batteryLow:before {content: "1";} +.typicons-batteryMid:before {content: "2";} +.typicons-batteryHigh:before {content: "3";} +.typicons-batteryPower:before {content: "4";} +.typicons-plus:before {content: "5";} +.typicons-times:before {content: "6";} +.typicons-next:before {content: "7";} +.typicons-previous:before {content: "8";} +.typicons-edit:before {content: "9";} +.typicons-cut:before {content: "'";} +.typicons-anchor:before {content: "(";} +.typicons-bookmark:before {content: ")";} +.typicons-music:before {content: "*";} +.typicons-puzzle:before {content: "+";} +.typicons-archive:before {content: ",";} +.typicons-mobile:before {content: "-";} +.typicons-brightness:before {content: "/";} +.typicons-flag:before {content: "{";} +.typicons-info:before {content: "|";} +.typicons-unknown:before {content: "}";} +.typicons-chat:before {content: "~";} +.typicons-mail:before {content: "[";} +.typicons-message:before {content: "\005C";} +.typicons-delete:before {content: "]";} +.typicons-backspace:before {content: "^";} +.typicons-infinity:before {content: "_";} +.typicons-key:before {content: "$";} +.typicons-time:before {content: "%";} +.typicons-grid:before {content: "\0022";} +.typicons-list:before {content: "\0023";} +.typicons-heart:before {content: ";";} +.typicons-star:before {content: "=";} +.typicons-back:before {content: "?";} +.typicons-forward:before {content: "@";} \ No newline at end of file diff --git a/app/api/fonts/websymbols/websymbols-min.css b/app/api/fonts/websymbols/websymbols-min.css new file mode 100755 index 0000000..88ed8c2 --- /dev/null +++ b/app/api/fonts/websymbols/websymbols-min.css @@ -0,0 +1 @@ +@font-face{font-family:'WebSymbolsRegular';src:url('websymbols-regular-webfont.eot');src:url('websymbols-regular-webfont.eot?#iefix') format('embedded-opentype'),url('websymbols-regular-webfont.woff') format('woff'),url('websymbols-regular-webfont.ttf') format('truetype'),url('websymbols-regular-webfont.svg#WebSymbolsRegular') format('svg');font-weight:normal;font-style:normal} \ No newline at end of file diff --git a/app/api/fonts/websymbols/websymbols-regular-webfont.eot b/app/api/fonts/websymbols/websymbols-regular-webfont.eot new file mode 100755 index 0000000..4bf9c07 Binary files /dev/null and b/app/api/fonts/websymbols/websymbols-regular-webfont.eot differ diff --git a/app/api/fonts/websymbols/websymbols-regular-webfont.svg b/app/api/fonts/websymbols/websymbols-regular-webfont.svg new file mode 100755 index 0000000..ecf0e30 --- /dev/null +++ b/app/api/fonts/websymbols/websymbols-regular-webfont.svg @@ -0,0 +1,108 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Copyright c 2011 by Just Be Nice studio All rights reserved +Designer : Igor Kiselev +Foundry : Just Be Nice studio +Foundry URL : httpwwwjustbenicestudiocom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/api/fonts/websymbols/websymbols-regular-webfont.ttf b/app/api/fonts/websymbols/websymbols-regular-webfont.ttf new file mode 100755 index 0000000..e7da1ba Binary files /dev/null and b/app/api/fonts/websymbols/websymbols-regular-webfont.ttf differ diff --git a/app/api/fonts/websymbols/websymbols-regular-webfont.woff b/app/api/fonts/websymbols/websymbols-regular-webfont.woff new file mode 100755 index 0000000..a5f7f01 Binary files /dev/null and b/app/api/fonts/websymbols/websymbols-regular-webfont.woff differ diff --git a/app/api/fonts/websymbols/websymbols.css b/app/api/fonts/websymbols/websymbols.css new file mode 100755 index 0000000..0f62e98 --- /dev/null +++ b/app/api/fonts/websymbols/websymbols.css @@ -0,0 +1,16 @@ +/* Generated by Font Squirrel (http://www.fontsquirrel.com) on November 16, 2011 */ + + + +@font-face { + font-family: 'WebSymbolsRegular'; + src: url('websymbols-regular-webfont.eot'); + src: url('websymbols-regular-webfont.eot?#iefix') format('embedded-opentype'), + url('websymbols-regular-webfont.woff') format('woff'), + url('websymbols-regular-webfont.ttf') format('truetype'), + url('websymbols-regular-webfont.svg#WebSymbolsRegular') format('svg'); + font-weight: normal; + font-style: normal; + +} + diff --git a/app/api/fonts/zocial/zocial-extract.json b/app/api/fonts/zocial/zocial-extract.json new file mode 100755 index 0000000..af8c1c7 --- /dev/null +++ b/app/api/fonts/zocial/zocial-extract.json @@ -0,0 +1,96 @@ +{ + "zocial-acrobat":"\\00E3", + "zocial-amazon":"a", + "zocial-android":"&", + "zocial-angellist":"\\00D6", + "zocial-aol":"\"", + "zocial-appnet":"\\00E1", + "zocial-appstore":"A", + "zocial-bitbucket":"\\00E9", + "zocial-bitcoin":"2", + "zocial-blogger":"B", + "zocial-buffer":"\\00E5", + "zocial-call":"7", + "zocial-cal":" ", + "zocial-cart":"\\00C9", + "zocial-chrome":"[", + "zocial-cloudapp":"c", + "zocial-creativecommons":"C", + "zocial-delicious":"#", + "zocial-digg":";", + "zocial-disqus":"Q", + "zocial-dribbble":"D", + "zocial-dropbox":"d", + "zocial-drupal":"\\00E4", + "zocial-dwolla":"\\00E0", + "zocial-email":"]", + "zocial-eventasaurus":"v", + "zocial-eventbrite":"|", + "zocial-eventful":"'", + "zocial-evernote":"E", + "zocial-facebook":"f", + "zocial-fivehundredpx":"0", + "zocial-flattr":"%", + "zocial-flickr":"F", + "zocial-forrst":":", + "zocial-foursquare":"4", + "zocial-github":"g", + "zocial-gmail":"m", + "zocial-google":"G", + "zocial-googleplay":"h", + "zocial-googleplus":"+", + "zocial-gowalla":"@", + "zocial-grooveshark":"8", + "zocial-guest":"?", + "zocial-html5":"5", + "zocial-ie":"6", + "zocial-instagram":"\\00DC", + "zocial-instapaper":"I", + "zocial-intensedebate":"{", + "zocial-itunes":"i", + "zocial-klout":"K", + "zocial-lanyrd":"-", + "zocial-lastfm":"l", + "zocial-linkedin":"L", + "zocial-macstore":"^", + "zocial-meetup":"M", + "zocial-myspace":"_", + "zocial-ninetyninedesigns":"9", + "zocial-openid":"o", + "zocial-opentable":"\\00C7", + "zocial-paypal":"$", + "zocial-pinboard":"n", + "zocial-pinterest":"1", + "zocial-plancast":"P", + "zocial-plurk":"j", + "zocial-pocket":"\\00E7", + "zocial-podcast":"`", + "zocial-posterous":"~", + "zocial-print":"\\00D1", + "zocial-quora":"q", + "zocial-reddit":">", + "zocial-rss":"R", + "zocial-scribd":"}", + "zocial-skype":"S", + "zocial-smashing":"*", + "zocial-songkick":"k", + "zocial-soundcloud":"s", + "zocial-spotify":"=", + "zocial-statusnet":"\\00E2", + "zocial-steam":"b", + "zocial-stripe":"\\00A3", + "zocial-stumbleupon":"/", + "zocial-tumblr":"t", + "zocial-twitter":"T", + "zocial-viadeo":"H", + "zocial-vimeo":"V", + "zocial-vk":"N", + "zocial-weibo":"J", + "zocial-wikipedia":",", + "zocial-windows":"W", + "zocial-wordpress":"w", + "zocial-xing":"X", + "zocial-yahoo":"Y", + "zocial-yelp":"y", + "zocial-youtube":"U" +} \ No newline at end of file diff --git a/app/api/fonts/zocial/zocial-min.css b/app/api/fonts/zocial/zocial-min.css new file mode 100755 index 0000000..cb5412c --- /dev/null +++ b/app/api/fonts/zocial/zocial-min.css @@ -0,0 +1 @@ +.zocial-acrobat:before{content:"\00E3"}.zocial-amazon:before{content:"a"}.zocial-android:before{content:"&"}.zocial-angellist:before{content:"\00D6"}.zocial-aol:before{content:"\""}.zocial-appnet:before{content:"\00E1"}.zocial-appstore:before{content:"A"}.zocial-bitbucket:before{content:"\00E9"}.zocial-bitcoin:before{content:"2"}.zocial-blogger:before{content:"B"}.zocial-buffer:before{content:"\00E5"}.zocial-call:before{content:"7"}.zocial-cal:before{content:"."}.zocial-cart:before{content:"\00C9"}.zocial-chrome:before{content:"["}.zocial-cloudapp:before{content:"c"}.zocial-creativecommons:before{content:"C"}.zocial-delicious:before{content:"#"}.zocial-digg:before{content:";"}.zocial-disqus:before{content:"Q"}.zocial-dribbble:before{content:"D"}.zocial-dropbox:before{content:"d"}.zocial-drupal:before{content:"\00E4"}.zocial-dwolla:before{content:"\00E0"}.zocial-email:before{content:"]"}.zocial-eventasaurus:before{content:"v"}.zocial-eventbrite:before{content:"|"}.zocial-eventful:before{content:"'"}.zocial-evernote:before{content:"E"}.zocial-facebook:before{content:"f"}.zocial-fivehundredpx:before{content:"0"}.zocial-flattr:before{content:"%"}.zocial-flickr:before{content:"F"}.zocial-forrst:before{content:":"}.zocial-foursquare:before{content:"4"}.zocial-github:before{content:"g"}.zocial-gmail:before{content:"m"}.zocial-google:before{content:"G"}.zocial-googleplay:before{content:"h"}.zocial-googleplus:before{content:"+"}.zocial-gowalla:before{content:"@"}.zocial-grooveshark:before{content:"8"}.zocial-guest:before{content:"?"}.zocial-html5:before{content:"5"}.zocial-ie:before{content:"6"}.zocial-instagram:before{content:"\00DC"}.zocial-instapaper:before{content:"I"}.zocial-intensedebate:before{content:"{"}.zocial-itunes:before{content:"i"}.zocial-klout:before{content:"K"}.zocial-lanyrd:before{content:"-"}.zocial-lastfm:before{content:"l"}.zocial-linkedin:before{content:"L"}.zocial-macstore:before{content:"^"}.zocial-meetup:before{content:"M"}.zocial-myspace:before{content:"_"}.zocial-ninetyninedesigns:before{content:"9"}.zocial-openid:before{content:"o"}.zocial-opentable:before{content:"\00C7"}.zocial-paypal:before{content:"$"}.zocial-pinboard:before{content:"n"}.zocial-pinterest:before{content:"1"}.zocial-plancast:before{content:"P"}.zocial-plurk:before{content:"j"}.zocial-pocket:before{content:"\00E7"}.zocial-podcast:before{content:"`"}.zocial-posterous:before{content:"~"}.zocial-print:before{content:"\00D1"}.zocial-quora:before{content:"q"}.zocial-reddit:before{content:">"}.zocial-rss:before{content:"R"}.zocial-scribd:before{content:"}"}.zocial-skype:before{content:"S"}.zocial-smashing:before{content:"*"}.zocial-songkick:before{content:"k"}.zocial-soundcloud:before{content:"s"}.zocial-spotify:before{content:"="}.zocial-statusnet:before{content:"\00E2"}.zocial-steam:before{content:"b"}.zocial-stripe:before{content:"\00A3"}.zocial-stumbleupon:before{content:"/"}.zocial-tumblr:before{content:"t"}.zocial-twitter:before{content:"T"}.zocial-viadeo:before{content:"H"}.zocial-vimeo:before{content:"V"}.zocial-vk:before{content:"N"}.zocial-weibo:before{content:"J"}.zocial-wikipedia:before{content:","}.zocial-windows:before{content:"W"}.zocial-wordpress:before{content:"w"}.zocial-xing:before{content:"X"}.zocial-yahoo:before{content:"Y"}.zocial-yelp:before{content:"y"}.zocial-youtube:before{content:"U"} \ No newline at end of file diff --git a/app/api/fonts/zocial/zocial-regular-webfont.eot b/app/api/fonts/zocial/zocial-regular-webfont.eot new file mode 100755 index 0000000..96b54ed Binary files /dev/null and b/app/api/fonts/zocial/zocial-regular-webfont.eot differ diff --git a/app/api/fonts/zocial/zocial-regular-webfont.svg b/app/api/fonts/zocial/zocial-regular-webfont.svg new file mode 100755 index 0000000..fbb7466 --- /dev/null +++ b/app/api/fonts/zocial/zocial-regular-webfont.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/api/fonts/zocial/zocial-regular-webfont.ttf b/app/api/fonts/zocial/zocial-regular-webfont.ttf new file mode 100755 index 0000000..48beab1 Binary files /dev/null and b/app/api/fonts/zocial/zocial-regular-webfont.ttf differ diff --git a/app/api/fonts/zocial/zocial-regular-webfont.woff b/app/api/fonts/zocial/zocial-regular-webfont.woff new file mode 100755 index 0000000..8a0d869 Binary files /dev/null and b/app/api/fonts/zocial/zocial-regular-webfont.woff differ diff --git a/app/api/fonts/zocial/zocial.css b/app/api/fonts/zocial/zocial.css new file mode 100755 index 0000000..7f03c81 --- /dev/null +++ b/app/api/fonts/zocial/zocial.css @@ -0,0 +1,100 @@ +/* +Zocial Butons +http://zocial.smcllns.com +by Sam Collins (@smcllns) +License: http://opensource.org/licenses/mit-license.php +*/ +.zocial-acrobat:before {content: "\00E3";} +.zocial-amazon:before {content: "a";} +.zocial-android:before {content: "&";} +.zocial-angellist:before {content: "\00D6";} +.zocial-aol:before {content: "\"";} +.zocial-appnet:before {content: "\00E1";} +.zocial-appstore:before {content: "A";} +.zocial-bitbucket:before {content: "\00E9";} +.zocial-bitcoin:before {content: "2";} +.zocial-blogger:before {content: "B";} +.zocial-buffer:before {content: "\00E5";} +.zocial-call:before {content: "7";} +.zocial-cal:before {content: ".";} +.zocial-cart:before {content: "\00C9";} +.zocial-chrome:before {content: "[";} +.zocial-cloudapp:before {content: "c";} +.zocial-creativecommons:before {content: "C";} +.zocial-delicious:before {content: "#";} +.zocial-digg:before {content: ";";} +.zocial-disqus:before {content: "Q";} +.zocial-dribbble:before {content: "D";} +.zocial-dropbox:before {content: "d";} +.zocial-drupal:before {content: "\00E4";} +.zocial-dwolla:before {content: "\00E0";} +.zocial-email:before {content: "]";} +.zocial-eventasaurus:before {content: "v";} +.zocial-eventbrite:before {content: "|";} +.zocial-eventful:before {content: "'";} +.zocial-evernote:before {content: "E";} +.zocial-facebook:before {content: "f";} +.zocial-fivehundredpx:before {content: "0";} +.zocial-flattr:before {content: "%";} +.zocial-flickr:before {content: "F";} +.zocial-forrst:before {content: ":";} +.zocial-foursquare:before {content: "4";} +.zocial-github:before {content: "g";} +.zocial-gmail:before {content: "m";} +.zocial-google:before {content: "G";} +.zocial-googleplay:before {content: "h";} +.zocial-googleplus:before {content: "+";} +.zocial-gowalla:before {content: "@";} +.zocial-grooveshark:before {content: "8";} +.zocial-guest:before {content: "?";} +.zocial-html5:before {content: "5";} +.zocial-ie:before {content: "6";} +.zocial-instagram:before {content: "\00DC";} +.zocial-instapaper:before {content: "I";} +.zocial-intensedebate:before {content: "{";} +.zocial-itunes:before {content: "i";} +.zocial-klout:before {content: "K"; } +.zocial-lanyrd:before {content: "-";} +.zocial-lastfm:before {content: "l";} +.zocial-linkedin:before {content: "L";} +.zocial-macstore:before {content: "^";} +.zocial-meetup:before {content: "M";} +.zocial-myspace:before {content: "_";} +.zocial-ninetyninedesigns:before {content: "9";} +.zocial-openid:before {content: "o";} +.zocial-opentable:before {content: "\00C7";} +.zocial-paypal:before {content: "$";} +.zocial-pinboard:before {content: "n";} +.zocial-pinterest:before {content: "1";} +.zocial-plancast:before {content: "P";} +.zocial-plurk:before {content: "j";} +.zocial-pocket:before {content: "\00E7";} +.zocial-podcast:before {content: "`";} +.zocial-posterous:before {content: "~";} +.zocial-print:before {content: "\00D1";} +.zocial-quora:before {content: "q";} +.zocial-reddit:before {content: ">";} +.zocial-rss:before {content: "R";} +.zocial-scribd:before {content: "}";} +.zocial-skype:before {content: "S";} +.zocial-smashing:before {content: "*";} +.zocial-songkick:before {content: "k";} +.zocial-soundcloud:before {content: "s";} +.zocial-spotify:before {content: "=";} +.zocial-statusnet:before {content: "\00E2";} +.zocial-steam:before {content: "b";} +.zocial-stripe:before {content: "\00A3";} +.zocial-stumbleupon:before {content: "/";} +.zocial-tumblr:before {content: "t";} +.zocial-twitter:before {content: "T";} +.zocial-viadeo:before {content: "H";} +.zocial-vimeo:before {content: "V";} +.zocial-vk:before {content: "N";} +.zocial-weibo:before {content: "J";} +.zocial-wikipedia:before {content: ",";} +.zocial-windows:before {content: "W";} +.zocial-wordpress:before {content: "w";} +.zocial-xing:before {content: "X"} +.zocial-yahoo:before {content: "Y";} +.zocial-yelp:before {content: "y";} +.zocial-youtube:before {content: "U";} \ No newline at end of file diff --git a/app/api/index.php b/app/api/index.php new file mode 100755 index 0000000..488703d --- /dev/null +++ b/app/api/index.php @@ -0,0 +1,60 @@ +getParam('family'); + $json = Leet::$Request->getParam('json'); + + // Get the font css + if (!empty($family)) { + // Get the fonts + $names = explode('|', $family); + + // #36: Set the default charset + $fonts = "@charset \"UTF-8\";"; + + // Get the CSS for each font + foreach ($names as $key => $fontname) { + $fonts .= Leet::$Fonts->getFamily($fontname); + } + + Leet::track(); + + // Output is CSS + header('Content-type: text/css'); + header('Content-Encoding: gzip'); + + print trim($fonts); + exit(); + } + + // Get the font JSON + if (!empty($json)) { + $name = Leet::$Request->getParam('json'); + + $json = file_get_contents("fonts/$name/$name-extract.json", FILE_USE_INCLUDE_PATH); + $array = json_decode($json, true); + $output = array(); + + foreach ($array as $key => $value) { + $output[] = array( + 'name' => $key, + 'value' => $value + ); + } + + header('Access-Control-Allow-Origin: *'); + header('Content-type: application/json'); + header('Content-Encoding: gzip'); + + print trim(json_encode($output)); + exit(); + } +?> \ No newline at end of file diff --git a/app/index.html b/app/index.html new file mode 100755 index 0000000..56aec82 --- /dev/null +++ b/app/index.html @@ -0,0 +1,358 @@ + + + + + We Love Icon Fonts + + + + + + + + + + + + + + + + + + + + + +
+
+
+

We Love Icon Fonts

+

We must stop here, this is icon fonts country!

+
+
+ +
+
+

What?

+

This is a free & open source icon fonts hosting service (like Google Web Fonts, but icon fonts only). Hurray!

+
+ +
+

Caution!

+

This is a public gamma. Use this service for mockups, reduced test-cases or CodePens, but not on productive systems!

+
+ +
+

Judgment time.

+

Send a message to @WeLoveIconFonts or create an issue on GitHub. +

+
+
+ + +
+
+
+

Brandico

+

Crowdsourced collection of web brands by fontello.

+
+
+ +
+
+ +
+
+
+
+ + +
+
+
+

entypo

+

A set of 250+ carefully crafted pictograms by Daniel Bruce.

+
+
+ +
+
+ +
+
+
+
+ + +
+
+
+

Font Awesome

+

The iconic font designed for use with Twitter Bootstrap by Dave Gandy.

+
+
+ +
+
+ +
+
+
+
+ + +
+
+
+

Fontelico

+

A bunch of emoticons, loading- and browser-icons are in this awesome collection by fontello.

+
+
+ +
+
+ +
+
+
+
+ + +
+
+
+

Maki

+

It's a clean point of interest icon set made for web cartography by MapBox.

+
+
+ +
+
+
+
+
+
+ + +
+
+
+

OpenWeb Icons

+

Be proud of using Open Web Standards and show it to the world... by Matthias Pfefferle.

+
+
+ +
+ +
+
+
+
+ + +
+
+
+

Typicons

+

Just some nice icons by Stephen Hutchings.

+
+
+ +
+
+ +
+
+
+
+ + +
+
+
+

zocial

+

A huge collection of zocial & brand icons by Sam Collins.

+
+
+ +
+
+ +
+
+
+
+ + +
+
+
+

Use selected fonts

+
+
+ +
+
+
+Pro tip: Select some icon fonts to the see real output here!
+        
+
+
+
+ + +
+
+
+

How to!

+

3 steps to integrate icon fonts into your project:

+
+
+ +
+ +
+
+ +
+

1. Add the icon font(s) to your collection:

+ +
+ +
+

2. Import the icon fonts(s) into your css and add the font-family('s):

+
+@import url(http://weloveiconfonts.com/api/?family=zocial);
+
+/* zocial */
+[class*="zocial-"]:before {
+  font-family: 'zocial', sans-serif;
+}
+
+
+
+ +
+
+ + +
+

3. Burn baby, burn!

+
+<!-- Single Element -->
+<span class="zocial-dribbble"></span>
+        
+
+ +
+
+
+<!-- Group of Elements -->
+<ul>
+  <li class="zocial-twitter"></li>
+  <li class="zocial-flickr"></li>
+  <li class="zocial-lastfm"></li>
+  <li class="zocial-reddit"></li>
+</ul>
+        
+ +
    + +
  • +
  • +
  • +
+
+ +
+ + + +
+
+
+

+ + Pro Tip: Use the element inspector of your favorite browser and discover the icons on this page for more examples! +

+
+
+
+ + + + + +
+
+
+
+ Handcrafted 2012 - 2013 by @TimPietrusky in Frankfurt (Main), Germany. +
+
+
+
+ + + + + + + + + + + \ No newline at end of file diff --git a/app/skin/css/style.css b/app/skin/css/style.css new file mode 100755 index 0000000..07e3720 --- /dev/null +++ b/app/skin/css/style.css @@ -0,0 +1 @@ +.align--center{text-align:center}@font-face{font-family:'Lato';font-style:normal;font-weight:400;src:local("Lato Regular"),local("Lato-Regular"),url(http://themes.googleusercontent.com/static/fonts/lato/v6/9k-RPmcnxYEPm8CNFsH2gg.woff) format("woff")}@font-face{font-family:'Lato';font-style:normal;font-weight:700;src:local("Lato Bold"),local("Lato-Bold"),url(http://themes.googleusercontent.com/static/fonts/lato/v6/wkfQbvfT_02e2IWO3yYueQ.woff) format("woff")}@font-face{font-family:'Source Code Pro';font-style:normal;font-weight:400;src:local("Source Code Pro"),local("SourceCodePro-Regular"),url(http://themes.googleusercontent.com/static/fonts/sourcecodepro/v3/mrl8jkM18OlOQN8JLgasDxM0YzuT7MdOe03otPbuUS0.woff) format("woff")}@font-face{font-family:'Typicons';font-style:'normal';font-weight:'normal';src:url("http://weloveiconfonts.com/api/fonts/typicons/typicons-regular-webfont.eot");src:url("http://weloveiconfonts.com/api/fonts/typicons/typicons-regular-webfont.eot?#iefix") format("eot"),url("http://weloveiconfonts.com/api/fonts/typicons/typicons-regular-webfont.woff") format("woff"),url("http://weloveiconfonts.com/api/fonts/typicons/typicons-regular-webfont.ttf") format("truetype"),url("http://weloveiconfonts.com/api/fonts/typicons/typicons-regular-webfont.svg#TypiconsRegular") format("svg")}.typicons-location:before{content:"A"}.typicons-phone:before{content:"B"}.typicons-home:before{content:"C"}.typicons-camera:before{content:"D"}.typicons-left:before{content:"E"}.typicons-right:before{content:"F"}.typicons-up:before{content:"G"}.typicons-down:before{content:"H"}.typicons-refresh:before{content:"I"}.typicons-sync:before{content:"J"}.typicons-loop:before{content:"K"}.typicons-repeat:before{content:"L"}.typicons-shuffle:before{content:"M"}.typicons-rss:before{content:"N"}.typicons-cog:before{content:"O"}.typicons-spanner:before{content:"P"}.typicons-barChart:before{content:"Q"}.typicons-pieChart:before{content:"R"}.typicons-lineChart:before{content:"S"}.typicons-views:before{content:"T"}.typicons-zoomIn:before{content:"V"}.typicons-zoomOut:before{content:"U"}.typicons-export:before{content:"W"}.typicons-user:before{content:"X"}.typicons-group:before{content:"Y"}.typicons-microphone:before{content:"Z"}.typicons-globe:before{content:"a"}.typicons-thumbsUp:before{content:"b"}.typicons-thumbsDown:before{content:"c"}.typicons-tag:before{content:"d"}.typicons-tab:before{content:"e"}.typicons-warning:before{content:"f"}.typicons-tick:before{content:"g"}.typicons-beta:before{content:"h"}.typicons-unlock:before{content:"i"}.typicons-lock:before{content:"j"}.typicons-eject:before{content:"k"}.typicons-move:before{content:"l"}.typicons-expand:before{content:"m"}.typicons-cancel:before{content:"n"}.typicons-power:before{content:"o"}.typicons-compass:before{content:"p"}.typicons-radar:before{content:"q"}.typicons-directions:before{content:"r"}.typicons-pin:before{content:"s"}.typicons-mute:before{content:"t"}.typicons-volume:before{content:"u"}.typicons-world:before{content:"v"}.typicons-write:before{content:"w"}.typicons-minus:before{content:"x"}.typicons-equals:before{content:"y"}.typicons-feed:before{content:"z"}.typicons-batteryNone:before{content:"0"}.typicons-batteryLow:before{content:"1"}.typicons-batteryMid:before{content:"2"}.typicons-batteryHigh:before{content:"3"}.typicons-batteryPower:before{content:"4"}.typicons-plus:before{content:"5"}.typicons-times:before{content:"6"}.typicons-next:before{content:"7"}.typicons-previous:before{content:"8"}.typicons-edit:before{content:"9"}.typicons-cut:before{content:"'"}.typicons-anchor:before{content:"("}.typicons-bookmark:before{content:")"}.typicons-music:before{content:"*"}.typicons-puzzle:before{content:"+"}.typicons-archive:before{content:","}.typicons-mobile:before{content:"-"}.typicons-brightness:before{content:"/"}.typicons-flag:before{content:"{"}.typicons-info:before{content:"|"}.typicons-unknown:before{content:"}"}.typicons-chat:before{content:"~"}.typicons-mail:before{content:"["}.typicons-message:before{content:"\005C"}.typicons-delete:before{content:"]"}.typicons-backspace:before{content:"^"}.typicons-infinity:before{content:"_"}.typicons-key:before{content:"$"}.typicons-time:before{content:"%"}.typicons-grid:before{content:"\0022"}.typicons-list:before{content:"\0023"}.typicons-heart:before{content:";"}.typicons-star:before{content:"="}.typicons-back:before{content:"?"}.typicons-forward:before{content:"@"}@font-face{font-family:'brandico';font-style:'normal';font-weight:'normal';src:url("http://weloveiconfonts.com/api/fonts/brandico/brandico.eot");src:url("http://weloveiconfonts.com/api/fonts/brandico/brandico.eot?#iefix") format("eot"),url("http://weloveiconfonts.com/api/fonts/brandico/brandico.woff") format("woff"),url("http://weloveiconfonts.com/api/fonts/brandico/brandico.ttf") format("truetype"),url("http://weloveiconfonts.com/api/fonts/brandico/brandico.svg#brandico") format("svg")}.brandico-facebook:before{content:"\f300"}.brandico-facebook-rect:before{content:"\f301"}.brandico-twitter:before{content:"\f302"}.brandico-twitter-bird:before{content:"\f303"}.brandico-vimeo:before{content:"\f30f"}.brandico-vimeo-rect:before{content:"\f30e"}.brandico-tumblr:before{content:"\f311"}.brandico-tumblr-rect:before{content:"\f310"}.brandico-googleplus-rect:before{content:"\f309"}.brandico-github-text:before{content:"\f307"}.brandico-github:before{content:"\f308"}.brandico-skype:before{content:"\f30b"}.brandico-icq:before{content:"\f304"}.brandico-yandex:before{content:"\f305"}.brandico-yandex-rect:before{content:"\f306"}.brandico-vkontakte-rect:before{content:"\f30a"}.brandico-odnoklassniki:before{content:"\f30c"}.brandico-odnoklassniki-rect:before{content:"\f30d"}.brandico-friendfeed:before{content:"\f312"}.brandico-friendfeed-rect:before{content:"\f313"}.brandico-blogger:before{content:"\f314"}.brandico-blogger-rect:before{content:"\f315"}.brandico-deviantart:before{content:"\f316"}.brandico-jabber:before{content:"\f317"}.brandico-lastfm:before{content:"\f318"}.brandico-lastfm-rect:before{content:"\f319"}.brandico-linkedin:before{content:"\f31a"}.brandico-linkedin-rect:before{content:"\f31b"}.brandico-picasa:before{content:"\f31c"}.brandico-wordpress:before{content:"\f31d"}.brandico-instagram:before{content:"\f31e"}.brandico-instagram-filled:before{content:"\f31f"}@font-face{font-family:'entypo';font-style:'normal';font-weight:'normal';src:url("http://weloveiconfonts.com/api/fonts/entypo/entypo.eot");src:url("http://weloveiconfonts.com/api/fonts/entypo/entypo.eot?#iefix") format("eot"),url("http://weloveiconfonts.com/api/fonts/entypo/entypo.woff") format("woff"),url("http://weloveiconfonts.com/api/fonts/entypo/entypo.ttf") format("truetype"),url("http://weloveiconfonts.com/api/fonts/entypo/entypo.svg#entypo") format("svg")}.entypo-note:before{content:"\266a"}.entypo-note-beamed:before{content:"\266b"}.entypo-music:before{content:"\1f3b5"}.entypo-search:before{content:"\1f50d"}.entypo-flashlight:before{content:"\1f526"}.entypo-mail:before{content:"\2709"}.entypo-heart:before{content:"\2665"}.entypo-heart-empty:before{content:"\2661"}.entypo-star:before{content:"\2605"}.entypo-star-empty:before{content:"\2606"}.entypo-user:before{content:"\1f464"}.entypo-users:before{content:"\1f465"}.entypo-user-add:before{content:"\e700"}.entypo-video:before{content:"\1f3ac"}.entypo-picture:before{content:"\1f304"}.entypo-camera:before{content:"\1f4f7"}.entypo-layout:before{content:"\268f"}.entypo-menu:before{content:"\2630"}.entypo-check:before{content:"\2713"}.entypo-cancel:before{content:"\2715"}.entypo-cancel-circled:before{content:"\2716"}.entypo-cancel-squared:before{content:"\274e"}.entypo-plus:before{content:"\2b"}.entypo-plus-circled:before{content:"\2795"}.entypo-plus-squared:before{content:"\229e"}.entypo-minus:before{content:"\2d"}.entypo-minus-circled:before{content:"\2796"}.entypo-minus-squared:before{content:"\229f"}.entypo-help:before{content:"\2753"}.entypo-help-circled:before{content:"\e704"}.entypo-info:before{content:"\2139"}.entypo-info-circled:before{content:"\e705"}.entypo-back:before{content:"\1f519"}.entypo-home:before{content:"\2302"}.entypo-link:before{content:"\1f517"}.entypo-attach:before{content:"\1f4ce"}.entypo-lock:before{content:"\1f512"}.entypo-lock-open:before{content:"\1f513"}.entypo-eye:before{content:"\e70a"}.entypo-tag:before{content:"\e70c"}.entypo-bookmark:before{content:"\1f516"}.entypo-bookmarks:before{content:"\1f4d1"}.entypo-flag:before{content:"\2691"}.entypo-thumbs-up:before{content:"\1f44d"}.entypo-thumbs-down:before{content:"\1f44e"}.entypo-download:before{content:"\1f4e5"}.entypo-upload:before{content:"\1f4e4"}.entypo-upload-cloud:before{content:"\e711"}.entypo-reply:before{content:"\e712"}.entypo-reply-all:before{content:"\e713"}.entypo-forward:before{content:"\27a6"}.entypo-quote:before{content:"\275e"}.entypo-code:before{content:"\e714"}.entypo-export:before{content:"\e715"}.entypo-pencil:before{content:"\270e"}.entypo-feather:before{content:"\2712"}.entypo-print:before{content:"\e716"}.entypo-retweet:before{content:"\e717"}.entypo-keyboard:before{content:"\2328"}.entypo-comment:before{content:"\e718"}.entypo-chat:before{content:"\e720"}.entypo-bell:before{content:"\1f514"}.entypo-attention:before{content:"\26a0"}.entypo-alert:before{content:"\1f4a5'"}.entypo-vcard:before{content:"\e722"}.entypo-address:before{content:"\e723"}.entypo-location:before{content:"\e724"}.entypo-map:before{content:"\e727"}.entypo-direction:before{content:"\27a2"}.entypo-compass:before{content:"\e728"}.entypo-cup:before{content:"\2615"}.entypo-trash:before{content:"\e729"}.entypo-doc:before{content:"\e730"}.entypo-docs:before{content:"\e736"}.entypo-doc-landscape:before{content:"\e737"}.entypo-doc-text:before{content:"\1f4c4"}.entypo-doc-text-inv:before{content:"\e731"}.entypo-newspaper:before{content:"\1f4f0"}.entypo-book-open:before{content:"\1f4d6"}.entypo-book:before{content:"\1f4d5"}.entypo-folder:before{content:"\1f4c1"}.entypo-archive:before{content:"\e738"}.entypo-box:before{content:"\1f4e6"}.entypo-rss:before{content:"\e73a"}.entypo-phone:before{content:"\1f4dE"}.entypo-cog:before{content:"\2699"}.entypo-tools:before{content:"\2692"}.entypo-share:before{content:"\e73c"}.entypo-shareable:before{content:"\e73e"}.entypo-basket:before{content:"\e73d"}.entypo-bag:before{content:"\1f45c'"}.entypo-calendar:before{content:"\1f4c5"}.entypo-login:before{content:"\e740"}.entypo-logout:before{content:"\e741"}.entypo-mic:before{content:"\1f3a4"}.entypo-mute:before{content:"\1f507"}.entypo-sound:before{content:"\1f50a"}.entypo-volume:before{content:"\e742"}.entypo-clock:before{content:"\1f554"}.entypo-hourglass:before{content:"\23f3"}.entypo-lamp:before{content:"\1f4a1"}.entypo-light-down:before{content:"\1f505"}.entypo-light-up:before{content:"\1f506"}.entypo-adjust:before{content:"\25d1"}.entypo-block:before{content:"\1f6ab"}.entypo-resize-full:before{content:"\e744"}.entypo-resize-small:before{content:"\e746"}.entypo-popup:before{content:"\e74c"}.entypo-publish:before{content:"\e74d"}.entypo-window:before{content:"\e74e"}.entypo-arrow-combo:before{content:"\e74f"}.entypo-down-circled:before{content:"\e758"}.entypo-left-circled:before{content:"\e759"}.entypo-right-circled:before{content:"\e75a"}.entypo-up-circled:before{content:"\e75b"}.entypo-down-open:before{content:"\e75c"}.entypo-left-open:before{content:"\e75d"}.entypo-right-open:before{content:"\e75e"}.entypo-up-open:before{content:"\e75f"}.entypo-down-open-mini:before{content:"\e760"}.entypo-left-open-mini:before{content:"\e761"}.entypo-right-open-mini:before{content:"\e762"}.entypo-up-open-mini:before{content:"\e763"}.entypo-down-open-big:before{content:"\e764"}.entypo-left-open-big:before{content:"\e765"}.entypo-right-open-big:before{content:"\e766"}.entypo-up-open-big:before{content:"\e767"}.entypo-down:before{content:"\2b07"}.entypo-left:before{content:"\2b05"}.entypo-right:before{content:"\27a1"}.entypo-up:before{content:"\2b06"}.entypo-down-dir:before{content:"\25be"}.entypo-left-dir:before{content:"\25c2"}.entypo-right-dir:before{content:"\25b8"}.entypo-up-dir:before{content:"\25b4"}.entypo-down-bold:before{content:"\e4b0"}.entypo-left-bold:before{content:"\e4ad"}.entypo-right-bold:before{content:"\e4ae"}.entypo-up-bold:before{content:"\e4af"}.entypo-down-thin:before{content:"\2193"}.entypo-left-thin:before{content:"\2190"}.entypo-right-thin:before{content:"\2192"}.entypo-up-thin:before{content:"\2191"}.entypo-ccw:before{content:"\27f2"}.entypo-cw:before{content:"\27f3"}.entypo-arrows-ccw:before{content:"\1f504"}.entypo-level-down:before{content:"\21b3"}.entypo-level-up:before{content:"\21b0"}.entypo-shuffle:before{content:"\1f500"}.entypo-loop:before{content:"\1f501"}.entypo-switch:before{content:"\21c6"}.entypo-play:before{content:"\25b6"}.entypo-stop:before{content:"\25a0"}.entypo-pause:before{content:"\2389"}.entypo-record:before{content:"\26ab"}.entypo-to-end:before{content:"\23ed"}.entypo-to-start:before{content:"\23ee"}.entypo-fast-forward:before{content:"\23e9"}.entypo-fast-backward:before{content:"\23ea"}.entypo-progress-0:before{content:"\e768"}.entypo-progress-1:before{content:"\e769"}.entypo-progress-2:before{content:"\e76a"}.entypo-progress-3:before{content:"\e76b"}.entypo-target:before{content:"\1f3af"}.entypo-palette:before{content:"\1f3a8"}.entypo-list:before{content:"\e005"}.entypo-list-add:before{content:"\e003"}.entypo-signal:before{content:"\1f4f6"}.entypo-trophy:before{content:"\1f3c6"}.entypo-battery:before{content:"\1f50b"}.entypo-back-in-time:before{content:"\e771"}.entypo-monitor:before{content:"\1f4bb"}.entypo-mobile:before{content:"\1f4f1"}.entypo-network:before{content:"\e776"}.entypo-cd:before{content:"\1f4bf"}.entypo-inbox:before{content:"\e777"}.entypo-install:before{content:"\e778"}.entypo-globe:before{content:"\1f30e"}.entypo-cloud:before{content:"\2601"}.entypo-cloud-thunder:before{content:"\26c8"}.entypo-flash:before{content:"\26a1"}.entypo-moon:before{content:"\263d"}.entypo-flight:before{content:"\2708"}.entypo-paper-plane:before{content:"\e79b"}.entypo-leaf:before{content:"\1f342"}.entypo-lifebuoy:before{content:"\e788"}.entypo-mouse:before{content:"\e789"}.entypo-briefcase:before{content:"\1f4bc"}.entypo-suitcase:before{content:"\e78e"}.entypo-dot:before{content:"\e78b"}.entypo-dot-2:before{content:"\e78c"}.entypo-dot-3:before{content:"\e78d"}.entypo-brush:before{content:"\e79a"}.entypo-magnet:before{content:"\e7a1"}.entypo-infinity:before{content:"\221e"}.entypo-erase:before{content:"\232b"}.entypo-chart-pie:before{content:"\e751"}.entypo-chart-line:before{content:"\1f4c8"}.entypo-chart-bar:before{content:"\1f4ca"}.entypo-chart-area:before{content:"\1f53e"}.entypo-tape:before{content:"\2707"}.entypo-graduation-cap:before{content:"\1f393"}.entypo-language:before{content:"\e752"}.entypo-ticket:before{content:"\1f3ab"}.entypo-water:before{content:"\1f4a6"}.entypo-droplet:before{content:"\1f4a7"}.entypo-air:before{content:"\e753"}.entypo-credit-card:before{content:"\1f4b3"}.entypo-floppy:before{content:"\1f4be"}.entypo-clipboard:before{content:"\1f4cb"}.entypo-megaphone:before{content:"\1f4e3"}.entypo-database:before{content:"\e754"}.entypo-drive:before{content:"\e755"}.entypo-bucket:before{content:"\e756"}.entypo-thermometer:before{content:"\e757"}.entypo-key:before{content:"\1f511"}.entypo-flow-cascade:before{content:"\e790"}.entypo-flow-branch:before{content:"\e791"}.entypo-flow-tree:before{content:"\e792"}.entypo-flow-line:before{content:"\e793"}.entypo-flow-parallel:before{content:"\e794"}.entypo-rocket:before{content:"\1f680"}.entypo-gauge:before{content:"\e7a2"}.entypo-traffic-cone:before{content:"\e7a3"}.entypo-cc:before{content:"\e7a5"}.entypo-cc-by:before{content:"\e7a6"}.entypo-cc-nc:before{content:"\e7a7"}.entypo-cc-nc-eu:before{content:"\e7a8"}.entypo-cc-nc-jp:before{content:"\e7a9"}.entypo-cc-sa:before{content:"\e7aa"}.entypo-cc-nd:before{content:"\e7ab"}.entypo-cc-pd:before{content:"\e7ac"}.entypo-cc-zero:before{content:"\e7ad"}.entypo-cc-share:before{content:"\e7ae"}.entypo-cc-remix:before{content:"\e7af"}.entypo-github:before{content:"\f300"}.entypo-github-circled:before{content:"\f301"}.entypo-flickr:before{content:"\f303"}.entypo-flickr-circled:before{content:"\f304"}.entypo-vimeo:before{content:"\f306"}.entypo-vimeo-circled:before{content:"\f307"}.entypo-twitter:before{content:"\f309"}.entypo-twitter-circled:before{content:"\f30a"}.entypo-facebook:before{content:"\f30c"}.entypo-facebook-circled:before{content:"\f30d"}.entypo-facebook-squared:before{content:"\f30e"}.entypo-gplus:before{content:"\f30f"}.entypo-gplus-circled:before{content:"\f310"}.entypo-pinterest:before{content:"\f312"}.entypo-pinterest-circled:before{content:"\f313"}.entypo-tumblr:before{content:"\f315"}.entypo-tumblr-circled:before{content:"\f316"}.entypo-linkedin:before{content:"\f318"}.entypo-linkedin-circled:before{content:"\f319"}.entypo-dribbble:before{content:"\f31b"}.entypo-dribbble-circled:before{content:"\f31c"}.entypo-stumbleupon:before{content:"\f31e"}.entypo-stumbleupon-circled:before{content:"\f31f"}.entypo-lastfm:before{content:"\f321"}.entypo-lastfm-circled:before{content:"\f322"}.entypo-rdio:before{content:"\f324"}.entypo-rdio-circled:before{content:"\f325"}.entypo-spotify:before{content:"\f327"}.entypo-spotify-circled:before{content:"\f328"}.entypo-qq:before{content:"\f32a"}.entypo-instagrem:before{content:"\f32d"}.entypo-dropbox:before{content:"\f330"}.entypo-evernote:before{content:"\f333"}.entypo-flattr:before{content:"\f336"}.entypo-skype:before{content:"\f339"}.entypo-skype-circled:before{content:"\f33a"}.entypo-renren:before{content:"\f33c"}.entypo-sina-weibo:before{content:"\f33f"}.entypo-paypal:before{content:"\f342"}.entypo-picasa:before{content:"\f345"}.entypo-soundcloud:before{content:"\f348"}.entypo-mixi:before{content:"\f34b"}.entypo-behance:before{content:"\f34e"}.entypo-google-circles:before{content:"\f351"}.entypo-vkontakte:before{content:"\f354"}.entypo-smashing:before{content:"\f357"}.entypo-sweden:before{content:"\f601"}.entypo-db-shape:before{content:"\f600"}.entypo-logo-db:before{content:"\f603"}@font-face{font-family:'zocial';font-style:'normal';font-weight:'normal';src:url("http://weloveiconfonts.com/api/fonts/zocial/zocial-regular-webfont.eot");src:url("http://weloveiconfonts.com/api/fonts/zocial/zocial-regular-webfont.eot?#iefix") format("eot"),url("http://weloveiconfonts.com/api/fonts/zocial/zocial-regular-webfont.woff") format("woff"),url("http://weloveiconfonts.com/api/fonts/zocial/zocial-regular-webfont.ttf") format("truetype"),url("http://weloveiconfonts.com/api/fonts/zocial/zocial-regular-webfont.svg#zocialregular") format("svg")}.zocial-acrobat:before{content:"\00E3"}.zocial-amazon:before{content:"a"}.zocial-android:before{content:"&"}.zocial-angellist:before{content:"\00D6"}.zocial-aol:before{content:"\""}.zocial-appnet:before{content:"\00E1"}.zocial-appstore:before{content:"A"}.zocial-bitbucket:before{content:"\00E9"}.zocial-bitcoin:before{content:"2"}.zocial-blogger:before{content:"B"}.zocial-buffer:before{content:"\00E5"}.zocial-call:before{content:"7"}.zocial-cal:before{content:"."}.zocial-cart:before{content:"\00C9"}.zocial-chrome:before{content:"["}.zocial-cloudapp:before{content:"c"}.zocial-creativecommons:before{content:"C"}.zocial-delicious:before{content:"#"}.zocial-digg:before{content:";"}.zocial-disqus:before{content:"Q"}.zocial-dribbble:before{content:"D"}.zocial-dropbox:before{content:"d"}.zocial-drupal:before{content:"\00E4"}.zocial-dwolla:before{content:"\00E0"}.zocial-email:before{content:"]"}.zocial-eventasaurus:before{content:"v"}.zocial-eventbrite:before{content:"|"}.zocial-eventful:before{content:"'"}.zocial-evernote:before{content:"E"}.zocial-facebook:before{content:"f"}.zocial-fivehundredpx:before{content:"0"}.zocial-flattr:before{content:"%"}.zocial-flickr:before{content:"F"}.zocial-forrst:before{content:":"}.zocial-foursquare:before{content:"4"}.zocial-github:before{content:"g"}.zocial-gmail:before{content:"m"}.zocial-google:before{content:"G"}.zocial-googleplay:before{content:"h"}.zocial-googleplus:before{content:"+"}.zocial-gowalla:before{content:"@"}.zocial-grooveshark:before{content:"8"}.zocial-guest:before{content:"?"}.zocial-html5:before{content:"5"}.zocial-ie:before{content:"6"}.zocial-instagram:before{content:"\00DC"}.zocial-instapaper:before{content:"I"}.zocial-intensedebate:before{content:"{"}.zocial-itunes:before{content:"i"}.zocial-klout:before{content:"K"}.zocial-lanyrd:before{content:"-"}.zocial-lastfm:before{content:"l"}.zocial-linkedin:before{content:"L"}.zocial-macstore:before{content:"^"}.zocial-meetup:before{content:"M"}.zocial-myspace:before{content:"_"}.zocial-ninetyninedesigns:before{content:"9"}.zocial-openid:before{content:"o"}.zocial-opentable:before{content:"\00C7"}.zocial-paypal:before{content:"$"}.zocial-pinboard:before{content:"n"}.zocial-pinterest:before{content:"1"}.zocial-plancast:before{content:"P"}.zocial-plurk:before{content:"j"}.zocial-pocket:before{content:"\00E7"}.zocial-podcast:before{content:"`"}.zocial-posterous:before{content:"~"}.zocial-print:before{content:"\00D1"}.zocial-quora:before{content:"q"}.zocial-reddit:before{content:">"}.zocial-rss:before{content:"R"}.zocial-scribd:before{content:"}"}.zocial-skype:before{content:"S"}.zocial-smashing:before{content:"*"}.zocial-songkick:before{content:"k"}.zocial-soundcloud:before{content:"s"}.zocial-spotify:before{content:"="}.zocial-statusnet:before{content:"\00E2"}.zocial-steam:before{content:"b"}.zocial-stripe:before{content:"\00A3"}.zocial-stumbleupon:before{content:"/"}.zocial-tumblr:before{content:"t"}.zocial-twitter:before{content:"T"}.zocial-viadeo:before{content:"H"}.zocial-vimeo:before{content:"V"}.zocial-vk:before{content:"N"}.zocial-weibo:before{content:"J"}.zocial-wikipedia:before{content:","}.zocial-windows:before{content:"W"}.zocial-wordpress:before{content:"w"}.zocial-xing:before{content:"X"}.zocial-yahoo:before{content:"Y"}.zocial-yelp:before{content:"y"}.zocial-youtube:before{content:"U"}@font-face{font-family:'FontAwesome';font-style:'normal';font-weight:'normal';src:url("http://weloveiconfonts.com/api/fonts/fontawesome/fontawesome-webfont.eot");src:url("http://weloveiconfonts.com/api/fonts/fontawesome/fontawesome-webfont.eot?#iefix") format("eot"),url("http://weloveiconfonts.com/api/fonts/fontawesome/fontawesome-webfont.woff") format("woff"),url("http://weloveiconfonts.com/api/fonts/fontawesome/fontawesome-webfont.ttf") format("truetype"),url("http://weloveiconfonts.com/api/fonts/fontawesome/fontawesome-webfont.svg#FontAwesomeRegular") format("svg")}.fontawesome-glass:before{content:"\f000"}.fontawesome-music:before{content:"\f001"}.fontawesome-search:before{content:"\f002"}.fontawesome-envelope:before{content:"\f003"}.fontawesome-heart:before{content:"\f004"}.fontawesome-star:before{content:"\f005"}.fontawesome-star-empty:before{content:"\f006"}.fontawesome-user:before{content:"\f007"}.fontawesome-film:before{content:"\f008"}.fontawesome-th-large:before{content:"\f009"}.fontawesome-th:before{content:"\f00a"}.fontawesome-th-list:before{content:"\f00b"}.fontawesome-ok:before{content:"\f00c"}.fontawesome-remove:before{content:"\f00d"}.fontawesome-zoom-in:before{content:"\f00e"}.fontawesome-zoom-out:before{content:"\f010"}.fontawesome-off:before{content:"\f011"}.fontawesome-signal:before{content:"\f012"}.fontawesome-cog:before{content:"\f013"}.fontawesome-trash:before{content:"\f014"}.fontawesome-home:before{content:"\f015"}.fontawesome-file:before{content:"\f016"}.fontawesome-time:before{content:"\f017"}.fontawesome-road:before{content:"\f018"}.fontawesome-download-alt:before{content:"\f019"}.fontawesome-download:before{content:"\f01a"}.fontawesome-upload:before{content:"\f01b"}.fontawesome-inbox:before{content:"\f01c"}.fontawesome-play-circle:before{content:"\f01d"}.fontawesome-repeat:before{content:"\f01e"}.fontawesome-refresh:before{content:"\f021"}.fontawesome-list-alt:before{content:"\f022"}.fontawesome-lock:before{content:"\f023"}.fontawesome-flag:before{content:"\f024"}.fontawesome-headphones:before{content:"\f025"}.fontawesome-volume-off:before{content:"\f026"}.fontawesome-volume-down:before{content:"\f027"}.fontawesome-volume-up:before{content:"\f028"}.fontawesome-qrcode:before{content:"\f029"}.fontawesome-barcode:before{content:"\f02a"}.fontawesome-tag:before{content:"\f02b"}.fontawesome-tags:before{content:"\f02c"}.fontawesome-book:before{content:"\f02d"}.fontawesome-bookmark:before{content:"\f02e"}.fontawesome-print:before{content:"\f02f"}.fontawesome-camera:before{content:"\f030"}.fontawesome-font:before{content:"\f031"}.fontawesome-bold:before{content:"\f032"}.fontawesome-italic:before{content:"\f033"}.fontawesome-text-height:before{content:"\f034"}.fontawesome-text-width:before{content:"\f035"}.fontawesome-align-left:before{content:"\f036"}.fontawesome-align-center:before{content:"\f037"}.fontawesome-align-right:before{content:"\f038"}.fontawesome-align-justify:before{content:"\f039"}.fontawesome-list:before{content:"\f03a"}.fontawesome-indent-left:before{content:"\f03b"}.fontawesome-indent-right:before{content:"\f03c"}.fontawesome-facetime-video:before{content:"\f03d"}.fontawesome-picture:before{content:"\f03e"}.fontawesome-pencil:before{content:"\f040"}.fontawesome-map-marker:before{content:"\f041"}.fontawesome-adjust:before{content:"\f042"}.fontawesome-tint:before{content:"\f043"}.fontawesome-edit:before{content:"\f044"}.fontawesome-share:before{content:"\f045"}.fontawesome-check:before{content:"\f046"}.fontawesome-move:before{content:"\f047"}.fontawesome-step-backward:before{content:"\f048"}.fontawesome-fast-backward:before{content:"\f049"}.fontawesome-backward:before{content:"\f04a"}.fontawesome-play:before{content:"\f04b"}.fontawesome-pause:before{content:"\f04c"}.fontawesome-stop:before{content:"\f04d"}.fontawesome-forward:before{content:"\f04e"}.fontawesome-fast-forward:before{content:"\f050"}.fontawesome-step-forward:before{content:"\f051"}.fontawesome-eject:before{content:"\f052"}.fontawesome-chevron-left:before{content:"\f053"}.fontawesome-chevron-right:before{content:"\f054"}.fontawesome-plus-sign:before{content:"\f055"}.fontawesome-minus-sign:before{content:"\f056"}.fontawesome-remove-sign:before{content:"\f057"}.fontawesome-ok-sign:before{content:"\f058"}.fontawesome-question-sign:before{content:"\f059"}.fontawesome-info-sign:before{content:"\f05a"}.fontawesome-screenshot:before{content:"\f05b"}.fontawesome-remove-circle:before{content:"\f05c"}.fontawesome-ok-circle:before{content:"\f05d"}.fontawesome-ban-circle:before{content:"\f05e"}.fontawesome-arrow-left:before{content:"\f060"}.fontawesome-arrow-right:before{content:"\f061"}.fontawesome-arrow-up:before{content:"\f062"}.fontawesome-arrow-down:before{content:"\f063"}.fontawesome-share-alt:before{content:"\f064"}.fontawesome-resize-full:before{content:"\f065"}.fontawesome-resize-small:before{content:"\f066"}.fontawesome-plus:before{content:"\f067"}.fontawesome-minus:before{content:"\f068"}.fontawesome-asterisk:before{content:"\f069"}.fontawesome-exclamation-sign:before{content:"\f06a"}.fontawesome-gift:before{content:"\f06b"}.fontawesome-leaf:before{content:"\f06c"}.fontawesome-fire:before{content:"\f06d"}.fontawesome-eye-open:before{content:"\f06e"}.fontawesome-eye-close:before{content:"\f070"}.fontawesome-warning-sign:before{content:"\f071"}.fontawesome-plane:before{content:"\f072"}.fontawesome-calendar:before{content:"\f073"}.fontawesome-random:before{content:"\f074"}.fontawesome-comment:before{content:"\f075"}.fontawesome-magnet:before{content:"\f076"}.fontawesome-chevron-up:before{content:"\f077"}.fontawesome-chevron-down:before{content:"\f078"}.fontawesome-retweet:before{content:"\f079"}.fontawesome-shopping-cart:before{content:"\f07a"}.fontawesome-folder-close:before{content:"\f07b"}.fontawesome-folder-open:before{content:"\f07c"}.fontawesome-resize-vertical:before{content:"\f07d"}.fontawesome-resize-horizontal:before{content:"\f07e"}.fontawesome-bar-chart:before{content:"\f080"}.fontawesome-twitter-sign:before{content:"\f081"}.fontawesome-facebook-sign:before{content:"\f082"}.fontawesome-camera-retro:before{content:"\f083"}.fontawesome-key:before{content:"\f084"}.fontawesome-cogs:before{content:"\f085"}.fontawesome-comments:before{content:"\f086"}.fontawesome-thumbs-up:before{content:"\f087"}.fontawesome-thumbs-down:before{content:"\f088"}.fontawesome-star-half:before{content:"\f089"}.fontawesome-heart-empty:before{content:"\f08a"}.fontawesome-signout:before{content:"\f08b"}.fontawesome-linkedin-sign:before{content:"\f08c"}.fontawesome-pushpin:before{content:"\f08d"}.fontawesome-external-link:before{content:"\f08e"}.fontawesome-signin:before{content:"\f090"}.fontawesome-trophy:before{content:"\f091"}.fontawesome-github-sign:before{content:"\f092"}.fontawesome-upload-alt:before{content:"\f093"}.fontawesome-lemon:before{content:"\f094"}.fontawesome-phone:before{content:"\f095"}.fontawesome-check-empty:before{content:"\f096"}.fontawesome-bookmark-empty:before{content:"\f097"}.fontawesome-phone-sign:before{content:"\f098"}.fontawesome-twitter:before{content:"\f099"}.fontawesome-facebook:before{content:"\f09a"}.fontawesome-github:before{content:"\f09b"}.fontawesome-unlock:before{content:"\f09c"}.fontawesome-credit-card:before{content:"\f09d"}.fontawesome-rss:before{content:"\f09e"}.fontawesome-hdd:before{content:"\f0a0"}.fontawesome-bullhorn:before{content:"\f0a1"}.fontawesome-bell:before{content:"\f0a2"}.fontawesome-certificate:before{content:"\f0a3"}.fontawesome-hand-right:before{content:"\f0a4"}.fontawesome-hand-left:before{content:"\f0a5"}.fontawesome-hand-up:before{content:"\f0a6"}.fontawesome-hand-down:before{content:"\f0a7"}.fontawesome-circle-arrow-left:before{content:"\f0a8"}.fontawesome-circle-arrow-right:before{content:"\f0a9"}.fontawesome-circle-arrow-up:before{content:"\f0aa"}.fontawesome-circle-arrow-down:before{content:"\f0ab"}.fontawesome-globe:before{content:"\f0ac"}.fontawesome-wrench:before{content:"\f0ad"}.fontawesome-tasks:before{content:"\f0ae"}.fontawesome-filter:before{content:"\f0b0"}.fontawesome-briefcase:before{content:"\f0b1"}.fontawesome-fullscreen:before{content:"\f0b2"}.fontawesome-group:before{content:"\f0c0"}.fontawesome-link:before{content:"\f0c1"}.fontawesome-cloud:before{content:"\f0c2"}.fontawesome-beaker:before{content:"\f0c3"}.fontawesome-cut:before{content:"\f0c4"}.fontawesome-copy:before{content:"\f0c5"}.fontawesome-paper-clip:before{content:"\f0c6"}.fontawesome-save:before{content:"\f0c7"}.fontawesome-sign-blank:before{content:"\f0c8"}.fontawesome-reorder:before{content:"\f0c9"}.fontawesome-list-ul:before{content:"\f0ca"}.fontawesome-list-ol:before{content:"\f0cb"}.fontawesome-strikethrough:before{content:"\f0cc"}.fontawesome-underline:before{content:"\f0cd"}.fontawesome-table:before{content:"\f0ce"}.fontawesome-magic:before{content:"\f0d0"}.fontawesome-truck:before{content:"\f0d1"}.fontawesome-pinterest:before{content:"\f0d2"}.fontawesome-pinterest-sign:before{content:"\f0d3"}.fontawesome-google-plus-sign:before{content:"\f0d4"}.fontawesome-google-plus:before{content:"\f0d5"}.fontawesome-money:before{content:"\f0d6"}.fontawesome-caret-down:before{content:"\f0d7"}.fontawesome-caret-up:before{content:"\f0d8"}.fontawesome-caret-left:before{content:"\f0d9"}.fontawesome-caret-right:before{content:"\f0da"}.fontawesome-columns:before{content:"\f0db"}.fontawesome-sort:before{content:"\f0dc"}.fontawesome-sort-down:before{content:"\f0dd"}.fontawesome-sort-up:before{content:"\f0de"}.fontawesome-envelope-alt:before{content:"\f0e0"}.fontawesome-linkedin:before{content:"\f0e1"}.fontawesome-undo:before{content:"\f0e2"}.fontawesome-legal:before{content:"\f0e3"}.fontawesome-dashboard:before{content:"\f0e4"}.fontawesome-comment-alt:before{content:"\f0e5"}.fontawesome-comments-alt:before{content:"\f0e6"}.fontawesome-bolt:before{content:"\f0e7"}.fontawesome-sitemap:before{content:"\f0e8"}.fontawesome-umbrella:before{content:"\f0e9"}.fontawesome-paste:before{content:"\f0ea"}.fontawesome-lightbulb:before{content:"\f0eb"}.fontawesome-exchange:before{content:"\f0ec"}.fontawesome-cloud-download:before{content:"\f0ed"}.fontawesome-cloud-upload:before{content:"\f0ee"}.fontawesome-user-md:before{content:"\f0f0"}.fontawesome-stethoscope:before{content:"\f0f1"}.fontawesome-suitcase:before{content:"\f0f2"}.fontawesome-bell-alt:before{content:"\f0f3"}.fontawesome-coffee:before{content:"\f0f4"}.fontawesome-food:before{content:"\f0f5"}.fontawesome-file-alt:before{content:"\f0f6"}.fontawesome-building:before{content:"\f0f7"}.fontawesome-hospital:before{content:"\f0f8"}.fontawesome-ambulance:before{content:"\f0f9"}.fontawesome-medkit:before{content:"\f0fa"}.fontawesome-fighter-jet:before{content:"\f0fb"}.fontawesome-beer:before{content:"\f0fc"}.fontawesome-h-sign:before{content:"\f0fd"}.fontawesome-plus-sign-alt:before{content:"\f0fe"}.fontawesome-double-angle-left:before{content:"\f100"}.fontawesome-double-angle-right:before{content:"\f101"}.fontawesome-double-angle-up:before{content:"\f102"}.fontawesome-double-angle-down:before{content:"\f103"}.fontawesome-angle-left:before{content:"\f104"}.fontawesome-angle-right:before{content:"\f105"}.fontawesome-angle-up:before{content:"\f106"}.fontawesome-angle-down:before{content:"\f107"}.fontawesome-desktop:before{content:"\f108"}.fontawesome-laptop:before{content:"\f109"}.fontawesome-tablet:before{content:"\f10a"}.fontawesome-mobile-phone:before{content:"\f10b"}.fontawesome-circle-blank:before{content:"\f10c"}.fontawesome-quote-left:before{content:"\f10d"}.fontawesome-quote-right:before{content:"\f10e"}.fontawesome-spinner:before{content:"\f110"}.fontawesome-circle:before{content:"\f111"}.fontawesome-reply:before{content:"\f112"}.fontawesome-github-alt:before{content:"\f113"}.fontawesome-folder-close-alt:before{content:"\f114"}.fontawesome-folder-open-alt:before{content:"\f115"}@font-face{font-family:'OpenWeb Icons';font-style:'normal';font-weight:'normal';src:url("http://weloveiconfonts.com/api/fonts/openwebicons/openwebicons.eot");src:url("http://weloveiconfonts.com/api/fonts/openwebicons/openwebicons.eot?#iefix") format("eot"),url("http://weloveiconfonts.com/api/fonts/openwebicons/openwebicons.woff") format("woff"),url("http://weloveiconfonts.com/api/fonts/openwebicons/openwebicons.ttf") format("truetype"),url("http://weloveiconfonts.com/api/fonts/openwebicons/openwebicons.svg#openweb_iconsregular") format("svg")}.openwebicons-apml:before{content:"\f001"}.openwebicons-open-share:before{content:"\f00E"}.openwebicons-open-share-simple:before{content:"\f00F"}.openwebicons-share:before{content:"\f006"}.openwebicons-share-simple:before{content:"\f007"}.openwebicons-feed:before{content:"\f009"}.openwebicons-feed-simple:before{content:"\f00A"}.openwebicons-ostatus:before{content:"\f004"}.openwebicons-ostatus-simple:before{content:"\f005"}.openwebicons-opml:before{content:"\f003"}.openwebicons-activity:before{content:"\f010"}.openwebicons-microformats:before{content:"\f00C"}.openwebicons-geo:before{content:"\f00B"}.openwebicons-opensearch:before{content:"\f002"}.openwebicons-oauth:before{content:"\f008"}.openwebicons-openid:before{content:"\f00D"}.openwebicons-rdf:before{content:"\f000"}.openwebicons-dataportability:before{content:"\f013"}.openwebicons-federated:before{content:"\f011"}.openwebicons-web-intents:before{content:"\f014"}.openwebicons-open-web:before{content:"\f012"}.openwebicons-xmpp:before{content:"\f015"}.openwebicons-html5:before{content:"\f016"}.openwebicons-css3:before{content:"\f017"}.openwebicons-connectivity:before{content:"\f018"}.openwebicons-semantics:before{content:"\f019"}.openwebicons-opengraph:before{content:"\f020"}.openwebicons-epub:before{content:"\f021"}.openwebicons-qr:before{content:"\f022"}.openwebicons-foaf:before{content:"\f023"}.openwebicons-info-card:before{content:"\f024"}.openwebicons-browserid:before{content:"\f025"}.openwebicons-remote-storage:before{content:"\f026"}.openwebicons-persona:before{content:"\f027"}.openwebicons-odata:before{content:"\f028"}.openwebicons-markdown:before{content:"\f029"}.openwebicons-tosdr:before{content:"\f030"}.openwebicons-cc:before{content:"\f080"}.openwebicons-cc-by:before{content:"\f081"}.openwebicons-cc-nc:before{content:"\f082"}.openwebicons-cc-nc-eu:before{content:"\f083"}.openwebicons-cc-nc-jp:before{content:"\f084"}.openwebicons-cc-sa:before{content:"\f085"}.openwebicons-cc-nd:before{content:"\f086"}.openwebicons-cc-public:before{content:"\f087"}.openwebicons-cc-zero:before{content:"\f088"}.openwebicons-cc-share:before{content:"\f089"}.openwebicons-cc-remix:before{content:"\f08a"}@font-face{font-family:'fontelico';font-style:'normal';font-weight:'normal';src:url("http://weloveiconfonts.com/api/fonts/fontelico/fontelico.eot");src:url("http://weloveiconfonts.com/api/fonts/fontelico/fontelico.eot?#iefix") format("eot"),url("http://weloveiconfonts.com/api/fonts/fontelico/fontelico.woff") format("woff"),url("http://weloveiconfonts.com/api/fonts/fontelico/fontelico.ttf") format("truetype"),url("http://weloveiconfonts.com/api/fonts/fontelico/fontelico.svg#fontelico") format("svg")}.fontelico-emo-happy:before{content:'\e800'}.fontelico-emo-wink:before{content:'\e801'}.fontelico-emo-wink2:before{content:'\e813'}.fontelico-emo-unhappy:before{content:'\e802'}.fontelico-emo-sleep:before{content:'\e803'}.fontelico-emo-thumbsup:before{content:'\e804'}.fontelico-emo-devil:before{content:'\e805'}.fontelico-emo-surprised:before{content:'\e806'}.fontelico-emo-tongue:before{content:'\e807'}.fontelico-emo-coffee:before{content:'\e808'}.fontelico-emo-sunglasses:before{content:'\e809'}.fontelico-emo-displeased:before{content:'\e80a'}.fontelico-emo-beer:before{content:'\e80b'}.fontelico-emo-grin:before{content:'\e80c'}.fontelico-emo-angry:before{content:'\e80d'}.fontelico-emo-saint:before{content:'\e80e'}.fontelico-emo-cry:before{content:'\e80f'}.fontelico-emo-shoot:before{content:'\e810'}.fontelico-emo-squint:before{content:'\e811'}.fontelico-emo-laugh:before{content:'\e812'}.fontelico-spin1:before{content:'\e830'}.fontelico-spin2:before{content:'\e831'}.fontelico-spin3:before{content:'\e832'}.fontelico-spin4:before{content:'\e834'}.fontelico-spin5:before{content:'\e838'}.fontelico-spin6:before{content:'\e839'}.fontelico-firefox:before{content:'\e840'}.fontelico-chrome:before{content:'\e841'}.fontelico-opera:before{content:'\e842'}.fontelico-ie:before{content:'\e843'}@font-face{font-family:'maki';font-style:'normal';font-weight:'normal';src:url("http://weloveiconfonts.com/api/fonts/maki/maki.eot");src:url("http://weloveiconfonts.com/api/fonts/maki/maki.eot?#iefix") format("eot"),url("http://weloveiconfonts.com/api/fonts/maki/maki.woff") format("woff"),url("http://weloveiconfonts.com/api/fonts/maki/maki.ttf") format("truetype"),url("http://weloveiconfonts.com/api/fonts/maki/maki.svg#maki") format("svg")}.maki-aboveground-rail:before{content:'\e800'}.maki-airfield:before{content:'\e801'}.maki-airport:before{content:'\e802'}.maki-art-gallery:before{content:'\e803'}.maki-bar:before{content:'\e804'}.maki-baseball:before{content:'\e806'}.maki-basketball:before{content:'\e807'}.maki-beer:before{content:'\e808'}.maki-belowground-rail:before{content:'\e809'}.maki-bicycle:before{content:'\e80a'}.maki-bus:before{content:'\e80b'}.maki-cafe:before{content:'\e80c'}.maki-campsite:before{content:'\e80d'}.maki-cemetery:before{content:'\e80e'}.maki-cinema:before{content:'\e80f'}.maki-college:before{content:'\e810'}.maki-commerical-building:before{content:'\e811'}.maki-credit-card:before{content:'\e812'}.maki-cricket:before{content:'\e813'}.maki-embassy:before{content:'\e814'}.maki-fast-food:before{content:'\e815'}.maki-ferry:before{content:'\e816'}.maki-fire-station:before{content:'\e817'}.maki-football:before{content:'\e818'}.maki-fuel:before{content:'\e819'}.maki-garden:before{content:'\e81a'}.maki-giraffe:before{content:'\e81b'}.maki-golf:before{content:'\e81c'}.maki-grocery-store:before{content:'\e81e'}.maki-harbor:before{content:'\e81f'}.maki-heliport:before{content:'\e820'}.maki-hospital:before{content:'\e821'}.maki-industrial-building:before{content:'\e822'}.maki-library:before{content:'\e823'}.maki-lodging:before{content:'\e824'}.maki-london-underground:before{content:'\e825'}.maki-minefield:before{content:'\e826'}.maki-monument:before{content:'\e827'}.maki-museum:before{content:'\e828'}.maki-pharmacy:before{content:'\e829'}.maki-pitch:before{content:'\e82a'}.maki-police:before{content:'\e82b'}.maki-post:before{content:'\e82c'}.maki-prison:before{content:'\e82d'}.maki-rail:before{content:'\e82e'}.maki-religious-christian:before{content:'\e82f'}.maki-religious-islam:before{content:'\e830'}.maki-religious-jewish:before{content:'\e831'}.maki-restaurant:before{content:'\e832'}.maki-roadblock:before{content:'\e833'}.maki-school:before{content:'\e834'}.maki-shop:before{content:'\e835'}.maki-skiing:before{content:'\e836'}.maki-soccer:before{content:'\e837'}.maki-swimming:before{content:'\e838'}.maki-tennis:before{content:'\e839'}.maki-theatre:before{content:'\e83a'}.maki-toilet:before{content:'\e83b'}.maki-town-hall:before{content:'\e83c'}.maki-trash:before{content:'\e83d'}.maki-tree-1:before{content:'\e83e'}.maki-tree-2:before{content:'\e83f'}.maki-warehouse:before{content:'\e840'}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0}ul{list-style-type:square}ul.clean{margin:0;padding:0;list-style:none}h1{font-size:3em;line-height:1.35em;margin:.4em 0;text-transform:uppercase}h2{font-size:3em;line-height:1.05em;letter-spacing:.05em;padding:0 0 .5em 0;margin:.25em 0 0 0}h2>span{font-size:1.2em}h3{font-weight:bold;letter-spacing:.05em;padding-bottom:.15em;margin:1.15em 0 .75em 0;border-bottom:.15em solid #999}a{color:#fa9f96;text-decoration:none;padding:.15em;-webkit-transition:color 0.25s ease-in-out,background 0.25s ease-in-out;-moz-transition:color 0.25s ease-in-out,background 0.25s ease-in-out;-o-transition:color 0.25s ease-in-out,background 0.25s ease-in-out;transition:color 0.25s ease-in-out,background 0.25s ease-in-out}a:hover{background:#d8a3bc;color:#fff}html,body{width:100%;height:100%}body{font:400 1.2em/1.6em "Lato", sans-serif;color:#333;background-color:#fff}*::-moz-selection,*::selection{color:rgba(0,0,0,0.9);background:rgba(255,255,255,0.5)}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}pre{background:#111;padding:1em;overflow:auto}pre code{background:none;padding:0;color:#fff;white-space:pre;word-spacing:normal}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html,body{margin:0;padding:0;height:100%;width:100%}body{overflow-x:hidden}body[data-max-width="860"] section[data-cols]{max-width:860px}body[data-max-width="1024"] section[data-cols]{max-width:1024px}body[data-max-width="1152"] section[data-cols]{max-width:1152px}body[data-max-width="1280"] section[data-cols]{max-width:1280px}body[data-max-width="1400"] section[data-cols]{max-width:1400px}body[data-max-width="1600"] section[data-cols]{max-width:1600px}@media screen and (min-width: 1600px){body[data-auto-extend="true"] section[data-cols]{max-width:1600px}}body[data-max-width="2048"] section[data-cols]{max-width:2048px}@media screen and (min-width: 2048px){body[data-auto-extend="true"] section[data-cols]{max-width:2048px}}body[data-max-width="3200"] section[data-cols]{max-width:3200px}@media screen and (min-width: 3200px){body[data-auto-extend="true"] section[data-cols]{max-width:3200px}}body[data-max-width="4000"] section[data-cols]{max-width:4000px}@media screen and (min-width: 4000px){body[data-auto-extend="true"] section[data-cols]{max-width:4000px}}button{width:100%;cursor:pointer}img{max-width:100%}article{position:relative;margin-top:1em}section{position:relative;overflow:hidden;margin:0 auto}section[data-valign='center'] display:block>div,section[data-valign='center']>div+*{display:table-cell;vertical-align:middle}section>div{height:100%;margin:0;padding:0.85em 0.85em 0.85em 0.85em}article[data-high]:before,article[data-high]:after,article[data-text]:before,article[data-text]:after,pre[data-text]:before,pre[data-text]:after{content:'';position:absolute;top:0;left:0}section[data-cols='1']>div{display:block}@media screen and (min-width: 44em){section[data-cols='2']>div,section[data-cols='3']>div,section[data-cols='4']>div,section[data-cols='5']>div,section[data-cols='5']>div:nth-child(4),section[data-cols='5']>div:nth-child(5){float:left;width:50%}section[data-cols='2']>div:nth-child(odd){clear:both}section[data-cols='3']>div:last-child,section[data-cols='5']>div:last-child{width:100%}}@media screen and (min-width: 66em){section[data-cols='3']>div,section[data-cols='4']>div,section[data-cols='5']>div{width:33.3%}section[data-cols='3']>div:last-child{width:33.3%}section[data-cols='5']>div:nth-child(5){width:50%}section[data-cols='4']>div:last-child{width:100%}}@media screen and (min-width: 74em){section[data-cols='4']>div,section[data-cols='4']>div:last-child{width:25%}section[data-cols='4']>div:nth-child(4n+1){clear:both}}@media screen and (min-width: 80em){section[data-cols='5']>div,section[data-cols='5']>div:last-child,section[data-cols='5']>div:nth-child(4){width:20%}}@media screen and (max-width: 44em){section[data-valign='center']>div,section[data-valign='center']>div+*{display:block}}html.ie section[data-cols='2']>div,html.ie section[data-cols='3']>div,html.ie section[data-cols='4']>div,html.ie section[data-cols='5']>div,html.ie section[data-cols='5']>div+div+div+div,html.ie section[data-cols='5']>div+div+div+div+div{float:left;width:50%}html.ie section[data-cols='3']>div,html.ie section[data-cols='4']>div,html.ie section[data-cols='5']>div{width:33.3%}html.ie section[data-cols='3']>div+div+div{width:33.3%}html.ie section[data-cols='4']>div+div+div+div{width:100%}html.ie section[data-cols='5']>div+div+div+div+div{width:50%}.hitman__alpha{color:#f47771}.hitman__beta{width:25%;float:left}.hitman__gamma{background:none !important}.hitman__gamma:hover{background:none !important}.hitman__delta{text-align:left !important;padding-left:0 !important}a,a:visited,a:active{text-decoration:none;color:#fff;background:#12ed52;padding:.25em;-webkit-transition:all 0.3s ease-in-out;-moz-transition:all 0.3s ease-in-out;-o-transition:all 0.3s ease-in-out;transition:all 0.3s ease-in-out}a:hover{color:#12ed52;background:#fff}p,ul{margin:.25em 0 .45em 0}hr{background:none;border:none;border-bottom:0.15em solid rgba(255,255,255,0.2);margin:2.15em 0 1.75em 0}button[data-width="50"]{width:50%}button[data-width="33"]{width:33.3%}button[data-high='1']{background:rgba(245,245,61,0.7)}button[data-high='2']{background:rgba(92,245,61,0.7)}button[data-high='3']{background:rgba(61,153,245,0.7)}button[data-high='4']{background:rgba(184,61,245,0.7)}button[data-high='5']{background:rgba(245,61,61,0.7)}article{margin-top:0}article[data-high]{margin-bottom:2em}article[data-high="1"]{margin-bottom:5em;padding-bottom:4em;border-bottom:.5em solid #999}article[data-high="2"]{margin-bottom:5em;padding-bottom:4em;border-bottom:.5em solid #999}article[data-high="2"].last{border-bottom:none}article[data-high="4"] div{padding:1.5em 1em}article[data-high="4"] a{border:none}article[data-high="5"]{background:#71bdf4;border-top:0.25em dashed #fff;border-bottom:0.25em dashed #fff;padding:4em 0;box-shadow:0 0 0 .75em #71bdf4}article[data-high="5"] h2{color:#fff}section{padding:0 1em}div[data-high="1"]{background:rgba(255,255,255,0.2);box-shadow:0 0 0.45em rgba(0,0,0,0.2);padding:.0015em .5em .35em .5em}section[data-valign='center']{text-align:center}section[data-valign='right']{text-align:right}section[data-name='preview']{padding-bottom:1.85em}section[data-name='preview'].minimal{max-height:7.25em;overflow-y:auto}section[data-name='preview'] li{cursor:pointer}section[data-name='output']{padding-bottom:1.85em}footer{height:10em}pre,textarea{font-family:'Source Code Pro', monospace;margin:0;background:rgba(255,255,255,0.3);padding:1.75em .5em 0 1em;white-space:pre-wrap;color:#000;line-height:1.75em}.plain{width:100%;display:block}pre{background:#fff}pre span{color:#f47771;font-weight:bold}pre span.url{color:#718df4}pre span.css{color:#b871f4}pre[data-text]{position:relative;margin-top:2em}pre[data-text]:after{content:attr(data-text);top:-1.25em;letter-spacing:.05em;color:#666}ul{list-style-type:none;padding:0 1.5em}ul li{font-size:1.5em;position:relative;float:left;width:7%;height:10%;padding:.65em;margin:.25em 0;text-align:center;-webkit-transition:all 0.25s ease-out;-moz-transition:all 0.25s ease-out;-o-transition:all 0.25s ease-out;transition:all 0.25s ease-out}li.active{background:#000;color:#fff;-webkit-transition:all 0.25s ease-out;-moz-transition:all 0.25s ease-out;-o-transition:all 0.25s ease-out;transition:all 0.25s ease-out}[class*="typicons-"]:before{font-family:'Typicons', sans-serif;font-size:1.25em;line-height:1.75em}[class*="openwebicons-"]:before{font-family:'OpenWeb Icons', sans-serif}[class*="brandico-"]:before{font-family:'brandico', sans-serif}[class*="maki-"]:before{font-family:'maki', sans-serif}[class*="entypo-"]:before{font-family:'entypo', sans-serif}[class*="fontawesome-"]:before{font-family:'FontAwesome', sans-serif}[class*="fontelico-"]:before{font-family:'fontelico', sans-serif}[class*="iconicfill-"]:before{font-family:'IconicFill', sans-serif}[class*="zocial-"]:before{font-family:'zocial', sans-serif}.example{font-size:2.5em;line-height:1.5em}.example li{width:20%}.meta{display:none;font-size:.65em}#how-to-use div>section{padding:0}#how-to-use div>section>div{padding:0}textarea[data-name="text"],section[data-name="preview"]{width:100%;background-size:100% 1.75em;overflow-x:hidden;resize:none}textarea[data-name="text"]::-webkit-scrollbar,section[data-name="preview"]::-webkit-scrollbar{width:1.25em}textarea[data-name="text"]::-webkit-scrollbar-track,section[data-name="preview"]::-webkit-scrollbar-track{background:rgba(0,0,0,0.2)}textarea[data-name="text"]::-webkit-scrollbar-thumb,section[data-name="preview"]::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.5)}button,pre,textarea{position:relative;text-decoration:none;display:inline-block;z-index:1;outline:none;border:none;-webkit-transition:all 0.1s ease-in-out;-moz-transition:all 0.1s ease-in-out;-o-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}button[data-type="2"],pre[data-type="2"],textarea[data-type="2"]{background:#f4d871}button[data-type="3"],pre[data-type="3"],textarea[data-type="3"]{background:#f47771}button[data-type="4"],pre[data-type="4"],textarea[data-type="4"]{background:#71bdf4}button:active,button:focus,pre:active,pre:focus,textarea:active,textarea:focus{box-shadow:none}button{cursor:pointer;font-size:1.5em;padding:.25em;width:100%;height:4.25em;color:white;font-family:'Lato'}button span:before{font-weight:normal}button:active{-webkit-transform:translate3d(0.15em, 0.15em, 0);-moz-transform:translate3d(0.15em, 0.15em, 0);-ms-transform:translate3d(0.15em, 0.15em, 0);-o-transform:translate3d(0.15em, 0.15em, 0);transform:translate3d(0.15em, 0.15em, 0)}.creator{position:fixed;width:100%;height:1.45em;bottom:-.085em;right:0;z-index:1337;background:#999;color:#fff;-webkit-transition:all 0.35s ease-in-out;-moz-transition:all 0.35s ease-in-out;-o-transition:all 0.35s ease-in-out;transition:all 0.35s ease-in-out;font-size:1.75em}.creator .plain{height:3.25em}.creator .plain.active{font-weight:bold;box-shadow:inset 0 0 0 1em #71bdf4}.creator .entypo-heart{color:#f47771;background:#fff;padding:.25em}.creator div{padding:0 .15em}.creator div>section{padding:0}.creator div>section>div{padding:0}.creator div>section a{width:33%}.creator>section>div,.creator>section>div:nth-child(3){width:33.3%}.creator:hover{color:#fff}.creator:hover a{color:#fff}.creator:hover textarea{background:rgba(255,255,255,0.15)}.creator a{color:inherit;width:25%;float:left;line-height:.85em;max-height:1.35em;text-align:center;border:none;background:transparent}.creator a:first-child{line-height:.95em}.creator a:hover{color:#000;background:rgba(255,255,255,0.85)}.creator textarea{font-size:.65em;line-height:2.15em;height:1em;padding:0 .25em 0 .25em;height:2.15em;-webkit-transition:background 0.25s ease-in-out;-moz-transition:background 0.25s ease-in-out;-o-transition:background 0.25s ease-in-out;transition:background 0.25s ease-in-out}.highlight{text-shadow:0.05em 0.05em 0.05em rgba(0,0,0,0.2)}@media screen and (max-width: 79em){section,footer{padding:0 .15em}}@media screen and (max-width: 44em){font-size:.925em;h1,article[data-text]:after{font-size:2.3em}ul{padding:0}ul li{width:25%;font-size:1.25em}section>div{padding:0 .5em}.creator{width:100%;height:auto;right:0;top:auto;bottom:0;font-size:1.25em}.creator .creator__social{display:none}.creator textarea{font-size:.65em;background:rgba(255,255,255,0.6)}.creator section>div:nth-child(1),.creator section>div:nth-child(2),.creator section>div:nth-child(3){width:100%}.creator a{vertical-align:bottom}} diff --git a/app/skin/fonts/.gitignore b/app/skin/fonts/.gitignore new file mode 100755 index 0000000..e69de29 diff --git a/app/skin/img/favicon.ico b/app/skin/img/favicon.ico new file mode 100755 index 0000000..ece935b Binary files /dev/null and b/app/skin/img/favicon.ico differ diff --git a/app/skin/img/weloveiconfonts.ico b/app/skin/img/weloveiconfonts.ico new file mode 100755 index 0000000..ece935b Binary files /dev/null and b/app/skin/img/weloveiconfonts.ico differ diff --git a/app/skin/img/weloveiconfonts.jpg b/app/skin/img/weloveiconfonts.jpg new file mode 100755 index 0000000..6227f8c Binary files /dev/null and b/app/skin/img/weloveiconfonts.jpg differ diff --git a/app/skin/img/weloveiconfonts_dribbble.jpg b/app/skin/img/weloveiconfonts_dribbble.jpg new file mode 100755 index 0000000..f3baa55 Binary files /dev/null and b/app/skin/img/weloveiconfonts_dribbble.jpg differ diff --git a/app/skin/img/weloveiconfonts_dribbble_iconfont_nav.jpg b/app/skin/img/weloveiconfonts_dribbble_iconfont_nav.jpg new file mode 100755 index 0000000..fdfd8e0 Binary files /dev/null and b/app/skin/img/weloveiconfonts_dribbble_iconfont_nav.jpg differ diff --git a/app/skin/js/.gitignore b/app/skin/js/.gitignore new file mode 100755 index 0000000..e69de29 diff --git a/app/skin/js/scripts.min.js b/app/skin/js/scripts.min.js new file mode 100755 index 0000000..6c91c17 --- /dev/null +++ b/app/skin/js/scripts.min.js @@ -0,0 +1,13 @@ +/*! + * WeLoveIconFonts + * We Love Icon Fonts + * http://weloveiconfonts.com/ + * @author Tim Pietrusky + * @version 2.0.1 + * Copyright 2013. VVL licensed. + */ +(function(){var a=this,b=a._,c={},d=Array.prototype,e=Object.prototype,f=Function.prototype,g=d.push,h=d.slice,i=d.concat,j=(d.unshift,e.toString),k=e.hasOwnProperty,l=d.forEach,m=d.map,n=d.reduce,o=d.reduceRight,p=d.filter,q=d.every,r=d.some,s=d.indexOf,t=d.lastIndexOf,u=Array.isArray,v=Object.keys,w=f.bind,x=function(a){return a instanceof x?a:this instanceof x?(this._wrapped=a,void 0):new x(a)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=x),exports._=x):a._=x,x.VERSION="1.4.2";var y=x.each=x.forEach=function(a,b,d){if(null!=a)if(l&&a.forEach===l)a.forEach(b,d);else if(a.length===+a.length){for(var e=0,f=a.length;f>e;e++)if(b.call(d,a[e],e,a)===c)return}else for(var g in a)if(x.has(a,g)&&b.call(d,a[g],g,a)===c)return};x.map=x.collect=function(a,b,c){var d=[];return null==a?d:m&&a.map===m?a.map(b,c):(y(a,function(a,e,f){d[d.length]=b.call(c,a,e,f)}),d)},x.reduce=x.foldl=x.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),n&&a.reduce===n)return d&&(b=x.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(y(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError("Reduce of empty array with no initial value");return c},x.reduceRight=x.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),o&&a.reduceRight===o)return d&&(b=x.bind(b,d)),arguments.length>2?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=x.keys(a);f=g.length}if(y(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError("Reduce of empty array with no initial value");return c},x.find=x.detect=function(a,b,c){var d;return z(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},x.filter=x.select=function(a,b,c){var d=[];return null==a?d:p&&a.filter===p?a.filter(b,c):(y(a,function(a,e,f){b.call(c,a,e,f)&&(d[d.length]=a)}),d)},x.reject=function(a,b,c){var d=[];return null==a?d:(y(a,function(a,e,f){b.call(c,a,e,f)||(d[d.length]=a)}),d)},x.every=x.all=function(a,b,d){b||(b=x.identity);var e=!0;return null==a?e:q&&a.every===q?a.every(b,d):(y(a,function(a,f,g){return(e=e&&b.call(d,a,f,g))?void 0:c}),!!e)};var z=x.some=x.any=function(a,b,d){b||(b=x.identity);var e=!1;return null==a?e:r&&a.some===r?a.some(b,d):(y(a,function(a,f,g){return e||(e=b.call(d,a,f,g))?c:void 0}),!!e)};x.contains=x.include=function(a,b){var c=!1;return null==a?c:s&&a.indexOf===s?-1!=a.indexOf(b):c=z(a,function(a){return a===b})},x.invoke=function(a,b){var c=h.call(arguments,2);return x.map(a,function(a){return(x.isFunction(b)?b:a[b]).apply(a,c)})},x.pluck=function(a,b){return x.map(a,function(a){return a[b]})},x.where=function(a,b){return x.isEmpty(b)?[]:x.filter(a,function(a){for(var c in b)if(b[c]!==a[c])return!1;return!0})},x.max=function(a,b,c){if(!b&&x.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);if(!b&&x.isEmpty(a))return-1/0;var d={computed:-1/0};return y(a,function(a,e,f){var g=b?b.call(c,a,e,f):a;g>=d.computed&&(d={value:a,computed:g})}),d.value},x.min=function(a,b,c){if(!b&&x.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);if(!b&&x.isEmpty(a))return 1/0;var d={computed:1/0};return y(a,function(a,e,f){var g=b?b.call(c,a,e,f):a;gd||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.indexf;){var h=f+g>>>1;c.call(d,a[h])=0})})},x.difference=function(a){var b=i.apply(d,h.call(arguments,1));return x.filter(a,function(a){return!x.contains(b,a)})},x.zip=function(){for(var a=h.call(arguments),b=x.max(x.pluck(a,"length")),c=new Array(b),d=0;b>d;d++)c[d]=x.pluck(a,""+d);return c},x.object=function(a,b){for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},x.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=x.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(s&&a.indexOf===s)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},x.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(t&&a.lastIndexOf===t)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},x.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var D=function(){};x.bind=function(a,b){var c,d;if(a.bind===w&&w)return w.apply(a,h.call(arguments,1));if(!x.isFunction(a))throw new TypeError;return d=h.call(arguments,2),c=function(){if(!(this instanceof c))return a.apply(b,d.concat(h.call(arguments)));D.prototype=a.prototype;var e=new D,f=a.apply(e,d.concat(h.call(arguments)));return Object(f)===f?f:e}},x.bindAll=function(a){var b=h.call(arguments,1);return 0==b.length&&(b=x.functions(a)),y(b,function(b){a[b]=x.bind(a[b],a)}),a},x.memoize=function(a,b){var c={};return b||(b=x.identity),function(){var d=b.apply(this,arguments);return x.has(c,d)?c[d]:c[d]=a.apply(this,arguments)}},x.delay=function(a,b){var c=h.call(arguments,2);return setTimeout(function(){return a.apply(null,c)},b)},x.defer=function(a){return x.delay.apply(x,[a,1].concat(h.call(arguments,1)))},x.throttle=function(a,b){var c,d,e,f,g,h,i=x.debounce(function(){g=f=!1},b);return function(){c=this,d=arguments;var j=function(){e=null,g&&(h=a.apply(c,d)),i()};return e||(e=setTimeout(j,b)),f?g=!0:(f=!0,h=a.apply(c,d)),i(),h}},x.debounce=function(a,b,c){var d,e;return function(){var f=this,g=arguments,h=function(){d=null,c||(e=a.apply(f,g))},i=c&&!d;return clearTimeout(d),d=setTimeout(h,b),i&&(e=a.apply(f,g)),e}},x.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},x.wrap=function(a,b){return function(){var c=[a];return g.apply(c,arguments),b.apply(this,c)}},x.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},x.after=function(a,b){return 0>=a?b():function(){return--a<1?b.apply(this,arguments):void 0}},x.keys=v||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[];for(var c in a)x.has(a,c)&&(b[b.length]=c);return b},x.values=function(a){var b=[];for(var c in a)x.has(a,c)&&b.push(a[c]);return b},x.pairs=function(a){var b=[];for(var c in a)x.has(a,c)&&b.push([c,a[c]]);return b},x.invert=function(a){var b={};for(var c in a)x.has(a,c)&&(b[a[c]]=c);return b},x.functions=x.methods=function(a){var b=[];for(var c in a)x.isFunction(a[c])&&b.push(c);return b.sort()},x.extend=function(a){return y(h.call(arguments,1),function(b){for(var c in b)a[c]=b[c]}),a},x.pick=function(a){var b={},c=i.apply(d,h.call(arguments,1));return y(c,function(c){c in a&&(b[c]=a[c])}),b},x.omit=function(a){var b={},c=i.apply(d,h.call(arguments,1));for(var e in a)x.contains(c,e)||(b[e]=a[e]);return b},x.defaults=function(a){return y(h.call(arguments,1),function(b){for(var c in b)null==a[c]&&(a[c]=b[c])}),a},x.clone=function(a){return x.isObject(a)?x.isArray(a)?a.slice():x.extend({},a):a},x.tap=function(a,b){return b(a),a};var E=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof x&&(a=a._wrapped),b instanceof x&&(b=b._wrapped);var e=j.call(a);if(e!=j.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;c.push(a),d.push(b);var g=0,h=!0;if("[object Array]"==e){if(g=a.length,h=g==b.length)for(;g--&&(h=E(a[g],b[g],c,d)););}else{var i=a.constructor,k=b.constructor;if(i!==k&&!(x.isFunction(i)&&i instanceof i&&x.isFunction(k)&&k instanceof k))return!1;for(var l in a)if(x.has(a,l)&&(g++,!(h=x.has(b,l)&&E(a[l],b[l],c,d))))break;if(h){for(l in b)if(x.has(b,l)&&!g--)break;h=!g}}return c.pop(),d.pop(),h};x.isEqual=function(a,b){return E(a,b,[],[])},x.isEmpty=function(a){if(null==a)return!0;if(x.isArray(a)||x.isString(a))return 0===a.length;for(var b in a)if(x.has(a,b))return!1;return!0},x.isElement=function(a){return!(!a||1!==a.nodeType)},x.isArray=u||function(a){return"[object Array]"==j.call(a)},x.isObject=function(a){return a===Object(a)},y(["Arguments","Function","String","Number","Date","RegExp"],function(a){x["is"+a]=function(b){return j.call(b)=="[object "+a+"]"}}),x.isArguments(arguments)||(x.isArguments=function(a){return!(!a||!x.has(a,"callee"))}),"function"!=typeof/./&&(x.isFunction=function(a){return"function"==typeof a}),x.isFinite=function(a){return x.isNumber(a)&&isFinite(a)},x.isNaN=function(a){return x.isNumber(a)&&a!=+a},x.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==j.call(a)},x.isNull=function(a){return null===a},x.isUndefined=function(a){return void 0===a},x.has=function(a,b){return k.call(a,b)},x.noConflict=function(){return a._=b,this},x.identity=function(a){return a},x.times=function(a,b,c){for(var d=0;a>d;d++)b.call(c,d)},x.random=function(a,b){return null==b&&(b=a,a=0),a+(0|Math.random()*(b-a+1))};var F={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};F.unescape=x.invert(F.escape);var G={escape:new RegExp("["+x.keys(F.escape).join("")+"]","g"),unescape:new RegExp("("+x.keys(F.unescape).join("|")+")","g")};x.each(["escape","unescape"],function(a){x[a]=function(b){return null==b?"":(""+b).replace(G[a],function(b){return F[a][b]})}}),x.result=function(a,b){if(null==a)return null;var c=a[b];return x.isFunction(c)?c.call(a):c},x.mixin=function(a){y(x.functions(a),function(b){var c=x[b]=a[b];x.prototype[b]=function(){var a=[this._wrapped];return g.apply(a,arguments),L.call(this,c.apply(x,a))}})};var H=0;x.uniqueId=function(a){var b=H++;return a?a+b:b},x.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var I=/(.)^/,J={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},K=/\\|'|\r|\n|\t|\u2028|\u2029/g;x.template=function(a,b,c){c=x.defaults({},c,x.templateSettings);var d=new RegExp([(c.escape||I).source,(c.interpolate||I).source,(c.evaluate||I).source].join("|")+"|$","g"),e=0,f="__p+='";a.replace(d,function(b,c,d,g,h){f+=a.slice(e,h).replace(K,function(a){return"\\"+J[a]}),f+=c?"'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'":d?"'+\n((__t=("+d+"))==null?'':__t)+\n'":g?"';\n"+g+"\n__p+='":"",e=h+b.length}),f+="';\n",c.variable||(f="with(obj||{}){\n"+f+"}\n"),f="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+f+"return __p;\n";try{var g=new Function(c.variable||"obj","_",f)}catch(h){throw h.source=f,h}if(b)return g(b,x);var i=function(a){return g.call(this,a,x)};return i.source="function("+(c.variable||"obj")+"){\n"+f+"}",i},x.chain=function(a){return x(a).chain()};var L=function(a){return this._chain?x(a).chain():a};x.mixin(x),y(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=d[a];x.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],L.call(this,c)}}),y(["concat","join","slice"],function(a){var b=d[a];x.prototype[a]=function(){return L.call(this,b.apply(this._wrapped,arguments))}}),x.extend(x.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this),function(a,b){function c(a){var b=a.length,c=kb.type(a);return kb.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||"function"!==c&&(0===b||"number"==typeof b&&b>0&&b-1 in a)}function d(a){var b=zb[a]={};return kb.each(a.match(mb)||[],function(a,c){b[c]=!0}),b}function e(a,c,d,e){if(kb.acceptData(a)){var f,g,h=kb.expando,i=a.nodeType,j=i?kb.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||d!==b||"string"!=typeof c)return k||(k=i?a[h]=bb.pop()||kb.guid++:h),j[k]||(j[k]=i?{}:{toJSON:kb.noop}),("object"==typeof c||"function"==typeof c)&&(e?j[k]=kb.extend(j[k],c):j[k].data=kb.extend(j[k].data,c)),g=j[k],e||(g.data||(g.data={}),g=g.data),d!==b&&(g[kb.camelCase(c)]=d),"string"==typeof c?(f=g[c],null==f&&(f=g[kb.camelCase(c)])):f=g,f}}function f(a,b,c){if(kb.acceptData(a)){var d,e,f=a.nodeType,g=f?kb.cache:a,i=f?a[kb.expando]:kb.expando;if(g[i]){if(b&&(d=c?g[i]:g[i].data)){kb.isArray(b)?b=b.concat(kb.map(b,kb.camelCase)):b in d?b=[b]:(b=kb.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;for(;e--;)delete d[b[e]];if(c?!h(d):!kb.isEmptyObject(d))return}(c||(delete g[i].data,h(g[i])))&&(f?kb.cleanData([a],!0):kb.support.deleteExpando||g!=g.window?delete g[i]:g[i]=null)}}}function g(a,c,d){if(d===b&&1===a.nodeType){var e="data-"+c.replace(Bb,"-$1").toLowerCase();if(d=a.getAttribute(e),"string"==typeof d){try{d="true"===d?!0:"false"===d?!1:"null"===d?null:+d+""===d?+d:Ab.test(d)?kb.parseJSON(d):d}catch(f){}kb.data(a,c,d)}else d=b}return d}function h(a){var b;for(b in a)if(("data"!==b||!kb.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function i(){return!0}function j(){return!1}function k(){try{return Y.activeElement}catch(a){}}function l(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}function m(a,b,c){if(kb.isFunction(b))return kb.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return kb.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(Qb.test(b))return kb.filter(b,a,c);b=kb.filter(b,a)}return kb.grep(a,function(a){return kb.inArray(a,b)>=0!==c})}function n(a){var b=Ub.split("|"),c=a.createDocumentFragment();if(c.createElement)for(;b.length;)c.createElement(b.pop());return c}function o(a,b){return kb.nodeName(a,"table")&&kb.nodeName(1===b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function p(a){return a.type=(null!==kb.find.attr(a,"type"))+"/"+a.type,a}function q(a){var b=ec.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function r(a,b){for(var c,d=0;null!=(c=a[d]);d++)kb._data(c,"globalEval",!b||kb._data(b[d],"globalEval"))}function s(a,b){if(1===b.nodeType&&kb.hasData(a)){var c,d,e,f=kb._data(a),g=kb._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)kb.event.add(b,c,h[c][d])}g.data&&(g.data=kb.extend({},g.data))}}function t(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!kb.support.noCloneEvent&&b[kb.expando]){e=kb._data(b);for(d in e.events)kb.removeEvent(b,d,e.handle);b.removeAttribute(kb.expando)}"script"===c&&b.text!==a.text?(p(b).text=a.text,q(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),kb.support.html5Clone&&a.innerHTML&&!kb.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&bc.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}function u(a,c){var d,e,f=0,g=typeof a.getElementsByTagName!==W?a.getElementsByTagName(c||"*"):typeof a.querySelectorAll!==W?a.querySelectorAll(c||"*"):b;if(!g)for(g=[],d=a.childNodes||a;null!=(e=d[f]);f++)!c||kb.nodeName(e,c)?g.push(e):kb.merge(g,u(e,c));return c===b||c&&kb.nodeName(a,c)?kb.merge([a],g):g}function v(a){bc.test(a.type)&&(a.defaultChecked=a.checked)}function w(a,b){if(b in a)return b;for(var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=yc.length;e--;)if(b=yc[e]+c,b in a)return b;return d}function x(a,b){return a=b||a,"none"===kb.css(a,"display")||!kb.contains(a.ownerDocument,a)}function y(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=kb._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&x(d)&&(f[g]=kb._data(d,"olddisplay",C(d.nodeName)))):f[g]||(e=x(d),(c&&"none"!==c||!e)&&kb._data(d,"olddisplay",e?c:kb.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}function z(a,b,c){var d=rc.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function A(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+=kb.css(a,c+xc[f],!0,e)),d?("content"===c&&(g-=kb.css(a,"padding"+xc[f],!0,e)),"margin"!==c&&(g-=kb.css(a,"border"+xc[f]+"Width",!0,e))):(g+=kb.css(a,"padding"+xc[f],!0,e),"padding"!==c&&(g+=kb.css(a,"border"+xc[f]+"Width",!0,e)));return g}function B(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=kc(a),g=kb.support.boxSizing&&"border-box"===kb.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=lc(a,b,f),(0>e||null==e)&&(e=a.style[b]),sc.test(e))return e;d=g&&(kb.support.boxSizingReliable||e===a.style[b]),e=parseFloat(e)||0}return e+A(a,b,c||(g?"border":"content"),d,f)+"px"}function C(a){var b=Y,c=uc[a];return c||(c=D(a,b),"none"!==c&&c||(jc=(jc||kb("