Remove unmaintained standalone Prime environment

This commit is contained in:
Matias Griese
2020-02-17 13:31:19 +02:00
parent e2bffc0553
commit a5a47b4d94
101 changed files with 6 additions and 6961 deletions
+3
View File
@@ -27,6 +27,9 @@
1. [](#new)
- Updated minimum requirement to Grav 1.6 and Admin 1.9
- Grav specific code passes phpstan level 1 tests
1. [Prime](#grav)
1. [](#new)
- Remove unmaintained standalone Prime environment
# 5.4.32
## 01/02/2020
@@ -1,12 +0,0 @@
{% set title %}
{% block title %}{% endblock %}
{%- endset -%}
<div class="module">
{% if title|trim %}
<h2>{{ title|trim }}</h2>
{% endif %}
{% block module %}
{% endblock %}
</div>
@@ -1,9 +0,0 @@
{% extends ['@nucleus/module-chrome/' ~ style ~ '.html.twig', '@nucleus/module-chrome/gantry.html.twig'] %}
{% block title %}
{{ segment.title }}
{% endblock %}
{% block module %}
{% include '@nucleus/content/' ~ segment.type ~ '.html.twig' with { segment: {type: segment.type, subtype: segment.options.type, attributes: segment.options.attributes }} %}
{% endblock %}
@@ -1,3 +0,0 @@
{% extends "@nucleus/page.html.twig" %}
{% do gantry.debugger.addMessage("Gantry 5 Prime") %}
@@ -1,12 +0,0 @@
{% extends "@nucleus/page_head.html.twig" %}
{% block head_title %}
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{{ site.title|e }}</title>
<meta name="description" content="{{ site.description|e }}">
{% endblock %}
{% block head_application %}
{{ gantry.platform.finalize }}
{{ parent() }}
{% endblock %}
Vendored
-106
View File
@@ -226,112 +226,6 @@
}
]
}
},
"prime":{
"nodes":{
"debugbar":[
{
"source":"/platforms/prime/debugbar",
"destination":"/debugbar"
}
],
"admin":[
{
"source":"/platforms/prime/admin",
"destination":"/admin"
},
{
"source":"/platforms/common",
"destination":"/admin/common"
}
],
"config":[
{
"source":"/platforms/prime/config",
"destination":"/config"
}
],
"layouts":[
{
"source":"/platforms/prime/layouts",
"destination":"/layouts"
}
],
"media":[
{
"source":"/platforms/prime/media",
"destination":"/media"
}
],
"pages":[
{
"source":"/platforms/prime/pages",
"destination":"/pages"
}
],
"positions":[
{
"source":"/platforms/prime/positions",
"destination":"/positions"
}
],
"root":[
{
"source":"/engines",
"destination":"/engines"
},
{
"source":"/assets",
"destination":"/assets"
},
{
"source":"/src",
"destination":"/src"
},
{
"source":"/platforms/prime/.htaccess",
"destination":"/.htaccess"
},
{
"source":"/platforms/prime/index.php",
"destination":"/index.php"
}
],
"themes":[
{
"source":"/themes/hydrogen/prime",
"destination":"/themes/hydrogen"
},
{
"source":"/themes/hydrogen/common",
"destination":"/themes/hydrogen/common"
},
{
"source":"/themes/hydrogen-demo/prime",
"destination":"/themes/hydrogen-demo"
},
{
"source":"/themes/hydrogen-demo/common",
"destination":"/themes/hydrogen-demo/common"
},
{
"source":"/themes/helium/prime",
"destination":"/themes/helium"
},
{
"source":"/themes/helium/common",
"destination":"/themes/helium/common"
},
{
"source":"/themes/helium-demo/prime",
"destination":"/themes/helium-demo"
},
{
"source":"/themes/helium-demo/common",
"destination":"/themes/helium-demo/common"
}
]
}
}
}
}
-54
View File
@@ -1,54 +0,0 @@
<IfModule mod_rewrite.c>
RewriteEngine On
## Begin - Exploits
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Grav
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Exploits
## Begin RewriteBase
# If you are getting 404 errors on subpages, you may have to uncomment the RewriteBase entry
# You should change the '/' to your appropriate subfolder. For example if you have
# your Grav install at the root of your site '/' should work, else it might be something
# along the lines of: RewriteBase /<your_sub_folder>
##
# RewriteBase /
## End - RewriteBase
## Begin - Index
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
## End - Index
## Begin - Security
# Block all direct access for these folders
RewriteRule ^(cache|includes|src)/(.*) error [L]
# Block access to specific file types for these folders
RewriteRule ^(pages|themes|vendor)/(.*)\.(txt|md|html|yaml|php|twig|sh|bat)$ error [L]
## End - Security
</IfModule>
# Begin - Prevent Browsing
Options -Indexes
# End - Prevent Browsing
-96
View File
@@ -1,96 +0,0 @@
Gantry Prime
============
Gantry Prime is our primary theme development and testing platform. It is a standalone Gantry 5 installation which allows both developers and testers to access all the features in both administration and the site without the overhead and quirks of installing and running a CMS.
Prime itself is a very simple environment which consists of only three small php files and the usual platform specific classes. On top of that it has some template file overrides and the test data consisting of pages, module positions and layouts.
## Installing
You can install Gantry Prime by cloning the Gantry Playground project to your projects directory:
git clone git@bitbucket.org:rockettheme/gantry-playground.git
cd gantry-playground
git checkout develop
composer install
After this you need to go to your web root and create a new directory:
mkdir prime
cd prime
touch .prime
Now you just need to install prime to your web root by running the following command (pointing to your projects directory):
~/MyProjects/gantry-playground/bin/install.sh
And you're set up!
## Updating
You can update your repository at any time by running:
git pull
composer update
## Content Pages
All the Gantry Prime pages are located in pages/ folder. Content pages are written by using twig templating language.
Gantry prime uses very simple routing where it just looks if there is a file which has identical path to URI appended with .html.twig for regular html output.
path/to/my/page => PRIME_ROOT/pages/path/to/my/page.html.twig
another/path => PRIME_ROOT/pages/another/path.html.twig
Basic structure of the file is:
{% extends "@nucleus/page.html.twig" %}
{% do gantry.theme.setLayout('test') %}
{% block content %}
Here comes your content.
{% endblock %}
## Module positions
Module positions work in a similar way to Joomla; named module positions are defined in layout files. Each position can contain a set of modules, which are stored under modules/position_name/ folder. All module files defined in here are global and exist on every page which has the module position defined inside their layout file.
Simple module file is defined below:
{% extends "@nucleus/partials/module.html.twig" %}
{% set title = position.name %}
{% block module %}
{% endblock %}
## Layouts
Layouts define the structure of the page.
Lookup paths for layouts (against the repository):
/theme/[current]/layouts
/theme/[current]/common/layouts
/platform/prime/layouts
## Streams
Platform specific streams:
gantry-prime:// /prime
gantry-layouts:// /prime/layouts, gantry-theme://layouts
gantry-pages:// /prime/pages
gantry-positions:// /prime/positions
Common streams:
gantry-admin:// /prime/admin (only available in admin)
gantry-media:// /prime/media
gantry-themes:// /prime/themes
gantry-theme:// /prime/themes/[current]
Internal streams:
gantry-cache:// Cached Files
gantry-blueprints:// Blueprint Files
gantry-config:// Configuration Files
gantry-engine:// Nucleus Engine
gantry-particles:// Gantry Particles
-10
View File
@@ -1,10 +0,0 @@
<?php
defined('PRIME_ROOT') or die;
define('GANTRYADMIN_PATH', PRIME_ROOT . '/admin');
$gantry['router'] = function ($c) {
return new Gantry\Admin\Router($c);
};
$gantry['router']->dispatch();
@@ -1,48 +0,0 @@
<div class="g-grid">
<div class="g-block">
<div class="g-content clearfix">
<span class="theme-title"><i class="fa fa-tint" aria-hidden="true"></i> {{ 'GANTRY5_PLATFORM_THEME'|trans }}: {{ gantry.theme.title|e }} <small>(v{{ gantry.theme.version }} / {{ gantry.theme.name|e }})</small></span>
{% set settings_url = gantry.platform.settings %}
{% set settings_key = gantry.platform.settings_key %}
<ul class="float-right">
<li {{ (location == 'configurations') ? 'class="active"' }}>
<a data-g5-ajaxify data-g5-ajaxify-target="[data-g5-content]" href="{{ gantry.route('configurations')|e }}"><i class="fa fa-fw fa-th" aria-hidden="true"></i> {{ 'GANTRY5_PLATFORM_OUTLINES'|trans }}</a>
</li>
<li {{ (location == 'positions') ? 'class="active"' }}>
<a data-g5-ajaxify data-g5-ajaxify-target="[data-g5-content]" href="{{ gantry.route('positions')|e }}"><i class="fa fa-fw fa-object-group" aria-hidden="true"></i> {{ 'GANTRY5_PLATFORM_POSITIONS'|trans }}</a>
</li>
<li {{ (location == 'menu') ? 'class="active"' }}>
<a data-g5-ajaxify data-g5-ajaxify-target="[data-g5-content]" href="{{ gantry.route('menu')|e }}"><i class="fa fa-fw fa-bars" aria-hidden="true"></i> <span>{{ 'GANTRY5_PLATFORM_MENU'|trans }}</span></a>
</li>
<li {{ (location == 'about') ? 'class="active"' }}>
<a data-g5-ajaxify data-g5-ajaxify-target="[data-g5-content]" href="{{ gantry.route('about')|e }}"><i class="fa fa-fw fa-question-circle" aria-hidden="true"></i> <span>{{ 'GANTRY5_PLATFORM_ABOUT'|trans }}</span></a>
</li>
<li data-g-extras data-g-popover data-g-popover-style="extras" aria-haspopup="true" aria-expanded="false" role="presentation">
<a href="#"><i class="fa fa-fw fa-cog" aria-hidden="true"></i> {{ 'GANTRY5_PLATFORM_EXTRAS'|trans }} <i class="small fa fa-fw fa-chevron-down" aria-hidden="true"></i></a>
<ul data-popover-content class="hidden" tabindex="0">
{% set prod_mode = 'GANTRY5_PLATFORM_PRODUCTION'|trans %}
{% set dev_mode = 'GANTRY5_PLATFORM_DEVELOPMENT'|trans %}
<li data-g-devprod="{{ {0: dev_mode, 1: prod_mode}|json_encode|e('html_attr') }}">
<i class="fa fa-fw fa-wrench" aria-hidden="true"></i> <span class="devprod-mode">{{ gantry.global.production ? prod_mode : dev_mode }}</span>
<div class="float-right">
<span class="enabler" role="checkbox" aria-checked="{{ gantry.global.production == '0' ? 'false' : 'true'}}" tabindex="0" aria-label="Switches to Production Mode">
<input type="hidden" name="production_mode" value="{{ gantry.global.production }}">
<span class="toggle"><span class="knob"></span></span>
</span>
</div>
</li>
<li data-g-popover-follow>
<a tabindex="0" href="{{ gantry.route('cache')|e }}" data-ajax-action data-ajax-action-method="get" data-ajax-action-indicator="li[data-g-extras]"><i class="fa fa-fw fa-recycle" aria-hidden="true"></i> {{ 'GANTRY5_PLATFORM_CLEAR_CACHE'|trans }}</a>
</li>
{% if settings_url %}
<li>
<a tabindex="0" href="{{ settings_url|e }}" data-settings-key="{{ settings_key|e }}"><i class="fa fa-fw fa-{{ gantry.platform.name }} fab fab-{{ gantry.platform.name }}" aria-hidden="true"></i> {{ 'GANTRY5_PLATFORM_PLATFORM_SETTINGS'|trans }}</a>
</li>
{% endif %}
</ul>
</li>
</ul>
</div>
</div>
</div>
@@ -1,40 +0,0 @@
{% set htmlContent -%}
{% block content -%}
{% endblock -%}
{% endset -%}
<!DOCTYPE xhtml>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Gantry Administration</title>
<meta name="description" content="Gantry Administration">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% block stylesheets %}
{{ gantry.styles('head')|join("\n ")|raw }}
{% endblock %}
{% block javascript %}
<script>
var GANTRY_AJAX_SUFFIX = '{{ gantry.ajax_suffix }}';
var GANTRY_AJAX_URL = '{{ gantry.route('%ajax%')|e }}';
var GANTRY_AJAX_CONF_URL = '{{ gantry.route('configurations/%ajax%')|e }}';
var GANTRY_AJAX_NONCE = null;
var GANTRY_PLATFORM = 'prime';
</script>
{{ gantry.scripts('head')|join("\n ")|raw }}
{% endblock %}
</head>
<body class="g-prime gantry5 gantry5-prime">
<div id="g5-container">
{{ htmlContent }}
{% block footer_section %}
{{ gantry.scripts('footer')|join("\n ")|raw }}
{% endblock %}
</div>
</body>
</html>
@@ -1,37 +0,0 @@
analytics:
enabled: true
ua:
code: xxxxx
branding:
enabled: true
css:
class: 'particle_gantry_branding'
copyright:
enabled: true
date:
start: 2007
end: now
owner: 'RocketTheme, LLC'
date:
enabled: true
loginbutton:
enabled: true
title:
logintext: Login
logouttext: Logout
css:
class: 'particle_gantry_loginbutton'
logo:
enabled: true
image: 'images/logo.png'
text: 'Gantry'
totop:
enabled: false
css:
class: 'particle_gantry_totop'
@@ -1,11 +0,0 @@
enabled: true
css:
- name: Bootstrap
location: http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css
- name: Fontawesome
location: http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css
javascript:
- name: Bootstrap
location: http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js
@@ -1,7 +0,0 @@
enabled: true
css:
id:
class: 'date'
date.formats: l, F d, Y
@@ -1,5 +0,0 @@
enabled: true
base: /
menu: mainmenu
startLevel: 1
maxLevels: 0
@@ -1,29 +0,0 @@
enabled: true
css:
id:
class: 'social-items'
target: _blank
items:
- name: Twitter
icon: fa fa-twitter
text: Our Twitter
link: http://twitter.com/rockettheme
- name: Facebook
icon: fa fa-facebook
text: Our Facebook
link: http://facebook.com/rockettheme
- name: Google
icon: fa fa-google
text: Our Google
link: http://plus.google.com/+rockettheme
- name: RSS
icon: fa fa-rss
text: Our RSS
link: http://www.rockettheme.com/product-updates?rss
@@ -1,16 +0,0 @@
enabled: true
css:
id:
class: 'members-list'
members:
- name: Robert Smith
role: CEO of Chimera
image: gantry-prime://images/rocketlauncher/pages/the-team/img-01.jpg
description: '<p>Hi I am Robert!</p>'
- name: Matias the Awesome
role: Lead Developer
image: gantry-prime://images/rocketlauncher/pages/the-team/img-02.jpg
description: '<p>rok Rok ROk ROK!</p>'
@@ -1,4 +0,0 @@
accent:
accent1: "#DF392E"
accent2: "#FEB948"
accent3: "#3CA5DA"
-5
View File
@@ -1,5 +0,0 @@
debug: false
production: false
use_media_folder: false
asset_timestamps: true
asset_timestamps_period: 7
-196
View File
@@ -1,196 +0,0 @@
settings:
title: Extended Menu
base: /
ordering:
home:
features:
- overview:
positions:
variations:
typography:
menu:
documentation:
- another:
item-3:
item-1:
item-2:
yet-another:
yet-yet-another:
- module:
sample-pages:
- overview:
about-us:
layout-1:
layout-2:
layout-3:
our-team:
layout-1:
layout-2:
layout-3:
pricing:
layout-1:
layout-2:
layout-3:
- faq:
layout-1:
layout-2:
layout-3:
services:
layout-1:
layout-2:
layout-3:
blog:
layout-1:
layout-2:
layout-3:
- ricochet:
special:
- error:
offline:
comingsoon:
- unsupported:
component:
raw:
styles:
- preset-1:
preset-2:
preset-3:
- preset-4:
preset-5:
preset-6:
download:
contact:
items:
home:
icon: fa fa-fw fa-home
features:
type: alias
link: features/typography
title: Features
icon: fa fa-fw fa-bolt
layout: columns
features/overview:
index: 0
features/positions:
index: 0
features/variations:
index: 0
features/typography:
index: 0
features/menu:
index: 0
features/documentation:
index: 0
features/another:
index: 1
features/another/item-1:
index: 1
features/another/item-2:
index: 1
features/another/item-3:
index: 1
features/yet-another:
index: 1
features/yet-yet-another:
index: 1
features/module:
index: 2
sample-pages:
type: separator
title: Sample Pages
icon: fa fa-fw fa-fire
columns: [25, 50, 25]
sample-pages/about-us:
type: separator
title: About Us
icon: fa fa-fw fa-ra
sample-pages/our-team:
type: separator
title: Our Team
icon: fa fa-fw fa-users
sample-pages/pricing:
type: separator
title: Pricing
icon: fa fa-fw fa-usd
sample-pages/faq:
type: separator
title: FAQ
icon: fa fa-fw fa-book
sample-pages/services:
type: separator
title: Services
icon: fa fa-fw fa-taxi
sample-pages/blog:
type: separator
title: Blog
icon: fa fa-fw fa-calendar-o
special:
type: alias
link: special/error
title: Special Pages
icon: fa fa-fw fa-shield
special/error:
icon: fa fa-fw fa-warning
special/unsupported:
icon: fa fa-fw fa-wheelchair
special/offline:
icon: fa fa-fw fa-power-off
special/comingsoon:
icon: fa fa-fw fa-paint-brush
special/component:
icon: fa fa-fw fa-file-text-o fa-file-alt
special/raw:
icon: fa fa-fw fa-file-code-o
styles:
styles/preset-1:
styles/preset-2:
styles/preset-3:
styles/preset-4:
styles/preset-5:
styles/preset-6:
download:
contact:
about:
visible: false
team:
visible: false
-75
View File
@@ -1,75 +0,0 @@
settings:
title: Main Menu
base: /
ordering:
home:
admin:
about:
configurations:
menu:
themes:
learn:
items:
home:
icon: fa fa-fw fa-home
features:
type: alias
link: features/typography
title: Features
icon: fa fa-fw fa-bolt
layout: columns
sample-pages:
title: Sample Pages
icon: fa fa-fw fa-fire
admin:
type: separator
title: Admin
icon: fa fa-fw fa-cogs
target: _blank
admin/about:
type: alias
link: admin
title: Theme Admin
icon: fa fa-fw fa-question-circle
target: _blank
admin/configurations:
type: alias
link: admin/configurations
title: Configurations
icon: fa fa-fw fa-star
target: _blank
admin/menu:
type: alias
link: admin/menu
title: Menu Manager
icon: fa fa-fw fa-wrench
target: _blank
admin/themes:
type: alias
link: ../
title: Back to Themes
icon: fa fa-fw fa-tint
target: _blank
admin/learn:
type: alias
link: ../learn
title: Documentation
icon: fa fa-fw fa-tint
target: _blank
admin/download:
type: alias
link: ../builds/gantry5
title: Download
icon: fa fa-fw fa-book
target: _blank
-251
View File
@@ -1,251 +0,0 @@
<?php
namespace Gantry;
use DebugBar\DataCollector\ConfigCollector;
use DebugBar\JavascriptRenderer;
use DebugBar\StandardDebugBar;
use Gantry\Component\Config\Config;
use Gantry\Framework\Document;
use Gantry\Framework\Gantry;
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
/**
* Class Debugger
* @package Gantry\Component\Debug
*/
class Debugger
{
protected static $instance;
/** @var JavascriptRenderer $renderer */
protected static $renderer;
/** @var StandardDebugBar $debugbar */
protected static $debugbar;
/**
* @return static
*/
public static function instance()
{
if (!self::$instance) {
self::$instance = new static;
}
return self::$instance;
}
/**
* Initialize debugbar.
*/
public function __construct()
{
if (!class_exists('DebugBar\\StandardDebugBar')) {
$include = __DIR__ . '/vendor/autoload.php';
if (!file_exists($include)) {
return;
}
include_once $include;
}
self::$debugbar = new StandardDebugBar();
self::$debugbar['time']->addMeasure('Loading', self::$debugbar['time']->getRequestStartTime(), microtime(true));
}
/**
* Set Configuration
*
* @param Config $config
* @return static
* @throws \DebugBar\DebugBarException
*/
public static function setConfig(Config $config)
{
if (self::$debugbar) {
self::$debugbar->addCollector(new ConfigCollector($config->toArray(), 'Config'));
}
return static::instance();
}
/**
* Set Configuration
*
* @param UniformResourceLocator $locator
* @return static
* @throws \DebugBar\DebugBarException
*/
public static function setLocator(UniformResourceLocator $locator)
{
if (self::$debugbar) {
$paths = $locator->getPaths(null);
$paths && self::$debugbar->addCollector(new ConfigCollector($paths, 'Streams'));
}
return static::instance();
}
/**
* Add the debugger assets to the Grav Assets.
*
* @return static
*/
public static function assets()
{
if (self::$debugbar) {
$gantry = Gantry::instance();
$gantry->load('jquery');
self::$renderer = self::$debugbar->getJavascriptRenderer();
self::$renderer->setIncludeVendors(false);
self::$renderer->setBaseUrl(rtrim(PRIME_URI, '/') . '/debugbar/vendor/maximebf/debugbar/src/DebugBar/Resources');
list($css_files, $js_files) = self::$renderer->getAssets(null, JavascriptRenderer::RELATIVE_URL);
/** @var Document $document */
$document = $gantry['document'];
foreach ($css_files as $css) {
$document->addHeaderTag([
'tag' => 'link',
'rel' => 'stylesheet',
'href' => $css
], 'head', 0);
}
foreach ($js_files as $js) {
$document->addHeaderTag([
'tag' => 'script',
'src' => $js
], 'head', 0);
}
}
return static::instance();
}
/**
* Adds a data collector.
*
* @param $collector
* @return static
* @throws \DebugBar\DebugBarException
*/
public static function addCollector($collector)
{
if (self::$debugbar) {
self::$debugbar->addCollector($collector);
}
return static::instance();
}
/**
* Returns a data collector.
*
* @param $collector
*
* @return \DebugBar\DataCollector\DataCollectorInterface|null
* @throws \DebugBar\DebugBarException
*/
public static function getCollector($collector)
{
if (!self::$debugbar) {
return null;
}
return self::$debugbar->getCollector($collector);
}
/**
* Displays the debug bar.
*
* @return string
*/
public static function render()
{
if (!self::$debugbar) {
return '';
}
return self::$renderer->render();
}
/**
* Sends the data through the HTTP headers.
*
* @return static
*/
public static function sendDataInHeaders()
{
if (self::$debugbar) {
self::$debugbar->sendDataInHeaders();
}
return static::instance();
}
/**
* Start a timer with an associated name and description.
*
* @param $name
* @param string|null $description
* @return static
*/
public static function startTimer($name, $description = null)
{
if (self::$debugbar) {
self::$debugbar['time']->startMeasure($name, $description);
}
return static::instance();
}
/**
* Stop the named timer.
*
* @param string $name
* @return static
*/
public static function stopTimer($name)
{
if (self::$debugbar) {
self::$debugbar['time']->stopMeasure($name);
}
return static::instance();
}
/**
* Dump variables into the Messages tab of the Debug Bar.
*
* @param $message
* @param string $label
* @return static
*/
public static function addMessage($message, $label = 'info', $isString = true)
{
if (self::$debugbar) {
self::$debugbar['messages']->addMessage($message, $label, $isString);
}
return static::instance();
}
/**
* Dump exception.
*
* @param \Exception $e
* @return Debugger
*/
public static function addException(\Exception $e)
{
if (self::$debugbar) {
self::$debugbar['exceptions']->addException($e);
}
return static::instance();
}
}
-12
View File
@@ -1,12 +0,0 @@
{
"name": "prime-debugbar",
"description": "DebugBar for Gantry Prime",
"license": "MIT",
"require": {
"php": ">=5.6.20",
"maximebf/debugbar": "~1.10",
"symfony/polyfill-iconv": "~1.0",
"symfony/var-dumper": "~3.4"
}
}
-315
View File
@@ -1,315 +0,0 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "a8b5076faef23c002437a9a1b8a4b30e",
"packages": [
{
"name": "maximebf/debugbar",
"version": "v1.16.0",
"source": {
"type": "git",
"url": "https://github.com/maximebf/php-debugbar.git",
"reference": "6ca3502de5e5889dc21311d2461f8cc3b6a094b1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/6ca3502de5e5889dc21311d2461f8cc3b6a094b1",
"reference": "6ca3502de5e5889dc21311d2461f8cc3b6a094b1",
"shasum": ""
},
"require": {
"php": "^7.1",
"psr/log": "^1.0",
"symfony/var-dumper": "^2.6|^3|^4"
},
"require-dev": {
"phpunit/phpunit": "^5"
},
"suggest": {
"kriswallsmith/assetic": "The best way to manage assets",
"monolog/monolog": "Log using Monolog",
"predis/predis": "Redis storage"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.16-dev"
}
},
"autoload": {
"psr-4": {
"DebugBar\\": "src/DebugBar/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Maxime Bouroumeau-Fuseau",
"email": "maxime.bouroumeau@gmail.com",
"homepage": "http://maximebf.com"
},
{
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
}
],
"description": "Debug bar in the browser for php application",
"homepage": "https://github.com/maximebf/php-debugbar",
"keywords": [
"debug",
"debugbar"
],
"time": "2019-10-18T14:34:16+00:00"
},
{
"name": "psr/log",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Log\\": "Psr/Log/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
"homepage": "https://github.com/php-fig/log",
"keywords": [
"log",
"psr",
"psr-3"
],
"time": "2019-11-01T11:05:21+00:00"
},
{
"name": "symfony/polyfill-iconv",
"version": "v1.13.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-iconv.git",
"reference": "a019efccc03f1a335af6b4f20c30f5ea8060be36"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/a019efccc03f1a335af6b4f20c30f5ea8060be36",
"reference": "a019efccc03f1a335af6b4f20c30f5ea8060be36",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-iconv": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.13-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Iconv\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for the Iconv extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"iconv",
"polyfill",
"portable",
"shim"
],
"time": "2019-11-27T13:56:44+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.13.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "7b4aab9743c30be783b73de055d24a39cf4b954f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f",
"reference": "7b4aab9743c30be783b73de055d24a39cf4b954f",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-mbstring": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.13-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"mbstring",
"polyfill",
"portable",
"shim"
],
"time": "2019-11-27T14:18:11+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v3.4.36",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "569e261461600810845a8305ca3f64abd3e712c0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/569e261461600810845a8305ca3f64abd3e712c0",
"reference": "569e261461600810845a8305ca3f64abd3e712c0",
"shasum": ""
},
"require": {
"php": "^5.5.9|>=7.0.8",
"symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
},
"require-dev": {
"ext-iconv": "*",
"twig/twig": "~1.34|~2.4"
},
"suggest": {
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
"ext-intl": "To show region name in time zone dump",
"ext-symfony_debug": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
}
},
"autoload": {
"files": [
"Resources/functions/dump.php"
],
"psr-4": {
"Symfony\\Component\\VarDumper\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony mechanism for exploring and dumping PHP variables",
"homepage": "https://symfony.com",
"keywords": [
"debug",
"dump"
],
"time": "2019-10-10T11:03:19+00:00"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=5.6.20"
},
"platform-dev": []
}
-126
View File
@@ -1,126 +0,0 @@
<?php
use Gantry\Component\Filesystem\Folder;
use Gantry\Framework\Gantry;
define('PRIME_PROFILER', false);
define('PRIME_ROOT', dirname($_SERVER['SCRIPT_FILENAME']));
define('PRIME_URI', dirname($_SERVER['SCRIPT_NAME']));
PRIME_PROFILER && profiler_enable();
date_default_timezone_set('UTC');
// Load debugger if it exists.
$include = PRIME_ROOT . '/debugbar/Debugger.php';
if (file_exists($include)) {
include_once $include;
}
// Bootstrap Gantry framework.
include_once PRIME_ROOT . '/src/bootstrap.php';
// Initialize Gantry.
$gantry = Gantry::instance();
// Get current theme and path.
$path = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : Folder::getRelativePath($_SERVER['REQUEST_URI'], PRIME_URI);
$path = explode('?', $path, 2);
$path = reset($path);
$extension = strrchr(basename($path), '.');
if ($extension) {
$path = substr($path, 0, -strlen($extension));
}
$theme = strpos($path, 'admin') !== 0 ? Folder::shift($path) : null;
define('THEME', $theme);
define('PAGE_PATH', $path ?: ($theme ? 'home' : ''));
define('PAGE_EXTENSION', trim($extension, '.') ?: 'html');
// Bootstrap selected theme.
$include = PRIME_ROOT . "/themes/{$theme}/includes/gantry.php";
if (is_file($include)) {
include $include;
}
// Enter to administration if we are in /ROOT/theme/admin. Also display installed themes if no theme has been selected.
if (!isset($gantry['theme']) || strpos($path, 'admin') === 0) {
require_once PRIME_ROOT . '/admin/admin.php';
exit();
}
// Boot the service.
/** @var Gantry\Framework\Theme $theme */
$theme = $gantry['theme'];
try {
// Render the page.
echo $theme->setLayout('default')->render('@pages/' . PAGE_PATH . '.' . PAGE_EXTENSION . '.twig');
} catch (\Twig\Error\LoaderError $e) {
// Or display error if template file couldn't be found.
echo $theme->setLayout('_error')->render('@pages/_error.html.twig', ['error' => $e]);
}
PRIME_PROFILER && profiler_results();
/*
* Enable profiler.
*/
function profiler_enable()
{
if (!function_exists('xhprof_enable')) return;
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS);
}
/**
* Display profiler results.
*/
function profiler_results()
{
if (!function_exists('xhprof_disable')) return;
$info = xhprof_disable();
$treshholds = [
'#660000' => 500,
'#880000' => 370,
'#AA0000' => 250,
'#CC0000' => 180,
'#CC2200' => 120,
'#CC4400' => 80,
'#CC6600' => 55,
'#CC8800' => 35,
'#CCAA00' => 25,
'#CCCC00' => 18,
'#AACC00' => 12,
'#88CC00' => 9,
'#66CC00' => 6,
'#44CC00' => 4,
'#22CC00' => 3,
'#00CC00' => 2,
'' => 1
];
asort($treshholds);
echo "<h1>Profiler Information</h1>";
echo '<div style="padding:0 2em">';
foreach ($info as $call => $data) {
$count = $data['ct'];
$time = $data['wt'] / 1000;
$color = '';
foreach ($treshholds as $color => $treshhold) {
if ((float) $time < (float) $treshhold) {
break;
}
}
if (!$color) {
continue;
}
echo sprintf(
"<font color='%s'><b>%0.3f</b> ms</font> (<b>%d</b> calls): <i>%s</i><br/>\n",
$color, $time, $count, $call
);
}
echo "</div>";
}
@@ -1,23 +0,0 @@
header:
container:
- position-header
navigation:
container:
- particle-menu
container:
1:
- sidebar 20:
- position-sidebar
- main 80:
- system-messages
- pagecontent
footer:
container:
- position-footer
- [particle-copyright 40, spacer 30, particle-branding 30]
offcanvas:
- particle-mobile-menu
@@ -1,23 +0,0 @@
header:
container:
- position-header
navigation:
container:
- particle-menu
container:
1:
- main 80:
- system-messages
- pagecontent
- sidebar 20:
- position-sidebar
footer:
container:
- position-footer
- [particle-copyright 40, spacer 30, particle-branding 30]
offcanvas:
- particle-mobile-menu
-25
View File
@@ -1,25 +0,0 @@
header:
container:
- position-header
navigation:
container:
- particle-menu
container:
1:
- sidebar 20:
- position-sidebar
- main 60:
- system-messages
- pagecontent
- aside 20:
- position-aside
footer:
container:
- position-footer
- [particle-copyright 40, spacer 30, particle-branding 30]
offcanvas:
- particle-mobile-menu
@@ -1,25 +0,0 @@
header:
container:
- position-header
navigation:
container:
- particle-menu
container:
1:
- sidebar 20:
- position-sidebar
- aside 20:
- position-aside
- main 60:
- system-messages
- pagecontent
footer:
container:
- position-footer
- [particle-copyright 40, spacer 30, particle-branding 30]
offcanvas:
- particle-mobile-menu
@@ -1,25 +0,0 @@
header:
container:
- position-header
navigation:
container:
- particle-menu
container:
1:
- main 60:
- system-messages
- pagecontent
- aside 20:
- position-aside
- sidebar 20:
- position-sidebar
footer:
container:
- position-footer
- [particle-copyright 40, spacer 30, particle-branding 30]
offcanvas:
- particle-mobile-menu
-3
View File
@@ -1,3 +0,0 @@
container:
body:
- pagecontent
-12
View File
@@ -1,12 +0,0 @@
container:
header:
- [particle-logo 20, particle-menu 80]
body:
- pagecontent
footer:
- [spacer 25, particle-copyright 50, particle-branding 25]
offcanvas:
- particle-mobile-menu
-11
View File
@@ -1,11 +0,0 @@
container:
header:
- [particle-logo]
body:
- pagecontent
footer:
- [spacer 25, particle-copyright 50, particle-branding 25]
offcanvas:
-32
View File
@@ -1,32 +0,0 @@
version: 2
preset:
image: gantry-admin://images/layouts/default.png
layout:
/header/:
- [logo 20, menu 80]
- position-header
/container-main/:
- showcase 75:
- [position-showcase-1 50, position-showcase-2 50]
feature:
- [position-feature-1 50, position-feature-2 50]
main:
- system-messages
- system-content
bottom:
- position-bottom
- sidebar 25:
- social
- position-sidebar
- position-right
/footer/:
- position-footer
- [date 25, copyright 50, branding 25]
offcanvas:
- particle-mobile-menu
Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

-9
View File
@@ -1,9 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('_error') %}
{% block content %}
<h1>404 Page not found</h1>
<p>{{ error.getMessage() }}</p>
{% endblock %}
-12
View File
@@ -1,12 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<h2>Main Column</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget nisl congue blandit sit amet id ligula. Praesent et nulla eu augue tempus sagittis. Mauris faucibus nibh et nibh cursus in vestibulum sapien egestas. Curabitur ut lectus tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<h2>Main Column</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget nisl congue blandit sit amet id ligula. Praesent et nulla eu augue tempus sagittis. Mauris faucibus nibh et nibh cursus in vestibulum sapien egestas. Curabitur ut lectus tortor.</p>
<a href="#" class="button">Button</a>
<!--<img src="{{ url('gantry-media://images/test.jpg') }}" alt="Trees" />-->
{% endblock %}
-3
View File
@@ -1,3 +0,0 @@
title: Footer
ordering:
- social
@@ -1,29 +0,0 @@
title: Social Particle
type: particle
options:
type: social
attributes:
css:
class: social-items
items:
-
icon: 'fa fa-twitter'
text: Twitter
link: 'http://twitter.com/rockettheme'
name: Twitter
-
icon: 'fa fa-facebook'
text: Facebook
link: 'http://facebook.com/rockettheme'
name: Facebook
-
icon: 'fa fa-google'
text: Google
link: 'http://plus.google.com/+rockettheme'
name: Google
-
icon: 'fa fa-rss'
text: RSS
link: 'http://www.rockettheme.com/product-updates?rss'
name: RSS
assignments: all
-5
View File
@@ -1,5 +0,0 @@
title: Header
ordering:
- social
- social2
- social3
@@ -1,33 +0,0 @@
title: Social
type: particle
options:
type: social
attributes:
css:
class: social-items
items:
-
icon: 'fa fa-twitter'
text: Twitter
link: 'http://twitter.com/rockettheme'
name: Twitter
-
icon: 'fa fa-facebook'
text: Facebook
link: 'http://facebook.com/rockettheme'
name: Facebook
-
icon: 'fa fa-google'
text: Google
link: 'http://plus.google.com/+rockettheme'
name: Google
-
icon: 'fa fa-rss'
text: RSS
link: 'http://www.rockettheme.com/product-updates?rss'
name: RSS
assignments:
page:
-
home: 1
features/typography: 1
@@ -1,30 +0,0 @@
title: New Social
type: particle
options:
type: social
attributes:
css:
class: social-items
items:
-
icon: 'fa fa-rss'
text: RSS
link: 'http://www.rockettheme.com/product-updates?rss'
name: RSS
-
icon: 'fa fa-google'
text: Google
link: 'http://plus.google.com/+rockettheme'
name: Google
-
icon: 'fa fa-facebook'
text: Facebook
link: 'http://facebook.com/rockettheme'
name: Facebook
-
icon: 'fa fa-twitter'
text: Twitter
link: 'http://twitter.com/rockettheme'
name: Twitter
assignments: none
@@ -1,19 +0,0 @@
title: Another Social
type: particle
options:
type: social
attributes:
css:
class: social-items
items:
-
icon: 'fa fa-rss'
text: RSS
link: 'http://www.rockettheme.com/product-updates?rss'
name: RSS
-
icon: 'fa fa-twitter'
text: Twitter
link: 'http://twitter.com/rockettheme'
name: Twitter
-3
View File
@@ -84,9 +84,6 @@ abstract class RealLoader
} elseif (defined('GRAV_VERSION') && defined('ROOT_DIR')) {
define('GANTRY5_PLATFORM', 'grav');
define('GANTRY5_ROOT', rtrim(ROOT_DIR, '/'));
} elseif (defined('PRIME_ROOT')) {
define('GANTRY5_PLATFORM', 'prime');
define('GANTRY5_ROOT', PRIME_ROOT);
} else {
throw new \RuntimeException('Gantry: CMS not detected!');
}
@@ -195,7 +195,6 @@ abstract class Gantry extends Container
$route = isset($routes[$path]) ? $routes[$path] : $routes[1];
if (!$route) {
// TODO: need to implement back to root in Prime..
return $this->offsetGet('base_url');
}
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash
OUTPUT=--quiet
PLATFORMS=("joomla" "wordpress" "grav" "prime")
PLATFORMS=("joomla" "wordpress" "grav")
if [[ "$1" == '--loud' || "$1" == '-l' ]]; then
OUTPUT=''
@@ -12,4 +12,4 @@ do
echo "# Updating composer for $platform"
cd platforms/$platform && composer install --no-dev ${OUTPUT} && cd ../..
done
@@ -44,7 +44,7 @@ class Platform extends BasePlatform
{
parent::__construct($container);
// Initialize custom streams for Prime.
// Initialize custom streams for Grav.
$this->items['streams'] += [
'gantry-positions' => [
'type' => 'ReadOnlyStream',
@@ -1,120 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license MIT
*
* http://opensource.org/licenses/MIT
*/
namespace Gantry\Admin;
use RocketTheme\Toolbox\Event\Event;
use RocketTheme\Toolbox\Event\EventSubscriberInterface;
/**
* Class EventListener
* @package Gantry\Admin
*/
class EventListener implements EventSubscriberInterface
{
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
'admin.global.save' => ['onGlobalSave', 0],
'admin.styles.save' => ['onStylesSave', 0],
'admin.settings.save' => ['onSettingsSave', 0],
'admin.layout.save' => ['onLayoutSave', 0],
'admin.assignments.save' => ['onAssignmentsSave', 0],
'admin.menus.save' => ['onMenusSave', 0]
];
}
/**
* @param Event $event
*/
public function onGlobalSave(Event $event)
{
}
/**
* @param Event $event
*/
public function onStylesSave(Event $event)
{
}
/**
* @param Event $event
*/
public function onSettingsSave(Event $event)
{
}
/**
* @param Event $event
*/
public function onLayoutSave(Event $event)
{
}
/**
* @param Event $event
*/
public function onAssignmentsSave(Event $event)
{
}
/**
* @param Event $event
*/
public function onMenusSave(Event $event)
{
$defaults = [
'id' => 0,
'layout' => 'list',
'target' => '_self',
'dropdown' => '',
'icon' => '',
'image' => '',
'subtitle' => '',
'icon_only' => false,
'visible' => true,
'group' => 0,
'columns' => [],
'link_title' => '',
'hash' => '',
'class' => ''
];
$menu = $event->menu;
foreach ($menu['items'] as $key => $item) {
// Do not save default values.
foreach ($defaults as $var => $value) {
if (isset($item[$var]) && $item[$var] == $value) {
unset($item[$var]);
}
}
// Do not save derived values.
unset($item['path'], $item['alias'], $item['parent_id'], $item['level'], $item['group'], $item['current']);
// Particles have no link.
if (isset($item['type']) && $item['type'] === 'particle') {
unset($item['link']);
}
if ($item) {
$event->menu["items.{$key}"] = $item;
} else {
unset($menu["items.{$key}"]);
}
}
}
}
@@ -1,91 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license Dual License: MIT or GNU/GPLv2 and later
*
* http://opensource.org/licenses/MIT
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Gantry Framework code that extends GPL code is considered GNU/GPLv2 and later
*/
namespace Gantry\Admin;
use Gantry\Component\Request\Request;
use Gantry\Component\Router\Router as BaseRouter;
/**
* Class Router
* @package Gantry\Admin
*/
class Router extends BaseRouter
{
public function boot()
{
/** @var Request $request */
$request = $this->container['request'];
// Split normalized request path to its parts.
$parts = array_filter(explode('/', PAGE_PATH), static function($var) { return $var !== ''; });
$theme = isset($this->container['theme.name']) ? $this->container['theme.name'] : '';
if ($theme) {
$this->container['theme.path'] = PRIME_ROOT . '/themes/' . $theme;
$this->container['theme.name'] = $theme;
}
$this->load();
if ($theme && isset($parts[0]) && $parts[0] === 'admin') {
// We are inside admin; we can skip the first part.
array_shift($parts);
// Second parameter is the resource.
$this->resource = array_shift($parts) ?: 'about';
} else {
// We are not inside admin or style doesn't exist; fall back to theme listing.
$theme = '';
$parts = [];
$this->resource = 'themes';
}
// Figure out the action we want to make.
$this->method = $request->getMethod();
$this->path = $parts;
$this->format = PAGE_EXTENSION;
$ajax = $this->format === 'json';
$this->params = [
'ajax' => $ajax,
'location' => $this->resource,
'method' => $this->method,
'format' => $this->format,
'params' => $request->post->getJsonArray('params')
];
$this->container['base_url'] = rtrim(PRIME_URI, '/') . "/{$theme}/admin";
$this->container['ajax_suffix'] = '.json';
$this->container['routes'] = [
'1' => '/%s',
'themes' => '',
'picker/layouts' => '/layouts',
];
}
/**
* @return bool
*/
protected function checkSecurityToken()
{
// TODO: add CSRF check.
return true;
}
}
@@ -1,36 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license Dual License: MIT or GNU/GPLv2 and later
*
* http://opensource.org/licenses/MIT
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Gantry Framework code that extends GPL code is considered GNU/GPLv2 and later
*/
namespace Gantry\Framework;
use Gantry\Component\Assignments\AbstractAssignments;
/**
* Class Assignments
* @package Gantry\Framework
*/
class Assignments extends AbstractAssignments
{
protected $platform = 'Prime';
/**
* Get all assignment types.
*
* @return array
*/
public function types()
{
return ['page'];
}
}
@@ -1,32 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license Dual License: MIT or GNU/GPLv2 and later
*
* http://opensource.org/licenses/MIT
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Gantry Framework code that extends GPL code is considered GNU/GPLv2 and later
*/
namespace Gantry\Framework;
use Gantry\Component\Content\Document\HtmlDocument;
/**
* Class Document
* @package Gantry\Framework
*/
class Document extends HtmlDocument
{
/**
* @return string
*/
public static function rootUri()
{
return PRIME_URI;
}
}
@@ -1,36 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license Dual License: MIT or GNU/GPLv2 and later
*
* http://opensource.org/licenses/MIT
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Gantry Framework code that extends GPL code is considered GNU/GPLv2 and later
*/
namespace Gantry\Framework;
use Gantry\Component\File\CompiledYamlFile;
/**
* Class Gantry
* @package Gantry\Framework
*/
class Gantry extends Base\Gantry
{
/**
* @return array
*/
protected function loadGlobal()
{
$file = CompiledYamlFile::instance(PRIME_ROOT . '/config/global.yaml');
$data = (array) $file->setCachePath(PRIME_ROOT . '/cache/global')->content();
$file->free();
return $data;
}
}
@@ -1,218 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license Dual License: MIT or GNU/GPLv2 and later
*
* http://opensource.org/licenses/MIT
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Gantry Framework code that extends GPL code is considered GNU/GPLv2 and later
*/
namespace Gantry\Framework;
use Gantry\Component\Config\ConfigFileFinder;
use Gantry\Component\Gantry\GantryTrait;
use Gantry\Component\Menu\AbstractMenu;
use Gantry\Component\Menu\Item;
use Gantry\Prime\Pages;
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
/**
* Class Menu
* @package Gantry\Framework
*/
class Menu extends AbstractMenu
{
use GantryTrait;
/** @var Pages */
protected $pages;
public function __construct()
{
$this->default = 'home';
$this->active = PAGE_PATH;
}
/**
* Return list of menus.
*
* @return array
*/
public function getMenus()
{
/** @var array|null $list */
static $list;
if ($list === null) {
$gantry = static::gantry();
/** @var UniformResourceLocator $locator */
$locator = $gantry['locator'];
$finder = new ConfigFileFinder;
$list = $finder->getFiles($locator->findResources('gantry-config://menu', false));
// Always have main menu.
$list += ['mainmenu' => 1];
$list = array_keys($list);
sort($list);
}
return $list;
}
/**
* Return default menu.
*
* @return string
*/
public function getDefaultMenuName()
{
return 'mainmenu';
}
/**
* Returns true if the platform implements a Default menu.
*
* @return boolean
*/
public function hasDefaultMenu()
{
return true;
}
/**
* Return default menu.
*
* @return string
*/
public function getActiveMenuName()
{
return 'mainmenu';
}
/**
* Returns true if the platform implements an Active menu.
*
* @return boolean
*/
public function hasActiveMenu()
{
return true;
}
/**
* Get menu items from the platform.
*
* @param int $levels
* @return array List of routes to the pages.
*/
protected function getItemsFromPlatform($levels)
{
if ($this->override) {
return [];
}
// Initialize pages.
$this->pages = new Pages;
// Return flat list of routes.
return array_keys($this->pages->toArray());
}
/**
* Get base menu item.
*
* If menu item is not specified or does not exist, return active menu item.
* If there is no active menu item, fall back to home page for the current language.
* If there is no home page, return null.
*
* @param string $path
*
* @return string
*/
protected function calcBase($path)
{
if (!$path || !isset($this->pages[$path])) {
// Use active menu item or fall back to default menu item.
$path = $this->active ?: $this->default;
}
// Return base menu item.
return $path;
}
/**
* Get a list of the menu items.
*
* Logic has been mostly copied from Joomla 3.4 mod_menu/helper.php (joomla-cms/staging, 2014-11-12).
* We should keep the contents of the function similar to Joomla in order to review it against any changes.
*
* @param array $params
* @param array $items
*/
public function getList(array $params, array $items)
{
$start = $params['startLevel'];
$max = $params['maxLevels'];
$end = $max ? $start + $max - 1 : 0;
$menuItems = array_unique(array_merge($this->getItemsFromPlatform($start <= $end ? $end : -1), array_keys($items)));
sort($menuItems);
// Get base menu item for this menu (defaults to active menu item).
$this->base = $this->calcBase($params['base']);
foreach ($menuItems as $name) {
$parent = dirname($name);
$level = substr_count($name, '/') + 1;
if (($start && $start > $level)
|| ($end && $level > $end)
|| ($start > 1 && strpos(dirname($parent), $this->base) !== 0)
|| (!$name || $name[0] === '_' || strpos($name, '_'))
) {
continue;
}
$item = isset($items[$name]) && is_array($items[$name]) ? $items[$name] : [];
$item += ['id' => $name];
$item = new Item($this, $item);
$this->add($item);
// Placeholder page.
if ($item->type === 'link' && !isset($this->pages[$item->path])) {
$item->type = 'separator';
}
switch ($item->type) {
case 'hidden':
case 'separator':
case 'heading':
// Separator and heading have no link.
$item->url(null);
break;
case 'url':
$item->url($item->link);
break;
case 'alias':
default:
if ($item->link === 'home') {
// Deal with home page.
$item->url('/' . trim(PRIME_URI . '/' . THEME, '/'));
} else {
$item->url('/' . trim(PRIME_URI . '/' . THEME . '/' . $item->link, '/'));
}
}
}
}
}
@@ -1,88 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license Dual License: MIT or GNU/GPLv2 and later
*
* http://opensource.org/licenses/MIT
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Gantry Framework code that extends GPL code is considered GNU/GPLv2 and later
*/
namespace Gantry\Framework;
use Gantry\Component\Url\Url;
/**
* Class Page
* @package Gantry\Framework
*/
class Page extends Base\Page
{
/** @var string */
public $theme;
/** @var string */
public $baseUrl;
/** @var string */
public $title;
/** @var string */
public $description;
/** @var string */
public $language = 'en';
/** @var string */
public $direction = 'ltr';
/**
* @param array $args
* @return string
*/
public function url(array $args = [])
{
$url = PRIME_URI;
$parts = Url::parse($url, true);
$parts['vars'] = array_replace($parts['vars'], $args);
return Url::build($parts);
}
/**
* @return string
*/
public function htmlAttributes()
{
$attributes = [
'lang' => $this->language,
'dir' => $this->direction
]
+ (array) $this->config->get('page.html', []);
return $this->getAttributes($attributes);
}
/**
* @param array $attributes
* @return string
*/
public function bodyAttributes($attributes = [])
{
$gantry = Gantry::instance();
$classes = [
'site',
"dir-{$this->direction}",
"outline-{$gantry['configuration']}",
];
$baseAttributes = (array) $this->config->get('page.body.attribs', []);
if (!empty($baseAttributes['class'])) {
$baseAttributes['class'] = array_merge((array) $baseAttributes['class'], $classes);
} else {
$baseAttributes['class'] = $classes;
}
return $this->getAttributes($baseAttributes, $attributes);
}
}
@@ -1,274 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license Dual License: MIT or GNU/GPLv2 and later
*
* http://opensource.org/licenses/MIT
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Gantry Framework code that extends GPL code is considered GNU/GPLv2 and later
*/
namespace Gantry\Framework;
use Gantry\Component\Config\Config;
use Gantry\Component\Filesystem\Folder;
use Gantry\Component\Position\Module;
use Gantry\Component\Position\Position;
use Gantry\Debugger;
use Gantry\Framework\Base\Platform as BasePlatform;
use RocketTheme\Toolbox\DI\Container;
/**
* The Platform Configuration class contains configuration information.
*
* @author RocketTheme
* @license MIT
*/
class Platform extends BasePlatform
{
/** @var string */
protected $name = 'prime';
/** @var string */
protected $settings_key = '';
/**
* Platform constructor.
* @param Container $container
*/
public function __construct(Container $container)
{
parent::__construct($container);
Folder::create(GANTRY5_ROOT . '/custom');
// Initialize custom streams for Prime.
$this->items['streams'] += [
'gantry-prime' => [
'type' => 'ReadOnlyStream',
'prefixes' => [
'' => ['']
]
],
'gantry-custom' => [
'type' => 'ReadOnlyStream',
'prefixes' => [
'' => []
]
],
'gantry-pages' => [
'type' => 'ReadOnlyStream',
'prefixes' => [
'' => ['gantry-theme://overrides/pages', 'pages']
]
],
'gantry-positions' => [
'type' => 'ReadOnlyStream',
'prefixes' => [
'' => ['gantry-theme://overrides/positions', 'positions']
]
]
];
$this->items['streams']['gantry-layouts']['prefixes'][''][] = 'gantry-prime://layouts';
$this->items['streams']['gantry-config']['prefixes'][''][] = 'gantry-prime://config';
}
/**
* @return string
*/
public function getCachePath()
{
return GANTRY5_ROOT . '/cache';
}
/**
* @return array
*/
public function getThemesPaths()
{
return ['' => ['themes']];
}
/**
* @return array
*/
public function getEnginesPaths()
{
if (is_link(GANTRY5_ROOT . '/engines')) {
// Development environment.
return ['' => ["engines/{$this->name}", 'engines/common']];
}
return ['' => ['engines']];
}
/**
* @return array
*/
public function getAssetsPaths()
{
if (is_link(GANTRY5_ROOT . '/assets')) {
// Development environment.
return ['' => ['gantry-theme://', "assets/{$this->name}", 'assets/common']];
}
return ['' => ['gantry-theme://', 'assets']];
}
/**
* @return array
*/
public function getMediaPaths()
{
/** @var Config $global */
$global = $this->container['global'];
$paths = ['media'];
if ($global->get('use_media_folder', false)) {
$paths[] = 'gantry-theme://images';
} else {
array_unshift($paths, 'gantry-theme://images');
}
return ['' => $paths];
}
/**
* Get preview url for individual theme.
*
* @param string $theme
* @return string
*/
public function getThemePreviewUrl($theme)
{
return rtrim(PRIME_URI, '/') . '/' . $theme;
}
/**
* Get administrator url for individual theme.
*
* @param string $theme
* @return string
*/
public function getThemeAdminUrl($theme)
{
return rtrim(PRIME_URI, '/') . '/' . $theme . '/admin/configurations/default/styles';
}
/**
* @param $position
* @return int
*/
public function countModules($position)
{
return count($this->getModules($position));
}
/**
* @param $position
* @return array
*/
public function getModules($position)
{
return (new Position($position))->listModules();
}
/**
* @param string|array $id
* @param array $attribs
* @return string
*/
public function displayModule($id, $attribs = [])
{
$module = is_array($id) ? $id : $this->getModule($id);
// Make sure that module really exists.
if (!$module || !is_array($module)) {
return '';
}
if (isset($module['assignments'])) {
$assignments = $module['assignments'];
$outline = Gantry::instance()['configuration'];
if (is_array($assignments) && !in_array($outline, ['_error', '_offline'])) {
// TODO: move Assignments to DI to speed it up.
$matches = (new Assignments)->matches(['test' => $assignments]);
if (GANTRY_DEBUGGER) {
Debugger::addMessage("Module assignments for '{$module['id']}' (rules, matches):", 'debug');
Debugger::addMessage($assignments, 'debug');
Debugger::addMessage(isset($matches['test']) ? $matches['test'] : [], 'debug');
}
if (!$matches) {
return '';
}
} elseif ($assignments !== 'all') {
return '';
}
}
/** @var Theme $theme */
$theme = $this->container['theme'];
$html = trim($theme->render('@nucleus/partials/module.html.twig', $attribs + ['segment' => $module]));
return $html;
}
/**
* @param string $position
* @param array $attribs
* @return string
*/
public function displayModules($position, $attribs = [])
{
$html = '';
foreach ($this->getModules($position) as $module) {
$html .= $this->displayModule($module, $attribs);
}
return $html;
}
/**
* @param string $id
* @return array
*/
protected function getModule($id)
{
list($position, $module) = explode('/', $id, 2);
return (new Module($module, $position))->toArray();
}
/**
* @return null
*/
public function settings()
{
return null;
}
/**
* @return string|null
*/
public function settings_key()
{
return null;
}
/**
* @param string $text
* @param int $length
* @param bool $html
*/
public function truncate($text, $length, $html = false)
{
// TODO:
throw new \Exception('Not implemented');
}
}
@@ -1,36 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license Dual License: MIT or GNU/GPLv2 and later
*
* http://opensource.org/licenses/MIT
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Gantry Framework code that extends GPL code is considered GNU/GPLv2 and later
*/
namespace Gantry\Framework;
/**
* Class Site
* @package Gantry\Framework
*/
class Site
{
/** @var string */
public $url;
/** @var string */
public $title;
/** @var string */
public $description;
public function __construct()
{
$this->url = dirname(dirname($_SERVER['SCRIPT_NAME']));
$this->title = 'Title';
$this->description = 'Description';
}
}
@@ -1,80 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license Dual License: MIT or GNU/GPLv2 and later
*
* http://opensource.org/licenses/MIT
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Gantry Framework code that extends GPL code is considered GNU/GPLv2 and later
*/
namespace Gantry\Framework;
use Gantry\Component\Theme\AbstractTheme;
use Gantry\Component\Theme\ThemeTrait;
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
use Twig\Loader\FilesystemLoader;
use Twig\Loader\LoaderInterface;
/**
* Class Theme
* @package Gantry\Framework
*/
class Theme extends AbstractTheme
{
use ThemeTrait;
/** @var string */
public $url;
/**
* @see AbstractTheme::init()
*/
protected function init()
{
parent::init();
$this->url = dirname($_SERVER['SCRIPT_NAME']);
}
/**
* Get list of twig paths.
*
* @return array
*/
public static function getTwigPaths()
{
/** @var UniformResourceLocator $locator */
$locator = static::gantry()['locator'];
return $locator->mergeResources(['gantry-theme://twig', 'gantry-engine://twig']);
}
/**
* @see AbstractTheme::setTwigLoaderPaths()
*
* @param LoaderInterface $loader
* @return FilesystemLoader
*/
protected function setTwigLoaderPaths(LoaderInterface $loader)
{
$loader = parent::setTwigLoaderPaths($loader);
if ($loader) {
$gantry = static::gantry();
/** @var UniformResourceLocator $locator */
$locator = $gantry['locator'];
$loader->setPaths(static::getTwigPaths());
$loader->setPaths($locator->findResources('gantry-pages://'), 'pages');
$loader->setPaths($locator->findResources('gantry-positions://'), 'positions');
}
return $loader;
}
}
@@ -1,71 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license MIT
*
* http://opensource.org/licenses/MIT
*/
namespace Gantry\Prime\Assignments;
use Gantry\Component\Assignments\AssignmentsInterface;
use Gantry\Prime\Pages;
/**
* Class AssignmentsPage
* @package Gantry\Prime\Assignments
*/
class AssignmentsPage implements AssignmentsInterface
{
public $type = 'page';
public $priority = 1;
/**
* Returns list of rules which apply to the current page.
*
* @return array
*/
public function getRules()
{
return [[PAGE_PATH => $this->priority]];
}
/**
* List all the rules available.
*
* @param string $configuration
* @return array
*/
public function listRules($configuration)
{
// Get label and items for each menu
$list = [
'label' => 'Pages',
'items' => $this->getItems()
];
return [$list];
}
/**
* @return array
*/
protected function getItems()
{
$pages = new Pages();
$items = [];
foreach ($pages as $page => $file) {
$path = explode('/', $page);
$items[] = [
'name' => $page,
'field' => ['id', 'link-' . preg_replace('|[^a-zA-Z0-9-]|', '-', $page)],
'label' => str_repeat('- ', count($path)-1) . ucwords(trim(end($path), '_'))
];
}
return $items;
}
}
@@ -1,51 +0,0 @@
<?php
/**
* @package Gantry5
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license Dual License: MIT or GNU/GPLv2 and later
*
* http://opensource.org/licenses/MIT
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Gantry Framework code that extends GPL code is considered GNU/GPLv2 and later
*/
namespace Gantry\Prime;
use Gantry\Component\Config\ConfigFileFinder;
use Gantry\Framework\Gantry;
use RocketTheme\Toolbox\ArrayTraits\ArrayAccessWithGetters;
use RocketTheme\Toolbox\ArrayTraits\Export;
use RocketTheme\Toolbox\ArrayTraits\Iterator;
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
/**
* Class Pages
* @package Gantry\Prime
*/
class Pages implements \ArrayAccess, \Iterator
{
use ArrayAccessWithGetters, Iterator, Export;
/**
* @var array
*/
protected $items;
public function __construct()
{
$gantry = Gantry::instance();
/** @var UniformResourceLocator $locator */
$locator = $gantry['locator'];
$finder = new ConfigFileFinder;
// Generate a flat list of all existing pages containing a list of file paths with timestamps.
$this->items = $finder->listFiles($locator->findResources('gantry-pages://'), '|\.html\.twig|');
// And list the pages in alphabetical order.
ksort($this->items);
}
}
-36
View File
@@ -1,36 +0,0 @@
{
"name": "gantry/prime",
"description": "Gantry Framework Library",
"license": "MIT",
"require": {
"php": ">=5.6.20",
"symfony/event-dispatcher": "~3.4",
"symfony/yaml": "~3.4",
"twig/twig": "~1.42",
"pimple/pimple": "~3.2",
"filp/whoops": "~2.3",
"rockettheme/toolbox": "dev-develop",
"scssphp/scssphp": "~1.0",
"erusev/parsedown-extra": "~0.7"
},
"require-dev": {
"phpunit/phpunit": "3.7.*"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/rockettheme/toolbox"
}
],
"autoload": {
"psr-4": {
"Gantry\\": "classes/Gantry"
}
},
"config": {
"platform": {
"php": "5.6.20"
}
}
}
-1074
View File
File diff suppressed because it is too large Load Diff
-3
View File
@@ -7,6 +7,3 @@ Every platform (excluding common) has '''scss.sh''' script which runs in the bac
## grav/ - Grav 1.6+ theme
## joomla/ - Joomla 3.9+ template
## wordpress/ - WordPress 5.2+ theme
## prime/ - Our prime development and testing platform.
Gantry prime template which can be used to develop the template as it should contain enough test pages to get the general look done, but also to allow us to do general, platform independent testing. Could contain a collection of static pages made with simple php, html and yaml.
-124
View File
@@ -1,124 +0,0 @@
details:
name: Helium
version: '@version@'
icon: paper-plane
date: '@versiondate@'
author:
name: RocketTheme, LLC
email: support@rockettheme.com
link: http://www.rockettheme.com
documentation:
link: http://docs.gantry.org/gantry5
support:
link: https://gitter.im/gantry/gantry5
updates:
link: http://updates.rockettheme.com/themes/helium.yaml
copyright: (C) 2005 - 2020 RocketTheme, LLC. All rights reserved.
license: GPLv2
description: Helium Theme
images:
thumbnail: admin/images/preset1.png
preview: admin/images/preset1.png
configuration:
gantry:
platform: prime
engine: nucleus
theme:
parent: helium
base: gantry-theme://common
file: gantry-theme://include/theme.php
class: \Gantry\Framework\Theme
fonts:
Raleway:
900italic: 'gantry-theme://fonts/raleway/raleway-blackitalic/raleway-blackitalic-webfont'
900: 'gantry-theme://fonts/raleway/raleway-black/raleway-black-webfont'
700italic: 'gantry-theme://fonts/raleway/raleway-bold/raleway-bolditalic-webfont'
700: 'gantry-theme://fonts/raleway/raleway-bold/raleway-bold-webfont'
600italic: 'gantry-theme://fonts/raleway/raleway-semibolditalic/raleway-semibolditalic-webfont'
600: 'gantry-theme://fonts/raleway/raleway-semibold/raleway-semibold-webfont'
500italic: 'gantry-theme://fonts/raleway/raleway-mediumitalic/raleway-mediumitalic-webfont'
500: 'gantry-theme://fonts/raleway/raleway-medium/raleway-medium-webfont'
400italic: 'gantry-theme://fonts/raleway/raleway-italic/raleway-italic-webfont'
400: 'gantry-theme://fonts/raleway/raleway-regular/raleway-regular-webfont'
200italic: 'gantry-theme://fonts/raleway/raleway-lightitalic/raleway-lightitalic-webfont'
200: 'gantry-theme://fonts/raleway/raleway-light/raleway-light-webfont'
Lato:
900italic: 'gantry-theme://fonts/lato/lato-blackitalic/lato-blackitalic-webfont'
900: 'gantry-theme://fonts/lato/lato-black/lato-black-webfont'
700italic: 'gantry-theme://fonts/lato/lato-bold/lato-bolditalic-webfont'
700: 'gantry-theme://fonts/lato/lato-bold/lato-bold-webfont'
400italic: 'gantry-theme://fonts/lato/lato-italic/lato-italic-webfont'
400: 'gantry-theme://fonts/lato/lato-regular/lato-regular-webfont'
200italic: 'gantry-theme://fonts/lato/lato-lightitalic/lato-lightitalic-webfont'
200: 'gantry-theme://fonts/lato/lato-light/lato-light-webfont'
css:
compiler: \Gantry\Component\Stylesheet\ScssCompiler
target: gantry-theme://css-compiled
paths:
- gantry-theme://scss
- gantry-engine://scss
files:
- helium
- custom
persistent:
- helium
overrides:
- custom
dependencies:
gantry: 5.5
block-variations:
Title Variations:
title1: Title 1
title2: Title 2
title-gradient: Title Gradient
title-outline: Title Outline
Box Variations:
box1: Box 1
box2: Box 2
box-gradient: Box Gradient
box-outline: Box Outline
Effects:
spaced : Spaced
shadow : Shadow
rounded : Rounded
Utility:
center: Center
title-center: Centered Title
equal-height: Equal Height
disabled: Disabled
align-right: Align Right
align-left: Align Left
nomarginall: No Margin
nopaddingall: No Padding
admin:
styles:
core:
- base
- accent
- font
section:
- navigation
- header
- intro
- features
- utility
- above
- testimonials
- expanded
- main
- sidebar
- footer
- offcanvas
configuration:
- breakpoints
-28
View File
@@ -1,28 +0,0 @@
<?php
use Gantry\Framework\Gantry;
try
{
// Get Gantry instance and return it.
$gantry = Gantry::instance();
// Initialize the template if not done already.
if (!isset($gantry['theme.name']))
{
$gantry['theme.path'] = dirname(__DIR__);
$gantry['theme.name'] = $theme;
}
// Only a single template can be loaded at any time.
if (!isset($gantry['theme']))
{
include_once __DIR__ . '/theme.php';
}
return $gantry;
}
catch (Exception $e)
{
// In frontend we want to prevent template from loading.
die('Failed to load template: ' . $e->getMessage());
}
-28
View File
@@ -1,28 +0,0 @@
<?php
class_exists('\\Gantry\\Framework\\Gantry') or die;
// Define the template.
class GantryTheme extends \Gantry\Framework\Theme {}
// Initialize theme stream.
$gantry['platform']->set(
'streams.gantry-theme.prefixes',
['' => [
"gantry-custom://",
"gantry-themes://{$gantry['theme.name']}",
"gantry-themes://{$gantry['theme.name']}/common"
]
]
);
$gantry['platform']->set(
'streams.gantry-custom.prefixes',
['' => [
"gantry-prime://custom/{$gantry['theme.name']}",
]
]
);
// Define Gantry services.
$gantry['theme'] = static function($c) {
return new GantryTheme($c['theme.path'], $c['theme.name']);
};
@@ -1,175 +0,0 @@
settings:
title: Main Menu
base: /
ordering:
home:
features:
typography:
sample-pages:
- about-us:
layout-1:
layout-2:
layout-3:
our-team:
team:
layout-1:
layout-2:
layout-3:
pricing:
layout-1:
layout-2:
layout-3:
- faq:
layout-1:
layout-2:
layout-3:
services:
layout-1:
layout-2:
layout-3:
blog:
layout-1:
layout-2:
layout-3:
special:
- title:
error:
unsupported:
offline:
comingsoon:
- separator:
component:
raw:
admin:
about:
configurations:
menu:
themes:
learn:
items:
home:
icon: fa fa-fw fa-home
features:
type: separator
title: Features
icon: fa fa-fw fa-bolt
layout: columns
sample-pages:
type: alias
link: /
title: Sample Pages
icon: fa fa-fw fa-fire
layout: columns
sample-pages/about-us:
type: separator
title: About Us
icon: fa fa-fw fa-ra
sample-pages/our-team:
type: separator
title: Our Team
icon: fa fa-fw fa-users
sample-pages/pricing:
type: separator
title: Pricing
icon: fa fa-fw fa-usd
sample-pages/faq:
type: separator
title: FAQ
icon: fa fa-fw fa-book
sample-pages/services:
type: separator
title: Services
icon: fa fa-fw fa-taxi
sample-pages/blog:
type: separator
title: Blog
icon: fa fa-fw fa-calendar-o
special:
type: separator
title: Special Pages
icon: fa fa-fw fa-shield
layout: columns
special/title:
type: heading
title: Special Pages
special/error:
icon: fa fa-fw fa-warning
special/unsupported:
icon: fa fa-fw fa-wheelchair
special/offline:
icon: fa fa-fw fa-power-off
special/comingsoon:
icon: fa fa-fw fa-paint-brush
special/separator:
type: separator
title: Component Stuff
special/component:
icon: fa fa-fw fa-file-text-o fa-file-alt
special/raw:
icon: fa fa-fw fa-file-code-o
admin:
type: separator
title: Admin
icon: fa fa-fw fa-cogs
admin/about:
type: alias
icon: fa fa-fw fa-question-circle
link: admin
title: Theme Admin
target: _blank
admin/configurations:
type: alias
icon: fa fa-fw fa-star
link: admin/configurations
title: Configurations
target: _blank
admin/menu:
type: alias
icon: fa fa-fw fa-wrench
link: admin/menu
title: Menu Manager
target: _blank
admin/themes:
type: alias
icon: fa fa-fw fa-tint
link: ../
title: Back to Themes
target: _blank
admin/learn:
type: alias
icon: fa fa-fw fa-book
link: ../learn
title: Documentation
target: _blank
admin/download:
type: alias
icon: fa fa-fw fa-book
link: ../builds/gantry5
title: Download
target: _blank
@@ -1,89 +0,0 @@
details:
name: Hydrogen Demo Sampler
version: 1.0
icon: paper-plane
date: February 9, 2015
author:
name: RocketTheme, LLC
email: support@rockettheme.com
link: http://www.rockettheme.com
documentation:
link: http://docs.gantry.org/gantry5
support:
link: https://gitter.im/gantry/gantry5
updates:
link: http://updates.rockettheme.com/themes/hydrogen.yaml
copyright: (C) 2005 - 2020 RocketTheme, LLC. All rights reserved.
license: GPLv2
description: Hydrogen Demo Theme
images:
thumbnail: admin/images/preset1.png
preview: admin/images/preset1.png
configuration:
gantry:
platform: prime
engine: nucleus
theme:
parent: hydrogen
base: gantry-theme://common
file: gantry-theme://include/theme.php
class: \Gantry\Framework\Theme
css:
compiler: \Gantry\Component\Stylesheet\ScssCompiler
paths:
- gantry-theme://scss
- gantry-engine://scss
files:
- hydrogen
- custom
persistent:
- hydrogen
overrides:
- custom
block-variations:
Box Variations:
box1: Box 1
box2: Box 2
box3: Box 3
box4: Box 4
Effects:
shadow: Shadow 1
shadow2: Shadow 2
rounded: Rounded
square: Square
Utility:
disabled: Disabled
align-right: Align Right
align-left: Align Left
center: Center
full-width: Full Width
equal-height: Equal Height
nomarginall: No Margin
nopaddingall: No Padding
dependencies:
gantry: 5.5
admin:
styles:
core:
- base
- accent
section:
- header
- navigation
- showcase
- feature
- subfeature
- main
- footer
configuration:
- breakpoints
@@ -1,31 +0,0 @@
<?php
use Gantry\Framework\Gantry;
try
{
// Get Gantry instance and return it.
$gantry = Gantry::instance();
// Initialize the template if not done already.
if (!isset($gantry['theme.name']))
{
$gantry['theme.path'] = dirname(__DIR__);
$gantry['theme.name'] = $theme;
}
// Only a single template can be loaded at any time.
if (!isset($gantry['theme']))
{
include_once __DIR__ . '/theme.php';
}
return $gantry;
}
catch (Exception $e)
{
// Oops, something went wrong!
// In frontend we want to prevent template from loading.
die('Failed to load template: ' . $e->getMessage());
}
@@ -1,35 +0,0 @@
<?php
class_exists('\\Gantry\\Framework\\Gantry') or die;
/**
* Define the template.
*/
class GantryTheme extends \Gantry\Framework\Theme {}
// Initialize theme stream.
/** @var \Gantry\Framework\Platform $platform */
$platform = $gantry['platform'];
$platform->set(
'streams.gantry-theme.prefixes',
['' => [
"gantry-custom://",
"gantry-themes://{$gantry['theme.name']}",
"gantry-themes://{$gantry['theme.name']}/common",
"gantry-themes://hydrogen",
"gantry-themes://hydrogen/common"
]
]
);
$platform->set(
'streams.gantry-custom.prefixes',
['' => [
"gantry-prime://custom/{$gantry['theme.name']}",
]
]
);
// Define Gantry services.
$gantry['theme'] = static function($c) {
return new GantryTheme($c['theme.path'], $c['theme.name']);
};
@@ -1,355 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h2>Headings</h2>
<p>All HTML headings, <code>&lt;h1&gt;</code> through <code>&lt;h6&gt;</code> are available.</p>
<div>
<h1>h1. Heading 1</h1>
<h2>h2. Heading 2</h2>
<h3>h3. Heading 3</h3>
<h4>h4. Heading 4</h4>
<h5>h5. Heading 5</h5>
<h6>h6. Heading 6</h6>
</div>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h2>Emphasis</h2>
<h4><code>&lt;em&gt;</code></h4>
<p>For emphasizing a snippet of text with <em>stress</em></p>
<p>The following snippet of text is <em>rendered as italicized text</em>.</p>
<pre class="prettyprint">&lt;em&gt;rendered as italicized text&lt;/em&gt;</pre>
<h4><code>&lt;strong&gt;</code></h4>
<p>For emphasizing a snippet of text with <strong>important</strong></p>
<p>The following snippet of text is <strong>rendered as bold text</strong>.</p>
<pre class="prettyprint">&lt;strong&gt;rendered as bold text&lt;/strong&gt;</pre>
<h4><code>&lt;small&gt;</code></h4>
<p>For de-emphasizing inline or blocks of text, <small>use the small tag.</small></p>
<p><small>This line of text is meant to be treated as fine print.</small></p>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h2>Notice Styles</h3>
<p class="success">Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
<pre class="prettyprint">&lt;p class="success"&gt;...&lt;/p&gt;</pre>
<p class="info">Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
<pre class="prettyprint">&lt;p class="info"&gt;...&lt;/p&gt;</pre>
<p class="warning">Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
<pre class="prettyprint">&lt;p class="warning"&gt;...&lt;/p&gt;</pre>
<p class="error">Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
<pre class="prettyprint">&lt;p class="error"&gt;...&lt;/p&gt;</pre>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h2>Abbreviations</h2>
<p>Stylized implementation of HTML's <code>&lt;abbr&gt;</code> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a <code>title</code> attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover.</p>
<h4><code>&lt;abbr&gt;</code></h4>
<p>For expanded text on long hover of an abbreviation, include the <code>title</code> attribute.</p>
<div class="gantry-example">
<p>An abbreviation of the word attribute is <abbr title="attribute">attr</abbr>.</p>
</div>
<pre class="prettyprint">&lt;abbr title="attribute"&gt;attr&lt;/abbr&gt;</pre>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h2>Addresses</h2>
<p>Stylized implementation of HTML's element to present contact information for the nearest ancestor or the entire body of work.</p>
<h4><code>&lt;address&gt;</code></h4>
<p>Preserve formatting by ending all lines with <code>&lt;br&gt;</code>.</p>
<address>
<strong>Twitter, Inc.</strong><br/>
795 Folsom Ave, Suite 600<br/>
San Francisco, CA 94107<br/><abbr title="Phone">P:</abbr> (123) 456-7890
</address>
<address>
<strong>Full Name</strong><br/><a href="mailto:#"><span id="cloak45941">This email address is being protected from spambots. You need JavaScript enabled to view it.</span><script type="text/javascript">
//<!--
document.getElementById('cloak45941').innerHTML = '';
var prefix = '&#109;a' + 'i&#108;' + '&#116;o';
var path = 'hr' + 'ef' + '=';
var addy45941 = 'f&#105;rst.l&#97;st' + '&#64;';
addy45941 = addy45941 + 'gm&#97;&#105;l' + '&#46;' + 'c&#111;m';
document.getElementById('cloak45941').innerHTML += '<a ' + path + '\'' + prefix + ':' + addy45941 + '\'>' +addy45941+'<\/a>';
//-->
</script></a>
</address>
<pre class="prettyprint linenums">
&lt;address&gt;
&lt;strong&gt;Twitter, Inc.&lt;/strong&gt;&lt;br&gt;
795 Folsom Ave, Suite 600&lt;br&gt;
San Francisco, CA 94107&lt;br&gt;
&lt;abbr title="Phone"&gt;P:&lt;/abbr&gt; (123) 456-7890
&lt;/address&gt;
&lt;address&gt;
&lt;strong&gt;Full Name&lt;/strong&gt;&lt;br&gt;
&lt;a href="mailto:#"&gt;first.last@gmail.com&lt;/a&gt;
&lt;/address&gt;
</pre>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h2>Blockquotes</h2>
<p>For quoting blocks of content from another source within your document.</p>
<h3>Default blockquote</h3>
<p>Wrap <code>&lt;blockquote&gt;</code> around any <abbr title="HyperText Markup Language">HTML</abbr> as the quote. For straight quotes we recommend a <code>&lt;p&gt;</code>.</p>
<blockquote>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
</blockquote>
<pre class="prettyprint linenums">&lt;blockquote&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.&lt;/p&gt;
&lt;/blockquote&gt;</pre>
<h3>Blockquote options</h3>
<span>Style and content changes for simple variations on a standard blockquote.</span><br/>
<h4>Naming a source</h4>
<p>Add <code>&lt;small&gt;</code> tag for identifying the source. Wrap the name of the source work in <code>&lt;cite&gt;</code>.</p>
<blockquote>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
<small>Someone famous in <cite title="Source Title">Source Title</cite></small>
</blockquote>
<pre class="prettyprint linenums">&lt;blockquote&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.&lt;/p&gt;
&lt;small&gt;Someone famous &lt;cite title="Source Title"&gt;Source Title&lt;/cite&gt;&lt;/small&gt;
&lt;/blockquote&gt;</pre>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h2>Code</h2>
<h4>Inline</h2>
<p>Wrap inline snippets of code with <code>&lt;code&gt;</code>.</p>
For example, <code>&lt;section&gt;</code> should be wrapped as inline.
<pre class="prettyprint linenums">For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inline.</pre>
<p><strong>Note:</strong> Be sure to keep code within <code>&lt;pre&gt;</code> tags as close to the left as possible; it will render all tabs.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h4>Basic block</h2>
<p>Use <code>&lt;pre&gt;</code> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.</p>
<pre>&lt;p&gt;Sample text here...&lt;/p&gt;</pre>
<pre class="prettyprint linenums" style="margin-bottom: 9px;">&lt;pre&gt;
&amp;lt;p&amp;gt;Sample text here...&amp;lt;/p&amp;gt;
&lt;/pre&gt;</pre>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h2>Tables</h2>
<table>
<thead><tr>
<th>#</th>
<th>First Name</th>
<th>Last Name</th>
<th>Username</th>
</tr></thead>
<tbody>
<tr>
<td>1</td>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<td>2</td>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<td>3</td>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
<pre class="prettyprint linenums">&lt;table class="table"&gt;
&lt;/table&gt;</pre>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h2>Forms</h2>
<p>Individual form controls receive styling, but without any required base class on the <code>&lt;form&gt;</code> or large changes in markup. Results in stacked, left-aligned labels on top of form controls.</p>
<form>
<fieldset>
<legend>Legend</legend>
<label>Label name</label>
<input type="text" placeholder="Type something…"/><span class="help-block">Example block-level help text here.</span>
<label class="checkbox">
<input type="checkbox"/> Check me out
</label>
<button type="submit" class="btn">Submit</button>
</fieldset>
</form>
<pre class="prettyprint linenums">&lt;form&gt;
&lt;legend&gt;Legend&lt;/legend&gt;
&lt;label&gt;Label name&lt;/label&gt;
&lt;input type="text" placeholder="Type something…"&gt;
&lt;span class="help-block"&gt;Example block-level help text here.&lt;/span&gt;
&lt;label class="checkbox"&gt;
&lt;input type="checkbox"&gt; Check me out
&lt;/label&gt;
&lt;button type="submit" class="btn"&gt;Submit&lt;/button&gt;
&lt;/form&gt;</pre>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h4>Inputs</h3>
<p>Most common form control, text-based input fields. Includes support for all HTML5 types: text, password, datetime, datetime-local, date, month, time, week, number, email, url, search, tel, and color.</p>
<p>Requires the use of a specified <code>type</code> at all times.</p>
<form class="form-inline">
<input type="text" placeholder="Text input"/>
</form>
<pre class="prettyprint linenums">&lt;input type="text" placeholder="Text input"&gt;</pre>
<h4>Textarea</h3>
<p>Form control which supports multiple lines of text. Change <code>row</code> attribute as necessary.</p>
<form class="form-inline">
<textarea rows="3"></textarea>
</form>
<pre class="prettyprint linenums">&lt;textarea rows="3"&gt;&lt;/textarea&gt;</pre>
<h4>Checkboxes and radios</h3>
<p>Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.</p>
<h4>Default (stacked)</h4>
<form>
<label class="checkbox">
<input type="checkbox" value=""/>
Option one is this and that—be sure to include why it's great
</label>
<br/><label class="radio">
<input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
Option one is this and that—be sure to include why it's great
</label>
<label class="radio">
<input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"/>
Option two can be something else and selecting it will deselect option one
</label>
</form>
<pre class="prettyprint linenums">&lt;label class="checkbox"&gt;
&lt;input type="checkbox" value=""&gt;
Option one is this and that—be sure to include why it's great
&lt;/label&gt;
&lt;label class="radio"&gt;
&lt;input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked&gt;
Option one is this and that—be sure to include why it's great
&lt;/label&gt;
&lt;label class="radio"&gt;
&lt;input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"&gt;
Option two can be something else and selecting it will deselect option one
&lt;/label&gt;</pre>
<h4>Inline checkboxes</h4>
<p>Add the <code>.inline</code> class to a series of checkboxes or radios for controls appear on the same line.</p>
<form>
<label class="checkbox inline">
<input type="checkbox" id="inlineCheckbox1" value="option1"/> 1
</label>
<label class="checkbox inline">
<input type="checkbox" id="inlineCheckbox2" value="option2"/> 2
</label>
<label class="checkbox inline">
<input type="checkbox" id="inlineCheckbox3" value="option3"/> 3
</label>
</form>
<pre class="prettyprint linenums">&lt;label class="checkbox inline"&gt;
&lt;input type="checkbox" id="inlineCheckbox1" value="option1"&gt; 1
&lt;/label&gt;
&lt;label class="checkbox inline"&gt;
&lt;input type="checkbox" id="inlineCheckbox2" value="option2"&gt; 2
&lt;/label&gt;
&lt;label class="checkbox inline"&gt;
&lt;input type="checkbox" id="inlineCheckbox3" value="option3"&gt; 3
&lt;/label&gt;</pre>
<h4>Selects</h3>
<p>Use the default option or specify a <code>multiple="multiple"</code> to show multiple options at once.</p>
<form>
<select><option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option></select><br/><select multiple><option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option></select>
</form>
<pre class="prettyprint linenums">&lt;select&gt;
&lt;option&gt;1&lt;/option&gt;
&lt;option&gt;2&lt;/option&gt;
&lt;option&gt;3&lt;/option&gt;
&lt;option&gt;4&lt;/option&gt;
&lt;option&gt;5&lt;/option&gt;
&lt;/select&gt;
&lt;select multiple="multiple"&gt;
&lt;option&gt;1&lt;/option&gt;
&lt;option&gt;2&lt;/option&gt;
&lt;option&gt;3&lt;/option&gt;
&lt;option&gt;4&lt;/option&gt;
&lt;option&gt;5&lt;/option&gt;
&lt;/select&gt;</pre>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h2>Buttons</h2>
<form>
<a class="button" href="#">Link</a>
<button class="button" type="submit">Button</button>
<input class="button" type="button" value="Input"/>
<input class="button" type="submit" value="Submit"/>
</form>
<pre class="prettyprint linenums">&lt;a class="button" href=""&gt;Link&lt;/a&gt;
&lt;button class="button" type="submit"&gt;Button&lt;/button&gt;
&lt;input class="button" type="button" value="Input"&gt;
&lt;input class="button" type="submit" value="Submit"&gt;</pre>
</div>
</div>
</div>
{% endblock %}
@@ -1,47 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/1200x350" alt="image">
</div>
</div>
</div>
<div class="center">
<div class="g-content">
<h2 class="header-title">Join Our Theme Club Now!</h2>
<h5>Choose the theme that suits your needs. 100% satisfaction guaranteed.</h5>
<a href="#" class="button">Join Now</a> <a href="#" class="button-secondary">Learn More</a>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x350" alt="image">
<h3>Introduction</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x350" alt="image">
<h3>Mission</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x350" alt="image">
<h3>Business</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
</div>
{% endblock %}
@@ -1,69 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="g-grid">
<div class="g-block">
<div class="content">
<img src="http://placehold.it/600x400" alt="image">
</div>
</div>
<div class="g-block">
<div class="content">
<h6>We Always</h6>
<h3>Create the Awesomeness</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#" class="button-secondary">Learn More About Us</a>
</div>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<span class="fa fa-heart fa-3x" aria-hidden="true"></span>
<h3>Sophiscated Design</h3>
<p>Collaboratively administrate empowered markets via available great networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<span class="fa fa-line-chart fa-3x" aria-hidden="true"></span>
<h3>Awesome Features</h3>
<p>Collaboratively administrate empowered markets via available great networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<span class="fa fa-paper-plane fa-3x" aria-hidden="true"></span>
<h3>Fast, Light &amp; Clean</h3>
<p>Collaboratively administrate empowered markets via available great networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<span class="fa fa-cubes fa-3x" aria-hidden="true"></span>
<h3>Responsive Layout</h3>
<p>Collaboratively administrate empowered markets via available great networks.</p>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h3>Are You Ready to Join?</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#" class="button">Join Our Club Now</a>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/600x400" alt="image">
</div>
</div>
</div>
{% endblock %}
@@ -1,83 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="center">
<div class="g-content">
<h6>A New Experience</h6>
<h3>Create Your Awesome Website</h3>
<a href="#" class="button">Join Our Club Now</a> <a href="#" class="button-secondary">Check Our Pricing</a>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Introduction</h3>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Mission</h3>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Business</h3>
</div>
</div>
</div>
<div class="center">
<h2>Why You Should Join Us</h2>
<h5>Choose the theme that suits your needs. 100% satisfaction guaranteed.</h5>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-dashboard fa-fw fa-2x" aria-hidden="true"></span> Sophiscated</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-user fa-fw fa-2x" aria-hidden="true"></span> Awesome</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-plane fa-fw fa-2x" aria-hidden="true"></span> Fast</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-arrows-alt fa-fw fa-2x" aria-hidden="true"></span> Responsive</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-rocket fa-fw fa-2x" aria-hidden="true"></span> Elegant</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-sliders fa-fw fa-2x" aria-hidden="true"></span> Powerful</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
</div>
{% endblock %}
@@ -1,92 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Collaboratively administrate empowered markets via plug-and-play networks</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p><img src="http://placehold.it/1200x350" alt="image"></p>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Dynamically procrastinate B2C users after installed base benefits</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p><img src="http://placehold.it/1200x350" alt="image"></p>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Dramatically visualize customer directed convergence without media value</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p><img src="http://placehold.it/1200x350" alt="image"></p>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Quickly maximize timely deliverables for real-time schemas</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p><img src="http://placehold.it/1200x350" alt="image"></p>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<div class="items-more">
<h3>More Articles...</h3>
<ol>
<li><a href="#">Credibly innovate granular internal</a></li>
<li><a href="#">Interactively procrastinate high-payoff content</a></li>
<li><a href="#">Globally incubate standards compliant channels</a></li>
<li><a href="#">Completely pursue scalable customer service</a></li>
</ol>
</div>
</div>
</div>
</div>
{% endblock %}
@@ -1,83 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Collaboratively administrate empowered markets via plug-and-play networks</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p><img src="http://placehold.it/1200x350" alt="image"></p>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Dynamically procrastinate B2C users after benefits</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Dramatically visualize customer directed convergence</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Quickly maximize timely deliverables for real-time schemas</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<div class="items-more">
<h3>More Articles...</h3>
<ol>
<li><a href="#">Credibly innovate granular internal</a></li>
<li><a href="#">Interactively procrastinate high-payoff content</a></li>
<li><a href="#">Globally incubate standards compliant channels</a></li>
<li><a href="#">Completely pursue scalable customer service</a></li>
</ol>
</div>
</div>
</div>
</div>
{% endblock %}
@@ -1,108 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Dynamically procrastinate B2C users after benefits</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Dramatically visualize customer directed convergence</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Quickly maximize timely deliverables for real-time schemas</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Holistically pontificate installed base cross media portals</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Interactively coordinate proactive real time e-commerce</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
<div class="g-block">
<div class="g-content">
<div class="items-row">
<h2><a href="#">Energistically scale future-proof core competencies</a></h2>
<dl class="article-info">
<dd class="published">Published: Monday, 01 December 2014 08:08</dd>
<dd class="createdby">Written by Admin</dd>
</dl>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<div class="items-more">
<h3>More Articles...</h3>
<ol>
<li><a href="#">Credibly innovate granular internal</a></li>
<li><a href="#">Interactively procrastinate high-payoff content</a></li>
<li><a href="#">Globally incubate standards compliant channels</a></li>
<li><a href="#">Completely pursue scalable customer service</a></li>
</ol>
</div>
</div>
</div>
</div>
{% endblock %}
@@ -1,72 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="center">
<div class="g-content">
<h2>Frequently Asked Questions</h2>
<h5>Common Queries and Questions</h5>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h3>What prices are our services?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What is our refund policy?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What payments methods do we accept?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>What delivery options do we offer?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What support options are available?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What additional services are available?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
</div>
</div>
</div>
<div class="center">
<div class="g-content">
<h2>Have Different Questions</h2>
<h5>Please Contact Us If Your Question Is Not Listed Here</h5>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Email</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Chat</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Phone</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
</div>
{% endblock %}
@@ -1,193 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="center">
<div class="g-content">
<h2>Common Queries and Questions</h2>
<h5>Frequently Asked Questions</h5>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Account</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Membership</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>API</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Legal Stuff</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
</div>
<div class="center">
<div class="g-content">
<h2>Frequently Asked Questions</h2>
<h5>Common Queries and Questions</h5>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h3>Installation</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Basic Usage</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Customization</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Development</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h3>Accounts</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Subscription</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Security</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Organization</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h3>Partnership</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Live Widget</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Web API</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Legal Stuff</h3>
<ul class="help_list bullet_list">
<li><a href="#">Lorem Ipsum</a></li>
<li><a href="#">Dolor Amat</a></li>
<li><a href="#">Figus Terido</a></li>
<li><a href="#">Savios Menor</a></li>
</ul>
</div>
</div>
</div>
{% endblock %}
@@ -1,109 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="center">
<h2>Frequently Asked Questions</h2>
<h5>Common Queries and Questions</h5>
</div>
<div class="g-grid">
<div class="g-block size-1-2">
<div class="g-content">
<h3>1. What prices are our services?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>2. What is our refund policy?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>3. What payments methods do we accept?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>4. What delivery options do we offer?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>5. What support options are available?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>6. What additional services are available?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
</div>
</div>
<div class="g-block size-1-4">
<div class="g-content">
<h4><span class="fa fa-tasks fa-fw fa-2x" aria-hidden="true"></span> Installation</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#">Learn More</a>
</div>
<div class="g-content">
<h4><span class="fa fa-file-text-o fa-file-alt fa-fw fa-2x" aria-hidden="true"></span> Basic Usage</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#">Learn More</a>
</div>
<div class="g-content">
<h4><span class="fa fa-image fa-fw fa-2x" aria-hidden="true"></span> Customization</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#">Learn More</a>
</div>
<div class="g-content">
<h4><span class="fa fa-users fa-fw fa-2x" aria-hidden="true"></span> Accounts</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#">Learn More</a>
</div>
</div>
<div class="g-block size-1-4">
<div class="g-content">
<h4><span class="fa fa-shield fa-fw fa-2x" aria-hidden="true"></span> Security</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#">Learn More</a>
</div>
<div class="g-content">
<h4><span class="fa fa-support fa-fw fa-2x" aria-hidden="true"></span> Partnership</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#">Learn More</a>
</div>
<div class="g-content">
<h4><span class="fa fa-plug fa-fw fa-2x" aria-hidden="true"></span> Widgets</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#">Learn More</a>
</div>
<div class="g-content">
<h4><span class="fa fa-gears fa-fw fa-2x" aria-hidden="true"></span> Web API</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#">Learn More</a>
</div>
</div>
</div>
<div class="center">
<h2>Other Resources</h2>
<h5>Please Contact Us If Your Question Is Not Listed Here</h5>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<span class="fa fa-globe fa-3x" aria-hidden="true"></span>
<h3>Site Tour</h3>
<p>Collaboratively administrate empowered markets via available great networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<span class="fa fa-envelope-o fa-3x" aria-hidden="true"></span>
<h3>Ticket &amp; Email</h3>
<p>Collaboratively administrate empowered markets via available great networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<span class="fa fa-comments fa-3x" aria-hidden="true"></span>
<h3>Talk With Us</h3>
<p>Collaboratively administrate empowered markets via available great networks.</p>
</div>
</div>
</div>
{% endblock %}
@@ -1,118 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/600x400" alt="image">
</div>
</div>
<div class="g-block">
<div class="g-content">
<h6>The Big Boss</h6>
<h2>Meet Our CEO</h2>
<h4>Joe Carroll</h4>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
<p>Globally incubate standards compliant channels before scalable benefits. Holisticly predominate great extensible testing procedure.</p>
</div>
</div>
</div>
<h2 class="center">Developer Team</h2>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Robert Smith</h3>
<h6>CEO of Nucleus</h6>
<p>Globally incubate standards compliant channels before scalable benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Paul Valdez</h3>
<h6>Administrator</h6>
<p>Globally incubate standards compliant channels before scalable benefits.</p>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Tayla Parker</h3>
<h6>Accountant</h6>
<p>Globally incubate standards compliant channels before scalable benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Luca Coyle</h3>
<h6>CS Leader</h6>
<p>Globally incubate standards compliant channels before scalable benefits.</p>
</div>
</div>
</div>
<h2 class="center">Support Team</h2>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Paul Valdez</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Tayla Parker</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Luca Coyle</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Adam Smith</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
</div>
{% endblock %}
@@ -1,111 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/1200x400" alt="image">
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h2>Meet Our Co-Founders</h2>
<h4>Joe Carroll</h4>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
<h4>Ethan Reed</h4>
<p>Globally incubate standards compliant channels before scalable benefits. Holisticly predominate great extensible testing procedures for reliable supply chains service.</p>
</div>
</div>
<div class="g-block size-1-4">
<div class="g-content">
<img src="http://placehold.it/500x750" alt="image">
</div>
</div>
<div class="g-block size-1-4">
<div class="g-content">
<img src="http://placehold.it/500x750" alt="image">
</div>
</div>
</div>
<h2 class="center">Meet Our Developers</h2>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Paul Valdez</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Tayla Parker</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Luca Coyle</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Adam Smith</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Paul Valdez</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Tayla Parker</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Luca Coyle</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Adam Smith</h3>
<h6>Support</h6>
<p>Collaboratively administrate empowered markets via plug-and-play networks.</p>
</div>
</div>
</div>
{% endblock %}
@@ -1,125 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<h2 class="center">The Founders</h2>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Robert Smith</h3>
<h6>CEO of Nucleus</h6>
<p>Globally incubate standards compliant channels before scalable benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Paul Valdez</h3>
<h6>Co-Founder of Nucleus</h6>
<p>Globally incubate standards compliant channels before scalable benefits.</p>
</div>
</div>
</div>
<h2 class="center">Administrators</h2>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Paul Valdez</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Tayla Parker</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Luca Coyle</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Adam Smith</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
</div>
<h2 class="center">Analyst Team</h2>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Paul Valdez</h3>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Tayla Parker</h3>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Luca Coyle</h3>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Adam Smith</h3>
</div>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Paul Valdez</h3>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Tayla Parker</h3>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Luca Coyle</h3>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x500" alt="image">
<h3>Adam Smith</h3>
</div>
</div>
</div>
{% endblock %}
@@ -1,17 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<h1>The Team</h1>
<p>
This is an example on how we could implement team page in Gantry 5.
</p>
<p>
No more custom HTML: check <a href="admin/settings">administrator</a> for team particle configuration.
</p>
<div>
{% include '@particles/team.html.twig' with {'particle': gantry.config.particles.team} %}
</div>
{% endblock %}
@@ -1,83 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="center">
<div class="g-content">
<h2>Our Awesome Packages</h2>
<h5>Choose the plan that suits your needs. 100% satisfaction guaranteed.</h5>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Basic</h3>
<h2>$99/month</h2>
<h5>Basic Admin Panel</h5>
<h5>10 Users</h5>
<h5>Email Support</h5>
<p><a href="#" class="button-secondary">Subscribe</a></p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Standard</h3>
<h2>$199/month</h2>
<h5>Standard Admin Panel</h5>
<h5>10 Users</h5>
<h5>Chat Support</h5>
<p><a href="#" class="button">Subscribe</a></p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Ultimate</h3>
<h2>$299/month</h2>
<h5>Advanced Admin Panel</h5>
<h5>Unlimited Users</h5>
<h5>Phone Support</h5>
<p><a href="#" class="button-secondary">Subscribe</a></p>
</div>
</div>
</div>
<div class="center">
<div class="g-content">
<h2>Common Questions</h2>
<h5>Please Contact Us If Your Question Is Not Listed Here</h5>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h3>What prices are our services?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What is our refund policy?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What payments methods do we accept?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>What delivery options do we offer?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What support options are available?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What additional services are available?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
</div>
</div>
</div>
{% endblock %}
@@ -1,84 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="center">
<div class="g-content">
<h2>Awesome Simple Pricing</h2>
<h5>All signups get a 30-day trial of Business Plan. No credit card required.</h5>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<span class="fa fa-user fa-3x" aria-hidden="true"></span>
<h3>Personal</h3>
<h2>$0</h2>
<p>per month per user</p>
<hr>
<h4>Personal Use</h4>
<h4>5 User</h4>
<h4>Free Forever</h4>
<p><a href="#" class="button-secondary">Subscribe</a></p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<span class="fa fa-group fa-3x" aria-hidden="true"></span>
<h3>Group</h3>
<h2>$99</h2>
<p>per month per user</p>
<hr>
<h4>Advanced Panel</h4>
<h4>100 User</h4>
<h4>Free Support</h4>
<p><a href="#" class="button">Subscribe</a></p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<span class="fa fa-group fa-3x" aria-hidden="true"></span>
<h3>Business</h3>
<h2>$199</h2>
<p>per month per user</p>
<hr>
<h4>Premium Panel</h4>
<h4>Unlimited User</h4>
<h4>Free Support</h4>
<p><a href="#" class="button-secondary">Subscribe</a></p>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h2><span class="fa fa-newspaper-o" aria-hidden="true"></span> Common Queries and Questions</h2>
<h3>1. What prices are our services?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>2. What is our refund policy?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>3. What payments methods do we accept?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>4. What delivery options do we offer?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>5. What support options are available?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>6. What additional services are available?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
</div>
</div>
</div>
{% endblock %}
@@ -1,127 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h6>Affordable Business Plans</h6>
<h2>Choose the plan that suits your needs. 100% satisfaction guaranteed.</h2>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h2>Startup</h2>
<h5>Up to 10 websites</h5>
<p>Quickly cultivate optimal processes and tactical architectures. Completely iterate covalent strategic theme areas via accurate e-markets.</p>
<p><a href="#"><span class="fa fa-file-text-o fa-file-alt fa-fw" aria-hidden="true"></span> Learn More</a></p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h2>Entrepreneur</h2>
<h5>Up to 100 websites</h5>
<p>Quickly cultivate optimal processes and tactical architectures. Completely iterate covalent strategic theme areas via accurate e-markets.</p>
<p><a href="#"><span class="fa fa-file-text-o fa-file-alt fa-fw" aria-hidden="true"></span> Learn More</a></p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h2>Corporate</h2>
<h5>More Than 100 websites</h5>
<p>Quickly cultivate optimal processes and tactical architectures. Completely iterate covalent strategic theme areas via accurate e-markets.</p>
<p><a href="#"><span class="fa fa-file-text-o fa-file-alt fa-fw" aria-hidden="true"></span> Learn More</a></p>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h3><strong>Compare Plans</strong></h3>
<h5>Free Domain</h5>
<h5>Database</h5>
<h5>Email</h5>
<h5>Chat Support</h5>
<h5>Phone Support</h5>
</div>
</div>
<div class="g-block">
<div class="g-content center">
<h3>Startup</h3>
<h5>1</h5>
<h5>10</h5>
<h5>10</h5>
<h5>No</h5>
<h5>No</h5>
<a href="#" class="button">Purchase</a>
</div>
</div>
<div class="g-block">
<div class="g-content center">
<h3>Entrepreneur</h3>
<h5>10</h5>
<h5>100</h5>
<h5>100</h5>
<h5>Yes</h5>
<h5>No</h5>
<a href="#" class="button-secondary">Purchase</a>
</div>
</div>
<div class="g-block">
<div class="g-content center">
<h3>Corporate</h3>
<h5>20</h5>
<h5>Unlimited</h5>
<h5>Unlimited</h5>
<h5>Yes</h5>
<h5>Yes</h5>
<a href="#" class="button">Purchase</a>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h2>Common Queries and Questions</h2>
<h6>Please Contact Us If Your Question Is Not Listed Here</h6>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h3>What prices are our services?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What is our refund policy?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What payments methods do we accept?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>What delivery options do we offer?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What support options are available?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
<h3>What additional services are available?</h3>
<p>Proactively envisioned multimedia based expertise and cross-media growth strategies. Seamlessly visualize quality intellectual capital without superior collaboration and idea-sharing.</p>
</div>
</div>
</div>
{% endblock %}
@@ -1,81 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="center">
<div class="g-content">
<h2 class="header-title">Our Awesome Services</h2>
<h5>Learn What We Can Do For You</h5>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/400x250" alt="image">
<h3>Web Design</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/400x250" alt="image">
<h3>Mobile Apps</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/400x250" alt="image">
<h3>SEO</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
<a href="#" class="button">Read More</a>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h3>Our Core Services</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
<ul>
<li>HTML5 &amp; CSS3</li>
<li>Gantry Framework</li>
<li>Grav CMS</li>
</ul>
<a href="#" class="button">Join Our Club Now</a>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/600x400" alt="image">
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/600x400" alt="image">
</div>
</div>
<div class="g-block">
<div class="g-content">
<h3>Why Should You Choose Us</h3>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.</p>
<ul>
<li>Full Experience</li>
<li>Professional</li>
<li>Affordable</li>
</ul>
<a href="#" class="button">Join Our Club Now</a>
</div>
</div>
</div>
{% endblock %}
@@ -1,101 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="center">
<div class="g-content">
<h2 class="header-title">What We Do</h2>
<h5>Learn More About Our Great Services</h5>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-picture-o fa-fw fa-2x" aria-hidden="true"></span> Graphic Design</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-terminal fa-fw fa-2x" aria-hidden="true"></span> Programming</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-database fa-fw fa-2x" aria-hidden="true"></span> Hosting</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-tags fa-fw fa-2x" aria-hidden="true"></span> Domain</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-shield fa-fw fa-2x" aria-hidden="true"></span> Security</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-sitemap fa-fw fa-2x" aria-hidden="true"></span> Servers</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-support fa-fw fa-2x" aria-hidden="true"></span> HelpDesk</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-desktop fa-fw fa-2x" aria-hidden="true"></span> Template</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<h4><span class="fa fa-truck fa-fw fa-2x" aria-hidden="true"></span> MarketPlace</h4>
<p>Dynamically procrastinate B2C users after installed base benefits.</p>
</div>
</div>
</div>
<div class="center">
<div class="g-content">
<h6>A New Experience</h6>
<h3>Create Your Awesome Website</h3>
<a href="#" class="button">Get A Free Quote Now</a>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/1200x350" alt="image">
</div>
</div>
</div>
<div class="center">
<div class="g-content">
<h5>Choose the Service that Suits Your Needs. 100% satisfaction guaranteed.</h5>
<p>Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits. Dramatically visualize customer directed convergence without revolutionary ROI. Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar solutions without functional solutions.</p>
</div>
</div>
{% endblock %}
@@ -1,80 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('default') %}
{% block content %}
<div class="center">
<div class="g-content">
<h6>Work With Us</h6>
<h3>100% Satisfaction Guaranteed</h3>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Cloud Services</h3>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>Secured Data</h3>
</div>
</div>
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/500x300" alt="image">
<h3>24/7 Support</h3>
</div>
</div>
</div>
<div class="g-grid center">
<div class="g-block">
<div class="g-content">
<span class="fa fa-desktop fa-3x" aria-hidden="true"></span>
<h3>Desktop Apps</h3>
<p>Collaboratively administrate empowered markets via available great networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<span class="fa fa-mobile fa-3x" aria-hidden="true"></span>
<h3>Mobile Apps</h3>
<p>Collaboratively administrate empowered markets via available great networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<span class="fa fa-cloud fa-3x" aria-hidden="true"></span>
<h3>Cloud Servers</h3>
<p>Collaboratively administrate empowered markets via available great networks.</p>
</div>
</div>
<div class="g-block">
<div class="g-content">
<span class="fa fa-database fa-3x" aria-hidden="true"></span>
<h3>Databases</h3>
<p>Collaboratively administrate empowered markets via available great networks.</p>
</div>
</div>
</div>
<div class="center">
<div class="g-content">
<a href="#" class="button">Join Our Club Now</a> <a href="#" class="button-secondary">Learn More About Us</a>
</div>
</div>
<div class="g-grid">
<div class="g-block">
<div class="g-content">
<img src="http://placehold.it/1200x350" alt="image">
</div>
</div>
</div>
{% endblock %}
@@ -1,7 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('_body_only') %}
{% block content %}
Coming soon
{% endblock %}
@@ -1,7 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('_body_only') %}
{% block content %}
Here goes the component content!
{% endblock %}
@@ -1,9 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('_error') %}
{% block content %}
<h1>{{ errorcode|default(500) }} {{ error|default('Unknown Error') }}</h1>
<p>{{ errormessage|default('Sorry! No further information provided.') }}</p>
{% endblock %}
@@ -1,58 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('_offline') %}
{% block content %}
<h2>{{ offline_title }}</h2>
{% if offline_message %}
<p class="offline-message">
{{ offline_message }}
</p>
{% endif %}
{% if offline_image %}
<img src="{{ offline_image }}" alt="{{ site.name }}" />
{% endif %}
{% if gantry.config.features.feedburner.enabled and gantry.config.features.feedburner.uri %}
<section id="g-subscription-form">
<p class="g-subscription-title">
{{ offline_subscription_title }}
</p>
<form class="g-offline-form" action="http://feedburner.google.com/fb/a/mailverify" method="post" target="popupwindow" onsubmit="window.open('http://feedburner.google.com/fb/a/mailverify?uri={{ gantry.config.features.feedburner.uri }}', 'popupwindow', 'scrollbars=yes,width=550,height=520');return true">
<input type="text" placeholder="{{ _._('RT_EMAIL') }}" class="inputbox" name="email">
<input type="hidden" value="{{ gantry.config.features.feedburner.uri }}" name="uri"/>
<input type="hidden" name="loc" value="en_US"/>
<input type="submit" name="Submit" class="button" value="{{ subscribe }}" />
</form>
</section>
{% endif %}
<section id="g-authorized-form">
<h2>{{ _._("AUTHORIZED_LOGIN") }}</h2>
<p>{{ _._("RT_OFFLINE_LOGIN_MESSAGE") }}</p>
{% if not user.isRoot %}
<form action="{{ url()|e }}" method="post">
<input name="username" id="username" class="inputbox" type="text" placeholder="{{ _._('JGLOBAL_USERNAME') }}" />
<input type="password" name="password" class="inputbox" placeholder="{{ _._('JGLOBAL_PASSWORD') }}" />
<input type="hidden" name="remember" class="inputbox" value="yes" id="remember" />
<input type="submit" name="Submit" class="button" value="{{ _._('JLOGIN') }}" />
<input type="hidden" name="option" value="com_users" />
<input type="hidden" name="task" value="user.login" />
<input type="hidden" name="return" value="{{ url()|base64 }}" />
{{ formtoken }}
</form>
{% else %}
<form action="{{ url()|e }}" method="post">
<input type="submit" name="Submit" class="button" value="{{ _._('JLOGOUT') }}" />
<input type="hidden" name="option" value="com_users" />
<input type="hidden" name="task" value="user.logout" />
<input type="hidden" name="return" value="{{ return }}" />
{{ formtoken }}
</form>
{% endif %}
</section>
{% endblock %}
@@ -1 +0,0 @@
Raw component data!
@@ -1,11 +0,0 @@
{% extends "page.html.twig" %}
{% do gantry.theme.setLayout('_unsupported') %}
{% block content %}
<h1>Unsupported Browser</h1>
<p>We have detected that you are using Internet Explorer 7, a browser version that is not supported by this website. Internet Explorer 7 was released in October of 2006, and the latest version of IE7 was released in October of 2007. It is no longer supported by Microsoft.</p>
<p>Continuing to run IE7 leaves you open to any and all security vulnerabilities discovered since that date. In March of 2011, Microsoft released version 9 of Internet Explorer that, in addition to providing greater security, is faster and more standards compliant than versions 6, 7, and 8 that came before it.</p>
<p>We suggest installing the <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx">latest version of Internet Explorer</a>, or the latest version of these other popular browsers: <a href="http://www.mozilla.com/en-US/firefox/firefox.html">Firefox</a>, <a href="http://www.google.com/chrome">Google Chrome</a>, <a href="http://www.apple.com/safari/download/">Safari</a>, <a href="http://www.opera.com/">Opera</a></p>
{% endblock %}
-96
View File
@@ -1,96 +0,0 @@
details:
name: Hydrogen
version: '@version@'
icon: paper-plane
date: '@versiondate@'
author:
name: RocketTheme, LLC
email: support@rockettheme.com
link: http://www.rockettheme.com
documentation:
link: http://docs.gantry.org/gantry5
support:
link: https://gitter.im/gantry/gantry5
updates:
link: http://updates.rockettheme.com/themes/hydrogen.yaml
copyright: (C) 2005 - 2020 RocketTheme, LLC. All rights reserved.
license: GPLv2
description: Hydrogen Theme
images:
thumbnail: admin/images/preset1.png
preview: admin/images/preset1.png
configuration:
gantry:
platform: prime
engine: nucleus
theme:
parent: hydrogen
base: gantry-theme://common
file: gantry-theme://include/theme.php
class: \Gantry\Framework\Theme
fonts:
roboto:
400: 'gantry-theme://fonts/roboto_regular_macroman/Roboto-Regular-webfont'
500: 'gantry-theme://fonts/roboto_medium_macroman/Roboto-Medium-webfont'
700: 'gantry-theme://fonts/roboto_bold_macroman/Roboto-Bold-webfont'
css:
compiler: \Gantry\Component\Stylesheet\ScssCompiler
target: gantry-theme://css-compiled
paths:
- gantry-theme://scss
- gantry-engine://scss
files:
- hydrogen
- custom
persistent:
- hydrogen
overrides:
- custom
block-variations:
Box Variations:
box1: Box 1
box2: Box 2
box3: Box 3
box4: Box 4
Effects:
shadow: Shadow 1
shadow2: Shadow 2
rounded: Rounded
square: Square
Utility:
disabled: Disabled
align-right: Align Right
align-left: Align Left
center: Center
full-width: Full Width
equal-height: Equal Height
nomarginall: No Margin
nopaddingall: No Padding
dependencies:
gantry: 5.5
admin:
styles:
core:
- base
- accent
section:
- header
- navigation
- showcase
- feature
- subfeature
- main
- footer
configuration:
- breakpoints
-29
View File
@@ -1,29 +0,0 @@
<?php
use Gantry\Framework\Gantry;
try
{
// Get Gantry instance and return it.
$gantry = Gantry::instance();
// Initialize the template if not done already.
if (!isset($gantry['theme.name']))
{
$gantry['theme.path'] = dirname(__DIR__);
$gantry['theme.name'] = $theme;
}
// Only a single template can be loaded at any time.
if (!isset($gantry['theme']))
{
include_once __DIR__ . '/theme.php';
}
return $gantry;
}
catch (Exception $e)
{
// In frontend we want to prevent template from loading.
die('Failed to load template: ' . $e->getMessage());
}
-33
View File
@@ -1,33 +0,0 @@
<?php
class_exists('\\Gantry\\Framework\\Gantry') or die;
/**
* Define the template.
*/
class GantryTheme extends \Gantry\Framework\Theme {}
// Initialize theme stream.
/** @var \Gantry\Framework\Platform $platform */
$platform = $gantry['platform'];
$platform->set(
'streams.gantry-theme.prefixes',
['' => [
"gantry-custom://",
"gantry-themes://{$gantry['theme.name']}",
"gantry-themes://{$gantry['theme.name']}/common"
]
]
);
$platform->set(
'streams.gantry-custom.prefixes',
['' => [
"gantry-prime://custom/{$gantry['theme.name']}",
]
]
);
// Define Gantry services.
$gantry['theme'] = static function($c) {
return new GantryTheme($c['theme.path'], $c['theme.name']);
};

Some files were not shown because too many files have changed in this diff Show More