Version Description
(25th April 2017) = * Requires PHP 5.4 * Massive overhaul of codebase * Speed improvements to front and back end * Admin now uses BootStrap * Twig templating engine implemented * Added admin form validation to help catch data errors * Added a rebuild database option * Done away with SASS on the fly compilation * Back to on slide effect now customisable - Pro only * Added option to adjust for WP Admin bar - Pro only * Bug fixes and compatibility fixes
Download this release
Release Info
Developer | peterfeatherstone |
Plugin | Responsive Menu |
Version | 3.1.0 |
Comparing to | |
See all releases |
Code changes from version 3.0.18 to 3.1.0
- README.md +1 -0
- app/Collections/OptionsCollection.php +86 -0
- app/Container/Container.php +47 -0
- app/Controllers/AdminController.php +133 -0
- app/Controllers/FrontController.php +73 -0
- app/Database/Database.php +31 -0
- app/Database/Migration.php +36 -0
- app/Formatters/Minifier.php +24 -0
- app/Management/OptionManager.php +70 -0
- app/Tasks/UpdateOptionsTask.php +73 -0
- app/Validation/Validator.php +123 -0
- app/Validation/Validators/BaseValidator.php +19 -0
- app/Validation/Validators/Colour.php +24 -0
- app/Validation/Validators/Numeric.php +19 -0
- app/Validation/Validators/Positive.php +19 -0
- app/View/View.php +18 -0
- app/Walkers/Walker.php +129 -0
- autoload.php +0 -15
- composer.json +10 -0
- composer.lock +81 -0
- config/default_options.php +208 -0
- config/polylang.php +18 -0
- config/routing.php +56 -0
- config/services.php +42 -0
- config/twig.php +54 -0
- config/wp/scripts.php +38 -0
- migration.php +37 -0
- public/css/admin/admin.css +391 -0
- public/css/admin/bootstrap-select.css +6 -0
- public/css/admin/bootstrap-toggle.css +28 -0
- public/css/admin/bootstrap.css +6 -0
- public/css/admin/minicolours.css +323 -0
- public/css/animations/boring.css.twig +19 -0
- tests/app/Form/FontIconPageListTest.php → public/css/animations/off.css.twig +0 -0
- public/css/app.css.twig +517 -0
- public/fonts/admin/glyphicons-halflings-regular.eot +0 -0
- public/fonts/admin/glyphicons-halflings-regular.svg +288 -0
- public/fonts/admin/glyphicons-halflings-regular.ttf +0 -0
- public/fonts/admin/glyphicons-halflings-regular.woff +0 -0
- public/fonts/admin/glyphicons-halflings-regular.woff2 +0 -0
- public/js/admin/admin.js +77 -0
- public/js/admin/bootstrap-file.js +1 -0
- public/js/admin/bootstrap-select.js +9 -0
- public/js/admin/bootstrap-toggle.js +9 -0
- public/js/admin/bootstrap.js +7 -0
- public/js/admin/minicolours.js +11 -0
- public/js/app.js.twig +175 -0
- readme.txt +18 -13
- responsive-menu.php +36 -40
- src/app/Collections/OptionsCollection.php +0 -83
- src/app/Controllers/Admin.php +0 -60
- src/app/Controllers/Front.php +0 -38
- src/app/Database/Database.php +0 -10
- src/app/Database/Migration.php +0 -193
- src/app/Database/WpDatabase.php +0 -52
- src/app/Factories/CssFactory.php +0 -30
- src/app/Factories/JsFactory.php +0 -26
- src/app/Factories/OptionFactory.php +0 -27
- src/app/Filesystem/FileCreator.php +0 -22
- src/app/Filesystem/FolderCreator.php +0 -15
- src/app/Filesystem/ScriptsBuilder.php +0 -38
- src/app/Filters/Filter.php +0 -7
- src/app/Filters/HtmlFilter.php +0 -11
- src/app/Filters/JsonFilter.php +0 -11
- src/app/Filters/TextFilter.php +0 -11
- src/app/Form/Checkbox.php +0 -22
- src/app/Form/Colour.php +0 -13
- src/app/Form/Export.php +0 -11
- src/app/Form/FontIconPageList.php +0 -74
- src/app/Form/FormComponent.php +0 -8
- src/app/Form/HeaderBarOrdering.php +0 -49
- src/app/Form/Image.php +0 -14
- src/app/Form/Import.php +0 -11
- src/app/Form/MenuOrdering.php +0 -48
- src/app/Form/Reset.php +0 -11
- src/app/Form/Select.php +0 -22
- src/app/Form/Text.php +0 -13
- src/app/Form/TextArea.php +0 -13
- src/app/Formatters/Minify.php +0 -24
- src/app/Mappers/JsMapper.php +0 -196
- src/app/Mappers/ScssBaseMapper.php +0 -201
- src/app/Mappers/ScssButtonMapper.php +0 -63
- src/app/Mappers/ScssMapper.php +0 -11
- src/app/Mappers/ScssMenuMapper.php +0 -207
- src/app/Mappers/scss.inc.php +0 -4577
- src/app/Models/Option.php +0 -45
- src/app/Repositories/OptionRepository.php +0 -56
- src/app/Routing/Container.php +0 -47
- src/app/Services/OptionService.php +0 -57
- src/app/Translation/Translator.php +0 -41
- src/app/View/AdminView.php +0 -50
- src/app/View/FrontView.php +0 -73
- src/app/View/View.php +0 -8
- src/app/ViewModels/Button.php +0 -17
- src/app/ViewModels/Components/Admin/Boxes.php +0 -113
- src/app/ViewModels/Components/Admin/Tabs.php +0 -28
- src/app/ViewModels/Components/Button/Button.php +0 -39
- src/app/ViewModels/Components/ComponentFactory.php +0 -21
- src/app/ViewModels/Components/Menu/AdditionalContent.php +0 -23
- src/app/ViewModels/Components/Menu/Menu.php +0 -35
- src/app/ViewModels/Components/Menu/Search.php +0 -24
- src/app/ViewModels/Components/Menu/Title.php +0 -48
- src/app/ViewModels/Components/ViewComponent.php +0 -11
- src/app/ViewModels/Menu.php +0 -23
- src/app/Walkers/WpWalker.php +0 -131
- src/config/admin_ordering.php +0 -1505
- src/config/default_options.php +0 -202
- src/config/internationalise.php +0 -29
- src/config/option_helpers.php +0 -22
- src/config/routing.php +0 -55
- src/config/services.php +0 -164
- src/config/setup.php +0 -7
- src/public/css/admin/main.css +0 -767
- src/public/js/admin/main.js +0 -54
- src/public/scss/hamburgers/_base.scss +0 -69
- src/public/scss/hamburgers/hamburgers.scss +0 -57
- src/public/scss/hamburgers/types/_boring.scss +0 -30
- src/views/admin/main.phtml +0 -102
- src/views/button.phtml +0 -1
- src/views/menu.phtml +0 -8
- src/views/preview.phtml +0 -16
- tests/app/Collections/OptionsCollectionTest.php +128 -132
- tests/app/Container/ContainerTest.php +66 -0
- tests/app/Controllers/AdminControllerTest.php +21 -0
- tests/app/Controllers/AdminTest.php +0 -57
- tests/app/Controllers/FrontTest.php +0 -37
- tests/app/Database/MigrationTest.php +72 -104
- tests/app/Database/WpDatabaseTest.php +0 -55
- tests/app/Factories/CssFactoryTest.php +0 -35
- tests/app/Factories/JsFactoryTest.php +0 -30
- tests/app/Factories/OptionFactoryTest.php +0 -61
- tests/app/Filesystem/FileCreatorTest.php +0 -25
- tests/app/Filesystem/FolderCreatorTest.php +0 -21
- tests/app/Filesystem/ScriptsBuilderTest.php +0 -23
- tests/app/Filters/HtmlFilterTest.php +0 -15
- tests/app/Filters/JsonFilterTest.php +0 -19
- tests/app/Filters/TextFilterTest.php +0 -19
- tests/app/Form/CheckboxTest.php +0 -33
- tests/app/Form/ColourTest.php +0 -16
- tests/app/Form/ExportTest.php +0 -16
- tests/app/Form/FontIconTest.php +0 -23
- tests/app/Form/HeaderBarOrderingTest.php +0 -18
- tests/app/Form/ImageTest.php +0 -17
- tests/app/Form/ImportTest.php +0 -16
- tests/app/Form/MenuOrderingTest.php +0 -17
- tests/app/Form/ResetTest.php +0 -16
- tests/app/Form/SelectTest.php +0 -47
- tests/app/Form/TextAreaTest.php +0 -16
- tests/app/Form/TextTest.php +0 -16
- tests/app/Formatters/MinifierTest.php +28 -0
- tests/app/Formatters/MinifyTest.php +0 -27
- tests/app/Management/OptionManagerTest.php +85 -0
- tests/app/Mappers/JsMapperTest.php +0 -59
- tests/app/Mappers/ScssBaseMapperTest.php +0 -32
- tests/app/Mappers/ScssButtonMapperTest.php +0 -42
- tests/app/Mappers/ScssMenuMapperTest.php +0 -83
- tests/app/Models/OptionTest.php +0 -57
- tests/app/Repositories/OptionRepositoryTest.php +0 -87
- tests/app/Routing/ContainerTest.php +0 -66
- tests/app/Services/OptionsServiceTest.php +0 -59
- tests/app/Translation/TranslatorTest.php +0 -50
- tests/app/Validation/ValidatorTest.php +47 -0
- tests/app/Validation/Validators/ColourTest.php +40 -0
- tests/app/Validation/Validators/NumericTest.php +47 -0
- tests/app/Validation/Validators/PositiveTest.php +41 -0
- tests/app/View/AdminViewTest.php +0 -19
- tests/app/View/FrontViewTest.php +0 -18
- tests/app/ViewModels/ButtonTest.php +0 -18
- tests/app/ViewModels/Components/Admin/BoxesTest.php +0 -50
- tests/app/ViewModels/Components/Admin/TabsTest.php +0 -24
- tests/app/ViewModels/Components/Button/ButtonTest.php +0 -36
- tests/app/ViewModels/Components/ComponentFactoryTest.php +0 -27
- tests/app/ViewModels/Components/Menu/AdditionalContentTest.php +0 -28
- tests/app/ViewModels/Components/Menu/MenuTest.php +0 -36
- tests/app/ViewModels/Components/Menu/SearchTest.php +0 -21
- tests/app/ViewModels/Components/Menu/TitleTest.php +0 -32
- tests/app/ViewModels/MenuTest.php +0 -32
- tests/app/Walkers/WpWalkerTest.php +0 -93
- tests/scssc/ApiTest.php +0 -80
- tests/scssc/InputTest.php +0 -80
- tests/scssc/compare-scss.sh +0 -25
- tests/scssc/inputs/builtins.scss +0 -171
- tests/scssc/inputs/comments.scss +0 -28
- tests/scssc/inputs/compass_extract.scss +0 -248
- tests/scssc/inputs/content.scss +0 -61
- tests/scssc/inputs/content_with_function.scss +0 -17
- tests/scssc/inputs/default_args.scss +0 -15
- tests/scssc/inputs/directives.scss +0 -108
- tests/scssc/inputs/extends.scss +0 -184
- tests/scssc/inputs/filter_effects.scss +0 -48
- tests/scssc/inputs/functions.scss +0 -81
- tests/scssc/inputs/ie7.scss +0 -12
- tests/scssc/inputs/if.scss +0 -76
- tests/scssc/inputs/if_on_null.scss +0 -8
- tests/scssc/inputs/import.scss +0 -23
- tests/scssc/inputs/imports/_partial.scss +0 -10
- tests/scssc/inputs/imports/simple.scss +0 -4
- tests/scssc/inputs/interpolation.scss +0 -86
- tests/scssc/inputs/keyword_args.scss +0 -24
- tests/scssc/inputs/list.scss +0 -15
- tests/scssc/inputs/looping.scss +0 -51
- tests/scssc/inputs/media.scss +0 -208
- tests/scssc/inputs/mixins.scss +0 -158
- tests/scssc/inputs/nesting.scss +0 -45
- tests/scssc/inputs/null.scss +0 -41
- tests/scssc/inputs/operators.scss +0 -143
- tests/scssc/inputs/placeholder_selector.scss +0 -18
- tests/scssc/inputs/scss_css.scss +0 -986
- tests/scssc/inputs/selectors.scss +0 -187
- tests/scssc/inputs/values.scss +0 -43
- tests/scssc/inputs/variables.scss +0 -56
- tests/scssc/outputs/builtins.css +0 -126
- tests/scssc/outputs/comments.css +0 -19
- tests/scssc/outputs/compass_extract.css +0 -28
- tests/scssc/outputs/content.css +0 -29
- tests/scssc/outputs/content_with_function.css +0 -2
- tests/scssc/outputs/default_args.css +0 -3
- tests/scssc/outputs/directives.css +0 -77
- tests/scssc/outputs/extends.css +0 -87
- tests/scssc/outputs/filter_effects.css +0 -20
- tests/scssc/outputs/functions.css +0 -22
- tests/scssc/outputs/ie7.css +0 -8
- tests/scssc/outputs/if.css +0 -21
- tests/scssc/outputs/if_on_null.css +0 -2
- tests/scssc/outputs/import.css +0 -27
- tests/scssc/outputs/interpolation.css +0 -54
- tests/scssc/outputs/keyword_args.css +0 -6
- tests/scssc/outputs/list.css +0 -7
- tests/scssc/outputs/looping.css +0 -45
- tests/scssc/outputs/media.css +0 -103
- tests/scssc/outputs/mixins.css +0 -83
- tests/scssc/outputs/nesting.css +0 -22
- tests/scssc/outputs/null.css +0 -21
- tests/scssc/outputs/operators.css +0 -105
- tests/scssc/outputs/placeholder_selector.css +0 -7
- tests/scssc/outputs/scss_css.css +0 -741
- tests/scssc/outputs/selectors.css +0 -22
README.md
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
[ ![Codeship Status](https://www.codeship.io/projects/0f626140-0c02-0135-749e-1e85f2753028/status?branch=master)](https://app.codeship.com/projects/215186)
|
app/Collections/OptionsCollection.php
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Collections;
|
4 |
+
|
5 |
+
class OptionsCollection implements \ArrayAccess, \Countable {
|
6 |
+
|
7 |
+
private $options;
|
8 |
+
|
9 |
+
public function __construct(array $options = []) {
|
10 |
+
$this->options = array_map(function($o) {
|
11 |
+
return is_array($o) ? stripslashes(json_encode($o)) : stripslashes($o);
|
12 |
+
}, $options);
|
13 |
+
}
|
14 |
+
|
15 |
+
public function add(array $option) {
|
16 |
+
$value = $option[key($option)];
|
17 |
+
$this->options[key($option)] = is_array($value) ? stripslashes(json_encode($value)) : stripslashes($value);
|
18 |
+
}
|
19 |
+
|
20 |
+
public function getActiveArrow() {
|
21 |
+
if($this->options['active_arrow_image'])
|
22 |
+
return '<img alt="' . $this->options['active_arrow_image_alt'] .'" src="' . $this->options['active_arrow_image'] .'" />';
|
23 |
+
else
|
24 |
+
return $this->options['active_arrow_shape'];
|
25 |
+
|
26 |
+
}
|
27 |
+
|
28 |
+
public function getInActiveArrow() {
|
29 |
+
if($this->options['inactive_arrow_image'])
|
30 |
+
return '<img alt="' . $this->options['inactive_arrow_image_alt'] .'" src="' . $this->options['inactive_arrow_image'] .'" />';
|
31 |
+
else
|
32 |
+
return $this->options['inactive_arrow_shape'];
|
33 |
+
|
34 |
+
}
|
35 |
+
|
36 |
+
public function getTitleImage() {
|
37 |
+
if($this->options['menu_title_image'])
|
38 |
+
return '<img alt="' . $this->options['menu_title_image_alt'] .'" src="' . $this->options['menu_title_image'] .'" />';
|
39 |
+
else
|
40 |
+
return null;
|
41 |
+
|
42 |
+
}
|
43 |
+
|
44 |
+
public function getButtonIcon() {
|
45 |
+
if($this->options['button_image'])
|
46 |
+
return '<img alt="' . $this->options['button_image_alt'] .'" src="' . $this->options['button_image'] .'" class="responsive-menu-button-icon responsive-menu-button-icon-active" />';
|
47 |
+
else
|
48 |
+
return '<span class="responsive-menu-inner"></span>';
|
49 |
+
}
|
50 |
+
|
51 |
+
public function getButtonIconActive() {
|
52 |
+
if($this->options['button_image'])
|
53 |
+
return '<img alt="' . $this->options['button_image_alt_when_clicked'] .'" src="' . $this->options['button_image_when_clicked'] .'" class="responsive-menu-button-icon responsive-menu-button-icon-inactive" />';
|
54 |
+
}
|
55 |
+
|
56 |
+
public function offsetExists($offset) {
|
57 |
+
return array_key_exists($offset, $this->options);
|
58 |
+
}
|
59 |
+
|
60 |
+
public function offsetGet($offset) {
|
61 |
+
if(isset($this->options[$offset]))
|
62 |
+
return $this->options[$offset];
|
63 |
+
return null;
|
64 |
+
}
|
65 |
+
|
66 |
+
public function offsetSet($offset, $value) {
|
67 |
+
$this->options[$offset] = $value;
|
68 |
+
}
|
69 |
+
|
70 |
+
public function offsetUnset($offset) {
|
71 |
+
if(isset($this->options[$offset]))
|
72 |
+
unset($this->options[$offset]);
|
73 |
+
}
|
74 |
+
|
75 |
+
public function toArray() {
|
76 |
+
$array = [];
|
77 |
+
foreach($this->options as $key => $val)
|
78 |
+
$array[$key] = $val;
|
79 |
+
return $array;
|
80 |
+
}
|
81 |
+
|
82 |
+
public function count() {
|
83 |
+
return count($this->options);
|
84 |
+
}
|
85 |
+
|
86 |
+
}
|
app/Container/Container.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Container;
|
4 |
+
|
5 |
+
class Container implements \ArrayAccess {
|
6 |
+
|
7 |
+
private $values = [];
|
8 |
+
private $raw = [];
|
9 |
+
private $keys = [];
|
10 |
+
|
11 |
+
public function offsetSet($id, $value) {
|
12 |
+
$this->values[$id] = $value;
|
13 |
+
$this->keys[$id] = true;
|
14 |
+
}
|
15 |
+
|
16 |
+
public function offsetGet($id) {
|
17 |
+
|
18 |
+
if(!isset($this->keys[$id])) {
|
19 |
+
throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id));
|
20 |
+
}
|
21 |
+
|
22 |
+
if(isset($this->raw[$id]) || !is_object($this->values[$id]) || !method_exists($this->values[$id], '__invoke')) {
|
23 |
+
return $this->values[$id];
|
24 |
+
}
|
25 |
+
|
26 |
+
$raw = $this->values[$id];
|
27 |
+
$val = $this->values[$id] = $raw($this);
|
28 |
+
$this->raw[$id] = $this->values[$id];
|
29 |
+
|
30 |
+
return $this->values[$id];
|
31 |
+
}
|
32 |
+
|
33 |
+
public function offsetExists($id) {
|
34 |
+
return isset($this->keys[$id]);
|
35 |
+
}
|
36 |
+
|
37 |
+
public function offsetUnset($id) {
|
38 |
+
if(isset($this->keys[$id])) {
|
39 |
+
unset($this->values[$id], $this->raw[$id], $this->keys[$id]);
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
public function keys() {
|
44 |
+
return array_keys($this->values);
|
45 |
+
}
|
46 |
+
|
47 |
+
}
|
app/Controllers/AdminController.php
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Controllers;
|
4 |
+
use ResponsiveMenu\View\View;
|
5 |
+
use ResponsiveMenu\Management\OptionManager;
|
6 |
+
use ResponsiveMenu\Validation\Validator;
|
7 |
+
use ResponsiveMenu\Tasks\UpdateOptionsTask;
|
8 |
+
use ResponsiveMenu\Collections\OptionsCollection;
|
9 |
+
|
10 |
+
class AdminController {
|
11 |
+
|
12 |
+
public function __construct(OptionManager $manager, View $view) {
|
13 |
+
$this->manager = $manager;
|
14 |
+
$this->view = $view;
|
15 |
+
}
|
16 |
+
|
17 |
+
public function index($nav_menus, $location_menus) {
|
18 |
+
return $this->view->render(
|
19 |
+
'admin/main.html.twig',
|
20 |
+
[
|
21 |
+
'options' => $this->manager->all(),
|
22 |
+
'nav_menus' => $nav_menus,
|
23 |
+
'location_menus' => $location_menus
|
24 |
+
]
|
25 |
+
);
|
26 |
+
}
|
27 |
+
|
28 |
+
public function rebuild($nav_menus, $location_menus) {
|
29 |
+
return $this->view->render(
|
30 |
+
'admin/main.html.twig',
|
31 |
+
[
|
32 |
+
'options' => $this->manager->all(),
|
33 |
+
'nav_menus' => $nav_menus,
|
34 |
+
'location_menus' => $location_menus,
|
35 |
+
'alert' => ['success' => 'Responsive Menu Database Rebuilt Successfully.']
|
36 |
+
]
|
37 |
+
);
|
38 |
+
}
|
39 |
+
|
40 |
+
public function update($new_options, $nav_menus, $location_menus) {
|
41 |
+
$validator = new Validator();
|
42 |
+
$errors = [];
|
43 |
+
if($validator->validate($new_options)):
|
44 |
+
try {
|
45 |
+
$options = $this->manager->updateOptions($new_options);
|
46 |
+
$task = new UpdateOptionsTask;
|
47 |
+
$task->run($options, $this->view);
|
48 |
+
$alert = ['success' => 'Responsive Menu Options Updated Successfully.'];
|
49 |
+
} catch (\Exception $e) {
|
50 |
+
$alert = ['danger' => $e->getMessage()];
|
51 |
+
}
|
52 |
+
else:
|
53 |
+
$options = new OptionsCollection($new_options);
|
54 |
+
$errors = $validator->getErrors();
|
55 |
+
$alert = ['danger' => $errors];
|
56 |
+
endif;
|
57 |
+
|
58 |
+
return $this->view->render(
|
59 |
+
'admin/main.html.twig',
|
60 |
+
[
|
61 |
+
'options' => $options,
|
62 |
+
'alert' => $alert,
|
63 |
+
'nav_menus' => $nav_menus,
|
64 |
+
'location_menus' => $location_menus,
|
65 |
+
'errors' => $errors
|
66 |
+
]
|
67 |
+
);
|
68 |
+
}
|
69 |
+
|
70 |
+
public function reset($default_options, $nav_menus, $location_menus) {
|
71 |
+
try {
|
72 |
+
$options = $this->manager->updateOptions($default_options);
|
73 |
+
$task = new UpdateOptionsTask;
|
74 |
+
$task->run($options, $this->view);
|
75 |
+
$alert = ['success' => 'Responsive Menu Options Reset Successfully'];
|
76 |
+
} catch(\Exception $e) {
|
77 |
+
$alert = ['danger' => $e->getMessage()];
|
78 |
+
}
|
79 |
+
return $this->view->render(
|
80 |
+
'admin/main.html.twig',
|
81 |
+
[
|
82 |
+
'options' => $options,
|
83 |
+
'alert' => $alert,
|
84 |
+
'nav_menus' => $nav_menus,
|
85 |
+
'location_menus' => $location_menus
|
86 |
+
]
|
87 |
+
);
|
88 |
+
}
|
89 |
+
|
90 |
+
public function import($imported_options, $nav_menus, $location_menus) {
|
91 |
+
if(!empty($imported_options)):
|
92 |
+
$validator = new Validator();
|
93 |
+
$errors = [];
|
94 |
+
if($validator->validate($imported_options)):
|
95 |
+
try {
|
96 |
+
unset($imported_options['button_click_trigger']);
|
97 |
+
$options = $this->manager->updateOptions($imported_options);
|
98 |
+
$task = new UpdateOptionsTask;
|
99 |
+
$task->run($options, $this->view);
|
100 |
+
$alert = ['success' => 'Responsive Menu Options Imported Successfully.'];
|
101 |
+
} catch(\Exception $e) {
|
102 |
+
$options = $this->manager->all();
|
103 |
+
$alert = ['danger' => $e->getMessage()];
|
104 |
+
}
|
105 |
+
else:
|
106 |
+
$options = new OptionsCollection($imported_options);
|
107 |
+
$errors = $validator->getErrors();
|
108 |
+
$alert = ['danger' => $errors];
|
109 |
+
endif;
|
110 |
+
else:
|
111 |
+
$options = $this->manager->all();
|
112 |
+
$alert = ['danger' => 'No import file selected'];
|
113 |
+
endif;
|
114 |
+
|
115 |
+
return $this->view->render(
|
116 |
+
'admin/main.html.twig',
|
117 |
+
[
|
118 |
+
'options' => $options,
|
119 |
+
'alert' => $alert,
|
120 |
+
'nav_menus' => $nav_menus,
|
121 |
+
'location_menus' => $location_menus,
|
122 |
+
'errors' => $errors
|
123 |
+
]
|
124 |
+
);
|
125 |
+
}
|
126 |
+
|
127 |
+
public function export() {
|
128 |
+
return json_encode(
|
129 |
+
$this->manager->all()->toArray()
|
130 |
+
);
|
131 |
+
}
|
132 |
+
|
133 |
+
}
|
app/Controllers/FrontController.php
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Controllers;
|
4 |
+
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
+
use ResponsiveMenu\View\View;
|
6 |
+
use ResponsiveMenu\Management\OptionManager;
|
7 |
+
use ResponsiveMenu\Formatters\Minifier;
|
8 |
+
|
9 |
+
class FrontController {
|
10 |
+
|
11 |
+
public function __construct(OptionManager $manager, View $view) {
|
12 |
+
$this->manager = $manager;
|
13 |
+
$this->view = $view;
|
14 |
+
}
|
15 |
+
|
16 |
+
public function index() {
|
17 |
+
$options = $this->manager->all();
|
18 |
+
$this->buildFrontEnd($options);
|
19 |
+
}
|
20 |
+
|
21 |
+
public function preview() {
|
22 |
+
return $this->view->render('preview.html.twig');
|
23 |
+
}
|
24 |
+
|
25 |
+
private function buildFrontEnd(OptionsCollection $options) {
|
26 |
+
add_filter('body_class', function($classes) use($options) {
|
27 |
+
$classes[] = 'responsive-menu-' . $options['animation_type'] . '-' . $options['menu_appear_from'];
|
28 |
+
return $classes;
|
29 |
+
});
|
30 |
+
|
31 |
+
if($options['external_files'] == 'on'):
|
32 |
+
$css_file = plugins_url() . '/responsive-menu-data/css/responsive-menu-' . get_current_blog_id() . '.css';
|
33 |
+
$js_file = plugins_url() . '/responsive-menu-data/js/responsive-menu-' . get_current_blog_id() . '.js';
|
34 |
+
wp_enqueue_style('responsive-menu', $css_file, null, false);
|
35 |
+
wp_enqueue_script('responsive-menu', $js_file, ['jquery'], false, $options['scripts_in_footer'] == 'on' ? true : false);
|
36 |
+
else:
|
37 |
+
add_action('wp_head', function() use($options) {
|
38 |
+
$css_data = $this->view->render('css/app.css.twig', ['options' => $options]);
|
39 |
+
if($options['minify_scripts'] == 'on')
|
40 |
+
$css_data = Minifier::minify($css_data);
|
41 |
+
|
42 |
+
echo '<style>' . $css_data . '</style>';
|
43 |
+
}, 100);
|
44 |
+
|
45 |
+
add_action($options['scripts_in_footer'] == 'on' ? 'wp_footer' : 'wp_head', function() use($options) {
|
46 |
+
$js_data = $this->view->render('js/app.js.twig', ['options' => $options]);
|
47 |
+
if($options['minify_scripts'] == 'on')
|
48 |
+
$js_data = Minifier::minify($js_data);
|
49 |
+
|
50 |
+
echo '<script>' . $js_data . '</script>';
|
51 |
+
}, 100);
|
52 |
+
endif;
|
53 |
+
|
54 |
+
if($options['shortcode'] == 'on'):
|
55 |
+
add_shortcode('responsive_menu', function($atts) use($options) {
|
56 |
+
|
57 |
+
if(is_array($atts))
|
58 |
+
$merged_options = array_merge($options->toArray(), $atts);
|
59 |
+
else
|
60 |
+
$merged_options = $options->toArray();
|
61 |
+
|
62 |
+
$new_collection = new OptionsCollection($merged_options);
|
63 |
+
return $this->view->render('app.html.twig', ['options' => $new_collection]);
|
64 |
+
});
|
65 |
+
else:
|
66 |
+
add_action('wp_footer', function() use($options) {
|
67 |
+
echo $this->view->render('app.html.twig', ['options' => $options]);
|
68 |
+
});
|
69 |
+
endif;
|
70 |
+
|
71 |
+
}
|
72 |
+
|
73 |
+
}
|
app/Database/Database.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Database;
|
4 |
+
|
5 |
+
class Database {
|
6 |
+
|
7 |
+
public function __construct($db_base) {
|
8 |
+
$this->db = $db_base;
|
9 |
+
}
|
10 |
+
|
11 |
+
public function all($table) {
|
12 |
+
$results = $this->db->get_results("SELECT * FROM {$this->db->prefix}{$table}", ARRAY_A);
|
13 |
+
$flattened = [];
|
14 |
+
foreach($results as $result)
|
15 |
+
$flattened[$result['name']] = $result['value'];
|
16 |
+
return $flattened;
|
17 |
+
}
|
18 |
+
|
19 |
+
public function update($table, array $to_update, array $where) {
|
20 |
+
return $this->db->update($this->db->prefix . $table, $to_update, $where);
|
21 |
+
}
|
22 |
+
|
23 |
+
public function delete($table, $name) {
|
24 |
+
return $this->db->delete($this->db->prefix . $table, $name);
|
25 |
+
}
|
26 |
+
|
27 |
+
public function insert($table, array $arguments) {
|
28 |
+
return $this->db->insert($this->db->prefix . $table, $arguments);
|
29 |
+
}
|
30 |
+
|
31 |
+
}
|
app/Database/Migration.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Database;
|
4 |
+
use ResponsiveMenu\Management\OptionManager;
|
5 |
+
|
6 |
+
class Migration {
|
7 |
+
|
8 |
+
private $manager;
|
9 |
+
private $old_version;
|
10 |
+
private $new_version;
|
11 |
+
private $defaults;
|
12 |
+
|
13 |
+
public function __construct(OptionManager $manager, $old_version, $new_version, $defaults) {
|
14 |
+
$this->manager = $manager;
|
15 |
+
$this->old_version = $old_version;
|
16 |
+
$this->new_version = $new_version;
|
17 |
+
$this->defaults = $defaults;
|
18 |
+
}
|
19 |
+
|
20 |
+
public function needsTable() {
|
21 |
+
return substr($this->old_version, 0, 1) < 3;
|
22 |
+
}
|
23 |
+
|
24 |
+
public function needsUpdate() {
|
25 |
+
return version_compare($this->old_version, $this->new_version, '<');
|
26 |
+
}
|
27 |
+
|
28 |
+
public function addNewOptions() {
|
29 |
+
return $this->manager->createOptions(array_diff_key($this->defaults, $this->manager->all()->toArray()));
|
30 |
+
}
|
31 |
+
|
32 |
+
public function tidyUpOptions() {
|
33 |
+
return $this->manager->removeOptions(array_diff_key($this->manager->all()->toArray(), $this->defaults));
|
34 |
+
}
|
35 |
+
|
36 |
+
}
|
app/Formatters/Minifier.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Formatters;
|
4 |
+
|
5 |
+
class Minifier {
|
6 |
+
|
7 |
+
public static function minify($data) {
|
8 |
+
|
9 |
+
/* remove comments */
|
10 |
+
$minified = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $data);
|
11 |
+
|
12 |
+
/* remove tabs, spaces, newlines, etc. */
|
13 |
+
$minified = str_replace(array("\r\n","\r","\n","\t",' ',' ',' '), '', $minified);
|
14 |
+
|
15 |
+
/* remove other spaces before/after ; */
|
16 |
+
$minified = preg_replace(array('(( )+{)','({( )+)'), '{', $minified);
|
17 |
+
$minified = preg_replace(array('(( )+})','(}( )+)','(;( )*})'), '}', $minified);
|
18 |
+
$minified = preg_replace(array('(;( )+)','(( )+;)'), ';', $minified);
|
19 |
+
|
20 |
+
return $minified;
|
21 |
+
|
22 |
+
}
|
23 |
+
|
24 |
+
}
|
app/Management/OptionManager.php
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Management;
|
4 |
+
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
+
use ResponsiveMenu\Database\Database;
|
6 |
+
|
7 |
+
class OptionManager {
|
8 |
+
|
9 |
+
private $db;
|
10 |
+
private $default_options;
|
11 |
+
|
12 |
+
public function __construct(Database $db, $default_options) {
|
13 |
+
$this->db = $db;
|
14 |
+
$this->default_options = $default_options;
|
15 |
+
}
|
16 |
+
|
17 |
+
public function all() {
|
18 |
+
$options = $this->db->all('responsive_menu');
|
19 |
+
return new OptionsCollection($options);
|
20 |
+
}
|
21 |
+
|
22 |
+
public function updateOptions(array $options) {
|
23 |
+
$updated_options = $this->combineOptions($options);
|
24 |
+
foreach($updated_options as $name => $val):
|
25 |
+
$val = is_array($val) ? json_encode($val) : $val;
|
26 |
+
$val = stripslashes($val);
|
27 |
+
$updated_options[$name] = $val;
|
28 |
+
$this->db->update('responsive_menu', ['value' => $val], ['name' => $name]);
|
29 |
+
endforeach;
|
30 |
+
return new OptionsCollection($updated_options);
|
31 |
+
}
|
32 |
+
|
33 |
+
public function createOptions(array $options) {
|
34 |
+
$updated_options = $this->combineOptions($options);
|
35 |
+
foreach($options as $name => $val):
|
36 |
+
$val = is_array($val) ? json_encode($val) : $val;
|
37 |
+
$val = stripslashes($val);
|
38 |
+
$updated_options[$name] = $val;
|
39 |
+
$this->db->insert('responsive_menu', ['name' => $name, 'value' => $val]);
|
40 |
+
endforeach;
|
41 |
+
return new OptionsCollection($updated_options);
|
42 |
+
}
|
43 |
+
|
44 |
+
public function removeOptions(array $options) {
|
45 |
+
$updated_options = $this->combineOptions($options);
|
46 |
+
foreach($options as $name => $val):
|
47 |
+
$val = is_array($val) ? json_encode($val) : $val;
|
48 |
+
$val = stripslashes($val);
|
49 |
+
$updated_options[$name] = $val;
|
50 |
+
unset($updated_options[$name]);
|
51 |
+
$this->db->delete('responsive_menu', ['name' => $name]);
|
52 |
+
endforeach;
|
53 |
+
return new OptionsCollection($updated_options);
|
54 |
+
}
|
55 |
+
|
56 |
+
public function buildFromArray(array $options) {
|
57 |
+
$new_options = $this->combineOptions($options);
|
58 |
+
foreach($options as $name => $val):
|
59 |
+
$val = is_array($val) ? json_encode($val) : $val;
|
60 |
+
$val = stripslashes($val);
|
61 |
+
$new_options[$name] = $val;
|
62 |
+
endforeach;
|
63 |
+
return new OptionsCollection($new_options);
|
64 |
+
}
|
65 |
+
|
66 |
+
private function combineOptions($new_options) {
|
67 |
+
return array_merge($this->default_options, $new_options);
|
68 |
+
}
|
69 |
+
|
70 |
+
}
|
app/Tasks/UpdateOptionsTask.php
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Tasks;
|
4 |
+
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
+
use ResponsiveMenu\Formatters\Minifier;
|
6 |
+
use ResponsiveMenu\View\View;
|
7 |
+
|
8 |
+
class UpdateOptionsTask {
|
9 |
+
|
10 |
+
private $translatables = [
|
11 |
+
'menu_to_use',
|
12 |
+
'button_title',
|
13 |
+
'menu_title',
|
14 |
+
'menu_title_link',
|
15 |
+
'menu_additional_content'
|
16 |
+
];
|
17 |
+
|
18 |
+
public function run(OptionsCollection $options, View $view) {
|
19 |
+
/*
|
20 |
+
* Build CSS and Js files
|
21 |
+
*
|
22 |
+
*/
|
23 |
+
if($options['external_files'] == 'on'):
|
24 |
+
|
25 |
+
$base_dir = dirname(dirname(dirname(dirname(__FILE__)))) . '/responsive-menu-data';
|
26 |
+
|
27 |
+
if(!is_dir($base_dir))
|
28 |
+
if(!mkdir($base_dir))
|
29 |
+
throw new \Exception('You don\'t have permissions to create data folder - please check permissions.');
|
30 |
+
|
31 |
+
if(!is_dir($base_dir . '/css'))
|
32 |
+
if(!mkdir($base_dir . '/css'))
|
33 |
+
throw new \Exception('You don\'t have permissions to create CSS data folder - please check permissions.');
|
34 |
+
|
35 |
+
if(!is_dir($base_dir . '/js'))
|
36 |
+
if(!mkdir($base_dir . '/js'))
|
37 |
+
throw new \Exception('You don\'t have permissions to create JS data folder - please check permissions.');
|
38 |
+
|
39 |
+
$css_file = $base_dir . '/css/responsive-menu-' . get_current_blog_id() . '.css';
|
40 |
+
$css_data = $view->render('css/app.css.twig', ['options' => $options]);
|
41 |
+
|
42 |
+
if($options['minify_scripts'] == 'on')
|
43 |
+
$css_data = Minifier::minify($css_data);
|
44 |
+
|
45 |
+
if(!file_put_contents($css_file, $css_data))
|
46 |
+
throw new \Exception('You don\'t have permissions to write external CSS file - please check permissions.');
|
47 |
+
|
48 |
+
$js_file = $base_dir . '/js/responsive-menu-' . get_current_blog_id() . '.js';
|
49 |
+
$js_data = $view->render('js/app.js.twig', ['options' => $options]);
|
50 |
+
|
51 |
+
if($options['minify_scripts'] == 'on')
|
52 |
+
$js_data = Minifier::minify($js_data);
|
53 |
+
|
54 |
+
if(!file_put_contents($js_file, $js_data)):
|
55 |
+
throw new \Exception('You don\'t have permissions to write external JS file - please check permissions.');
|
56 |
+
endif;
|
57 |
+
|
58 |
+
else:
|
59 |
+
/*
|
60 |
+
* TODO: Do some tidy up like removing external files if this option is not set - be a good citizen!
|
61 |
+
*/
|
62 |
+
endif;
|
63 |
+
|
64 |
+
/*
|
65 |
+
* Update translations for WPML
|
66 |
+
*/
|
67 |
+
foreach($this->translatables as $option_name)
|
68 |
+
if(isset($options[$option_name]))
|
69 |
+
do_action('wpml_register_single_string', 'Responsive Menu', $option_name, $options[$option_name]);
|
70 |
+
|
71 |
+
}
|
72 |
+
|
73 |
+
}
|
app/Validation/Validator.php
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Validation;
|
4 |
+
|
5 |
+
class Validator {
|
6 |
+
|
7 |
+
private $errors;
|
8 |
+
|
9 |
+
public function validate($options) {
|
10 |
+
foreach($this->validation_map as $validator_name => $options_list):
|
11 |
+
foreach($options_list as $option):
|
12 |
+
if(isset($options[$option])):
|
13 |
+
$validator_obj = 'ResponsiveMenu\Validation\Validators\\' . $validator_name;
|
14 |
+
$validator = new $validator_obj($options[$option]);
|
15 |
+
if(!$validator->validate()):
|
16 |
+
$nice_name = str_replace('_', ' ', ucwords($option));
|
17 |
+
$this->errors[$option][] = 'Validation failed on <a class="validation-error" href="#responsive-menu-' . str_replace('_', '-', $option) . '">' . $nice_name . '</a>: ' . $validator->getErrorMessage();
|
18 |
+
endif;
|
19 |
+
endif;
|
20 |
+
endforeach;
|
21 |
+
endforeach;
|
22 |
+
|
23 |
+
if(!empty($this->errors))
|
24 |
+
return false;
|
25 |
+
|
26 |
+
return true;
|
27 |
+
}
|
28 |
+
|
29 |
+
public function getErrors() {
|
30 |
+
return $this->errors;
|
31 |
+
}
|
32 |
+
|
33 |
+
private $validation_map = [
|
34 |
+
|
35 |
+
// Numeric Validators
|
36 |
+
'Numeric' => [
|
37 |
+
'breakpoint',
|
38 |
+
'button_line_width',
|
39 |
+
'button_line_height',
|
40 |
+
'button_line_margin',
|
41 |
+
'button_width',
|
42 |
+
'button_height',
|
43 |
+
'button_top',
|
44 |
+
'animation_speed',
|
45 |
+
'transition_speed',
|
46 |
+
'button_font_size',
|
47 |
+
'button_title_line_height',
|
48 |
+
'menu_width',
|
49 |
+
'menu_title_font_size',
|
50 |
+
'menu_border_width',
|
51 |
+
'menu_font_size',
|
52 |
+
'menu_links_height',
|
53 |
+
'submenu_arrow_height',
|
54 |
+
'submenu_arrow_width',
|
55 |
+
'header_bar_height',
|
56 |
+
'header_bar_font_size',
|
57 |
+
'single_menu_height',
|
58 |
+
'single_menu_font_size',
|
59 |
+
'single_menu_submenu_font_size',
|
60 |
+
'single_menu_submenu_height',
|
61 |
+
],
|
62 |
+
|
63 |
+
// Positive Digits
|
64 |
+
'Positive' => [
|
65 |
+
'breakpoint',
|
66 |
+
],
|
67 |
+
|
68 |
+
// Colour Validators
|
69 |
+
'Colour' => [
|
70 |
+
'button_background_colour',
|
71 |
+
'button_background_colour_hover',
|
72 |
+
'button_line_colour',
|
73 |
+
'button_text_colour',
|
74 |
+
'menu_background_colour',
|
75 |
+
'menu_item_background_colour',
|
76 |
+
'menu_item_background_hover_colour',
|
77 |
+
'menu_item_border_colour',
|
78 |
+
'menu_item_border_colour_hover',
|
79 |
+
'menu_title_background_colour',
|
80 |
+
'menu_title_background_hover_colour',
|
81 |
+
'menu_current_item_background_colour',
|
82 |
+
'menu_current_item_background_hover_colour',
|
83 |
+
'menu_current_item_border_colour',
|
84 |
+
'menu_current_item_border_hover_colour',
|
85 |
+
'menu_title_colour',
|
86 |
+
'menu_title_hover_colour',
|
87 |
+
'menu_link_colour',
|
88 |
+
'menu_link_hover_colour',
|
89 |
+
'menu_current_link_colour',
|
90 |
+
'menu_current_link_hover_colour',
|
91 |
+
'menu_sub_arrow_border_colour',
|
92 |
+
'menu_sub_arrow_border_hover_colour',
|
93 |
+
'menu_sub_arrow_border_colour_active',
|
94 |
+
'menu_sub_arrow_border_hover_colour_active',
|
95 |
+
'menu_sub_arrow_background_colour',
|
96 |
+
'menu_sub_arrow_background_hover_colour',
|
97 |
+
'menu_sub_arrow_background_colour_active',
|
98 |
+
'menu_sub_arrow_background_hover_colour_active',
|
99 |
+
'menu_sub_arrow_shape_colour',
|
100 |
+
'menu_sub_arrow_shape_hover_colour',
|
101 |
+
'menu_sub_arrow_shape_colour_active',
|
102 |
+
'menu_sub_arrow_shape_hover_colour_active',
|
103 |
+
'menu_additional_content_colour',
|
104 |
+
'menu_overlay_colour',
|
105 |
+
'menu_search_box_text_colour',
|
106 |
+
'menu_search_box_border_colour',
|
107 |
+
'menu_search_box_background_colour',
|
108 |
+
'menu_search_box_placeholder_colour',
|
109 |
+
'single_menu_item_link_colour',
|
110 |
+
'single_menu_item_link_colour_hover',
|
111 |
+
'single_menu_item_background_colour',
|
112 |
+
'single_menu_item_background_colour_hover',
|
113 |
+
'single_menu_item_submenu_link_colour',
|
114 |
+
'single_menu_item_submenu_link_colour_hover',
|
115 |
+
'single_menu_item_submenu_background_colour',
|
116 |
+
'single_menu_item_submenu_background_colour_hover',
|
117 |
+
'header_bar_background_color',
|
118 |
+
'header_bar_text_color',
|
119 |
+
]
|
120 |
+
|
121 |
+
];
|
122 |
+
|
123 |
+
}
|
app/Validation/Validators/BaseValidator.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Validation\Validators;
|
4 |
+
|
5 |
+
abstract class BaseValidator {
|
6 |
+
|
7 |
+
protected $error;
|
8 |
+
protected $data;
|
9 |
+
|
10 |
+
abstract public function validate();
|
11 |
+
|
12 |
+
public function __construct($data) {
|
13 |
+
$this->data = $data;
|
14 |
+
}
|
15 |
+
|
16 |
+
public function getErrorMessage() {
|
17 |
+
return $this->error;
|
18 |
+
}
|
19 |
+
}
|
app/Validation/Validators/Colour.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Validation\Validators;
|
4 |
+
|
5 |
+
class Colour extends BaseValidator {
|
6 |
+
|
7 |
+
public function validate() {
|
8 |
+
$valid_colour = false;
|
9 |
+
|
10 |
+
// First check valid Hex
|
11 |
+
if(preg_match('/^#(?:[0-9a-f]{3}){1,2}$/i', $this->data))
|
12 |
+
$valid_colour = true;
|
13 |
+
|
14 |
+
// Next check valid rgba()
|
15 |
+
if(preg_match('/rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d*(?:\.\d+)?)\)/i', $this->data))
|
16 |
+
$valid_colour = true;
|
17 |
+
|
18 |
+
if(!$valid_colour)
|
19 |
+
$this->error = 'Invalid colour value';
|
20 |
+
|
21 |
+
return $valid_colour;
|
22 |
+
}
|
23 |
+
|
24 |
+
}
|
app/Validation/Validators/Numeric.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Validation\Validators;
|
4 |
+
|
5 |
+
class Numeric extends BaseValidator {
|
6 |
+
|
7 |
+
public function validate() {
|
8 |
+
$valid_integer = false;
|
9 |
+
|
10 |
+
if(is_numeric($this->data))
|
11 |
+
$valid_integer = true;
|
12 |
+
|
13 |
+
if(!$valid_integer)
|
14 |
+
$this->error = 'Invalid number';
|
15 |
+
|
16 |
+
return $valid_integer;
|
17 |
+
}
|
18 |
+
|
19 |
+
}
|
app/Validation/Validators/Positive.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Validation\Validators;
|
4 |
+
|
5 |
+
class Positive extends BaseValidator {
|
6 |
+
|
7 |
+
public function validate() {
|
8 |
+
$is_positive = false;
|
9 |
+
|
10 |
+
if($this->data >= 0)
|
11 |
+
$is_positive = true;
|
12 |
+
|
13 |
+
if(!$is_positive)
|
14 |
+
$this->error = 'Number must be 0 or positive';
|
15 |
+
|
16 |
+
return $is_positive;
|
17 |
+
}
|
18 |
+
|
19 |
+
}
|
app/View/View.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\View;
|
4 |
+
use \Twig_Environment;
|
5 |
+
|
6 |
+
class View {
|
7 |
+
|
8 |
+
protected $twig;
|
9 |
+
|
10 |
+
public function __construct(Twig_Environment $twig) {
|
11 |
+
$this->twig = $twig;
|
12 |
+
}
|
13 |
+
|
14 |
+
public function render($location, $options = []) {
|
15 |
+
return $this->twig->render($location, $options);
|
16 |
+
}
|
17 |
+
|
18 |
+
}
|
app/Walkers/Walker.php
ADDED
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ResponsiveMenu\Walkers;
|
4 |
+
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
+
|
6 |
+
class Walker extends \Walker_Nav_Menu {
|
7 |
+
|
8 |
+
private $current_item;
|
9 |
+
|
10 |
+
public function __construct(OptionsCollection $options) {
|
11 |
+
$this->options = $options;
|
12 |
+
}
|
13 |
+
|
14 |
+
public function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
|
15 |
+
|
16 |
+
$this->setCurrentItem($item);
|
17 |
+
|
18 |
+
$classes = empty($item->classes) ? array() : (array) $item->classes;
|
19 |
+
$responsive_menu_classes = $classes;
|
20 |
+
|
21 |
+
# Turn into our Responsive Menu Classes
|
22 |
+
foreach($classes as $class):
|
23 |
+
switch($class):
|
24 |
+
case 'menu-item': $responsive_menu_classes[] = 'responsive-menu-item'; break;
|
25 |
+
case 'current-menu-item': $responsive_menu_classes[] = 'responsive-menu-current-item'; break;
|
26 |
+
case 'menu-item-has-children': $responsive_menu_classes[] = 'responsive-menu-item-has-children'; break;
|
27 |
+
case 'current-menu-parent': $responsive_menu_classes[] = 'responsive-menu-item-current-parent'; break;
|
28 |
+
case 'current-menu-ancestor': $responsive_menu_classes[] = 'responsive-menu-item-current-ancestor'; break;
|
29 |
+
endswitch;
|
30 |
+
endforeach;
|
31 |
+
|
32 |
+
/* Clear child class if we are at the final depth level */
|
33 |
+
if(isset($responsive_menu_classes)):
|
34 |
+
if($depth + 1 == $this->options['menu_depth'] && ($key = array_search('responsive-menu-item-has-children', $responsive_menu_classes)) !== false) {
|
35 |
+
unset($responsive_menu_classes[$key]);
|
36 |
+
}
|
37 |
+
endif;
|
38 |
+
|
39 |
+
$class_names = join(' ', array_unique($responsive_menu_classes));
|
40 |
+
$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
|
41 |
+
|
42 |
+
$id = ' id="responsive-menu-item-' . esc_attr( $item->ID ) . '"';
|
43 |
+
|
44 |
+
$output .= '<li' . $id . $class_names .'>';
|
45 |
+
|
46 |
+
$atts = array();
|
47 |
+
$atts['title'] = ! empty( $item->attr_title ) ? $item->attr_title : '';
|
48 |
+
$atts['target'] = ! empty( $item->target ) ? $item->target : '';
|
49 |
+
$atts['rel'] = ! empty( $item->xfn ) ? $item->xfn : '';
|
50 |
+
$atts['href'] = ! empty( $item->url ) ? $item->url : '';
|
51 |
+
$atts['class'] = 'responsive-menu-item-link';
|
52 |
+
|
53 |
+
$atts = apply_filters('nav_menu_link_attributes', $atts, $item, $args, $depth);
|
54 |
+
|
55 |
+
$attributes = '';
|
56 |
+
foreach ($atts as $attr => $value) {
|
57 |
+
if (!empty( $value)) {
|
58 |
+
$value = ('href' === $attr ) ? esc_url( $value) : esc_attr($value);
|
59 |
+
$attributes .= ' ' . $attr . '="' . $value . '"';
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
$title = apply_filters('the_title', $item->title, $item->ID);
|
64 |
+
$title = apply_filters('nav_menu_item_title', $title, $item, $args, $depth);
|
65 |
+
|
66 |
+
/* Calculate which arrow to show */
|
67 |
+
if(in_array('responsive-menu-item-has-children', $responsive_menu_classes)):
|
68 |
+
$inactive_arrow = '<div class="responsive-menu-subarrow">' . $this->options->getInActiveArrow() . '</div>';
|
69 |
+
$active_arrow = '<div class="responsive-menu-subarrow responsive-menu-subarrow-active">' . $this->options->getActiveArrow() . '</div>';
|
70 |
+
if($this->options['auto_expand_all_submenus'] == 'on'):
|
71 |
+
$initial_arrow = $active_arrow;
|
72 |
+
elseif(
|
73 |
+
$this->options['auto_expand_current_submenus'] == 'on' && (in_array('responsive-menu-item-current-parent', $responsive_menu_classes)
|
74 |
+
|| in_array('responsive-menu-item-current-ancestor', $responsive_menu_classes))):
|
75 |
+
$initial_arrow = $active_arrow;
|
76 |
+
else:
|
77 |
+
$initial_arrow = $inactive_arrow;
|
78 |
+
endif;
|
79 |
+
else:
|
80 |
+
$initial_arrow = '';
|
81 |
+
endif;
|
82 |
+
|
83 |
+
/* Clear Arrow if we are at the final depth level */
|
84 |
+
if($depth + 1 == $this->options['menu_depth'])
|
85 |
+
$initial_arrow = '';
|
86 |
+
|
87 |
+
$item_output = '<a'. $attributes .'>';
|
88 |
+
$item_output .= $title;
|
89 |
+
$item_output .= $initial_arrow;
|
90 |
+
$item_output .= '</a>';
|
91 |
+
|
92 |
+
$output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args);
|
93 |
+
|
94 |
+
}
|
95 |
+
|
96 |
+
public function start_lvl(&$output, $depth = 0, $args = array()) {
|
97 |
+
$output .= "<ul class='responsive-menu-submenu responsive-menu-submenu-depth-" . ($depth + 1) . $this->getSubmenuClassOpenOrNot() . "'>";
|
98 |
+
}
|
99 |
+
|
100 |
+
public function end_el(&$output, $item, $depth = 0, $args = array()) {
|
101 |
+
$output .= "</li>";
|
102 |
+
}
|
103 |
+
|
104 |
+
public function end_lvl(&$output, $depth = 0, $args = array()) {
|
105 |
+
$output .= "</ul>";
|
106 |
+
}
|
107 |
+
|
108 |
+
public function setCurrentItem($item) {
|
109 |
+
$this->current_item = $item;
|
110 |
+
}
|
111 |
+
|
112 |
+
public function getCurrentItem() {
|
113 |
+
return $this->current_item;
|
114 |
+
}
|
115 |
+
|
116 |
+
public function getSubmenuClassOpenOrNot() {
|
117 |
+
return $this->expandAllSubmenuOptionsIsOn() || $this->expandCurrentSubmenuOnAndItemIsParent() ? ' responsive-menu-submenu-open' : '';
|
118 |
+
}
|
119 |
+
|
120 |
+
public function expandAllSubmenuOptionsIsOn() {
|
121 |
+
return $this->options['auto_expand_all_submenus'] == 'on';
|
122 |
+
}
|
123 |
+
|
124 |
+
public function expandCurrentSubmenuOnAndItemIsParent() {
|
125 |
+
return ($this->options['auto_expand_current_submenus'] == 'on')
|
126 |
+
&& ($this->getCurrentItem()->current_item_ancestor || $this->getCurrentItem()->current_item_parent);
|
127 |
+
}
|
128 |
+
|
129 |
+
}
|
autoload.php
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
require_once dirname(__FILE__) . '/src/app/Mappers/scss.inc.php';
|
4 |
-
|
5 |
-
spl_autoload_register( function( $class_name ) {
|
6 |
-
|
7 |
-
$strip_namespace = str_replace( 'ResponsiveMenu\\', '', $class_name );
|
8 |
-
$file_name = str_replace( '\\', '/', $strip_namespace );
|
9 |
-
|
10 |
-
$file = __DIR__ . '/src/app/' . $file_name . '.php';
|
11 |
-
|
12 |
-
if(file_exists($file))
|
13 |
-
include $file;
|
14 |
-
|
15 |
-
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
composer.json
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"require": {
|
3 |
+
"twig/twig": "1.33.0"
|
4 |
+
},
|
5 |
+
"autoload": {
|
6 |
+
"psr-4": {
|
7 |
+
"ResponsiveMenu\\": "app/"
|
8 |
+
}
|
9 |
+
}
|
10 |
+
}
|
composer.lock
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"_readme": [
|
3 |
+
"This file locks the dependencies of your project to a known state",
|
4 |
+
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
5 |
+
"This file is @generated automatically"
|
6 |
+
],
|
7 |
+
"hash": "802aa0021594e5acc4c74c035325ace1",
|
8 |
+
"content-hash": "3e0253c4e4a1ebc6bc87d8ca2e86e719",
|
9 |
+
"packages": [
|
10 |
+
{
|
11 |
+
"name": "twig/twig",
|
12 |
+
"version": "v1.33.0",
|
13 |
+
"source": {
|
14 |
+
"type": "git",
|
15 |
+
"url": "https://github.com/twigphp/Twig.git",
|
16 |
+
"reference": "05cf49921b13f6f01d3cfdf9018cfa7a8086fd5a"
|
17 |
+
},
|
18 |
+
"dist": {
|
19 |
+
"type": "zip",
|
20 |
+
"url": "https://api.github.com/repos/twigphp/Twig/zipball/05cf49921b13f6f01d3cfdf9018cfa7a8086fd5a",
|
21 |
+
"reference": "05cf49921b13f6f01d3cfdf9018cfa7a8086fd5a",
|
22 |
+
"shasum": ""
|
23 |
+
},
|
24 |
+
"require": {
|
25 |
+
"php": ">=5.2.7"
|
26 |
+
},
|
27 |
+
"require-dev": {
|
28 |
+
"psr/container": "^1.0",
|
29 |
+
"symfony/debug": "~2.7",
|
30 |
+
"symfony/phpunit-bridge": "~3.3@dev"
|
31 |
+
},
|
32 |
+
"type": "library",
|
33 |
+
"extra": {
|
34 |
+
"branch-alias": {
|
35 |
+
"dev-master": "1.33-dev"
|
36 |
+
}
|
37 |
+
},
|
38 |
+
"autoload": {
|
39 |
+
"psr-0": {
|
40 |
+
"Twig_": "lib/"
|
41 |
+
}
|
42 |
+
},
|
43 |
+
"notification-url": "https://packagist.org/downloads/",
|
44 |
+
"license": [
|
45 |
+
"BSD-3-Clause"
|
46 |
+
],
|
47 |
+
"authors": [
|
48 |
+
{
|
49 |
+
"name": "Fabien Potencier",
|
50 |
+
"email": "fabien@symfony.com",
|
51 |
+
"homepage": "http://fabien.potencier.org",
|
52 |
+
"role": "Lead Developer"
|
53 |
+
},
|
54 |
+
{
|
55 |
+
"name": "Armin Ronacher",
|
56 |
+
"email": "armin.ronacher@active-4.com",
|
57 |
+
"role": "Project Founder"
|
58 |
+
},
|
59 |
+
{
|
60 |
+
"name": "Twig Team",
|
61 |
+
"homepage": "http://twig.sensiolabs.org/contributors",
|
62 |
+
"role": "Contributors"
|
63 |
+
}
|
64 |
+
],
|
65 |
+
"description": "Twig, the flexible, fast, and secure template language for PHP",
|
66 |
+
"homepage": "http://twig.sensiolabs.org",
|
67 |
+
"keywords": [
|
68 |
+
"templating"
|
69 |
+
],
|
70 |
+
"time": "2017-03-22 15:40:09"
|
71 |
+
}
|
72 |
+
],
|
73 |
+
"packages-dev": [],
|
74 |
+
"aliases": [],
|
75 |
+
"minimum-stability": "stable",
|
76 |
+
"stability-flags": [],
|
77 |
+
"prefer-stable": false,
|
78 |
+
"prefer-lowest": false,
|
79 |
+
"platform": [],
|
80 |
+
"platform-dev": []
|
81 |
+
}
|
config/default_options.php
ADDED
@@ -0,0 +1,208 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
function get_responsive_menu_default_options() {
|
4 |
+
|
5 |
+
return [
|
6 |
+
|
7 |
+
'breakpoint' => 8000,
|
8 |
+
'menu_to_hide' => '',
|
9 |
+
'menu_depth' => 5,
|
10 |
+
'menu_to_use' => '',
|
11 |
+
'theme_location_menu' => '',
|
12 |
+
|
13 |
+
// Button Settings
|
14 |
+
'button_title' => null,
|
15 |
+
'button_image' => null,
|
16 |
+
'button_image_alt' => null,
|
17 |
+
'button_image_when_clicked' => null,
|
18 |
+
'button_image_alt_when_clicked' => null,
|
19 |
+
'button_font' => null,
|
20 |
+
'button_font_icon' => null,
|
21 |
+
'button_font_icon_when_clicked' => null,
|
22 |
+
'button_click_trigger' => '#responsive-menu-button',
|
23 |
+
'button_title_position' => 'left',
|
24 |
+
'button_title_line_height' => '13',
|
25 |
+
'button_title_line_height_unit' => 'px',
|
26 |
+
'button_background_colour' => '#000',
|
27 |
+
'button_background_colour_hover' => '#000',
|
28 |
+
'button_click_animation' => 'boring',
|
29 |
+
'button_line_colour' => '#fff',
|
30 |
+
'button_text_colour' => '#fff',
|
31 |
+
'button_transparent_background' => 'off',
|
32 |
+
'button_width' => 55,
|
33 |
+
'button_width_unit' => 'px',
|
34 |
+
'button_height' => 55,
|
35 |
+
'button_height_unit' => 'px',
|
36 |
+
'button_line_margin' => 5,
|
37 |
+
'button_line_margin_unit' => 'px',
|
38 |
+
'button_line_height' => 3,
|
39 |
+
'button_line_height_unit' => 'px',
|
40 |
+
'button_line_width' => 25,
|
41 |
+
'button_line_width_unit' => 'px',
|
42 |
+
'button_top' => 15,
|
43 |
+
'button_top_unit' => 'px',
|
44 |
+
'button_distance_from_side' => 5,
|
45 |
+
'button_distance_from_side_unit' => '%',
|
46 |
+
'button_left_or_right' => 'right',
|
47 |
+
'button_position_type' => 'fixed',
|
48 |
+
'button_push_with_animation' => 'off',
|
49 |
+
'button_font_size' => 14,
|
50 |
+
'button_font_size_unit' => 'px',
|
51 |
+
|
52 |
+
// Animation Settings
|
53 |
+
'animation_type' => 'slide',
|
54 |
+
'page_wrapper' => null,
|
55 |
+
'animation_speed' => 0.5,
|
56 |
+
'transition_speed' => 0.5,
|
57 |
+
|
58 |
+
// Menu Settings
|
59 |
+
'active_arrow_shape' => '▲',
|
60 |
+
'inactive_arrow_shape' => '▼',
|
61 |
+
'active_arrow_image' => '',
|
62 |
+
'active_arrow_image_alt' => '',
|
63 |
+
'inactive_arrow_image' => '',
|
64 |
+
'inactive_arrow_image_alt' => '',
|
65 |
+
'active_arrow_font_icon' => '',
|
66 |
+
'inactive_arrow_font_icon' => '',
|
67 |
+
'arrow_position' => 'right',
|
68 |
+
'submenu_arrow_width' => '40',
|
69 |
+
'submenu_arrow_width_unit' => 'px',
|
70 |
+
'submenu_arrow_height' => '40',
|
71 |
+
'submenu_arrow_height_unit' => 'px',
|
72 |
+
'accordion_animation' => 'off',
|
73 |
+
'auto_expand_all_submenus' => 'off',
|
74 |
+
'auto_expand_current_submenus' => 'off',
|
75 |
+
|
76 |
+
'menu_background_colour' => '#212121',
|
77 |
+
'menu_background_image' => '',
|
78 |
+
'menu_item_background_colour' => '#212121',
|
79 |
+
'menu_item_background_hover_colour' => '#3f3f3f',
|
80 |
+
'menu_item_border_colour' => '#212121',
|
81 |
+
'menu_item_border_colour_hover' => '#212121',
|
82 |
+
'menu_title_background_colour' => '#212121',
|
83 |
+
'menu_title_background_hover_colour' => '#212121',
|
84 |
+
'menu_current_item_background_colour' => '#212121',
|
85 |
+
'menu_current_item_background_hover_colour' => '#3f3f3f',
|
86 |
+
'menu_current_item_border_colour' => '#212121',
|
87 |
+
'menu_current_item_border_hover_colour' => '#3f3f3f',
|
88 |
+
'menu_title_colour' => '#fff',
|
89 |
+
'menu_title_hover_colour' => '#fff',
|
90 |
+
'menu_link_colour' => '#fff',
|
91 |
+
'menu_link_hover_colour' => '#fff',
|
92 |
+
'menu_current_link_colour' => '#fff',
|
93 |
+
'menu_current_link_hover_colour' => '#fff',
|
94 |
+
'menu_sub_arrow_border_colour' => '#212121',
|
95 |
+
'menu_sub_arrow_border_hover_colour' => '#3f3f3f',
|
96 |
+
'menu_sub_arrow_border_colour_active' => '#212121',
|
97 |
+
'menu_sub_arrow_border_hover_colour_active' => '#3f3f3f',
|
98 |
+
'menu_sub_arrow_background_colour' => '#212121',
|
99 |
+
'menu_sub_arrow_background_hover_colour' => '#3f3f3f',
|
100 |
+
'menu_sub_arrow_background_colour_active' => '#212121',
|
101 |
+
'menu_sub_arrow_background_hover_colour_active' => '#3f3f3f',
|
102 |
+
'menu_sub_arrow_shape_colour' => '#fff',
|
103 |
+
'menu_sub_arrow_shape_hover_colour' => '#fff',
|
104 |
+
'menu_sub_arrow_shape_colour_active' => '#fff',
|
105 |
+
'menu_sub_arrow_shape_hover_colour_active' => '#fff',
|
106 |
+
'menu_font' => null,
|
107 |
+
'menu_font_size' => 13,
|
108 |
+
'menu_font_size_unit' => 'px',
|
109 |
+
'menu_title_font_size' => 13,
|
110 |
+
'menu_title_font_size_unit' => 'px',
|
111 |
+
'menu_text_alignment' => 'left',
|
112 |
+
'menu_links_height' => 40,
|
113 |
+
'menu_links_height_unit' => 'px',
|
114 |
+
'menu_border_width' => 1,
|
115 |
+
'menu_border_width_unit' => 'px',
|
116 |
+
'menu_minimum_width' => null,
|
117 |
+
'menu_minimum_width_unit' => 'px',
|
118 |
+
'menu_maximum_width' => null,
|
119 |
+
'menu_maximum_width_unit' => 'px',
|
120 |
+
'menu_auto_height' => 'off',
|
121 |
+
'menu_adjust_for_wp_admin_bar' => 'off',
|
122 |
+
'menu_additional_content' => null,
|
123 |
+
'menu_additional_content_colour' => '#fff',
|
124 |
+
'menu_title' => null,
|
125 |
+
'menu_title_image' => null,
|
126 |
+
'menu_title_image_alt' => null,
|
127 |
+
'menu_title_font_icon' => null,
|
128 |
+
'menu_appear_from' => 'left',
|
129 |
+
'menu_title_link' => null,
|
130 |
+
'menu_title_link_location' => '_self',
|
131 |
+
'menu_width' => 75,
|
132 |
+
'menu_width_unit' => '%',
|
133 |
+
'menu_close_on_link_click' => 'off',
|
134 |
+
'menu_close_on_body_click' => 'off',
|
135 |
+
'menu_item_click_to_trigger_submenu' => 'off',
|
136 |
+
'menu_disable_scrolling' => 'off',
|
137 |
+
'menu_overlay' => 'off',
|
138 |
+
'menu_overlay_colour' => 'rgba(0,0,0,0.7)',
|
139 |
+
'menu_font_icons' => '',
|
140 |
+
'menu_search_box_text' => 'Search',
|
141 |
+
'menu_search_box_text_colour' => '#333',
|
142 |
+
'menu_search_box_border_colour' => '#dadada',
|
143 |
+
'menu_search_box_background_colour' => '#fff',
|
144 |
+
'menu_search_box_placeholder_colour' => '#C7C7CD',
|
145 |
+
'menu_word_wrap' => 'off',
|
146 |
+
|
147 |
+
'minify_scripts' => 'off',
|
148 |
+
'scripts_in_footer' => 'off',
|
149 |
+
'external_files' => 'off',
|
150 |
+
|
151 |
+
'shortcode' => 'off',
|
152 |
+
'mobile_only' => 'off',
|
153 |
+
'custom_walker' => null,
|
154 |
+
'custom_css' => null,
|
155 |
+
|
156 |
+
'use_single_menu' => 'off',
|
157 |
+
|
158 |
+
'single_menu_height' => '80',
|
159 |
+
'single_menu_height_unit' => 'px',
|
160 |
+
'single_menu_font' => null,
|
161 |
+
'single_menu_font_size' => '14',
|
162 |
+
'single_menu_font_size_unit' => 'px',
|
163 |
+
|
164 |
+
'single_menu_submenu_height' => '40',
|
165 |
+
'single_menu_submenu_height_unit' => 'px',
|
166 |
+
'single_menu_submenu_font' => null,
|
167 |
+
'single_menu_submenu_font_size' => '12',
|
168 |
+
'single_menu_submenu_font_size_unit' => 'px',
|
169 |
+
|
170 |
+
'single_menu_item_link_colour' => '#000000',
|
171 |
+
'single_menu_item_link_colour_hover' => '#000000',
|
172 |
+
'single_menu_item_background_colour' => '#ffffff',
|
173 |
+
'single_menu_item_background_colour_hover' => '#ffffff',
|
174 |
+
|
175 |
+
'single_menu_item_submenu_link_colour' => '#000000',
|
176 |
+
'single_menu_item_submenu_link_colour_hover' => '#000000',
|
177 |
+
'single_menu_item_submenu_background_colour' => '#ffffff',
|
178 |
+
'single_menu_item_submenu_background_colour_hover' => '#ffffff',
|
179 |
+
|
180 |
+
'use_header_bar' => 'off',
|
181 |
+
'header_bar_breakpoint' => '800',
|
182 |
+
'header_bar_logo' => null,
|
183 |
+
'header_bar_logo_alt' => '',
|
184 |
+
'header_bar_logo_link' => null,
|
185 |
+
'header_bar_title' => null,
|
186 |
+
'header_bar_html_content' => null,
|
187 |
+
'header_bar_height' => '80',
|
188 |
+
'header_bar_height_unit' => 'px',
|
189 |
+
'header_bar_font_size' => '14',
|
190 |
+
'header_bar_font_size_unit' => 'px',
|
191 |
+
'header_bar_font' => null,
|
192 |
+
'header_bar_background_color' => '#ffffff',
|
193 |
+
'header_bar_text_color' => '#ffffff',
|
194 |
+
'header_bar_position_type' => 'fixed',
|
195 |
+
|
196 |
+
'items_order' => '{"title":"on","menu":"on","search":"on","additional content":"on"}',
|
197 |
+
'header_bar_items_order' => '{"logo":"on","title":"on","search":"on","html content":"on"}',
|
198 |
+
|
199 |
+
'fade_submenus' => 'off',
|
200 |
+
'fade_submenus_side' => 'left',
|
201 |
+
'fade_submenus_delay' => 100,
|
202 |
+
'fade_submenus_speed' => 500,
|
203 |
+
|
204 |
+
'use_slide_effect' => 'off',
|
205 |
+
'slide_effect_back_to_text' => 'Back'
|
206 |
+
];
|
207 |
+
|
208 |
+
};
|
config/polylang.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
add_action('plugins_loaded', function() {
|
4 |
+
load_plugin_textdomain('responsive-menu', false, basename(dirname(dirname(dirname(__FILE__)))) . '/translations/');
|
5 |
+
});
|
6 |
+
|
7 |
+
if(is_admin()):
|
8 |
+
add_action('plugins_loaded', function() {
|
9 |
+
if(function_exists('pll_register_string')):
|
10 |
+
$options = get_responsive_menu_service('option_manager')->all();
|
11 |
+
pll_register_string('menu_to_use', $options['menu_to_use'], 'Responsive Menu');
|
12 |
+
pll_register_string('button_title', $options['button_title'], 'Responsive Menu');
|
13 |
+
pll_register_string('menu_title', $options['menu_title'], 'Responsive Menu');
|
14 |
+
pll_register_string('menu_title_link', $options['menu_title_link'], 'Responsive Menu');
|
15 |
+
pll_register_string('menu_additional_content', $options['menu_additional_content'], 'Responsive Menu');
|
16 |
+
endif;
|
17 |
+
});
|
18 |
+
endif;
|
config/routing.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if(is_admin()):
|
4 |
+
add_action('admin_menu', function() {
|
5 |
+
if(isset($_POST['responsive-menu-export'])):
|
6 |
+
header('Cache-Control: no-cache, no-store, must-revalidate');
|
7 |
+
header('Pragma: no-cache');
|
8 |
+
header('Expires: 0');
|
9 |
+
header('Content-Type: application/json; charset=utf-8');
|
10 |
+
header('Content-Disposition: attachment; filename=responsive-menu-settings.json');
|
11 |
+
$controller = get_responsive_menu_service('admin_controller');
|
12 |
+
echo $controller->export();
|
13 |
+
exit();
|
14 |
+
elseif(isset($_POST['responsive-menu-rebuild-db'])):
|
15 |
+
update_option('responsive_menu_version', '2.8.9');
|
16 |
+
endif;
|
17 |
+
add_menu_page(
|
18 |
+
'Responsive Menu',
|
19 |
+
'Responsive Menu',
|
20 |
+
'manage_options',
|
21 |
+
'responsive-menu',
|
22 |
+
function() {
|
23 |
+
$controller = get_responsive_menu_service('admin_controller');
|
24 |
+
$menus_array = [];
|
25 |
+
$location_menus = ['' => 'None'];
|
26 |
+
foreach(get_terms('nav_menu') as $menu) $menus_array[$menu->slug] = $menu->name;
|
27 |
+
foreach(get_registered_nav_menus() as $location => $menu) $location_menus[$location] = $menu;
|
28 |
+
|
29 |
+
if(isset($_POST['responsive-menu-current-page']))
|
30 |
+
update_option('responsive_menu_current_page', $_POST['responsive-menu-current-page']);
|
31 |
+
|
32 |
+
if(isset($_POST['responsive-menu-submit'])):
|
33 |
+
echo $controller->update($_POST['menu'], $menus_array, $location_menus);
|
34 |
+
elseif(isset($_POST['responsive-menu-reset'])):
|
35 |
+
echo $controller->reset(get_responsive_menu_default_options(), $menus_array, $location_menus);
|
36 |
+
elseif(isset($_POST['responsive-menu-import'])):
|
37 |
+
$file = $_FILES['responsive-menu-import-file'];
|
38 |
+
$file_options = isset($file['tmp_name']) ? (array) json_decode(file_get_contents($file['tmp_name'])) : null;
|
39 |
+
echo $controller->import($file_options, $menus_array, $location_menus);
|
40 |
+
elseif(isset($_POST['responsive-menu-rebuild-db'])):
|
41 |
+
echo $controller->rebuild($menus_array, $location_menus);
|
42 |
+
else:
|
43 |
+
echo $controller->index($menus_array, $location_menus);
|
44 |
+
endif;
|
45 |
+
},
|
46 |
+
'dashicons-menu');
|
47 |
+
});
|
48 |
+
else:
|
49 |
+
add_action('template_redirect', function() {
|
50 |
+
$controller = get_responsive_menu_service('front_controller');
|
51 |
+
if(isset($_GET['responsive-menu-preview']) && isset($_POST['menu']))
|
52 |
+
echo $controller->preview();
|
53 |
+
else
|
54 |
+
$controller->index();
|
55 |
+
});
|
56 |
+
endif;
|
config/services.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/* Horrible hack
|
4 |
+
* named something random so as not to conflict and can be accessed using the factory method at the
|
5 |
+
* bottom of this file
|
6 |
+
*
|
7 |
+
*/
|
8 |
+
$services_428734872364 = new ResponsiveMenu\Container\Container;
|
9 |
+
|
10 |
+
$services_428734872364['database'] = function($c) {
|
11 |
+
global $wpdb;
|
12 |
+
return new ResponsiveMenu\Database\Database($wpdb);
|
13 |
+
};
|
14 |
+
|
15 |
+
$services_428734872364['option_manager'] = function($c) {
|
16 |
+
return new ResponsiveMenu\Management\OptionManager(
|
17 |
+
$c['database'],
|
18 |
+
get_responsive_menu_default_options()
|
19 |
+
);
|
20 |
+
};
|
21 |
+
|
22 |
+
$services_428734872364['twig'] = function($c) {
|
23 |
+
include_once dirname(__FILE__) . '/twig.php';
|
24 |
+
return $twig;
|
25 |
+
};
|
26 |
+
|
27 |
+
$services_428734872364['view'] = function($c) {
|
28 |
+
return new ResponsiveMenu\View\View($c['twig']);
|
29 |
+
};
|
30 |
+
|
31 |
+
$services_428734872364['admin_controller'] = function($c) {
|
32 |
+
return new ResponsiveMenu\Controllers\AdminController($c['option_manager'], $c['view']);
|
33 |
+
};
|
34 |
+
|
35 |
+
$services_428734872364['front_controller'] = function($c) {
|
36 |
+
return new ResponsiveMenu\Controllers\FrontController($c['option_manager'], $c['view']);
|
37 |
+
};
|
38 |
+
|
39 |
+
function get_responsive_menu_service($service) {
|
40 |
+
global $services_428734872364;
|
41 |
+
return $services_428734872364[$service];
|
42 |
+
}
|
config/twig.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$twig = new Twig_Environment(new Twig_Loader_Filesystem([
|
4 |
+
dirname(dirname(__FILE__)) . '/views',
|
5 |
+
dirname(dirname(__FILE__)) . '/public',
|
6 |
+
]), ['autoescape' => false]);
|
7 |
+
|
8 |
+
$twig->addFilter(new Twig_SimpleFilter('shortcode', function($string) {
|
9 |
+
return do_shortcode($string);
|
10 |
+
}));
|
11 |
+
|
12 |
+
$twig->addFilter(new Twig_SimpleFilter('translate', function($string, $key) {
|
13 |
+
$translated = apply_filters('wpml_translate_single_string', $string, 'Responsive Menu', $key);
|
14 |
+
$translated = function_exists('pll__') ? pll__($translated) : $translated;
|
15 |
+
return $translated;
|
16 |
+
}));
|
17 |
+
|
18 |
+
$twig->addFilter(new Twig_SimpleFilter('json_decode', function($string) {
|
19 |
+
return json_decode($string, true);
|
20 |
+
}));
|
21 |
+
|
22 |
+
$twig->addFunction(new Twig_SimpleFunction('header_bar_items', function($items) {
|
23 |
+
if(isset($items['button']))
|
24 |
+
unset($items['button']);
|
25 |
+
return $items;
|
26 |
+
}));
|
27 |
+
|
28 |
+
$twig->addFunction(new Twig_SimpleFunction('build_menu', function($env, $options) {
|
29 |
+
|
30 |
+
$translator = $env->getFilter('translate')->getCallable();
|
31 |
+
$menu = $translator($options['menu_to_use'], 'menu_to_use');
|
32 |
+
$walker = $options['custom_walker'] ? new $options['custom_walker']($options) : new ResponsiveMenu\Walkers\Walker($options);
|
33 |
+
|
34 |
+
return wp_nav_menu(
|
35 |
+
[
|
36 |
+
'container' => '',
|
37 |
+
'menu_id' => 'responsive-menu',
|
38 |
+
'menu_class' => null,
|
39 |
+
'menu' => $menu && !$options['theme_location_menu'] ? $menu : null,
|
40 |
+
'depth' => $options['menu_depth'] ? $options['menu_depth'] : 0,
|
41 |
+
'theme_location' => $options['theme_location_menu'] ? $options['theme_location_menu'] : null,
|
42 |
+
'walker' => $walker,
|
43 |
+
'echo' => false
|
44 |
+
]
|
45 |
+
);
|
46 |
+
|
47 |
+
}, ['needs_environment' => true]));
|
48 |
+
|
49 |
+
$twig->addGlobal('search_url', function_exists('icl_get_home_url') ? icl_get_home_url() : get_home_url());
|
50 |
+
$twig->addGlobal('admin_url', get_admin_url());
|
51 |
+
$twig->addFunction(new Twig_SimpleFunction('current_page', function() {
|
52 |
+
return get_option('responsive_menu_current_page', 'initial-setup');
|
53 |
+
}));
|
54 |
+
return $twig;
|
config/wp/scripts.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* Admin scripts
|
5 |
+
*/
|
6 |
+
if(isset($_GET['page']) && $_GET['page'] == 'responsive-menu'):
|
7 |
+
add_action('admin_enqueue_scripts', function() {
|
8 |
+
wp_enqueue_media();
|
9 |
+
|
10 |
+
wp_enqueue_script('responsive-menu-bootstrap-js', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/js/admin/bootstrap.js', null, null);
|
11 |
+
wp_enqueue_style('responsive-menu-bootstrap-css', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/css/admin/bootstrap.css', null, null);
|
12 |
+
|
13 |
+
wp_enqueue_script('responsive-menu-select-js', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/js/admin/bootstrap-select.js', null, null);
|
14 |
+
wp_enqueue_style('responsive-menu-select-css', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/css/admin/bootstrap-select.css', null, null);
|
15 |
+
|
16 |
+
wp_enqueue_script('responsive-menu-checkbox-js', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/js/admin/bootstrap-toggle.js', null, null);
|
17 |
+
wp_enqueue_style('responsive-menu-checkbox-css', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/css/admin/bootstrap-toggle.css', null, null);
|
18 |
+
|
19 |
+
wp_enqueue_script('responsive-menu-file-js', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/js/admin/bootstrap-file.js', null, null);
|
20 |
+
|
21 |
+
wp_enqueue_script('responsive-menu-minicolours-js', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/js/admin/minicolours.js', null, null);
|
22 |
+
wp_enqueue_style('responsive-menu-minicolours-css', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/css/admin/minicolours.css', null, null);
|
23 |
+
|
24 |
+
wp_enqueue_script('jquery-ui-core');
|
25 |
+
|
26 |
+
wp_register_style('responsive-menu-admin-css', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/css/admin/admin.css', false, null);
|
27 |
+
wp_enqueue_style('responsive-menu-admin-css');
|
28 |
+
|
29 |
+
wp_register_script('responsive-menu-admin-js', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/js/admin/admin.js', 'jquery', null);
|
30 |
+
wp_localize_script('responsive-menu-admin-js', 'WP_HOME_URL', home_url('/'));
|
31 |
+
wp_enqueue_script('responsive-menu-admin-js');
|
32 |
+
});
|
33 |
+
endif;
|
34 |
+
|
35 |
+
/* Front End scripts */
|
36 |
+
add_action('wp_enqueue_scripts', function() {
|
37 |
+
wp_enqueue_script('jquery');
|
38 |
+
});
|
migration.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
add_action('admin_init', function() {
|
4 |
+
|
5 |
+
$options_manager = get_responsive_menu_service('option_manager');
|
6 |
+
$plugin_data = get_file_data(dirname(__FILE__) . '/responsive-menu.php', ['version']);
|
7 |
+
$new_version = $plugin_data[0];
|
8 |
+
|
9 |
+
$migration = new ResponsiveMenu\Database\Migration(
|
10 |
+
$options_manager,
|
11 |
+
get_option('responsive_menu_version'),
|
12 |
+
$new_version,
|
13 |
+
get_responsive_menu_default_options()
|
14 |
+
);
|
15 |
+
|
16 |
+
if($migration->needsTable()) {
|
17 |
+
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
18 |
+
global $wpdb;
|
19 |
+
maybe_create_table(
|
20 |
+
$wpdb->prefix . 'responsive_menu',
|
21 |
+
"CREATE TABLE " . $wpdb->prefix . "responsive_menu (
|
22 |
+
name varchar(50) NOT NULL,
|
23 |
+
value varchar(5000) DEFAULT NULL,
|
24 |
+
PRIMARY KEY (name)
|
25 |
+
) " . $wpdb->get_charset_collate() . ";"
|
26 |
+
);
|
27 |
+
}
|
28 |
+
|
29 |
+
if($migration->needsUpdate()) {
|
30 |
+
$migration->addNewOptions();
|
31 |
+
$migration->tidyUpOptions();
|
32 |
+
$task = new ResponsiveMenu\Tasks\UpdateOptionsTask();
|
33 |
+
$task->run($options_manager->all(), get_responsive_menu_service('view'));
|
34 |
+
update_option('responsive_menu_version', $new_version);
|
35 |
+
}
|
36 |
+
|
37 |
+
});
|
public/css/admin/admin.css
ADDED
@@ -0,0 +1,391 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.container-fluid #banner-area,
|
2 |
+
.container-fluid #options-area {
|
3 |
+
display: inline-block;
|
4 |
+
width: 75%;
|
5 |
+
vertical-align: top;
|
6 |
+
}
|
7 |
+
|
8 |
+
.container-fluid #banner-area {
|
9 |
+
width: 20%;
|
10 |
+
margin-left: 5%;
|
11 |
+
}
|
12 |
+
|
13 |
+
.container-fluid form.form-horizontal .input-group {
|
14 |
+
width:100%;
|
15 |
+
}
|
16 |
+
|
17 |
+
.container-fluid form.form-horizontal .input-group-btn {
|
18 |
+
width:189px;
|
19 |
+
}
|
20 |
+
|
21 |
+
.container-fluid form.form-horizontal .toggle.btn {
|
22 |
+
width: 50px !important;
|
23 |
+
}
|
24 |
+
|
25 |
+
.container-fluid form.form-horizontal label {
|
26 |
+
display: block;
|
27 |
+
width: 100%;
|
28 |
+
text-align: left;
|
29 |
+
}
|
30 |
+
|
31 |
+
.container-fluid form.form-horizontal #header-bar-items-order-container label {
|
32 |
+
text-align: center;
|
33 |
+
}
|
34 |
+
|
35 |
+
.container-fluid form.form-horizontal .bootstrap-select,
|
36 |
+
.container-fluid form.form-horizontal input,
|
37 |
+
.container-fluid form.form-horizontal textarea {
|
38 |
+
width: calc(100% - 75px) !important;
|
39 |
+
display: inline-block;
|
40 |
+
}
|
41 |
+
|
42 |
+
.container-fluid form.form-horizontal .input-group input {
|
43 |
+
width: 100% !important;
|
44 |
+
}
|
45 |
+
|
46 |
+
.container-fluid form.form-horizontal .bootstrap-filestyle,
|
47 |
+
.container-fluid form.form-horizontal input.has-unit {
|
48 |
+
width: calc(100% - 179px) !important;
|
49 |
+
}
|
50 |
+
|
51 |
+
.container-fluid form.form-horizontal .bootstrap-select.is-unit {
|
52 |
+
width: 100px !important;
|
53 |
+
}
|
54 |
+
|
55 |
+
.container-fluid form.form-horizontal td {
|
56 |
+
vertical-align: middle;
|
57 |
+
}
|
58 |
+
|
59 |
+
.container-fluid form.form-horizontal td {
|
60 |
+
padding: 15px;
|
61 |
+
}
|
62 |
+
|
63 |
+
.container-fluid form.form-horizontal ul {
|
64 |
+
margin-bottom: 0;
|
65 |
+
}
|
66 |
+
|
67 |
+
.container-fluid form.form-horizontal #font-icon-container {
|
68 |
+
width: 100%;
|
69 |
+
}
|
70 |
+
|
71 |
+
.container-fluid form.form-horizontal #font-icon-container td {
|
72 |
+
padding: 0 0 10px 0;
|
73 |
+
}
|
74 |
+
|
75 |
+
.container-fluid form.form-horizontal #font-icon-container td input {
|
76 |
+
width: 95% !important;
|
77 |
+
}
|
78 |
+
|
79 |
+
.container-fluid form.form-horizontal #font-icon-container td:first-child {
|
80 |
+
width: 150px;
|
81 |
+
}
|
82 |
+
|
83 |
+
.container-fluid form.form-horizontal .panel {
|
84 |
+
border-radius: 0;
|
85 |
+
}
|
86 |
+
|
87 |
+
.container-fluid form.form-horizontal .panel-body {
|
88 |
+
font-weight: bold;
|
89 |
+
font-size: 16px;
|
90 |
+
}
|
91 |
+
|
92 |
+
.container-fluid form.form-horizontal .glyphicon.glyphicon-ok {
|
93 |
+
color: green;
|
94 |
+
}
|
95 |
+
|
96 |
+
.container-fluid .alert,
|
97 |
+
.container-fluid ul.nav-tabs {
|
98 |
+
margin-top: 25px;
|
99 |
+
}
|
100 |
+
|
101 |
+
.container-fluid form.form-horizontal ul.nav-tabs {
|
102 |
+
margin-bottom: 25px;
|
103 |
+
}
|
104 |
+
|
105 |
+
.container-fluid form.form-horizontal ul.nav-tabs .btn-default {
|
106 |
+
margin-right: 5px;
|
107 |
+
}
|
108 |
+
|
109 |
+
.pro::before,
|
110 |
+
.semi-pro::before {
|
111 |
+
content: "PRO";
|
112 |
+
float: right;
|
113 |
+
color: #DE4B42;
|
114 |
+
font-weight: bold;
|
115 |
+
font-size: 9px;
|
116 |
+
margin-top: 10px;
|
117 |
+
border-left: 1px solid #DE4B42;
|
118 |
+
padding-left: 8px;
|
119 |
+
padding-right: 8px;
|
120 |
+
}
|
121 |
+
|
122 |
+
.semi-pro::before {
|
123 |
+
content: "SEMI PRO";
|
124 |
+
color: #333;
|
125 |
+
border-color: #333;
|
126 |
+
}
|
127 |
+
|
128 |
+
.sub-text {
|
129 |
+
color: #777;
|
130 |
+
padding-top: 5px;
|
131 |
+
font-size: 13px;
|
132 |
+
font-weight: normal;
|
133 |
+
}
|
134 |
+
|
135 |
+
.example {
|
136 |
+
padding-top: 2px;
|
137 |
+
color: dimgray;
|
138 |
+
font-size: 10px;
|
139 |
+
font-style: italic;
|
140 |
+
font-weight: normal;
|
141 |
+
}
|
142 |
+
|
143 |
+
.unit {
|
144 |
+
font-size: 12px;
|
145 |
+
margin-left: 5px;
|
146 |
+
}
|
147 |
+
|
148 |
+
|
149 |
+
.draggable {
|
150 |
+
border: 1px solid #DADADA;
|
151 |
+
border-radius: 2px;
|
152 |
+
background: #EFEFEF;
|
153 |
+
padding: 10px 0;
|
154 |
+
margin: 0;
|
155 |
+
cursor: move;
|
156 |
+
font-weight: bold;
|
157 |
+
padding-left: 65px;
|
158 |
+
box-sizing: border-box;
|
159 |
+
}
|
160 |
+
|
161 |
+
.draggable input {
|
162 |
+
display: none !important;
|
163 |
+
}
|
164 |
+
|
165 |
+
.menu-order-option-switch,
|
166 |
+
.order-option-switch {
|
167 |
+
background: #DE4B42;
|
168 |
+
color: white;
|
169 |
+
position: absolute;
|
170 |
+
left: 0;
|
171 |
+
top: 0;
|
172 |
+
bottom: 0;
|
173 |
+
line-height: 40px;
|
174 |
+
padding: 0 5px;
|
175 |
+
width: 50px;
|
176 |
+
text-align: center;
|
177 |
+
cursor: pointer;
|
178 |
+
}
|
179 |
+
|
180 |
+
.menu-order-option-switch.menu-order-option-switch-on,
|
181 |
+
.order-option-switch.order-option-switch-on {
|
182 |
+
background: green;
|
183 |
+
}
|
184 |
+
|
185 |
+
.menu-order-option-switch:after,
|
186 |
+
.order-option-switch:after {
|
187 |
+
content: "OFF";
|
188 |
+
}
|
189 |
+
|
190 |
+
.menu-order-option-switch.menu-order-option-switch-on:after,
|
191 |
+
.order-option-switch.order-option-switch-on:after {
|
192 |
+
content: "ON";
|
193 |
+
}
|
194 |
+
|
195 |
+
li.draggable {
|
196 |
+
position: relative;
|
197 |
+
}
|
198 |
+
|
199 |
+
#upgrade-banner {
|
200 |
+
padding: 25px 5%;
|
201 |
+
background: #DE4B42;
|
202 |
+
color: #fff;
|
203 |
+
border: 1px solid #D33C34;
|
204 |
+
border-radius: 2px;
|
205 |
+
text-align: center;
|
206 |
+
}
|
207 |
+
|
208 |
+
#upgrade-banner i {
|
209 |
+
margin-right: 5px;
|
210 |
+
}
|
211 |
+
|
212 |
+
#docs-banner {
|
213 |
+
background: #FAB719;
|
214 |
+
padding: 35px;
|
215 |
+
color: #333;
|
216 |
+
margin-top: 15px;
|
217 |
+
text-align: center;
|
218 |
+
}
|
219 |
+
|
220 |
+
#upgrade-banner,
|
221 |
+
#docs-banner {
|
222 |
+
font-size: 18px;
|
223 |
+
font-weight: bold;
|
224 |
+
line-height: 24px;
|
225 |
+
}
|
226 |
+
|
227 |
+
#upgrade-banner li {
|
228 |
+
list-style: none;
|
229 |
+
font-weight: bold;
|
230 |
+
font-size: 11px;
|
231 |
+
}
|
232 |
+
|
233 |
+
#docs-banner .button,
|
234 |
+
#upgrade-banner .button {
|
235 |
+
background: white;
|
236 |
+
padding: 0 25px;
|
237 |
+
height: 50px;
|
238 |
+
line-height: 50px;
|
239 |
+
font-weight: bold;
|
240 |
+
font-size: 13px;
|
241 |
+
color: #333;
|
242 |
+
display: block;
|
243 |
+
margin: auto;
|
244 |
+
width: auto;
|
245 |
+
text-align: center;
|
246 |
+
}
|
247 |
+
|
248 |
+
#docs-banner .button {
|
249 |
+
margin-top: 15px;
|
250 |
+
}
|
251 |
+
|
252 |
+
.key-container {
|
253 |
+
margin: 15px 0;
|
254 |
+
background: white;
|
255 |
+
text-align: center;
|
256 |
+
padding: 15px;
|
257 |
+
border: 1px solid #ccc;
|
258 |
+
border-radius: 2px;
|
259 |
+
}
|
260 |
+
|
261 |
+
.key-container .key-title {
|
262 |
+
font-weight: bold;
|
263 |
+
display: inline-block;
|
264 |
+
margin-right: 10px;
|
265 |
+
}
|
266 |
+
|
267 |
+
.key-container .key {
|
268 |
+
display: inline-block;
|
269 |
+
font-size: 9px;
|
270 |
+
border: 1px solid #DADADA;
|
271 |
+
border-radius: 2px;
|
272 |
+
padding: 5px 15px 5px 5px;
|
273 |
+
background: white;
|
274 |
+
}
|
275 |
+
|
276 |
+
.key-container .key span {
|
277 |
+
border-right: 1px solid #de4b42;
|
278 |
+
display: inline-block;
|
279 |
+
padding-right: 5px;
|
280 |
+
margin-right: 10px;
|
281 |
+
color: #de4b42;
|
282 |
+
font-size: 9px;
|
283 |
+
font-weight: bold;
|
284 |
+
}
|
285 |
+
|
286 |
+
.key-container .key.key-semi-pro span {
|
287 |
+
color: #333;
|
288 |
+
border-color: #333;
|
289 |
+
}
|
290 |
+
|
291 |
+
.key-container .key.key-pro {
|
292 |
+
margin-bottom: 15px;
|
293 |
+
}
|
294 |
+
|
295 |
+
.key-container a {
|
296 |
+
text-decoration: none;
|
297 |
+
color: #333;
|
298 |
+
}
|
299 |
+
|
300 |
+
#add-font-icon {
|
301 |
+
margin-top: 15px;
|
302 |
+
}
|
303 |
+
|
304 |
+
.mini-colours {
|
305 |
+
cursor: pointer;
|
306 |
+
}
|
307 |
+
|
308 |
+
#header-bar-items-order-container td {
|
309 |
+
width: 100%;
|
310 |
+
display: block;
|
311 |
+
padding: 20px;
|
312 |
+
border: 0;
|
313 |
+
box-sizing: border-box;
|
314 |
+
text-align: center;
|
315 |
+
}
|
316 |
+
|
317 |
+
#header-bar-items-order-container .draggable {
|
318 |
+
display: inline-block;
|
319 |
+
width: 19%;
|
320 |
+
text-align: left;
|
321 |
+
}
|
322 |
+
|
323 |
+
.container-fluid form.form-horizontal td.pro {
|
324 |
+
position: relative;
|
325 |
+
}
|
326 |
+
|
327 |
+
.container-fluid form.form-horizontal td.pro .responsive-menu-pro-overlay {
|
328 |
+
display: none;
|
329 |
+
position: absolute;
|
330 |
+
top: 0;
|
331 |
+
right: 0;
|
332 |
+
left: 0;
|
333 |
+
bottom: 0;
|
334 |
+
background: rgba(222, 75, 66, 0.6);
|
335 |
+
text-align: center;
|
336 |
+
z-index: 3;
|
337 |
+
}
|
338 |
+
|
339 |
+
.container-fluid form.form-horizontal td.pro .responsive-menu-pro-overlay a {
|
340 |
+
top: 50%;
|
341 |
+
transform: translateY(-50%);
|
342 |
+
position: relative;
|
343 |
+
color: white;
|
344 |
+
font-size: 17px;
|
345 |
+
display: block;
|
346 |
+
}
|
347 |
+
|
348 |
+
.container-fluid form.form-horizontal td.pro:hover .responsive-menu-pro-overlay {
|
349 |
+
display: block;
|
350 |
+
}
|
351 |
+
|
352 |
+
#responsive-menu-header-bar-html-content,
|
353 |
+
#responsive-menu-menu-additional-content {
|
354 |
+
height: 250px;
|
355 |
+
}
|
356 |
+
|
357 |
+
#responsive-menu-custom-css {
|
358 |
+
height: 500px
|
359 |
+
}
|
360 |
+
|
361 |
+
@media screen and (max-width: 1200px) {
|
362 |
+
.container-fluid #banner-area,
|
363 |
+
.container-fluid #options-area {
|
364 |
+
width: 100%;
|
365 |
+
display: block;
|
366 |
+
}
|
367 |
+
.container-fluid #banner-area {
|
368 |
+
margin: 25px 0 25px 0;
|
369 |
+
}
|
370 |
+
}
|
371 |
+
|
372 |
+
@media screen and (max-width: 1000px) {
|
373 |
+
.nav.nav-tabs > li {
|
374 |
+
width: 49%;
|
375 |
+
display: inline-block;
|
376 |
+
float: none;
|
377 |
+
margin: 0;
|
378 |
+
text-align: center;
|
379 |
+
}
|
380 |
+
|
381 |
+
.nav.nav-tabs > li.pull-right {
|
382 |
+
display: none;
|
383 |
+
}
|
384 |
+
.container-fluid form.form-horizontal td {
|
385 |
+
width: 100%;
|
386 |
+
display: block;
|
387 |
+
}
|
388 |
+
.container-fluid form.form-horizontal td.well {
|
389 |
+
margin-bottom: 0;
|
390 |
+
}
|
391 |
+
}
|
public/css/admin/bootstrap-select.css
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap-select v1.12.2 (http://silviomoreto.github.io/bootstrap-select)
|
3 |
+
*
|
4 |
+
* Copyright 2013-2017 bootstrap-select
|
5 |
+
* Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
|
6 |
+
*/select.bs-select-hidden,select.selectpicker{display:none!important}.bootstrap-select{width:220px\9}.bootstrap-select>.dropdown-toggle{width:100%;padding-right:25px;z-index:1}.bootstrap-select>.dropdown-toggle.bs-placeholder,.bootstrap-select>.dropdown-toggle.bs-placeholder:active,.bootstrap-select>.dropdown-toggle.bs-placeholder:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder:hover{color:#999}.bootstrap-select>select{position:absolute!important;bottom:0;left:50%;display:block!important;width:.5px!important;height:100%!important;padding:0!important;opacity:0!important;border:none}.bootstrap-select>select.mobile-device{top:0;left:0;display:block!important;width:100%!important;z-index:2}.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select .dropdown-toggle:focus{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{z-index:auto}.bootstrap-select.form-control.input-group-btn:not(:first-child):not(:last-child)>.btn{border-radius:0}.bootstrap-select.btn-group:not(.input-group-btn),.bootstrap-select.btn-group[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.btn-group.dropdown-menu-right,.bootstrap-select.btn-group[class*=col-].dropdown-menu-right,.row .bootstrap-select.btn-group[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group{margin-bottom:0}.form-group-lg .bootstrap-select.btn-group.form-control,.form-group-sm .bootstrap-select.btn-group.form-control{padding:0}.form-group-lg .bootstrap-select.btn-group.form-control .dropdown-toggle,.form-group-sm .bootstrap-select.btn-group.form-control .dropdown-toggle{height:100%;font-size:inherit;line-height:inherit;border-radius:inherit}.form-inline .bootstrap-select.btn-group .form-control{width:100%}.bootstrap-select.btn-group.disabled,.bootstrap-select.btn-group>.disabled{cursor:not-allowed}.bootstrap-select.btn-group.disabled:focus,.bootstrap-select.btn-group>.disabled:focus{outline:0!important}.bootstrap-select.btn-group.bs-container{position:absolute;height:0!important;padding:0!important}.bootstrap-select.btn-group.bs-container .dropdown-menu{z-index:1060}.bootstrap-select.btn-group .dropdown-toggle .filter-option{display:inline-block;overflow:hidden;width:100%;text-align:left}.bootstrap-select.btn-group .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li.active small{color:#fff}.bootstrap-select.btn-group .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select.btn-group .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select.btn-group .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select.btn-group .dropdown-menu li a span.check-mark{display:none}.bootstrap-select.btn-group .dropdown-menu li a span.text{display:inline-block}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option{position:static}.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark{position:absolute;display:inline-block;right:15px;margin-top:5px}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before{bottom:auto;top:-3px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after{bottom:auto;top:-3px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none}
|
public/css/admin/bootstrap-toggle.css
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*! ========================================================================
|
2 |
+
* Bootstrap Toggle: bootstrap-toggle.css v2.2.0
|
3 |
+
* http://www.bootstraptoggle.com
|
4 |
+
* ========================================================================
|
5 |
+
* Copyright 2014 Min Hur, The New York Times Company
|
6 |
+
* Licensed under MIT
|
7 |
+
* ======================================================================== */
|
8 |
+
.checkbox label .toggle,.checkbox-inline .toggle{margin-left:-20px;margin-right:5px}
|
9 |
+
.toggle{position:relative;overflow:hidden}
|
10 |
+
.toggle input[type=checkbox]{display:none}
|
11 |
+
.toggle-group{position:absolute;width:200%;top:0;bottom:0;left:0;transition:left .35s;-webkit-transition:left .35s;-moz-user-select:none;-webkit-user-select:none}
|
12 |
+
.toggle.off .toggle-group{left:-100%}
|
13 |
+
.toggle-on{position:absolute;top:0;bottom:0;left:0;right:50%;margin:0;border:0;border-radius:0}
|
14 |
+
.toggle-off{position:absolute;top:0;bottom:0;left:50%;right:0;margin:0;border:0;border-radius:0}
|
15 |
+
.toggle-handle{position:relative;margin:0 auto;padding-top:0;padding-bottom:0;height:100%;width:0;border-width:0 1px}
|
16 |
+
.toggle.btn{min-width:59px;min-height:34px}
|
17 |
+
.toggle-on.btn{padding-right:24px}
|
18 |
+
.toggle-off.btn{padding-left:24px}
|
19 |
+
.toggle.btn-lg{min-width:79px;min-height:45px}
|
20 |
+
.toggle-on.btn-lg{padding-right:31px}
|
21 |
+
.toggle-off.btn-lg{padding-left:31px}
|
22 |
+
.toggle-handle.btn-lg{width:40px}
|
23 |
+
.toggle.btn-sm{min-width:50px;min-height:30px}
|
24 |
+
.toggle-on.btn-sm{padding-right:20px}
|
25 |
+
.toggle-off.btn-sm{padding-left:20px}
|
26 |
+
.toggle.btn-xs{min-width:35px;min-height:22px}
|
27 |
+
.toggle-on.btn-xs{padding-right:12px}
|
28 |
+
.toggle-off.btn-xs{padding-left:12px}
|
public/css/admin/bootstrap.css
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
3 |
+
* Copyright 2011-2016 Twitter, Inc.
|
4 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
+
*//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../../fonts/admin/glyphicons-halflings-regular.eot);src:url(../../fonts/admin/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../../fonts/admin/glyphicons-halflings-regular.woff2) format('woff2'),url(../../fonts/admin/glyphicons-halflings-regular.woff) format('woff'),url(../../fonts/admin/glyphicons-halflings-regular.ttf) format('truetype'),url(../../fonts/admin/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
|
6 |
+
/*# sourceMappingURL=bootstrap.min.css.map */
|
public/css/admin/minicolours.css
ADDED
@@ -0,0 +1,323 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.minicolors {
|
2 |
+
position: relative;
|
3 |
+
}
|
4 |
+
|
5 |
+
.minicolors-sprite {
|
6 |
+
background-image: url(data:image/png;base64,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);
|
7 |
+
}
|
8 |
+
|
9 |
+
.minicolors-no-data-uris .minicolors-sprite {
|
10 |
+
background-image: url(jquery.minicolors.png);
|
11 |
+
}
|
12 |
+
|
13 |
+
.minicolors-swatch {
|
14 |
+
position: absolute;
|
15 |
+
vertical-align: middle;
|
16 |
+
background-position: -80px 0;
|
17 |
+
border: solid 1px #ccc;
|
18 |
+
cursor: text;
|
19 |
+
padding: 0;
|
20 |
+
margin: 0;
|
21 |
+
display: inline-block;
|
22 |
+
}
|
23 |
+
|
24 |
+
.minicolors-swatch-color {
|
25 |
+
position: absolute;
|
26 |
+
top: 0;
|
27 |
+
left: 0;
|
28 |
+
right: 0;
|
29 |
+
bottom: 0;
|
30 |
+
}
|
31 |
+
|
32 |
+
.minicolors input[type=hidden] + .minicolors-swatch {
|
33 |
+
width: 28px;
|
34 |
+
position: static;
|
35 |
+
cursor: pointer;
|
36 |
+
}
|
37 |
+
|
38 |
+
.minicolors input[type=hidden][disabled] + .minicolors-swatch {
|
39 |
+
cursor: default;
|
40 |
+
}
|
41 |
+
|
42 |
+
/* Panel */
|
43 |
+
.minicolors-panel {
|
44 |
+
position: absolute;
|
45 |
+
width: 173px;
|
46 |
+
background: white;
|
47 |
+
border: solid 1px #CCC;
|
48 |
+
box-shadow: 0 0 20px rgba(0, 0, 0, .2);
|
49 |
+
z-index: 99999;
|
50 |
+
box-sizing: content-box;
|
51 |
+
display: none;
|
52 |
+
}
|
53 |
+
|
54 |
+
.minicolors-panel.minicolors-visible {
|
55 |
+
display: block;
|
56 |
+
}
|
57 |
+
|
58 |
+
/* Panel positioning */
|
59 |
+
.minicolors-position-top .minicolors-panel {
|
60 |
+
top: -154px;
|
61 |
+
}
|
62 |
+
|
63 |
+
.minicolors-position-right .minicolors-panel {
|
64 |
+
right: 0;
|
65 |
+
}
|
66 |
+
|
67 |
+
.minicolors-position-bottom .minicolors-panel {
|
68 |
+
top: auto;
|
69 |
+
}
|
70 |
+
|
71 |
+
.minicolors-position-left .minicolors-panel {
|
72 |
+
left: 0;
|
73 |
+
}
|
74 |
+
|
75 |
+
.minicolors-with-opacity .minicolors-panel {
|
76 |
+
width: 194px;
|
77 |
+
}
|
78 |
+
|
79 |
+
.minicolors .minicolors-grid {
|
80 |
+
position: relative;
|
81 |
+
top: 1px;
|
82 |
+
left: 1px;
|
83 |
+
width: 150px;
|
84 |
+
height: 150px;
|
85 |
+
background-position: -120px 0;
|
86 |
+
cursor: crosshair;
|
87 |
+
}
|
88 |
+
|
89 |
+
.minicolors .minicolors-grid-inner {
|
90 |
+
position: absolute;
|
91 |
+
top: 0;
|
92 |
+
left: 0;
|
93 |
+
width: 150px;
|
94 |
+
height: 150px;
|
95 |
+
}
|
96 |
+
|
97 |
+
.minicolors-slider-saturation .minicolors-grid {
|
98 |
+
background-position: -420px 0;
|
99 |
+
}
|
100 |
+
|
101 |
+
.minicolors-slider-saturation .minicolors-grid-inner {
|
102 |
+
background-position: -270px 0;
|
103 |
+
background-image: inherit;
|
104 |
+
}
|
105 |
+
|
106 |
+
.minicolors-slider-brightness .minicolors-grid {
|
107 |
+
background-position: -570px 0;
|
108 |
+
}
|
109 |
+
|
110 |
+
.minicolors-slider-brightness .minicolors-grid-inner {
|
111 |
+
background-color: black;
|
112 |
+
}
|
113 |
+
|
114 |
+
.minicolors-slider-wheel .minicolors-grid {
|
115 |
+
background-position: -720px 0;
|
116 |
+
}
|
117 |
+
|
118 |
+
.minicolors-slider,
|
119 |
+
.minicolors-opacity-slider {
|
120 |
+
position: absolute;
|
121 |
+
top: 1px;
|
122 |
+
left: 152px;
|
123 |
+
width: 20px;
|
124 |
+
height: 150px;
|
125 |
+
background-color: white;
|
126 |
+
background-position: 0 0;
|
127 |
+
cursor: row-resize;
|
128 |
+
}
|
129 |
+
|
130 |
+
.minicolors-slider-saturation .minicolors-slider {
|
131 |
+
background-position: -60px 0;
|
132 |
+
}
|
133 |
+
|
134 |
+
.minicolors-slider-brightness .minicolors-slider {
|
135 |
+
background-position: -20px 0;
|
136 |
+
}
|
137 |
+
|
138 |
+
.minicolors-slider-wheel .minicolors-slider {
|
139 |
+
background-position: -20px 0;
|
140 |
+
}
|
141 |
+
|
142 |
+
.minicolors-opacity-slider {
|
143 |
+
left: 173px;
|
144 |
+
background-position: -40px 0;
|
145 |
+
display: none;
|
146 |
+
}
|
147 |
+
|
148 |
+
.minicolors-with-opacity .minicolors-opacity-slider {
|
149 |
+
display: block;
|
150 |
+
}
|
151 |
+
|
152 |
+
/* Pickers */
|
153 |
+
.minicolors-grid .minicolors-picker {
|
154 |
+
position: absolute;
|
155 |
+
top: 70px;
|
156 |
+
left: 70px;
|
157 |
+
width: 12px;
|
158 |
+
height: 12px;
|
159 |
+
border: solid 1px black;
|
160 |
+
border-radius: 10px;
|
161 |
+
margin-top: -6px;
|
162 |
+
margin-left: -6px;
|
163 |
+
background: none;
|
164 |
+
}
|
165 |
+
|
166 |
+
.minicolors-grid .minicolors-picker > div {
|
167 |
+
position: absolute;
|
168 |
+
top: 0;
|
169 |
+
left: 0;
|
170 |
+
width: 8px;
|
171 |
+
height: 8px;
|
172 |
+
border-radius: 8px;
|
173 |
+
border: solid 2px white;
|
174 |
+
box-sizing: content-box;
|
175 |
+
}
|
176 |
+
|
177 |
+
.minicolors-picker {
|
178 |
+
position: absolute;
|
179 |
+
top: 0;
|
180 |
+
left: 0;
|
181 |
+
width: 18px;
|
182 |
+
height: 2px;
|
183 |
+
background: white;
|
184 |
+
border: solid 1px black;
|
185 |
+
margin-top: -2px;
|
186 |
+
box-sizing: content-box;
|
187 |
+
}
|
188 |
+
|
189 |
+
/* Swatches */
|
190 |
+
.minicolors-swatches,
|
191 |
+
.minicolors-swatches li {
|
192 |
+
margin: 5px 0 3px 5px;
|
193 |
+
padding: 0;
|
194 |
+
list-style: none;
|
195 |
+
overflow: hidden;
|
196 |
+
}
|
197 |
+
|
198 |
+
.minicolors-swatches .minicolors-swatch {
|
199 |
+
position: relative;
|
200 |
+
float: left;
|
201 |
+
cursor: pointer;
|
202 |
+
margin:0 4px 0 0;
|
203 |
+
}
|
204 |
+
|
205 |
+
.minicolors-with-opacity .minicolors-swatches .minicolors-swatch {
|
206 |
+
margin-right: 7px;
|
207 |
+
}
|
208 |
+
|
209 |
+
.minicolors-swatch.selected {
|
210 |
+
border-color: #000;
|
211 |
+
}
|
212 |
+
|
213 |
+
/* Inline controls */
|
214 |
+
.minicolors-inline {
|
215 |
+
display: inline-block;
|
216 |
+
}
|
217 |
+
|
218 |
+
.minicolors-inline .minicolors-input {
|
219 |
+
display: none !important;
|
220 |
+
}
|
221 |
+
|
222 |
+
.minicolors-inline .minicolors-panel {
|
223 |
+
position: relative;
|
224 |
+
top: auto;
|
225 |
+
left: auto;
|
226 |
+
box-shadow: none;
|
227 |
+
z-index: auto;
|
228 |
+
display: inline-block;
|
229 |
+
}
|
230 |
+
|
231 |
+
/* Default theme */
|
232 |
+
.minicolors-theme-default .minicolors-swatch {
|
233 |
+
top: 5px;
|
234 |
+
left: 5px;
|
235 |
+
width: 18px;
|
236 |
+
height: 18px;
|
237 |
+
}
|
238 |
+
.minicolors-theme-default .minicolors-swatches .minicolors-swatch {
|
239 |
+
margin-bottom: 2px;
|
240 |
+
top: 0;
|
241 |
+
left: 0;
|
242 |
+
width: 18px;
|
243 |
+
height: 18px;
|
244 |
+
}
|
245 |
+
.minicolors-theme-default.minicolors-position-right .minicolors-swatch {
|
246 |
+
left: auto;
|
247 |
+
right: 5px;
|
248 |
+
}
|
249 |
+
.minicolors-theme-default.minicolors {
|
250 |
+
width: auto;
|
251 |
+
display: inline-block;
|
252 |
+
}
|
253 |
+
.minicolors-theme-default .minicolors-input {
|
254 |
+
height: 20px;
|
255 |
+
width: auto;
|
256 |
+
display: inline-block;
|
257 |
+
padding-left: 26px;
|
258 |
+
}
|
259 |
+
.minicolors-theme-default.minicolors-position-right .minicolors-input {
|
260 |
+
padding-right: 26px;
|
261 |
+
padding-left: inherit;
|
262 |
+
}
|
263 |
+
|
264 |
+
/* Bootstrap theme */
|
265 |
+
.minicolors-theme-bootstrap .minicolors-swatch {
|
266 |
+
z-index: 2;
|
267 |
+
top: 3px;
|
268 |
+
left: 3px;
|
269 |
+
width: 28px;
|
270 |
+
height: 28px;
|
271 |
+
border-radius: 3px;
|
272 |
+
}
|
273 |
+
.minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch {
|
274 |
+
margin-bottom: 2px;
|
275 |
+
top: 0;
|
276 |
+
left: 0;
|
277 |
+
width: 20px;
|
278 |
+
height: 20px;
|
279 |
+
}
|
280 |
+
.minicolors-theme-bootstrap .minicolors-swatch-color {
|
281 |
+
border-radius: inherit;
|
282 |
+
}
|
283 |
+
.minicolors-theme-bootstrap.minicolors-position-right > .minicolors-swatch {
|
284 |
+
left: auto;
|
285 |
+
right: 3px;
|
286 |
+
}
|
287 |
+
.minicolors-theme-bootstrap .minicolors-input {
|
288 |
+
float: none;
|
289 |
+
padding-left: 44px;
|
290 |
+
}
|
291 |
+
.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {
|
292 |
+
padding-right: 44px;
|
293 |
+
padding-left: 12px;
|
294 |
+
}
|
295 |
+
.minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {
|
296 |
+
top: 4px;
|
297 |
+
left: 4px;
|
298 |
+
width: 37px;
|
299 |
+
height: 37px;
|
300 |
+
border-radius: 5px;
|
301 |
+
}
|
302 |
+
.minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch {
|
303 |
+
width: 24px;
|
304 |
+
height: 24px;
|
305 |
+
}
|
306 |
+
.minicolors-theme-bootstrap .minicolors-input.input-xs + .minicolors-swatch {
|
307 |
+
width: 18px;
|
308 |
+
height: 18px;
|
309 |
+
}
|
310 |
+
.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {
|
311 |
+
border-top-left-radius: 0;
|
312 |
+
border-bottom-left-radius: 0;
|
313 |
+
}
|
314 |
+
|
315 |
+
/* Semantic Ui theme */
|
316 |
+
.minicolors-theme-semanticui .minicolors-swatch {
|
317 |
+
top: 0;
|
318 |
+
left: 0;
|
319 |
+
padding: 18px;
|
320 |
+
}
|
321 |
+
.minicolors-theme-semanticui input {
|
322 |
+
text-indent: 30px;
|
323 |
+
}
|
public/css/animations/boring.css.twig
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.responsive-menu-boring .responsive-menu-inner,
|
2 |
+
.responsive-menu-boring .responsive-menu-inner::before,
|
3 |
+
.responsive-menu-boring .responsive-menu-inner::after {
|
4 |
+
transition-property: none;
|
5 |
+
}
|
6 |
+
|
7 |
+
.responsive-menu-boring.is-active .responsive-menu-inner {
|
8 |
+
transform: rotate(45deg);
|
9 |
+
}
|
10 |
+
|
11 |
+
.responsive-menu-boring.is-active .responsive-menu-inner::before {
|
12 |
+
top: 0;
|
13 |
+
opacity: 0;
|
14 |
+
}
|
15 |
+
|
16 |
+
.responsive-menu-boring.is-active .responsive-menu-inner::after {
|
17 |
+
bottom: 0;
|
18 |
+
transform: rotate(-90deg);
|
19 |
+
}
|
tests/app/Form/FontIconPageListTest.php → public/css/animations/off.css.twig
RENAMED
File without changes
|
public/css/app.css.twig
ADDED
@@ -0,0 +1,517 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
button#responsive-menu-button,
|
2 |
+
#responsive-menu-container {
|
3 |
+
display: none;
|
4 |
+
-webkit-text-size-adjust: 100%;
|
5 |
+
}
|
6 |
+
|
7 |
+
@media screen and (max-width: {{ options.breakpoint }}px) {
|
8 |
+
|
9 |
+
#responsive-menu-container {
|
10 |
+
display: block;
|
11 |
+
}
|
12 |
+
|
13 |
+
#responsive-menu-container {
|
14 |
+
position: fixed;
|
15 |
+
top: 0;
|
16 |
+
bottom: 0;
|
17 |
+
z-index: 99998;
|
18 |
+
padding-bottom: 5px;
|
19 |
+
margin-bottom: -5px;
|
20 |
+
outline: 1px solid transparent;
|
21 |
+
overflow-y: auto;
|
22 |
+
overflow-x: hidden;
|
23 |
+
}
|
24 |
+
|
25 |
+
#responsive-menu-container .responsive-menu-search-box {
|
26 |
+
width: 100%;
|
27 |
+
padding: 0 2%;
|
28 |
+
border-radius: 2px;
|
29 |
+
height: 50px;
|
30 |
+
-webkit-appearance: none;
|
31 |
+
}
|
32 |
+
|
33 |
+
#responsive-menu-container.push-left,
|
34 |
+
#responsive-menu-container.slide-left {
|
35 |
+
transform: translateX(-100%);
|
36 |
+
-ms-transform: translateX(-100%);
|
37 |
+
-webkit-transform: translateX(-100%);
|
38 |
+
-moz-transform: translateX(-100%);
|
39 |
+
}
|
40 |
+
|
41 |
+
.responsive-menu-open #responsive-menu-container.push-left,
|
42 |
+
.responsive-menu-open #responsive-menu-container.slide-left {
|
43 |
+
transform: translateX(0);
|
44 |
+
-ms-transform: translateX(0);
|
45 |
+
-webkit-transform: translateX(0);
|
46 |
+
-moz-transform: translateX(0);
|
47 |
+
}
|
48 |
+
|
49 |
+
#responsive-menu-container.push-top,
|
50 |
+
#responsive-menu-container.slide-top {
|
51 |
+
transform: translateY(-100%);
|
52 |
+
-ms-transform: translateY(-100%);
|
53 |
+
-webkit-transform: translateY(-100%);
|
54 |
+
-moz-transform: translateY(-100%);
|
55 |
+
}
|
56 |
+
|
57 |
+
.responsive-menu-open #responsive-menu-container.push-top,
|
58 |
+
.responsive-menu-open #responsive-menu-container.slide-top {
|
59 |
+
transform: translateY(0);
|
60 |
+
-ms-transform: translateY(0);
|
61 |
+
-webkit-transform: translateY(0);
|
62 |
+
-moz-transform: translateY(0);
|
63 |
+
}
|
64 |
+
|
65 |
+
#responsive-menu-container.push-right,
|
66 |
+
#responsive-menu-container.slide-right {
|
67 |
+
transform: translateX(100%);
|
68 |
+
-ms-transform: translateX(100%);
|
69 |
+
-webkit-transform: translateX(100%);
|
70 |
+
-moz-transform: translateX(100%);
|
71 |
+
}
|
72 |
+
|
73 |
+
.responsive-menu-open #responsive-menu-container.push-right,
|
74 |
+
.responsive-menu-open #responsive-menu-container.slide-right {
|
75 |
+
transform: translateX(0);
|
76 |
+
-ms-transform: translateX(0);
|
77 |
+
-webkit-transform: translateX(0);
|
78 |
+
-moz-transform: translateX(0);
|
79 |
+
}
|
80 |
+
|
81 |
+
#responsive-menu-container.push-bottom,
|
82 |
+
#responsive-menu-container.slide-bottom {
|
83 |
+
transform: translateY(100%);
|
84 |
+
-ms-transform: translateY(100%);
|
85 |
+
-webkit-transform: translateY(100%);
|
86 |
+
-moz-transform: translateY(100%);
|
87 |
+
}
|
88 |
+
|
89 |
+
.responsive-menu-open #responsive-menu-container.push-bottom,
|
90 |
+
.responsive-menu-open #responsive-menu-container.slide-bottom {
|
91 |
+
transform: translateY(0);
|
92 |
+
-ms-transform: translateY(0);
|
93 |
+
-webkit-transform: translateY(0);
|
94 |
+
-moz-transform: translateY(0);
|
95 |
+
}
|
96 |
+
|
97 |
+
#responsive-menu-container,
|
98 |
+
#responsive-menu-container:before,
|
99 |
+
#responsive-menu-container:after,
|
100 |
+
#responsive-menu-container *,
|
101 |
+
#responsive-menu-container *:before,
|
102 |
+
#responsive-menu-container *:after {
|
103 |
+
box-sizing: border-box;
|
104 |
+
margin: 0;
|
105 |
+
padding: 0;
|
106 |
+
}
|
107 |
+
|
108 |
+
#responsive-menu-container #responsive-menu-search-box,
|
109 |
+
#responsive-menu-container #responsive-menu-additional-content,
|
110 |
+
#responsive-menu-container #responsive-menu-title {
|
111 |
+
padding: 25px 5%;
|
112 |
+
}
|
113 |
+
|
114 |
+
#responsive-menu-container #responsive-menu,
|
115 |
+
#responsive-menu-container #responsive-menu ul {
|
116 |
+
width: 100%;
|
117 |
+
}
|
118 |
+
#responsive-menu-container #responsive-menu ul.responsive-menu-submenu {
|
119 |
+
display: none;
|
120 |
+
}
|
121 |
+
|
122 |
+
#responsive-menu-container #responsive-menu ul.responsive-menu-submenu.responsive-menu-submenu-open {
|
123 |
+
display: block;
|
124 |
+
}
|
125 |
+
|
126 |
+
#responsive-menu-container #responsive-menu ul.responsive-menu-submenu-depth-1 a.responsive-menu-item-link {
|
127 |
+
padding-{{ options.menu_text_alignment }}: 10%;
|
128 |
+
}
|
129 |
+
|
130 |
+
#responsive-menu-container #responsive-menu ul.responsive-menu-submenu-depth-2 a.responsive-menu-item-link {
|
131 |
+
padding-{{ options.menu_text_alignment }}: 15%;
|
132 |
+
}
|
133 |
+
|
134 |
+
#responsive-menu-container #responsive-menu ul.responsive-menu-submenu-depth-3 a.responsive-menu-item-link {
|
135 |
+
padding-{{ options.menu_text_alignment }}: 20%;
|
136 |
+
}
|
137 |
+
|
138 |
+
#responsive-menu-container #responsive-menu ul.responsive-menu-submenu-depth-4 a.responsive-menu-item-link {
|
139 |
+
padding-{{ options.menu_text_alignment }}: 25%;
|
140 |
+
}
|
141 |
+
|
142 |
+
#responsive-menu-container #responsive-menu ul.responsive-menu-submenu-depth-5 a.responsive-menu-item-link {
|
143 |
+
padding-{{ options.menu_text_alignment }}: 30%;
|
144 |
+
}
|
145 |
+
|
146 |
+
#responsive-menu-container #responsive-menu ul.responsive-menu-submenu-depth-6 a.responsive-menu-item-link {
|
147 |
+
padding-{{ options.menu_text_alignment }}: 35%;
|
148 |
+
}
|
149 |
+
|
150 |
+
#responsive-menu-container li.responsive-menu-item {
|
151 |
+
width: 100%;
|
152 |
+
list-style: none;
|
153 |
+
}
|
154 |
+
|
155 |
+
#responsive-menu-container li.responsive-menu-item a {
|
156 |
+
width: 100%;
|
157 |
+
display: block;
|
158 |
+
text-decoration: none;
|
159 |
+
padding: 0 5%;
|
160 |
+
position: relative;
|
161 |
+
}
|
162 |
+
|
163 |
+
#responsive-menu-container li.responsive-menu-item a .fa {
|
164 |
+
margin-right: 15px;
|
165 |
+
}
|
166 |
+
|
167 |
+
#responsive-menu-container li.responsive-menu-item a .responsive-menu-subarrow {
|
168 |
+
position: absolute;
|
169 |
+
top: 0;
|
170 |
+
bottom: 0;
|
171 |
+
text-align: center;
|
172 |
+
overflow: hidden;
|
173 |
+
}
|
174 |
+
|
175 |
+
#responsive-menu-container li.responsive-menu-item a .responsive-menu-subarrow .fa {
|
176 |
+
margin-right: 0;
|
177 |
+
}
|
178 |
+
|
179 |
+
button#responsive-menu-button .responsive-menu-button-icon-inactive {
|
180 |
+
display: none;
|
181 |
+
}
|
182 |
+
|
183 |
+
button#responsive-menu-button {
|
184 |
+
z-index: 99999;
|
185 |
+
display: none;
|
186 |
+
overflow: hidden;
|
187 |
+
}
|
188 |
+
|
189 |
+
button#responsive-menu-button img {
|
190 |
+
max-width: 100%;
|
191 |
+
}
|
192 |
+
|
193 |
+
.responsive-menu-label {
|
194 |
+
display: inline-block;
|
195 |
+
font-weight: 600;
|
196 |
+
margin: 0 5px;
|
197 |
+
vertical-align: middle;
|
198 |
+
}
|
199 |
+
|
200 |
+
.responsive-menu-accessible {
|
201 |
+
display: inline-block;
|
202 |
+
}
|
203 |
+
|
204 |
+
.responsive-menu-accessible .responsive-menu-box {
|
205 |
+
display: inline-block;
|
206 |
+
vertical-align: middle;
|
207 |
+
}
|
208 |
+
|
209 |
+
.responsive-menu-label.responsive-menu-label-top,
|
210 |
+
.responsive-menu-label.responsive-menu-label-bottom
|
211 |
+
{
|
212 |
+
display: block;
|
213 |
+
margin: 0 auto;
|
214 |
+
}
|
215 |
+
|
216 |
+
button#responsive-menu-button {
|
217 |
+
padding: 0 0;
|
218 |
+
display: inline-block;
|
219 |
+
cursor: pointer;
|
220 |
+
transition-property: opacity, filter;
|
221 |
+
transition-duration: 0.15s;
|
222 |
+
transition-timing-function: linear;
|
223 |
+
font: inherit;
|
224 |
+
color: inherit;
|
225 |
+
text-transform: none;
|
226 |
+
background-color: transparent;
|
227 |
+
border: 0;
|
228 |
+
margin: 0;
|
229 |
+
overflow: visible;
|
230 |
+
}
|
231 |
+
|
232 |
+
button#responsive-menu-button:hover {
|
233 |
+
opacity: 0.7;
|
234 |
+
}
|
235 |
+
|
236 |
+
.responsive-menu-box {
|
237 |
+
width: {{ options.button_line_width }}px;
|
238 |
+
height: {{ options.button_line_height * 3 + options.button_line_margin * 2 }}px;
|
239 |
+
display: inline-block;
|
240 |
+
position: relative;
|
241 |
+
}
|
242 |
+
|
243 |
+
.responsive-menu-inner {
|
244 |
+
display: block;
|
245 |
+
top: 50%;
|
246 |
+
margin-top: {{ options.button_line_height / -2 }}px;
|
247 |
+
}
|
248 |
+
|
249 |
+
.responsive-menu-inner,
|
250 |
+
.responsive-menu-inner::before,
|
251 |
+
.responsive-menu-inner::after {
|
252 |
+
width: {{ options.button_line_width }}px;
|
253 |
+
height: {{ options.button_line_height }}px;
|
254 |
+
background-color: {{ options.button_line_colour }};
|
255 |
+
border-radius: 4px;
|
256 |
+
position: absolute;
|
257 |
+
transition-property: transform;
|
258 |
+
transition-duration: 0.15s;
|
259 |
+
transition-timing-function: ease;
|
260 |
+
}
|
261 |
+
|
262 |
+
.responsive-menu-inner::before,
|
263 |
+
.responsive-menu-inner::after {
|
264 |
+
content: "";
|
265 |
+
display: block;
|
266 |
+
}
|
267 |
+
|
268 |
+
.responsive-menu-inner::before {
|
269 |
+
top: {{ (options.button_line_margin + options.button_line_height) * -1 }}px;
|
270 |
+
}
|
271 |
+
|
272 |
+
.responsive-menu-inner::after {
|
273 |
+
bottom: {{ (options.button_line_margin + options.button_line_height) * -1 }}px;
|
274 |
+
}
|
275 |
+
|
276 |
+
{% if options.button_click_animation %}
|
277 |
+
{% include 'css/animations/' ~ options.button_click_animation ~ '.css.twig' %}
|
278 |
+
{% else %}
|
279 |
+
{% include 'css/animations/off.css.twig' %}
|
280 |
+
{% endif %}
|
281 |
+
|
282 |
+
button#responsive-menu-button {
|
283 |
+
width: {{ options.button_width }}px;
|
284 |
+
height: {{ options.button_height }}px;
|
285 |
+
position: {{ options.button_position_type }};
|
286 |
+
top: {{ options.button_top }}px;
|
287 |
+
{{ options.button_left_or_right }}: {{ options.button_distance_from_side }}%;
|
288 |
+
{% if options.button_transparent_background == 'off' %}
|
289 |
+
background: {{ options.button_background_colour }}
|
290 |
+
{% endif %}
|
291 |
+
}
|
292 |
+
|
293 |
+
{% if options.button_transparent_background == 'off' %}
|
294 |
+
button#responsive-menu-button:hover {
|
295 |
+
background: {{ options.button_background_colour }}
|
296 |
+
}
|
297 |
+
{% endif %}
|
298 |
+
|
299 |
+
button#responsive-menu-button .responsive-menu-box {
|
300 |
+
color: {{ options.button_line_colour }};
|
301 |
+
}
|
302 |
+
|
303 |
+
.responsive-menu-label {
|
304 |
+
color: {{ options.button_text_colour }};
|
305 |
+
font-size: {{ options.button_font_size }}px;
|
306 |
+
line-height: {{ options.button_title_line_height }}px;
|
307 |
+
{% if options.button_font %}
|
308 |
+
font-family: '{{ options.button_font }}';
|
309 |
+
{% endif %}
|
310 |
+
}
|
311 |
+
|
312 |
+
button#responsive-menu-button {
|
313 |
+
display: inline-block;
|
314 |
+
transition: transform {{ options.animation_speed }}s, background-color {{ options.transition_speed }}s;
|
315 |
+
}
|
316 |
+
|
317 |
+
{% if options.menu_close_on_body_click == 'on' %}
|
318 |
+
html.responsive-menu-open {
|
319 |
+
cursor: pointer;
|
320 |
+
}
|
321 |
+
|
322 |
+
#responsive-menu-container {
|
323 |
+
cursor: initial;
|
324 |
+
}
|
325 |
+
{% endif %}
|
326 |
+
|
327 |
+
{% if options.page_wrapper %}
|
328 |
+
{{ options.page_wrapper }} {
|
329 |
+
transition: transform {{ options.animation_speed }}s;
|
330 |
+
}
|
331 |
+
|
332 |
+
html.responsive-menu-open,
|
333 |
+
.responsive-menu-open body {
|
334 |
+
width: 100%;
|
335 |
+
}
|
336 |
+
{% endif %}
|
337 |
+
|
338 |
+
#responsive-menu-container {
|
339 |
+
width: {{ options.menu_width }}%;
|
340 |
+
{{ options.menu_appear_from }}: 0;
|
341 |
+
transition: transform {{ options.animation_speed }}s;
|
342 |
+
text-align: {{ options.menu_text_alignment }};
|
343 |
+
{% if options.menu_maximum_width %}
|
344 |
+
max-width: {{ options.menu_maximum_width }}px;
|
345 |
+
{% endif %}
|
346 |
+
{% if options.menu_minimum_width %}
|
347 |
+
min-width: {{ options.menu_minimum_width }}px;
|
348 |
+
{% endif %}
|
349 |
+
{% if options.menu_font %}
|
350 |
+
font-family: '{{ options.menu_font }}';
|
351 |
+
{% endif %}
|
352 |
+
{% if options.menu_background_image %}
|
353 |
+
background-image: url('{{ options.menu_background_image }}');
|
354 |
+
background-size: cover;
|
355 |
+
{% else %}
|
356 |
+
background: {{ options.menu_background_colour }};
|
357 |
+
{% endif %}
|
358 |
+
}
|
359 |
+
|
360 |
+
#responsive-menu-container #responsive-menu-wrapper {
|
361 |
+
background: {{ options.menu_background_colour }};
|
362 |
+
}
|
363 |
+
|
364 |
+
#responsive-menu-container #responsive-menu-additional-content {
|
365 |
+
color: {{ options.menu_additional_content_colour }};
|
366 |
+
}
|
367 |
+
|
368 |
+
#responsive-menu-container .responsive-menu-search-box {
|
369 |
+
background: {{ options.menu_search_box_background_colour }};
|
370 |
+
border: 2px solid {{ options.menu_search_box_border_colour }};
|
371 |
+
color: {{ options.menu_search_box_text_colour }};
|
372 |
+
}
|
373 |
+
|
374 |
+
#responsive-menu-container .responsive-menu-search-box:-ms-input-placeholder {
|
375 |
+
color: {{ options.menu_search_box_placeholder_colour }};
|
376 |
+
}
|
377 |
+
|
378 |
+
#responsive-menu-container .responsive-menu-search-box::-webkit-input-placeholder {
|
379 |
+
color: {{ options.menu_search_box_placeholder_colour }};
|
380 |
+
}
|
381 |
+
|
382 |
+
#responsive-menu-container .responsive-menu-search-box:-moz-placeholder {
|
383 |
+
color: {{ options.menu_search_box_placeholder_colour }};
|
384 |
+
opacity: 1;
|
385 |
+
}
|
386 |
+
|
387 |
+
#responsive-menu-container .responsive-menu-search-box::-moz-placeholder {
|
388 |
+
color: {{ options.menu_search_box_placeholder_colour }};
|
389 |
+
opacity: 1;
|
390 |
+
}
|
391 |
+
|
392 |
+
#responsive-menu-container .responsive-menu-item-link,
|
393 |
+
#responsive-menu-container #responsive-menu-title,
|
394 |
+
#responsive-menu-container .responsive-menu-subarrow {
|
395 |
+
transition: background-color {{ options.transition_speed }}s, border-color {{ options.transition_speed }}s, color {{ options.transition_speed }}s;
|
396 |
+
}
|
397 |
+
|
398 |
+
#responsive-menu-container #responsive-menu-title {
|
399 |
+
background-color: {{ options.menu_title_background_colour }};
|
400 |
+
color: {{ options.menu_title_colour }};
|
401 |
+
font-size: {{ options.menu_title_font_size }}px;
|
402 |
+
}
|
403 |
+
|
404 |
+
#responsive-menu-container #responsive-menu-title a {
|
405 |
+
color: {{ options.menu_title_colour }};
|
406 |
+
font-size: {{ options.menu_title_font_size }}px;
|
407 |
+
text-decoration: none;
|
408 |
+
}
|
409 |
+
|
410 |
+
#responsive-menu-container #responsive-menu-title a:hover {
|
411 |
+
color: {{ options.menu_title_hover_colour }};
|
412 |
+
}
|
413 |
+
|
414 |
+
#responsive-menu-container #responsive-menu-title:hover {
|
415 |
+
background-color: {{ options.menu_title_background_hover_colour }};
|
416 |
+
color: {{ options.menu_title_hover_colour }};
|
417 |
+
}
|
418 |
+
|
419 |
+
#responsive-menu-container #responsive-menu-title:hover a {
|
420 |
+
color: {{ options.menu_title_hover_colour }};
|
421 |
+
}
|
422 |
+
|
423 |
+
#responsive-menu-container #responsive-menu-title #responsive-menu-title-image {
|
424 |
+
display: inline-block;
|
425 |
+
vertical-align: middle;
|
426 |
+
margin-right: 15px;
|
427 |
+
}
|
428 |
+
|
429 |
+
#responsive-menu-container #responsive-menu > li.responsive-menu-item:first-child > a {
|
430 |
+
border-top: {{ options.menu_border_width }}px solid {{ options.menu_item_border_colour }};
|
431 |
+
}
|
432 |
+
|
433 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item .responsive-menu-item-link {
|
434 |
+
font-size: {{ options.menu_font_size }}px;
|
435 |
+
}
|
436 |
+
|
437 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a {
|
438 |
+
line-height: {{ options.menu_links_height }}px;
|
439 |
+
border-bottom: {{ options.menu_border_width }}px solid {{ options.menu_item_border_colour }};
|
440 |
+
color: {{ options.menu_link_colour }};
|
441 |
+
background-color: {{ options.menu_item_background_colour }};
|
442 |
+
}
|
443 |
+
|
444 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a:hover {
|
445 |
+
color: {{ options.menu_link_hover_colour }};
|
446 |
+
background-color: {{ options.menu_item_background_hover_colour }};
|
447 |
+
border-color: {{ options.menu_item_border_colour_hover }};
|
448 |
+
}
|
449 |
+
|
450 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a:hover .responsive-menu-subarrow {
|
451 |
+
color: {{ options.menu_sub_arrow_shape_hover_colour }};
|
452 |
+
border-color: {{ options.menu_sub_arrow_border_hover_colour }};
|
453 |
+
background-color: {{ options.menu_sub_arrow_background_hover_colour }};
|
454 |
+
}
|
455 |
+
|
456 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a .responsive-menu-subarrow {
|
457 |
+
{{ options.arrow_position }}: 0;
|
458 |
+
height: {{ options.submenu_arrow_height }}px;
|
459 |
+
line-height: {{ options.submenu_arrow_height }}px;
|
460 |
+
width: {{ options.submenu_arrow_width }}px;
|
461 |
+
color: {{ options.menu_sub_arrow_shape_colour }};
|
462 |
+
border-left: {{ options.menu_border_width }}px solid {{ options.menu_sub_arrow_border_colour }};
|
463 |
+
background-color: {{ options.menu_sub_arrow_background_colour }};
|
464 |
+
}
|
465 |
+
|
466 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a .responsive-menu-subarrow.responsive-menu-subarrow-active {
|
467 |
+
color: {{ options.menu_sub_arrow_shape_colour_active }};
|
468 |
+
border-color: {{ options.menu_sub_arrow_border_colour_active }};
|
469 |
+
background-color: {{ options.menu_sub_arrow_background_colour_active }};
|
470 |
+
}
|
471 |
+
|
472 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a .responsive-menu-subarrow.responsive-menu-subarrow-active:hover {
|
473 |
+
color: {{ options.menu_sub_arrow_shape_hover_colour_active }};
|
474 |
+
border-color: {{ options.menu_sub_arrow_border_hover_colour_active }};
|
475 |
+
background-color: {{ options.menu_sub_arrow_background_hover_colour_active }};
|
476 |
+
}
|
477 |
+
|
478 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a .responsive-menu-subarrow:hover {
|
479 |
+
color: {{ options.menu_sub_arrow_shape_hover_colour }};
|
480 |
+
border-color: {{ options.menu_sub_arrow_border_hover_colour }};
|
481 |
+
background-color: {{ options.menu_sub_arrow_background_hover_colour }};
|
482 |
+
}
|
483 |
+
|
484 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-current-item > .responsive-menu-item-link {
|
485 |
+
background-color: {{ options.menu_current_item_background_colour }};
|
486 |
+
color: {{ options.menu_current_link_colour }};
|
487 |
+
border-color: {{ options.menu_current_item_border_colour }};
|
488 |
+
}
|
489 |
+
|
490 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-current-item > .responsive-menu-item-link:hover {
|
491 |
+
background-color: {{ options.menu_current_item_background_hover_colour }};
|
492 |
+
color: {{ options.menu_current_link_hover_colour }};
|
493 |
+
border-color: {{ options.menu_current_item_border_hover_colour }};
|
494 |
+
}
|
495 |
+
|
496 |
+
{% if options.menu_background_image %}
|
497 |
+
#responsive-menu-container #responsive-menu-title,
|
498 |
+
#responsive-menu-container #responsive-menu-title:hover,
|
499 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a,
|
500 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a:hover,
|
501 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a .responsive-menu-subarrow,
|
502 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a .responsive-menu-subarrow:hover,
|
503 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item a:hover .responsive-menu-subarrow,
|
504 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item.responsive-menu-current-item > .responsive-menu-item-link,
|
505 |
+
#responsive-menu-container #responsive-menu li.responsive-menu-item.responsive-menu-current-item > .responsive-menu-item-link:hover,
|
506 |
+
#responsive-menu-container #responsive-menu-wrapper {
|
507 |
+
background: none;
|
508 |
+
border: 0;
|
509 |
+
}
|
510 |
+
{% endif %}
|
511 |
+
|
512 |
+
{% if options.menu_to_hide %}
|
513 |
+
{{ options.menu_to_hide }} {
|
514 |
+
display: none !important;
|
515 |
+
}
|
516 |
+
{% endif %}
|
517 |
+
}
|
public/fonts/admin/glyphicons-halflings-regular.eot
ADDED
Binary file
|
public/fonts/admin/glyphicons-halflings-regular.svg
ADDED
@@ -0,0 +1,288 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" standalone="no"?>
|
2 |
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
3 |
+
<svg xmlns="http://www.w3.org/2000/svg">
|
4 |
+
<metadata></metadata>
|
5 |
+
<defs>
|
6 |
+
<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
|
7 |
+
<font-face units-per-em="1200" ascent="960" descent="-240" />
|
8 |
+
<missing-glyph horiz-adv-x="500" />
|
9 |
+
<glyph horiz-adv-x="0" />
|
10 |
+
<glyph horiz-adv-x="400" />
|
11 |
+
<glyph unicode=" " />
|
12 |
+
<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
|
13 |
+
<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
|
14 |
+
<glyph unicode=" " />
|
15 |
+
<glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
|
16 |
+
<glyph unicode=" " horiz-adv-x="650" />
|
17 |
+
<glyph unicode=" " horiz-adv-x="1300" />
|
18 |
+
<glyph unicode=" " horiz-adv-x="650" />
|
19 |
+
<glyph unicode=" " horiz-adv-x="1300" />
|
20 |
+
<glyph unicode=" " horiz-adv-x="433" />
|
21 |
+
<glyph unicode=" " horiz-adv-x="325" />
|
22 |
+
<glyph unicode=" " horiz-adv-x="216" />
|
23 |
+
<glyph unicode=" " horiz-adv-x="216" />
|
24 |
+
<glyph unicode=" " horiz-adv-x="162" />
|
25 |
+
<glyph unicode=" " horiz-adv-x="260" />
|
26 |
+
<glyph unicode=" " horiz-adv-x="72" />
|
27 |
+
<glyph unicode=" " horiz-adv-x="260" />
|
28 |
+
<glyph unicode=" " horiz-adv-x="325" />
|
29 |
+
<glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
|
30 |
+
<glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
|
31 |
+
<glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
|
32 |
+
<glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
|
33 |
+
<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />
|
34 |
+
<glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
|
35 |
+
<glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
|
36 |
+
<glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
|
37 |
+
<glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
|
38 |
+
<glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
|
39 |
+
<glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
|
40 |
+
<glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
|
41 |
+
<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
|
42 |
+
<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
|
43 |
+
<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
|
44 |
+
<glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
|
45 |
+
<glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
|
46 |
+
<glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
|
47 |
+
<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
|
48 |
+
<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
|
49 |
+
<glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
|
50 |
+
<glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
|
51 |
+
<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
|
52 |
+
<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
|
53 |
+
<glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
|
54 |
+
<glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
|
55 |
+
<glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
|
56 |
+
<glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
|
57 |
+
<glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
|
58 |
+
<glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
|
59 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
|
60 |
+
<glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
|
61 |
+
<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
|
62 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
|
63 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
|
64 |
+
<glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
|
65 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
|
66 |
+
<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
|
67 |
+
<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
|
68 |
+
<glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
|
69 |
+
<glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
|
70 |
+
<glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
|
71 |
+
<glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
|
72 |
+
<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
|
73 |
+
<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
|
74 |
+
<glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
|
75 |
+
<glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
|
76 |
+
<glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
|
77 |
+
<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
|
78 |
+
<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
|
79 |
+
<glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
|
80 |
+
<glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
|
81 |
+
<glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
|
82 |
+
<glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
|
83 |
+
<glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
|
84 |
+
<glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
|
85 |
+
<glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
|
86 |
+
<glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
|
87 |
+
<glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
|
88 |
+
<glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
89 |
+
<glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
90 |
+
<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
|
91 |
+
<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
92 |
+
<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
93 |
+
<glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
94 |
+
<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
95 |
+
<glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
|
96 |
+
<glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
|
97 |
+
<glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
|
98 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
|
99 |
+
<glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
|
100 |
+
<glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
|
101 |
+
<glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
|
102 |
+
<glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
|
103 |
+
<glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
|
104 |
+
<glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
|
105 |
+
<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
|
106 |
+
<glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
|
107 |
+
<glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
|
108 |
+
<glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
|
109 |
+
<glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
|
110 |
+
<glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
|
111 |
+
<glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
|
112 |
+
<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
|
113 |
+
<glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
114 |
+
<glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
|
115 |
+
<glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
|
116 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
|
117 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
|
118 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
|
119 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
|
120 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
|
121 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
|
122 |
+
<glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
|
123 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
|
124 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
|
125 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
|
126 |
+
<glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
|
127 |
+
<glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
|
128 |
+
<glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
|
129 |
+
<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
|
130 |
+
<glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
|
131 |
+
<glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
|
132 |
+
<glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
|
133 |
+
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
|
134 |
+
<glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
|
135 |
+
<glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
|
136 |
+
<glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
|
137 |
+
<glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
|
138 |
+
<glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
|
139 |
+
<glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
|
140 |
+
<glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
|
141 |
+
<glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
|
142 |
+
<glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
|
143 |
+
<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
|
144 |
+
<glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
|
145 |
+
<glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
|
146 |
+
<glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
|
147 |
+
<glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
|
148 |
+
<glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
|
149 |
+
<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
|
150 |
+
<glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
|
151 |
+
<glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
|
152 |
+
<glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
|
153 |
+
<glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
|
154 |
+
<glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
|
155 |
+
<glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
|
156 |
+
<glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
|
157 |
+
<glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
|
158 |
+
<glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
|
159 |
+
<glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
|
160 |
+
<glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
|
161 |
+
<glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
162 |
+
<glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
|
163 |
+
<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
|
164 |
+
<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
|
165 |
+
<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
|
166 |
+
<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
|
167 |
+
<glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
|
168 |
+
<glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
|
169 |
+
<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
|
170 |
+
<glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
|
171 |
+
<glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
|
172 |
+
<glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
|
173 |
+
<glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
|
174 |
+
<glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
|
175 |
+
<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
|
176 |
+
<glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
|
177 |
+
<glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
|
178 |
+
<glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
|
179 |
+
<glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
|
180 |
+
<glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
|
181 |
+
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
|
182 |
+
<glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
|
183 |
+
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
|
184 |
+
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
|
185 |
+
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
|
186 |
+
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
|
187 |
+
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
|
188 |
+
<glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
|
189 |
+
<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
|
190 |
+
<glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
|
191 |
+
<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
|
192 |
+
<glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
|
193 |
+
<glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
|
194 |
+
<glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
|
195 |
+
<glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
|
196 |
+
<glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
|
197 |
+
<glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
|
198 |
+
<glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
|
199 |
+
<glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
|
200 |
+
<glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
|
201 |
+
<glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
|
202 |
+
<glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
|
203 |
+
<glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
|
204 |
+
<glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
|
205 |
+
<glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
|
206 |
+
<glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
|
207 |
+
<glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
|
208 |
+
<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
|
209 |
+
<glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
|
210 |
+
<glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
|
211 |
+
<glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
|
212 |
+
<glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
|
213 |
+
<glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
|
214 |
+
<glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
|
215 |
+
<glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
216 |
+
<glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
|
217 |
+
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
|
218 |
+
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
|
219 |
+
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
|
220 |
+
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
|
221 |
+
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
|
222 |
+
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
|
223 |
+
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
|
224 |
+
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
|
225 |
+
<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
|
226 |
+
<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
|
227 |
+
<glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
|
228 |
+
<glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
|
229 |
+
<glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
|
230 |
+
<glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
|
231 |
+
<glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
|
232 |
+
<glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
|
233 |
+
<glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
|
234 |
+
<glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
|
235 |
+
<glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
|
236 |
+
<glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
|
237 |
+
<glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
|
238 |
+
<glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
|
239 |
+
<glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
240 |
+
<glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
241 |
+
<glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
242 |
+
<glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
243 |
+
<glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
244 |
+
<glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
|
245 |
+
<glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
|
246 |
+
<glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
|
247 |
+
<glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
|
248 |
+
<glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
|
249 |
+
<glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
|
250 |
+
<glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
|
251 |
+
<glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
|
252 |
+
<glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
|
253 |
+
<glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
|
254 |
+
<glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
|
255 |
+
<glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
|
256 |
+
<glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
|
257 |
+
<glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
|
258 |
+
<glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
|
259 |
+
<glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
|
260 |
+
<glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
|
261 |
+
<glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
|
262 |
+
<glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
|
263 |
+
<glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
|
264 |
+
<glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
|
265 |
+
<glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
|
266 |
+
<glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
|
267 |
+
<glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
|
268 |
+
<glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
|
269 |
+
<glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
|
270 |
+
<glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
|
271 |
+
<glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
|
272 |
+
<glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
|
273 |
+
<glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
|
274 |
+
<glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
|
275 |
+
<glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
|
276 |
+
<glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
|
277 |
+
<glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
|
278 |
+
<glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
|
279 |
+
<glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
|
280 |
+
<glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
|
281 |
+
<glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
|
282 |
+
<glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
|
283 |
+
<glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
|
284 |
+
<glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
|
285 |
+
<glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
|
286 |
+
<glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
|
287 |
+
</font>
|
288 |
+
</defs></svg>
|
public/fonts/admin/glyphicons-halflings-regular.ttf
ADDED
Binary file
|
public/fonts/admin/glyphicons-halflings-regular.woff
ADDED
Binary file
|
public/fonts/admin/glyphicons-halflings-regular.woff2
ADDED
Binary file
|
public/js/admin/admin.js
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(function($) {
|
2 |
+
|
3 |
+
$.minicolors.defaults = $.extend($.minicolors.defaults, {
|
4 |
+
format: 'hex',
|
5 |
+
opacity: false,
|
6 |
+
theme: 'bootstrap'
|
7 |
+
});
|
8 |
+
$('.mini-colours').minicolors();
|
9 |
+
|
10 |
+
$(':file').filestyle({icon: false, buttonName: 'btn-primary', placeholder: 'No file'});
|
11 |
+
|
12 |
+
var custom_uploader;
|
13 |
+
|
14 |
+
$('.image_button').click(function (e) {
|
15 |
+
e.preventDefault();
|
16 |
+
window.imgFor = $(this).attr('for');
|
17 |
+
//If the uploader object has already been created, reopen the dialog
|
18 |
+
if (custom_uploader) {
|
19 |
+
custom_uploader.open();
|
20 |
+
return;
|
21 |
+
}
|
22 |
+
//Extend the wp.media object
|
23 |
+
custom_uploader = wp.media.frames.file_frame = wp.media({
|
24 |
+
title: 'Choose Image',
|
25 |
+
button: {
|
26 |
+
text: 'Choose Image',
|
27 |
+
id: 'test'
|
28 |
+
},
|
29 |
+
multiple: false
|
30 |
+
});
|
31 |
+
|
32 |
+
//When a file is selected, grab the URL and set it as the text field's value
|
33 |
+
custom_uploader.on('select', function () {
|
34 |
+
attachment = custom_uploader.state().get('selection').first().toJSON();
|
35 |
+
$('#' + window.imgFor).val(attachment.url);
|
36 |
+
});
|
37 |
+
|
38 |
+
//Open the uploader dialog
|
39 |
+
custom_uploader.open();
|
40 |
+
});
|
41 |
+
|
42 |
+
$(document).on('click', '#responsive-menu-preview', function(e) {
|
43 |
+
e.preventDefault();
|
44 |
+
var form = $('#responsive-menu-form');
|
45 |
+
form.attr('action', WP_HOME_URL + '?responsive-menu-preview=true');
|
46 |
+
form.attr('target', '_blank');
|
47 |
+
form.submit();
|
48 |
+
form.attr('action', '');
|
49 |
+
form.attr('target', '');
|
50 |
+
});
|
51 |
+
|
52 |
+
$(document).on('click', '.validation-error', function(e) {
|
53 |
+
e.preventDefault();
|
54 |
+
var id_to_scroll_to = $(this).attr('href');
|
55 |
+
var parent_panel_id = $(id_to_scroll_to).parents('.tab-pane').attr('id');
|
56 |
+
var parent_tab = $('a[href="#' + parent_panel_id + '"]').parent('li');
|
57 |
+
|
58 |
+
$('ul.nav-tabs li').removeClass('active');
|
59 |
+
parent_tab.addClass('active');
|
60 |
+
|
61 |
+
$('#responsive-menu-current-page').val(parent_panel_id);
|
62 |
+
|
63 |
+
$('.tab-content .tab-pane').removeClass('active').removeClass('in');
|
64 |
+
|
65 |
+
$('#' + parent_panel_id).addClass('active').addClass('in');
|
66 |
+
|
67 |
+
$('html, body').animate({
|
68 |
+
scrollTop: $(id_to_scroll_to).offset().top - 50
|
69 |
+
}, 1000);
|
70 |
+
});
|
71 |
+
|
72 |
+
$(document).on('click', '.nav-tabs li a', function() {
|
73 |
+
var tab_name = $(this).attr('href').replace('#', '');
|
74 |
+
$('#responsive-menu-current-page').val(tab_name);
|
75 |
+
});
|
76 |
+
|
77 |
+
});
|
public/js/admin/bootstrap-file.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
(function($){var nextId=0;var Filestyle=function(element,options){this.options=options;this.$elementFilestyle=[];this.$element=$(element)};Filestyle.prototype={clear:function(){this.$element.val("");this.$elementFilestyle.find(":text").val("");this.$elementFilestyle.find(".badge").remove()},destroy:function(){this.$element.removeAttr("style").removeData("filestyle");this.$elementFilestyle.remove()},disabled:function(value){if(value===true){if(!this.options.disabled){this.$element.attr("disabled","true");this.$elementFilestyle.find("label").attr("disabled","true");this.options.disabled=true}}else{if(value===false){if(this.options.disabled){this.$element.removeAttr("disabled");this.$elementFilestyle.find("label").removeAttr("disabled");this.options.disabled=false}}else{return this.options.disabled}}},buttonBefore:function(value){if(value===true){if(!this.options.buttonBefore){this.options.buttonBefore=true;if(this.options.input){this.$elementFilestyle.remove();this.constructor();this.pushNameFiles()}}}else{if(value===false){if(this.options.buttonBefore){this.options.buttonBefore=false;if(this.options.input){this.$elementFilestyle.remove();this.constructor();this.pushNameFiles()}}}else{return this.options.buttonBefore}}},icon:function(value){if(value===true){if(!this.options.icon){this.options.icon=true;this.$elementFilestyle.find("label").prepend(this.htmlIcon())}}else{if(value===false){if(this.options.icon){this.options.icon=false;this.$elementFilestyle.find(".icon-span-filestyle").remove()}}else{return this.options.icon}}},input:function(value){if(value===true){if(!this.options.input){this.options.input=true;if(this.options.buttonBefore){this.$elementFilestyle.append(this.htmlInput())}else{this.$elementFilestyle.prepend(this.htmlInput())}this.$elementFilestyle.find(".badge").remove();this.pushNameFiles();this.$elementFilestyle.find(".group-span-filestyle").addClass("input-group-btn")}}else{if(value===false){if(this.options.input){this.options.input=false;this.$elementFilestyle.find(":text").remove();var files=this.pushNameFiles();if(files.length>0&&this.options.badge){this.$elementFilestyle.find("label").append(' <span class="badge">'+files.length+"</span>")}this.$elementFilestyle.find(".group-span-filestyle").removeClass("input-group-btn")}}else{return this.options.input}}},size:function(value){if(value!==undefined){var btn=this.$elementFilestyle.find("label"),input=this.$elementFilestyle.find("input");btn.removeClass("btn-lg btn-sm");input.removeClass("input-lg input-sm");if(value!="nr"){btn.addClass("btn-"+value);input.addClass("input-"+value)}}else{return this.options.size}},placeholder:function(value){if(value!==undefined){this.options.placeholder=value;this.$elementFilestyle.find("input").attr("placeholder",value)}else{return this.options.placeholder}},buttonText:function(value){if(value!==undefined){this.options.buttonText=value;this.$elementFilestyle.find("label .buttonText").html(this.options.buttonText)}else{return this.options.buttonText}},buttonName:function(value){if(value!==undefined){this.options.buttonName=value;this.$elementFilestyle.find("label").attr({"class":"btn "+this.options.buttonName})}else{return this.options.buttonName}},iconName:function(value){if(value!==undefined){this.$elementFilestyle.find(".icon-span-filestyle").attr({"class":"icon-span-filestyle "+this.options.iconName})}else{return this.options.iconName}},htmlIcon:function(){if(this.options.icon){return'<span class="icon-span-filestyle '+this.options.iconName+'"></span> '}else{return""}},htmlInput:function(){if(this.options.input){return'<input type="text" class="form-control '+(this.options.size=="nr"?"":"input-"+this.options.size)+'" placeholder="'+this.options.placeholder+'" disabled> '}else{return""}},pushNameFiles:function(){var content="",files=[];if(this.$element[0].files===undefined){files[0]={name:this.$element[0]&&this.$element[0].value}}else{files=this.$element[0].files}for(var i=0;i<files.length;i++){content+=files[i].name.split("\\").pop()+", "}if(content!==""){this.$elementFilestyle.find(":text").val(content.replace(/\, $/g,""))}else{this.$elementFilestyle.find(":text").val("")}return files},constructor:function(){var _self=this,html="",id=_self.$element.attr("id"),files=[],btn="",$label;if(id===""||!id){id="filestyle-"+nextId;_self.$element.attr({id:id});nextId++}btn='<span class="group-span-filestyle '+(_self.options.input?"input-group-btn":"")+'"><label for="'+id+'" class="btn '+_self.options.buttonName+" "+(_self.options.size=="nr"?"":"btn-"+_self.options.size)+'" '+(_self.options.disabled?'disabled="true"':"")+">"+_self.htmlIcon()+'<span class="buttonText">'+_self.options.buttonText+"</span></label></span>";html=_self.options.buttonBefore?btn+_self.htmlInput():_self.htmlInput()+btn;_self.$elementFilestyle=$('<div class="bootstrap-filestyle input-group">'+html+"</div>");_self.$elementFilestyle.find(".group-span-filestyle").attr("tabindex","0").keypress(function(e){if(e.keyCode===13||e.charCode===32){_self.$elementFilestyle.find("label").click();return false}});_self.$element.css({position:"absolute",clip:"rect(0px 0px 0px 0px)"}).attr("tabindex","-1").after(_self.$elementFilestyle);if(_self.options.disabled){_self.$element.attr("disabled","true")}_self.$element.change(function(){var files=_self.pushNameFiles();if(_self.options.input==false&&_self.options.badge){if(_self.$elementFilestyle.find(".badge").length==0){_self.$elementFilestyle.find("label").append(' <span class="badge">'+files.length+"</span>")}else{if(files.length==0){_self.$elementFilestyle.find(".badge").remove()}else{_self.$elementFilestyle.find(".badge").html(files.length)}}}else{_self.$elementFilestyle.find(".badge").remove()}});if(window.navigator.userAgent.search(/firefox/i)>-1){_self.$elementFilestyle.find("label").click(function(){_self.$element.click();return false})}}};var old=$.fn.filestyle;$.fn.filestyle=function(option,value){var get="",element=this.each(function(){if($(this).attr("type")==="file"){var $this=$(this),data=$this.data("filestyle"),options=$.extend({},$.fn.filestyle.defaults,option,typeof option==="object"&&option);if(!data){$this.data("filestyle",(data=new Filestyle(this,options)));data.constructor()}if(typeof option==="string"){get=data[option](value)}}});if(typeof get!==undefined){return get}else{return element}};$.fn.filestyle.defaults={buttonText:"Choose file",iconName:"glyphicon glyphicon-folder-open",buttonName:"btn-default",size:"nr",input:true,badge:true,icon:true,buttonBefore:false,disabled:false,placeholder:""};$.fn.filestyle.noConflict=function(){$.fn.filestyle=old;return this};$(function(){$(".filestyle").each(function(){var $this=$(this),options={input:$this.attr("data-input")==="false"?false:true,icon:$this.attr("data-icon")==="false"?false:true,buttonBefore:$this.attr("data-buttonBefore")==="true"?true:false,disabled:$this.attr("data-disabled")==="true"?true:false,size:$this.attr("data-size"),buttonText:$this.attr("data-buttonText"),buttonName:$this.attr("data-buttonName"),iconName:$this.attr("data-iconName"),badge:$this.attr("data-badge")==="false"?false:true,placeholder:$this.attr("data-placeholder")};$this.filestyle(options)})})})(window.jQuery);
|
public/js/admin/bootstrap-select.js
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap-select v1.12.2 (http://silviomoreto.github.io/bootstrap-select)
|
3 |
+
*
|
4 |
+
* Copyright 2013-2017 bootstrap-select
|
5 |
+
* Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
|
6 |
+
*/
|
7 |
+
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){"use strict";function b(b){var c=[{re:/[\xC0-\xC6]/g,ch:"A"},{re:/[\xE0-\xE6]/g,ch:"a"},{re:/[\xC8-\xCB]/g,ch:"E"},{re:/[\xE8-\xEB]/g,ch:"e"},{re:/[\xCC-\xCF]/g,ch:"I"},{re:/[\xEC-\xEF]/g,ch:"i"},{re:/[\xD2-\xD6]/g,ch:"O"},{re:/[\xF2-\xF6]/g,ch:"o"},{re:/[\xD9-\xDC]/g,ch:"U"},{re:/[\xF9-\xFC]/g,ch:"u"},{re:/[\xC7-\xE7]/g,ch:"c"},{re:/[\xD1]/g,ch:"N"},{re:/[\xF1]/g,ch:"n"}];return a.each(c,function(){b=b?b.replace(this.re,this.ch):""}),b}function c(b){var c=arguments,d=b;[].shift.apply(c);var e,f=this.each(function(){var b=a(this);if(b.is("select")){var f=b.data("selectpicker"),g="object"==typeof d&&d;if(f){if(g)for(var h in g)g.hasOwnProperty(h)&&(f.options[h]=g[h])}else{var i=a.extend({},k.DEFAULTS,a.fn.selectpicker.defaults||{},b.data(),g);i.template=a.extend({},k.DEFAULTS.template,a.fn.selectpicker.defaults?a.fn.selectpicker.defaults.template:{},b.data().template,g.template),b.data("selectpicker",f=new k(this,i))}"string"==typeof d&&(e=f[d]instanceof Function?f[d].apply(f,c):f.options[d])}});return"undefined"!=typeof e?e:f}String.prototype.includes||!function(){var a={}.toString,b=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(a){}return c}(),c="".indexOf,d=function(b){if(null==this)throw new TypeError;var d=String(this);if(b&&"[object RegExp]"==a.call(b))throw new TypeError;var e=d.length,f=String(b),g=f.length,h=arguments.length>1?arguments[1]:void 0,i=h?Number(h):0;i!=i&&(i=0);var j=Math.min(Math.max(i,0),e);return!(g+j>e)&&c.call(d,f,i)!=-1};b?b(String.prototype,"includes",{value:d,configurable:!0,writable:!0}):String.prototype.includes=d}(),String.prototype.startsWith||!function(){var a=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(a){}return c}(),b={}.toString,c=function(a){if(null==this)throw new TypeError;var c=String(this);if(a&&"[object RegExp]"==b.call(a))throw new TypeError;var d=c.length,e=String(a),f=e.length,g=arguments.length>1?arguments[1]:void 0,h=g?Number(g):0;h!=h&&(h=0);var i=Math.min(Math.max(h,0),d);if(f+i>d)return!1;for(var j=-1;++j<f;)if(c.charCodeAt(i+j)!=e.charCodeAt(j))return!1;return!0};a?a(String.prototype,"startsWith",{value:c,configurable:!0,writable:!0}):String.prototype.startsWith=c}(),Object.keys||(Object.keys=function(a,b,c){c=[];for(b in a)c.hasOwnProperty.call(a,b)&&c.push(b);return c});var d={useDefault:!1,_set:a.valHooks.select.set};a.valHooks.select.set=function(b,c){return c&&!d.useDefault&&a(b).data("selected",!0),d._set.apply(this,arguments)};var e=null;a.fn.triggerNative=function(a){var b,c=this[0];c.dispatchEvent?("function"==typeof Event?b=new Event(a,{bubbles:!0}):(b=document.createEvent("Event"),b.initEvent(a,!0,!1)),c.dispatchEvent(b)):c.fireEvent?(b=document.createEventObject(),b.eventType=a,c.fireEvent("on"+a,b)):this.trigger(a)},a.expr.pseudos.icontains=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.text()).toString().toUpperCase();return f.includes(d[3].toUpperCase())},a.expr.pseudos.ibegins=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.text()).toString().toUpperCase();return f.startsWith(d[3].toUpperCase())},a.expr.pseudos.aicontains=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.data("normalizedText")||e.text()).toString().toUpperCase();return f.includes(d[3].toUpperCase())},a.expr.pseudos.aibegins=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.data("normalizedText")||e.text()).toString().toUpperCase();return f.startsWith(d[3].toUpperCase())};var f={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},g={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},h=function(a){var b=function(b){return a[b]},c="(?:"+Object.keys(a).join("|")+")",d=RegExp(c),e=RegExp(c,"g");return function(a){return a=null==a?"":""+a,d.test(a)?a.replace(e,b):a}},i=h(f),j=h(g),k=function(b,c){d.useDefault||(a.valHooks.select.set=d._set,d.useDefault=!0),this.$element=a(b),this.$newElement=null,this.$button=null,this.$menu=null,this.$lis=null,this.options=c,null===this.options.title&&(this.options.title=this.$element.attr("title"));var e=this.options.windowPadding;"number"==typeof e&&(this.options.windowPadding=[e,e,e,e]),this.val=k.prototype.val,this.render=k.prototype.render,this.refresh=k.prototype.refresh,this.setStyle=k.prototype.setStyle,this.selectAll=k.prototype.selectAll,this.deselectAll=k.prototype.deselectAll,this.destroy=k.prototype.destroy,this.remove=k.prototype.remove,this.show=k.prototype.show,this.hide=k.prototype.hide,this.init()};k.VERSION="1.12.2",k.DEFAULTS={noneSelectedText:"Nothing selected",noneResultsText:"No results matched {0}",countSelectedText:function(a,b){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){return[1==a?"Limit reached ({n} item max)":"Limit reached ({n} items max)",1==b?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)"]},selectAllText:"Select All",deselectAllText:"Deselect All",doneButton:!1,doneButtonText:"Close",multipleSeparator:", ",styleBase:"btn",style:"btn-default",size:"auto",title:null,selectedTextFormat:"values",width:!1,container:!1,hideDisabled:!1,showSubtext:!1,showIcon:!0,showContent:!0,dropupAuto:!0,header:!1,liveSearch:!1,liveSearchPlaceholder:null,liveSearchNormalize:!1,liveSearchStyle:"contains",actionsBox:!1,iconBase:"glyphicon",tickIcon:"glyphicon-ok",showTick:!1,template:{caret:'<span class="caret"></span>'},maxOptions:!1,mobile:!1,selectOnTab:!1,dropdownAlignRight:!1,windowPadding:0},k.prototype={constructor:k,init:function(){var b=this,c=this.$element.attr("id");this.$element.addClass("bs-select-hidden"),this.liObj={},this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),this.$newElement=this.createView(),this.$element.after(this.$newElement).appendTo(this.$newElement),this.$button=this.$newElement.children("button"),this.$menu=this.$newElement.children(".dropdown-menu"),this.$menuInner=this.$menu.children(".inner"),this.$searchbox=this.$menu.find("input"),this.$element.removeClass("bs-select-hidden"),this.options.dropdownAlignRight===!0&&this.$menu.addClass("dropdown-menu-right"),"undefined"!=typeof c&&(this.$button.attr("data-id",c),a('label[for="'+c+'"]').click(function(a){a.preventDefault(),b.$button.focus()})),this.checkDisabled(),this.clickListener(),this.options.liveSearch&&this.liveSearchListener(),this.render(),this.setStyle(),this.setWidth(),this.options.container&&this.selectPosition(),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile(),this.$newElement.on({"hide.bs.dropdown":function(a){b.$menuInner.attr("aria-expanded",!1),b.$element.trigger("hide.bs.select",a)},"hidden.bs.dropdown":function(a){b.$element.trigger("hidden.bs.select",a)},"show.bs.dropdown":function(a){b.$menuInner.attr("aria-expanded",!0),b.$element.trigger("show.bs.select",a)},"shown.bs.dropdown":function(a){b.$element.trigger("shown.bs.select",a)}}),b.$element[0].hasAttribute("required")&&this.$element.on("invalid",function(){b.$button.addClass("bs-invalid").focus(),b.$element.on({"focus.bs.select":function(){b.$button.focus(),b.$element.off("focus.bs.select")},"shown.bs.select":function(){b.$element.val(b.$element.val()).off("shown.bs.select")},"rendered.bs.select":function(){this.validity.valid&&b.$button.removeClass("bs-invalid"),b.$element.off("rendered.bs.select")}})}),setTimeout(function(){b.$element.trigger("loaded.bs.select")})},createDropdown:function(){var b=this.multiple||this.options.showTick?" show-tick":"",c=this.$element.parent().hasClass("input-group")?" input-group-btn":"",d=this.autofocus?" autofocus":"",e=this.options.header?'<div class="popover-title"><button type="button" class="close" aria-hidden="true">×</button>'+this.options.header+"</div>":"",f=this.options.liveSearch?'<div class="bs-searchbox"><input type="text" class="form-control" autocomplete="off"'+(null===this.options.liveSearchPlaceholder?"":' placeholder="'+i(this.options.liveSearchPlaceholder)+'"')+' role="textbox" aria-label="Search"></div>':"",g=this.multiple&&this.options.actionsBox?'<div class="bs-actionsbox"><div class="btn-group btn-group-sm btn-block"><button type="button" class="actions-btn bs-select-all btn btn-default">'+this.options.selectAllText+'</button><button type="button" class="actions-btn bs-deselect-all btn btn-default">'+this.options.deselectAllText+"</button></div></div>":"",h=this.multiple&&this.options.doneButton?'<div class="bs-donebutton"><div class="btn-group btn-block"><button type="button" class="btn btn-sm btn-default">'+this.options.doneButtonText+"</button></div></div>":"",j='<div class="btn-group bootstrap-select'+b+c+'"><button type="button" class="'+this.options.styleBase+' dropdown-toggle" data-toggle="dropdown"'+d+' role="button"><span class="filter-option pull-left"></span> <span class="bs-caret">'+this.options.template.caret+'</span></button><div class="dropdown-menu open" role="combobox">'+e+f+g+'<ul class="dropdown-menu inner" role="listbox" aria-expanded="false"></ul>'+h+"</div></div>";return a(j)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul")[0].innerHTML=b,a},reloadLi:function(){var a=this.createLi();this.$menuInner[0].innerHTML=a},createLi:function(){var c=this,d=[],e=0,f=document.createElement("option"),g=-1,h=function(a,b,c,d){return"<li"+("undefined"!=typeof c&""!==c?' class="'+c+'"':"")+("undefined"!=typeof b&null!==b?' data-original-index="'+b+'"':"")+("undefined"!=typeof d&null!==d?'data-optgroup="'+d+'"':"")+">"+a+"</li>"},j=function(d,e,f,g){return'<a tabindex="0"'+("undefined"!=typeof e?' class="'+e+'"':"")+(f?' style="'+f+'"':"")+(c.options.liveSearchNormalize?' data-normalized-text="'+b(i(a(d).html()))+'"':"")+("undefined"!=typeof g||null!==g?' data-tokens="'+g+'"':"")+' role="option">'+d+'<span class="'+c.options.iconBase+" "+c.options.tickIcon+' check-mark"></span></a>'};if(this.options.title&&!this.multiple&&(g--,!this.$element.find(".bs-title-option").length)){var k=this.$element[0];f.className="bs-title-option",f.innerHTML=this.options.title,f.value="",k.insertBefore(f,k.firstChild);var l=a(k.options[k.selectedIndex]);void 0===l.attr("selected")&&void 0===this.$element.data("selected")&&(f.selected=!0)}return this.$element.find("option").each(function(b){var f=a(this);if(g++,!f.hasClass("bs-title-option")){var k=this.className||"",l=this.style.cssText,m=f.data("content")?f.data("content"):f.html(),n=f.data("tokens")?f.data("tokens"):null,o="undefined"!=typeof f.data("subtext")?'<small class="text-muted">'+f.data("subtext")+"</small>":"",p="undefined"!=typeof f.data("icon")?'<span class="'+c.options.iconBase+" "+f.data("icon")+'"></span> ':"",q=f.parent(),r="OPTGROUP"===q[0].tagName,s=r&&q[0].disabled,t=this.disabled||s;if(""!==p&&t&&(p="<span>"+p+"</span>"),c.options.hideDisabled&&(t&&!r||s))return void g--;if(f.data("content")||(m=p+'<span class="text">'+m+o+"</span>"),r&&f.data("divider")!==!0){if(c.options.hideDisabled&&t){if(void 0===q.data("allOptionsDisabled")){var u=q.children();q.data("allOptionsDisabled",u.filter(":disabled").length===u.length)}if(q.data("allOptionsDisabled"))return void g--}var v=" "+q[0].className||"";if(0===f.index()){e+=1;var w=q[0].label,x="undefined"!=typeof q.data("subtext")?'<small class="text-muted">'+q.data("subtext")+"</small>":"",y=q.data("icon")?'<span class="'+c.options.iconBase+" "+q.data("icon")+'"></span> ':"";w=y+'<span class="text">'+i(w)+x+"</span>",0!==b&&d.length>0&&(g++,d.push(h("",null,"divider",e+"div"))),g++,d.push(h(w,null,"dropdown-header"+v,e))}if(c.options.hideDisabled&&t)return void g--;d.push(h(j(m,"opt "+k+v,l,n),b,"",e))}else if(f.data("divider")===!0)d.push(h("",b,"divider"));else if(f.data("hidden")===!0)d.push(h(j(m,k,l,n),b,"hidden is-hidden"));else{var z=this.previousElementSibling&&"OPTGROUP"===this.previousElementSibling.tagName;if(!z&&c.options.hideDisabled)for(var A=a(this).prevAll(),B=0;B<A.length;B++)if("OPTGROUP"===A[B].tagName){for(var C=0,D=0;D<B;D++){var E=A[D];(E.disabled||a(E).data("hidden")===!0)&&C++}C===B&&(z=!0);break}z&&(g++,d.push(h("",null,"divider",e+"div"))),d.push(h(j(m,k,l,n),b))}c.liObj[b]=g}}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),d.join("")},findLis:function(){return null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$lis},render:function(b){var c,d=this;b!==!1&&this.$element.find("option").each(function(a){var b=d.findLis().eq(d.liObj[a]);d.setDisabled(a,this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled,b),d.setSelected(a,this.selected,b)}),this.togglePlaceholder(),this.tabIndex();var e=this.$element.find("option").map(function(){if(this.selected){if(d.options.hideDisabled&&(this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled))return;var b,c=a(this),e=c.data("icon")&&d.options.showIcon?'<i class="'+d.options.iconBase+" "+c.data("icon")+'"></i> ':"";return b=d.options.showSubtext&&c.data("subtext")&&!d.multiple?' <small class="text-muted">'+c.data("subtext")+"</small>":"","undefined"!=typeof c.attr("title")?c.attr("title"):c.data("content")&&d.options.showContent?c.data("content").toString():e+c.html()+b}}).toArray(),f=this.multiple?e.join(this.options.multipleSeparator):e[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var g=this.options.selectedTextFormat.split(">");if(g.length>1&&e.length>g[1]||1==g.length&&e.length>=2){c=this.options.hideDisabled?", [disabled]":"";var h=this.$element.find("option").not('[data-divider="true"], [data-hidden="true"]'+c).length,i="function"==typeof this.options.countSelectedText?this.options.countSelectedText(e.length,h):this.options.countSelectedText;f=i.replace("{0}",e.length.toString()).replace("{1}",h.toString())}}void 0==this.options.title&&(this.options.title=this.$element.attr("title")),"static"==this.options.selectedTextFormat&&(f=this.options.title),f||(f="undefined"!=typeof this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",j(a.trim(f.replace(/<[^>]*>?/g,"")))),this.$button.children(".filter-option").html(f),this.$element.trigger("rendered.bs.select")},setStyle:function(a,b){this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi,""));var c=a?a:this.options.style;"add"==b?this.$button.addClass(c):"remove"==b?this.$button.removeClass(c):(this.$button.removeClass(this.options.style),this.$button.addClass(c))},liHeight:function(b){if(b||this.options.size!==!1&&!this.sizeInfo){var c=document.createElement("div"),d=document.createElement("div"),e=document.createElement("ul"),f=document.createElement("li"),g=document.createElement("li"),h=document.createElement("a"),i=document.createElement("span"),j=this.options.header&&this.$menu.find(".popover-title").length>0?this.$menu.find(".popover-title")[0].cloneNode(!0):null,k=this.options.liveSearch?document.createElement("div"):null,l=this.options.actionsBox&&this.multiple&&this.$menu.find(".bs-actionsbox").length>0?this.$menu.find(".bs-actionsbox")[0].cloneNode(!0):null,m=this.options.doneButton&&this.multiple&&this.$menu.find(".bs-donebutton").length>0?this.$menu.find(".bs-donebutton")[0].cloneNode(!0):null;if(i.className="text",c.className=this.$menu[0].parentNode.className+" open",d.className="dropdown-menu open",e.className="dropdown-menu inner",f.className="divider",i.appendChild(document.createTextNode("Inner text")),h.appendChild(i),g.appendChild(h),e.appendChild(g),e.appendChild(f),j&&d.appendChild(j),k){var n=document.createElement("input");k.className="bs-searchbox",n.className="form-control",k.appendChild(n),d.appendChild(k)}l&&d.appendChild(l),d.appendChild(e),m&&d.appendChild(m),c.appendChild(d),document.body.appendChild(c);var o=h.offsetHeight,p=j?j.offsetHeight:0,q=k?k.offsetHeight:0,r=l?l.offsetHeight:0,s=m?m.offsetHeight:0,t=a(f).outerHeight(!0),u="function"==typeof getComputedStyle&&getComputedStyle(d),v=u?null:a(d),w={vert:parseInt(u?u.paddingTop:v.css("paddingTop"))+parseInt(u?u.paddingBottom:v.css("paddingBottom"))+parseInt(u?u.borderTopWidth:v.css("borderTopWidth"))+parseInt(u?u.borderBottomWidth:v.css("borderBottomWidth")),horiz:parseInt(u?u.paddingLeft:v.css("paddingLeft"))+parseInt(u?u.paddingRight:v.css("paddingRight"))+parseInt(u?u.borderLeftWidth:v.css("borderLeftWidth"))+parseInt(u?u.borderRightWidth:v.css("borderRightWidth"))},x={vert:w.vert+parseInt(u?u.marginTop:v.css("marginTop"))+parseInt(u?u.marginBottom:v.css("marginBottom"))+2,horiz:w.horiz+parseInt(u?u.marginLeft:v.css("marginLeft"))+parseInt(u?u.marginRight:v.css("marginRight"))+2};document.body.removeChild(c),this.sizeInfo={liHeight:o,headerHeight:p,searchHeight:q,actionsHeight:r,doneButtonHeight:s,dividerHeight:t,menuPadding:w,menuExtras:x}}},setSize:function(){if(this.findLis(),this.liHeight(),this.options.header&&this.$menu.css("padding-top",0),this.options.size!==!1){var b,c,d,e,f,g,h,i,j=this,k=this.$menu,l=this.$menuInner,m=a(window),n=this.$newElement[0].offsetHeight,o=this.$newElement[0].offsetWidth,p=this.sizeInfo.liHeight,q=this.sizeInfo.headerHeight,r=this.sizeInfo.searchHeight,s=this.sizeInfo.actionsHeight,t=this.sizeInfo.doneButtonHeight,u=this.sizeInfo.dividerHeight,v=this.sizeInfo.menuPadding,w=this.sizeInfo.menuExtras,x=this.options.hideDisabled?".disabled":"",y=function(){var b,c=j.$newElement.offset(),d=a(j.options.container);j.options.container&&!d.is("body")?(b=d.offset(),b.top+=parseInt(d.css("borderTopWidth")),b.left+=parseInt(d.css("borderLeftWidth"))):b={top:0,left:0};var e=j.options.windowPadding;f=c.top-b.top-m.scrollTop(),g=m.height()-f-n-b.top-e[2],h=c.left-b.left-m.scrollLeft(),i=m.width()-h-o-b.left-e[1],f-=e[0],h-=e[3]};if(y(),"auto"===this.options.size){var z=function(){var m,n=function(b,c){return function(d){return c?d.classList?d.classList.contains(b):a(d).hasClass(b):!(d.classList?d.classList.contains(b):a(d).hasClass(b))}},u=j.$menuInner[0].getElementsByTagName("li"),x=Array.prototype.filter?Array.prototype.filter.call(u,n("hidden",!1)):j.$lis.not(".hidden"),z=Array.prototype.filter?Array.prototype.filter.call(x,n("dropdown-header",!0)):x.filter(".dropdown-header");y(),b=g-w.vert,c=i-w.horiz,j.options.container?(k.data("height")||k.data("height",k.height()),d=k.data("height"),k.data("width")||k.data("width",k.width()),e=k.data("width")):(d=k.height(),e=k.width()),j.options.dropupAuto&&j.$newElement.toggleClass("dropup",f>g&&b-w.vert<d),j.$newElement.hasClass("dropup")&&(b=f-w.vert),"auto"===j.options.dropdownAlignRight&&k.toggleClass("dropdown-menu-right",h>i&&c-w.horiz<e-o),m=x.length+z.length>3?3*p+w.vert-2:0,k.css({"max-height":b+"px",overflow:"hidden","min-height":m+q+r+s+t+"px"}),l.css({"max-height":b-q-r-s-t-v.vert+"px","overflow-y":"auto","min-height":Math.max(m-v.vert,0)+"px"})};z(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",z),m.off("resize.getSize scroll.getSize").on("resize.getSize scroll.getSize",z)}else if(this.options.size&&"auto"!=this.options.size&&this.$lis.not(x).length>this.options.size){var A=this.$lis.not(".divider").not(x).children().slice(0,this.options.size).last().parent().index(),B=this.$lis.slice(0,A+1).filter(".divider").length;b=p*this.options.size+B*u+v.vert,j.options.container?(k.data("height")||k.data("height",k.height()),d=k.data("height")):d=k.height(),j.options.dropupAuto&&this.$newElement.toggleClass("dropup",f>g&&b-w.vert<d),k.css({"max-height":b+q+r+s+t+"px",overflow:"hidden","min-height":""}),l.css({"max-height":b-v.vert+"px","overflow-y":"auto","min-height":""})}}},setWidth:function(){if("auto"===this.options.width){this.$menu.css("min-width","0");var a=this.$menu.parent().clone().appendTo("body"),b=this.options.container?this.$newElement.clone().appendTo("body"):a,c=a.children(".dropdown-menu").outerWidth(),d=b.css("width","auto").children("button").outerWidth();a.remove(),b.remove(),this.$newElement.css("width",Math.max(c,d)+"px")}else"fit"===this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width","").addClass("fit-width")):this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width",this.options.width)):(this.$menu.css("min-width",""),this.$newElement.css("width",""));this.$newElement.hasClass("fit-width")&&"fit"!==this.options.width&&this.$newElement.removeClass("fit-width")},selectPosition:function(){this.$bsContainer=a('<div class="bs-container" />');var b,c,d,e=this,f=a(this.options.container),g=function(a){e.$bsContainer.addClass(a.attr("class").replace(/form-control|fit-width/gi,"")).toggleClass("dropup",a.hasClass("dropup")),b=a.offset(),f.is("body")?c={top:0,left:0}:(c=f.offset(),c.top+=parseInt(f.css("borderTopWidth"))-f.scrollTop(),c.left+=parseInt(f.css("borderLeftWidth"))-f.scrollLeft()),d=a.hasClass("dropup")?0:a[0].offsetHeight,e.$bsContainer.css({top:b.top-c.top+d,left:b.left-c.left,width:a[0].offsetWidth})};this.$button.on("click",function(){var b=a(this);e.isDisabled()||(g(e.$newElement),e.$bsContainer.appendTo(e.options.container).toggleClass("open",!b.hasClass("open")).append(e.$menu))}),a(window).on("resize scroll",function(){g(e.$newElement)}),this.$element.on("hide.bs.select",function(){e.$menu.data("height",e.$menu.height()),e.$bsContainer.detach()})},setSelected:function(a,b,c){c||(this.togglePlaceholder(),c=this.findLis().eq(this.liObj[a])),c.toggleClass("selected",b).find("a").attr("aria-selected",b)},setDisabled:function(a,b,c){c||(c=this.findLis().eq(this.liObj[a])),b?c.addClass("disabled").children("a").attr("href","#").attr("tabindex",-1).attr("aria-disabled",!0):c.removeClass("disabled").children("a").removeAttr("href").attr("tabindex",0).attr("aria-disabled",!1)},isDisabled:function(){return this.$element[0].disabled},checkDisabled:function(){var a=this;this.isDisabled()?(this.$newElement.addClass("disabled"),this.$button.addClass("disabled").attr("tabindex",-1).attr("aria-disabled",!0)):(this.$button.hasClass("disabled")&&(this.$newElement.removeClass("disabled"),this.$button.removeClass("disabled").attr("aria-disabled",!1)),this.$button.attr("tabindex")!=-1||this.$element.data("tabindex")||this.$button.removeAttr("tabindex")),this.$button.click(function(){return!a.isDisabled()})},togglePlaceholder:function(){var a=this.$element.val();this.$button.toggleClass("bs-placeholder",null===a||""===a||a.constructor===Array&&0===a.length)},tabIndex:function(){this.$element.data("tabindex")!==this.$element.attr("tabindex")&&this.$element.attr("tabindex")!==-98&&"-98"!==this.$element.attr("tabindex")&&(this.$element.data("tabindex",this.$element.attr("tabindex")),this.$button.attr("tabindex",this.$element.data("tabindex"))),this.$element.attr("tabindex",-98)},clickListener:function(){var b=this,c=a(document);c.data("spaceSelect",!1),this.$button.on("keyup",function(a){/(32)/.test(a.keyCode.toString(10))&&c.data("spaceSelect")&&(a.preventDefault(),c.data("spaceSelect",!1))}),this.$button.on("click",function(){b.setSize()}),this.$element.on("shown.bs.select",function(){if(b.options.liveSearch||b.multiple){if(!b.multiple){var a=b.liObj[b.$element[0].selectedIndex];if("number"!=typeof a||b.options.size===!1)return;var c=b.$lis.eq(a)[0].offsetTop-b.$menuInner[0].offsetTop;c=c-b.$menuInner[0].offsetHeight/2+b.sizeInfo.liHeight/2,b.$menuInner[0].scrollTop=c}}else b.$menuInner.find(".selected a").focus()}),this.$menuInner.on("click","li a",function(c){var d=a(this),f=d.parent().data("originalIndex"),g=b.$element.val(),h=b.$element.prop("selectedIndex"),i=!0;if(b.multiple&&1!==b.options.maxOptions&&c.stopPropagation(),c.preventDefault(),!b.isDisabled()&&!d.parent().hasClass("disabled")){var j=b.$element.find("option"),k=j.eq(f),l=k.prop("selected"),m=k.parent("optgroup"),n=b.options.maxOptions,o=m.data("maxOptions")||!1;if(b.multiple){if(k.prop("selected",!l),b.setSelected(f,!l),d.blur(),n!==!1||o!==!1){var p=n<j.filter(":selected").length,q=o<m.find("option:selected").length;if(n&&p||o&&q)if(n&&1==n)j.prop("selected",!1),k.prop("selected",!0),b.$menuInner.find(".selected").removeClass("selected"),b.setSelected(f,!0);else if(o&&1==o){m.find("option:selected").prop("selected",!1),k.prop("selected",!0);var r=d.parent().data("optgroup");b.$menuInner.find('[data-optgroup="'+r+'"]').removeClass("selected"),b.setSelected(f,!0)}else{var s="string"==typeof b.options.maxOptionsText?[b.options.maxOptionsText,b.options.maxOptionsText]:b.options.maxOptionsText,t="function"==typeof s?s(n,o):s,u=t[0].replace("{n}",n),v=t[1].replace("{n}",o),w=a('<div class="notify"></div>');t[2]&&(u=u.replace("{var}",t[2][n>1?0:1]),v=v.replace("{var}",t[2][o>1?0:1])),k.prop("selected",!1),b.$menu.append(w),n&&p&&(w.append(a("<div>"+u+"</div>")),i=!1,b.$element.trigger("maxReached.bs.select")),o&&q&&(w.append(a("<div>"+v+"</div>")),i=!1,b.$element.trigger("maxReachedGrp.bs.select")),setTimeout(function(){b.setSelected(f,!1)},10),w.delay(750).fadeOut(300,function(){a(this).remove()})}}}else j.prop("selected",!1),k.prop("selected",!0),b.$menuInner.find(".selected").removeClass("selected").find("a").attr("aria-selected",!1),b.setSelected(f,!0);!b.multiple||b.multiple&&1===b.options.maxOptions?b.$button.focus():b.options.liveSearch&&b.$searchbox.focus(),i&&(g!=b.$element.val()&&b.multiple||h!=b.$element.prop("selectedIndex")&&!b.multiple)&&(e=[f,k.prop("selected"),l],b.$element.triggerNative("change"))}}),this.$menu.on("click","li.disabled a, .popover-title, .popover-title :not(.close)",function(c){c.currentTarget==this&&(c.preventDefault(),c.stopPropagation(),b.options.liveSearch&&!a(c.target).hasClass("close")?b.$searchbox.focus():b.$button.focus())}),this.$menuInner.on("click",".divider, .dropdown-header",function(a){a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus()}),this.$menu.on("click",".popover-title .close",function(){b.$button.click()}),this.$searchbox.on("click",function(a){a.stopPropagation()}),this.$menu.on("click",".actions-btn",function(c){b.options.liveSearch?b.$searchbox.focus():b.$button.focus(),c.preventDefault(),c.stopPropagation(),a(this).hasClass("bs-select-all")?b.selectAll():b.deselectAll()}),this.$element.change(function(){b.render(!1),b.$element.trigger("changed.bs.select",e),e=null})},liveSearchListener:function(){var c=this,d=a('<li class="no-results"></li>');this.$button.on("click.dropdown.data-api",function(){c.$menuInner.find(".active").removeClass("active"),c.$searchbox.val()&&(c.$searchbox.val(""),c.$lis.not(".is-hidden").removeClass("hidden"),d.parent().length&&d.remove()),c.multiple||c.$menuInner.find(".selected").addClass("active"),setTimeout(function(){c.$searchbox.focus()},10)}),this.$searchbox.on("click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api",function(a){a.stopPropagation()}),this.$searchbox.on("input propertychange",function(){if(c.$lis.not(".is-hidden").removeClass("hidden"),c.$lis.filter(".active").removeClass("active"),d.remove(),c.$searchbox.val()){var e,f=c.$lis.not(".is-hidden, .divider, .dropdown-header");if(e=c.options.liveSearchNormalize?f.find("a").not(":a"+c._searchStyle()+'("'+b(c.$searchbox.val())+'")'):f.find("a").not(":"+c._searchStyle()+'("'+c.$searchbox.val()+'")'),e.length===f.length)d.html(c.options.noneResultsText.replace("{0}",'"'+i(c.$searchbox.val())+'"')),c.$menuInner.append(d),c.$lis.addClass("hidden");else{e.parent().addClass("hidden");var g,h=c.$lis.not(".hidden");h.each(function(b){var c=a(this);c.hasClass("divider")?void 0===g?c.addClass("hidden"):(g&&g.addClass("hidden"),g=c):c.hasClass("dropdown-header")&&h.eq(b+1).data("optgroup")!==c.data("optgroup")?c.addClass("hidden"):g=null}),g&&g.addClass("hidden"),f.not(".hidden").first().addClass("active")}}})},_searchStyle:function(){var a={begins:"ibegins",startsWith:"ibegins"};return a[this.options.liveSearchStyle]||"icontains"},val:function(a){return"undefined"!=typeof a?(this.$element.val(a),this.render(),this.$element):this.$element.val()},changeAll:function(b){if(this.multiple){"undefined"==typeof b&&(b=!0),this.findLis();var c=this.$element.find("option"),d=this.$lis.not(".divider, .dropdown-header, .disabled, .hidden"),e=d.length,f=[];if(b){if(d.filter(".selected").length===d.length)return}else if(0===d.filter(".selected").length)return;d.toggleClass("selected",b);for(var g=0;g<e;g++){var h=d[g].getAttribute("data-original-index");f[f.length]=c.eq(h)[0]}a(f).prop("selected",b),this.render(!1),this.togglePlaceholder(),this.$element.triggerNative("change")}},selectAll:function(){return this.changeAll(!0)},deselectAll:function(){return this.changeAll(!1)},toggle:function(a){a=a||window.event,a&&a.stopPropagation(),this.$button.trigger("click")},keydown:function(c){var d,e,f,g,h,i,j,k,l,m=a(this),n=m.is("input")?m.parent().parent():m.parent(),o=n.data("this"),p=":not(.disabled, .hidden, .dropdown-header, .divider)",q={32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9"};if(o.options.liveSearch&&(n=m.parent().parent()),o.options.container&&(n=o.$menu),d=a('[role="listbox"] li',n),l=o.$newElement.hasClass("open"),!l&&(c.keyCode>=48&&c.keyCode<=57||c.keyCode>=96&&c.keyCode<=105||c.keyCode>=65&&c.keyCode<=90))return o.options.container?o.$button.trigger("click"):(o.setSize(),o.$menu.parent().addClass("open"),l=!0),void o.$searchbox.focus();if(o.options.liveSearch&&(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&(c.preventDefault(),c.stopPropagation(),o.$menuInner.click(),o.$button.focus()),d=a('[role="listbox"] li'+p,n),m.val()||/(38|40)/.test(c.keyCode.toString(10))||0===d.filter(".active").length&&(d=o.$menuInner.find("li"),d=o.options.liveSearchNormalize?d.filter(":a"+o._searchStyle()+"("+b(q[c.keyCode])+")"):d.filter(":"+o._searchStyle()+"("+q[c.keyCode]+")"))),d.length){if(/(38|40)/.test(c.keyCode.toString(10)))e=d.index(d.find("a").filter(":focus").parent()),g=d.filter(p).first().index(),h=d.filter(p).last().index(),f=d.eq(e).nextAll(p).eq(0).index(),i=d.eq(e).prevAll(p).eq(0).index(),j=d.eq(f).prevAll(p).eq(0).index(),o.options.liveSearch&&(d.each(function(b){a(this).hasClass("disabled")||a(this).data("index",b)}),e=d.index(d.filter(".active")),g=d.first().data("index"),h=d.last().data("index"),f=d.eq(e).nextAll().eq(0).data("index"),i=d.eq(e).prevAll().eq(0).data("index"),j=d.eq(f).prevAll().eq(0).data("index")),k=m.data("prevIndex"),38==c.keyCode?(o.options.liveSearch&&e--,e!=j&&e>i&&(e=i),e<g&&(e=g),e==k&&(e=h)):40==c.keyCode&&(o.options.liveSearch&&e++,e==-1&&(e=0),e!=j&&e<f&&(e=f),e>h&&(e=h),e==k&&(e=g)),m.data("prevIndex",e),o.options.liveSearch?(c.preventDefault(),m.hasClass("dropdown-toggle")||(d.removeClass("active").eq(e).addClass("active").children("a").focus(),m.focus())):d.eq(e).children("a").focus();else if(!m.is("input")){var r,s,t=[];d.each(function(){a(this).hasClass("disabled")||a.trim(a(this).children("a").text().toLowerCase()).substring(0,1)==q[c.keyCode]&&t.push(a(this).index())}),r=a(document).data("keycount"),r++,a(document).data("keycount",r),s=a.trim(a(":focus").text().toLowerCase()).substring(0,1),s!=q[c.keyCode]?(r=1,a(document).data("keycount",r)):r>=t.length&&(a(document).data("keycount",0),r>t.length&&(r=1)),d.eq(t[r-1]).children("a").focus()}if((/(13|32)/.test(c.keyCode.toString(10))||/(^9$)/.test(c.keyCode.toString(10))&&o.options.selectOnTab)&&l){if(/(32)/.test(c.keyCode.toString(10))||c.preventDefault(),o.options.liveSearch)/(32)/.test(c.keyCode.toString(10))||(o.$menuInner.find(".active a").click(),
|
8 |
+
m.focus());else{var u=a(":focus");u.click(),u.focus(),c.preventDefault(),a(document).data("spaceSelect",!0)}a(document).data("keycount",0)}(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&(o.multiple||o.options.liveSearch)||/(27)/.test(c.keyCode.toString(10))&&!l)&&(o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus())}},mobile:function(){this.$element.addClass("mobile-device")},refresh:function(){this.$lis=null,this.liObj={},this.reloadLi(),this.render(),this.checkDisabled(),this.liHeight(!0),this.setStyle(),this.setWidth(),this.$lis&&this.$searchbox.trigger("propertychange"),this.$element.trigger("refreshed.bs.select")},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()},destroy:function(){this.$newElement.before(this.$element).remove(),this.$bsContainer?this.$bsContainer.remove():this.$menu.remove(),this.$element.off(".bs.select").removeData("selectpicker").removeClass("bs-select-hidden selectpicker")}};var l=a.fn.selectpicker;a.fn.selectpicker=c,a.fn.selectpicker.Constructor=k,a.fn.selectpicker.noConflict=function(){return a.fn.selectpicker=l,this},a(document).data("keycount",0).on("keydown.bs.select",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="listbox"], .bs-searchbox input',k.prototype.keydown).on("focusin.modal",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="listbox"], .bs-searchbox input',function(a){a.stopPropagation()}),a(window).on("load.bs.select.data-api",function(){a(".selectpicker").each(function(){var b=a(this);c.call(b,b.data())})})}(a)});
|
9 |
+
//# sourceMappingURL=bootstrap-select.js.map
|
public/js/admin/bootstrap-toggle.js
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*! ========================================================================
|
2 |
+
* Bootstrap Toggle: bootstrap-toggle.js v2.2.0
|
3 |
+
* http://www.bootstraptoggle.com
|
4 |
+
* ========================================================================
|
5 |
+
* Copyright 2014 Min Hur, The New York Times Company
|
6 |
+
* Licensed under MIT
|
7 |
+
* ======================================================================== */
|
8 |
+
+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.toggle"),f="object"==typeof b&&b;e||d.data("bs.toggle",e=new c(this,f)),"string"==typeof b&&e[b]&&e[b]()})}var c=function(b,c){this.$element=a(b),this.options=a.extend({},this.defaults(),c),this.render()};c.VERSION="2.2.0",c.DEFAULTS={on:"On",off:"Off",onstyle:"primary",offstyle:"default",size:"normal",style:"",width:null,height:null},c.prototype.defaults=function(){return{on:this.$element.attr("data-on")||c.DEFAULTS.on,off:this.$element.attr("data-off")||c.DEFAULTS.off,onstyle:this.$element.attr("data-onstyle")||c.DEFAULTS.onstyle,offstyle:this.$element.attr("data-offstyle")||c.DEFAULTS.offstyle,size:this.$element.attr("data-size")||c.DEFAULTS.size,style:this.$element.attr("data-style")||c.DEFAULTS.style,width:this.$element.attr("data-width")||c.DEFAULTS.width,height:this.$element.attr("data-height")||c.DEFAULTS.height}},c.prototype.render=function(){this._onstyle="btn-"+this.options.onstyle,this._offstyle="btn-"+this.options.offstyle;var b="large"===this.options.size?"btn-lg":"small"===this.options.size?"btn-sm":"mini"===this.options.size?"btn-xs":"",c=a('<label class="btn">').html(this.options.on).addClass(this._onstyle+" "+b),d=a('<label class="btn">').html(this.options.off).addClass(this._offstyle+" "+b+" active"),e=a('<span class="toggle-handle btn btn-default">').addClass(b),f=a('<div class="toggle-group">').append(c,d,e),g=a('<div class="toggle btn" data-toggle="toggle">').addClass(this.$element.prop("checked")?this._onstyle:this._offstyle+" off").addClass(b).addClass(this.options.style);this.$element.wrap(g),a.extend(this,{$toggle:this.$element.parent(),$toggleOn:c,$toggleOff:d,$toggleGroup:f}),this.$toggle.append(f);var h=this.options.width||Math.max(c.outerWidth(),d.outerWidth())+e.outerWidth()/2,i=this.options.height||Math.max(c.outerHeight(),d.outerHeight());c.addClass("toggle-on"),d.addClass("toggle-off"),this.$toggle.css({width:h,height:i}),this.options.height&&(c.css("line-height",c.height()+"px"),d.css("line-height",d.height()+"px")),this.update(!0),this.trigger(!0)},c.prototype.toggle=function(){this.$element.prop("checked")?this.off():this.on()},c.prototype.on=function(a){return this.$element.prop("disabled")?!1:(this.$toggle.removeClass(this._offstyle+" off").addClass(this._onstyle),this.$element.prop("checked",!0),void(a||this.trigger()))},c.prototype.off=function(a){return this.$element.prop("disabled")?!1:(this.$toggle.removeClass(this._onstyle).addClass(this._offstyle+" off"),this.$element.prop("checked",!1),void(a||this.trigger()))},c.prototype.enable=function(){this.$toggle.removeAttr("disabled"),this.$element.prop("disabled",!1)},c.prototype.disable=function(){this.$toggle.attr("disabled","disabled"),this.$element.prop("disabled",!0)},c.prototype.update=function(a){this.$element.prop("disabled")?this.disable():this.enable(),this.$element.prop("checked")?this.on(a):this.off(a)},c.prototype.trigger=function(b){this.$element.off("change.bs.toggle"),b||this.$element.change(),this.$element.on("change.bs.toggle",a.proxy(function(){this.update()},this))},c.prototype.destroy=function(){this.$element.off("change.bs.toggle"),this.$toggleGroup.remove(),this.$element.removeData("bs.toggle"),this.$element.unwrap()};var d=a.fn.bootstrapToggle;a.fn.bootstrapToggle=b,a.fn.bootstrapToggle.Constructor=c,a.fn.toggle.noConflict=function(){return a.fn.bootstrapToggle=d,this},a(function(){a("input[type=checkbox][data-toggle^=toggle]").bootstrapToggle()}),a(document).on("click.bs.toggle","div[data-toggle^=toggle]",function(b){var c=a(this).find("input[type=checkbox]");c.bootstrapToggle("toggle"),b.preventDefault()})}(jQuery);
|
9 |
+
//# sourceMappingURL=bootstrap-toggle.min.js.map
|
public/js/admin/bootstrap.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
3 |
+
* Copyright 2011-2016 Twitter, Inc.
|
4 |
+
* Licensed under the MIT license
|
5 |
+
*/
|
6 |
+
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){
|
7 |
+
this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
|
public/js/admin/minicolours.js
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* jQuery MiniColors: A tiny color picker built on jQuery
|
3 |
+
*
|
4 |
+
* Copyright: Cory LaViska for A Beautiful Site, LLC: http://www.abeautifulsite.net/
|
5 |
+
*
|
6 |
+
* Contribute: https://github.com/claviska/jquery-minicolors
|
7 |
+
*
|
8 |
+
* @license: http://opensource.org/licenses/MIT
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
!function(i){"function"==typeof define&&define.amd?define(["jquery"],i):"object"==typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function($){"use strict";function i(i,t){var o=$('<div class="minicolors" />'),s=$.minicolors.defaults,a,n,r,c,l;if(!i.data("minicolors-initialized")){if(t=$.extend(!0,{},s,t),o.addClass("minicolors-theme-"+t.theme).toggleClass("minicolors-with-opacity",t.opacity).toggleClass("minicolors-no-data-uris",t.dataUris!==!0),void 0!==t.position&&$.each(t.position.split(" "),function(){o.addClass("minicolors-position-"+this)}),a="rgb"===t.format?t.opacity?"25":"20":t.keywords?"11":"7",i.addClass("minicolors-input").data("minicolors-initialized",!1).data("minicolors-settings",t).prop("size",a).wrap(o).after('<div class="minicolors-panel minicolors-slider-'+t.control+'"><div class="minicolors-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-opacity-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-grid minicolors-sprite"><div class="minicolors-grid-inner"></div><div class="minicolors-picker"><div></div></div></div></div>'),t.inline||(i.after('<span class="minicolors-swatch minicolors-sprite minicolors-input-swatch"><span class="minicolors-swatch-color"></span></span>'),i.next(".minicolors-input-swatch").on("click",function(t){t.preventDefault(),i.focus()})),c=i.parent().find(".minicolors-panel"),c.on("selectstart",function(){return!1}).end(),t.swatches&&0!==t.swatches.length)for(t.swatches.length>7&&(t.swatches.length=7),c.addClass("minicolors-with-swatches"),n=$('<ul class="minicolors-swatches"></ul>').appendTo(c),l=0;l<t.swatches.length;++l)r=t.swatches[l],r=f(r)?u(r,!0):x(p(r,!0)),$('<li class="minicolors-swatch minicolors-sprite"><span class="minicolors-swatch-color"></span></li>').appendTo(n).data("swatch-color",t.swatches[l]).find(".minicolors-swatch-color").css({backgroundColor:y(r),opacity:r.a}),t.swatches[l]=r;t.inline&&i.parent().addClass("minicolors-inline"),e(i,!1),i.data("minicolors-initialized",!0)}}function t(i){var t=i.parent();i.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input"),t.before(i).remove()}function o(i){var t=i.parent(),o=t.find(".minicolors-panel"),a=i.data("minicolors-settings");!i.data("minicolors-initialized")||i.prop("disabled")||t.hasClass("minicolors-inline")||t.hasClass("minicolors-focus")||(s(),t.addClass("minicolors-focus"),o.stop(!0,!0).fadeIn(a.showSpeed,function(){a.show&&a.show.call(i.get(0))}))}function s(){$(".minicolors-focus").each(function(){var i=$(this),t=i.find(".minicolors-input"),o=i.find(".minicolors-panel"),s=t.data("minicolors-settings");o.fadeOut(s.hideSpeed,function(){s.hide&&s.hide.call(t.get(0)),i.removeClass("minicolors-focus")})})}function a(i,t,o){var s=i.parents(".minicolors").find(".minicolors-input"),a=s.data("minicolors-settings"),r=i.find("[class$=-picker]"),e=i.offset().left,c=i.offset().top,l=Math.round(t.pageX-e),h=Math.round(t.pageY-c),d=o?a.animationSpeed:0,p,u,g,m;t.originalEvent.changedTouches&&(l=t.originalEvent.changedTouches[0].pageX-e,h=t.originalEvent.changedTouches[0].pageY-c),0>l&&(l=0),0>h&&(h=0),l>i.width()&&(l=i.width()),h>i.height()&&(h=i.height()),i.parent().is(".minicolors-slider-wheel")&&r.parent().is(".minicolors-grid")&&(p=75-l,u=75-h,g=Math.sqrt(p*p+u*u),m=Math.atan2(u,p),0>m&&(m+=2*Math.PI),g>75&&(g=75,l=75-75*Math.cos(m),h=75-75*Math.sin(m)),l=Math.round(l),h=Math.round(h)),i.is(".minicolors-grid")?r.stop(!0).animate({top:h+"px",left:l+"px"},d,a.animationEasing,function(){n(s,i)}):r.stop(!0).animate({top:h+"px"},d,a.animationEasing,function(){n(s,i)})}function n(i,t){function o(i,t){var o,s;return i.length&&t?(o=i.offset().left,s=i.offset().top,{x:o-t.offset().left+i.outerWidth()/2,y:s-t.offset().top+i.outerHeight()/2}):null}var s,a,n,e,l,h,d,p=i.val(),u=i.attr("data-opacity"),g=i.parent(),f=i.data("minicolors-settings"),v=g.find(".minicolors-input-swatch"),b=g.find(".minicolors-grid"),w=g.find(".minicolors-slider"),y=g.find(".minicolors-opacity-slider"),k=b.find("[class$=-picker]"),M=w.find("[class$=-picker]"),x=y.find("[class$=-picker]"),I=o(k,b),S=o(M,w),z=o(x,y);if(t.is(".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider")){switch(f.control){case"wheel":e=b.width()/2-I.x,l=b.height()/2-I.y,h=Math.sqrt(e*e+l*l),d=Math.atan2(l,e),0>d&&(d+=2*Math.PI),h>75&&(h=75,I.x=69-75*Math.cos(d),I.y=69-75*Math.sin(d)),a=m(h/.75,0,100),s=m(180*d/Math.PI,0,360),n=m(100-Math.floor(S.y*(100/w.height())),0,100),p=C({h:s,s:a,b:n}),w.css("backgroundColor",C({h:s,s:a,b:100}));break;case"saturation":s=m(parseInt(I.x*(360/b.width()),10),0,360),a=m(100-Math.floor(S.y*(100/w.height())),0,100),n=m(100-Math.floor(I.y*(100/b.height())),0,100),p=C({h:s,s:a,b:n}),w.css("backgroundColor",C({h:s,s:100,b:n})),g.find(".minicolors-grid-inner").css("opacity",a/100);break;case"brightness":s=m(parseInt(I.x*(360/b.width()),10),0,360),a=m(100-Math.floor(I.y*(100/b.height())),0,100),n=m(100-Math.floor(S.y*(100/w.height())),0,100),p=C({h:s,s:a,b:n}),w.css("backgroundColor",C({h:s,s:a,b:100})),g.find(".minicolors-grid-inner").css("opacity",1-n/100);break;default:s=m(360-parseInt(S.y*(360/w.height()),10),0,360),a=m(Math.floor(I.x*(100/b.width())),0,100),n=m(100-Math.floor(I.y*(100/b.height())),0,100),p=C({h:s,s:a,b:n}),b.css("backgroundColor",C({h:s,s:100,b:100}))}u=f.opacity?parseFloat(1-z.y/y.height()).toFixed(2):1,r(i,p,u)}else v.find("span").css({backgroundColor:p,opacity:u}),c(i,p,u)}function r(i,t,o){var s,a=i.parent(),n=i.data("minicolors-settings"),r=a.find(".minicolors-input-swatch");n.opacity&&i.attr("data-opacity",o),"rgb"===n.format?(s=f(t)?u(t,!0):x(p(t,!0)),o=""===i.attr("data-opacity")?1:m(parseFloat(i.attr("data-opacity")).toFixed(2),0,1),(isNaN(o)||!n.opacity)&&(o=1),t=i.minicolors("rgbObject").a<=1&&s&&n.opacity?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(o)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):(f(t)&&(t=w(t)),t=d(t,n.letterCase)),i.val(t),r.find("span").css({backgroundColor:t,opacity:o}),c(i,t,o)}function e(i,t){var o,s,a,n,r,e,l,h,b,y,M=i.parent(),x=i.data("minicolors-settings"),I=M.find(".minicolors-input-swatch"),S=M.find(".minicolors-grid"),z=M.find(".minicolors-slider"),F=M.find(".minicolors-opacity-slider"),D=S.find("[class$=-picker]"),T=z.find("[class$=-picker]"),j=F.find("[class$=-picker]");switch(f(i.val())?(o=w(i.val()),r=m(parseFloat(v(i.val())).toFixed(2),0,1),r&&i.attr("data-opacity",r)):o=d(p(i.val(),!0),x.letterCase),o||(o=d(g(x.defaultValue,!0),x.letterCase)),s=k(o),n=x.keywords?$.map(x.keywords.split(","),function(i){return $.trim(i.toLowerCase())}):[],e=""!==i.val()&&$.inArray(i.val().toLowerCase(),n)>-1?d(i.val()):f(i.val())?u(i.val()):o,t||i.val(e),x.opacity&&(a=""===i.attr("data-opacity")?1:m(parseFloat(i.attr("data-opacity")).toFixed(2),0,1),isNaN(a)&&(a=1),i.attr("data-opacity",a),I.find("span").css("opacity",a),h=m(F.height()-F.height()*a,0,F.height()),j.css("top",h+"px")),"transparent"===i.val().toLowerCase()&&I.find("span").css("opacity",0),I.find("span").css("backgroundColor",o),x.control){case"wheel":b=m(Math.ceil(.75*s.s),0,S.height()/2),y=s.h*Math.PI/180,l=m(75-Math.cos(y)*b,0,S.width()),h=m(75-Math.sin(y)*b,0,S.height()),D.css({top:h+"px",left:l+"px"}),h=150-s.b/(100/S.height()),""===o&&(h=0),T.css("top",h+"px"),z.css("backgroundColor",C({h:s.h,s:s.s,b:100}));break;case"saturation":l=m(5*s.h/12,0,150),h=m(S.height()-Math.ceil(s.b/(100/S.height())),0,S.height()),D.css({top:h+"px",left:l+"px"}),h=m(z.height()-s.s*(z.height()/100),0,z.height()),T.css("top",h+"px"),z.css("backgroundColor",C({h:s.h,s:100,b:s.b})),M.find(".minicolors-grid-inner").css("opacity",s.s/100);break;case"brightness":l=m(5*s.h/12,0,150),h=m(S.height()-Math.ceil(s.s/(100/S.height())),0,S.height()),D.css({top:h+"px",left:l+"px"}),h=m(z.height()-s.b*(z.height()/100),0,z.height()),T.css("top",h+"px"),z.css("backgroundColor",C({h:s.h,s:s.s,b:100})),M.find(".minicolors-grid-inner").css("opacity",1-s.b/100);break;default:l=m(Math.ceil(s.s/(100/S.width())),0,S.width()),h=m(S.height()-Math.ceil(s.b/(100/S.height())),0,S.height()),D.css({top:h+"px",left:l+"px"}),h=m(z.height()-s.h/(360/z.height()),0,z.height()),T.css("top",h+"px"),S.css("backgroundColor",C({h:s.h,s:100,b:100}))}i.data("minicolors-initialized")&&c(i,e,a)}function c(i,t,o){var s=i.data("minicolors-settings"),a=i.data("minicolors-lastChange"),n,r,e;if(!a||a.value!==t||a.opacity!==o){if(i.data("minicolors-lastChange",{value:t,opacity:o}),s.swatches&&0!==s.swatches.length){for(n=f(t)?u(t,!0):x(t),r=-1,e=0;e<s.swatches.length;++e)if(n.r===s.swatches[e].r&&n.g===s.swatches[e].g&&n.b===s.swatches[e].b&&n.a===s.swatches[e].a){r=e;break}i.parent().find(".minicolors-swatches .minicolors-swatch").removeClass("selected"),-1!==e&&i.parent().find(".minicolors-swatches .minicolors-swatch").eq(e).addClass("selected")}s.change&&(s.changeDelay?(clearTimeout(i.data("minicolors-changeTimeout")),i.data("minicolors-changeTimeout",setTimeout(function(){s.change.call(i.get(0),t,o)},s.changeDelay))):s.change.call(i.get(0),t,o)),i.trigger("change").trigger("input")}}function l(i){var t=p($(i).val(),!0),o=x(t),s=$(i).attr("data-opacity");return o?(void 0!==s&&$.extend(o,{a:parseFloat(s)}),o):null}function h(i,t){var o=p($(i).val(),!0),s=x(o),a=$(i).attr("data-opacity");return s?(void 0===a&&(a=1),t?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(a)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):null}function d(i,t){return"uppercase"===t?i.toUpperCase():i.toLowerCase()}function p(i,t){return i=i.replace(/^#/g,""),i.match(/^[A-F0-9]{3,6}/gi)?3!==i.length&&6!==i.length?"":(3===i.length&&t&&(i=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]),"#"+i):""}function u(i,t){var o=i.replace(/[^\d,.]/g,""),s=o.split(",");return s[0]=m(parseInt(s[0],10),0,255),s[1]=m(parseInt(s[1],10),0,255),s[2]=m(parseInt(s[2],10),0,255),s[3]&&(s[3]=m(parseFloat(s[3],10),0,1)),t?{r:s[0],g:s[1],b:s[2],a:s[3]?s[3]:null}:"undefined"!=typeof s[3]&&s[3]<=1?"rgba("+s[0]+", "+s[1]+", "+s[2]+", "+s[3]+")":"rgb("+s[0]+", "+s[1]+", "+s[2]+")"}function g(i,t){return f(i)?u(i):p(i,t)}function m(i,t,o){return t>i&&(i=t),i>o&&(i=o),i}function f(i){var t=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);return t&&4===t.length?!0:!1}function v(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+(\.\d{1,2})?|\.\d{1,2})[\s+]?/i),i&&6===i.length?i[4]:"1"}function b(i){var t={},o=Math.round(i.h),s=Math.round(255*i.s/100),a=Math.round(255*i.b/100);if(0===s)t.r=t.g=t.b=a;else{var n=a,r=(255-s)*a/255,e=(n-r)*(o%60)/60;360===o&&(o=0),60>o?(t.r=n,t.b=r,t.g=r+e):120>o?(t.g=n,t.b=r,t.r=n-e):180>o?(t.g=n,t.r=r,t.b=r+e):240>o?(t.b=n,t.r=r,t.g=n-e):300>o?(t.b=n,t.g=r,t.r=r+e):360>o?(t.r=n,t.g=r,t.b=n-e):(t.r=0,t.g=0,t.b=0)}return{r:Math.round(t.r),g:Math.round(t.g),b:Math.round(t.b)}}function w(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i),i&&4===i.length?"#"+("0"+parseInt(i[1],10).toString(16)).slice(-2)+("0"+parseInt(i[2],10).toString(16)).slice(-2)+("0"+parseInt(i[3],10).toString(16)).slice(-2):""}function y(i){var t=[i.r.toString(16),i.g.toString(16),i.b.toString(16)];return $.each(t,function(i,o){1===o.length&&(t[i]="0"+o)}),"#"+t.join("")}function C(i){return y(b(i))}function k(i){var t=M(x(i));return 0===t.s&&(t.h=360),t}function M(i){var t={h:0,s:0,b:0},o=Math.min(i.r,i.g,i.b),s=Math.max(i.r,i.g,i.b),a=s-o;return t.b=s,t.s=0!==s?255*a/s:0,0!==t.s?i.r===s?t.h=(i.g-i.b)/a:i.g===s?t.h=2+(i.b-i.r)/a:t.h=4+(i.r-i.g)/a:t.h=-1,t.h*=60,t.h<0&&(t.h+=360),t.s*=100/255,t.b*=100/255,t}function x(i){return i=parseInt(i.indexOf("#")>-1?i.substring(1):i,16),{r:i>>16,g:(65280&i)>>8,b:255&i}}$.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",dataUris:!0,defaultValue:"",format:"hex",hide:null,hideSpeed:100,inline:!1,keywords:"",letterCase:"lowercase",opacity:!1,position:"bottom left",show:null,showSpeed:100,theme:"default",swatches:[]}},$.extend($.fn,{minicolors:function(a,n){switch(a){case"destroy":return $(this).each(function(){t($(this))}),$(this);case"hide":return s(),$(this);case"opacity":return void 0===n?$(this).attr("data-opacity"):($(this).each(function(){e($(this).attr("data-opacity",n))}),$(this));case"rgbObject":return l($(this),"rgbaObject"===a);case"rgbString":case"rgbaString":return h($(this),"rgbaString"===a);case"settings":return void 0===n?$(this).data("minicolors-settings"):($(this).each(function(){var i=$(this).data("minicolors-settings")||{};t($(this)),$(this).minicolors($.extend(!0,i,n))}),$(this));case"show":return o($(this).eq(0)),$(this);case"value":return void 0===n?$(this).val():($(this).each(function(){"object"==typeof n&&null!==typeof n?(n.opacity&&$(this).attr("data-opacity",m(n.opacity,0,1)),n.color&&$(this).val(n.color)):$(this).val(n),e($(this))}),$(this));default:return"create"!==a&&(n=a),$(this).each(function(){i($(this),n)}),$(this)}}}),$(document).on("mousedown.minicolors touchstart.minicolors",function(i){$(i.target).parents().add(i.target).hasClass("minicolors")||s()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider",function(i){var t=$(this);i.preventDefault(),$(document).data("minicolors-target",t),a(t,i,!0)}).on("mousemove.minicolors touchmove.minicolors",function(i){var t=$(document).data("minicolors-target");t&&a(t,i)}).on("mouseup.minicolors touchend.minicolors",function(){$(this).removeData("minicolors-target")}).on("click.minicolors",".minicolors-swatches li",function(i){i.preventDefault();var t=$(this),o=t.parents(".minicolors").find(".minicolors-input"),s=t.data("swatch-color");r(o,s,v(s)),e(o)}).on("mousedown.minicolors touchstart.minicolors",".minicolors-input-swatch",function(i){var t=$(this).parent().find(".minicolors-input");i.preventDefault(),o(t)}).on("focus.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&o(i)}).on("blur.minicolors",".minicolors-input",function(){var i=$(this),t=i.data("minicolors-settings"),o,s,a,n,r;i.data("minicolors-initialized")&&(o=t.keywords?$.map(t.keywords.split(","),function(i){return $.trim(i.toLowerCase())}):[],""!==i.val()&&$.inArray(i.val().toLowerCase(),o)>-1?r=i.val():(f(i.val())?a=u(i.val(),!0):(s=p(i.val(),!0),a=s?x(s):null),r=null===a?t.defaultValue:"rgb"===t.format?u(t.opacity?"rgba("+a.r+","+a.g+","+a.b+","+i.attr("data-opacity")+")":"rgb("+a.r+","+a.g+","+a.b+")"):y(a)),n=t.opacity?i.attr("data-opacity"):1,"transparent"===r.toLowerCase()&&(n=0),i.closest(".minicolors").find(".minicolors-input-swatch > span").css("opacity",n),i.val(r),""===i.val()&&i.val(g(t.defaultValue,!0)),i.val(d(i.val(),t.letterCase)))}).on("keydown.minicolors",".minicolors-input",function(i){var t=$(this);if(t.data("minicolors-initialized"))switch(i.keyCode){case 9:s();break;case 13:case 27:s(),t.blur()}}).on("keyup.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&e(i,!0)}).on("paste.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&setTimeout(function(){e(i,!0)},1)})});
|
public/js/app.js.twig
ADDED
@@ -0,0 +1,175 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(document).ready(function($) {
|
2 |
+
|
3 |
+
var ResponsiveMenu = {
|
4 |
+
trigger: '{{ options.button_click_trigger }}',
|
5 |
+
animationSpeed: {{ options.animation_speed * 1000 }},
|
6 |
+
breakpoint: {{ options.breakpoint }},
|
7 |
+
pushButton: '{{ options.button_push_with_animation }}',
|
8 |
+
animationType: '{{ options.animation_type }}',
|
9 |
+
animationSide: '{{ options.menu_appear_from }}',
|
10 |
+
pageWrapper: '{{ options.page_wrapper }}',
|
11 |
+
isOpen: false,
|
12 |
+
triggerTypes: 'click',
|
13 |
+
activeClass: 'is-active',
|
14 |
+
container: '#responsive-menu-container',
|
15 |
+
openClass: 'responsive-menu-open',
|
16 |
+
accordion: '{{ options.accordion_animation }}',
|
17 |
+
activeArrow: '{{ options.getActiveArrow() }}',
|
18 |
+
inactiveArrow: '{{ options.getInActiveArrow() }}',
|
19 |
+
wrapper: '#responsive-menu-wrapper',
|
20 |
+
closeOnBodyClick: '{{ options.menu_close_on_body_click }}',
|
21 |
+
closeOnLinkClick: '{{ options.menu_close_on_link_click }}',
|
22 |
+
itemTriggerSubMenu: '{{ options.menu_item_click_to_trigger_submenu }}',
|
23 |
+
linkElement: '.responsive-menu-item-link',
|
24 |
+
openMenu: function() {
|
25 |
+
$(this.trigger).addClass(this.activeClass);
|
26 |
+
$('html').addClass(this.openClass);
|
27 |
+
$('.responsive-menu-button-icon-active').hide();
|
28 |
+
$('.responsive-menu-button-icon-inactive').show();
|
29 |
+
this.setWrapperTranslate();
|
30 |
+
this.isOpen = true;
|
31 |
+
},
|
32 |
+
closeMenu: function() {
|
33 |
+
$(this.trigger).removeClass(this.activeClass);
|
34 |
+
$('html').removeClass(this.openClass);
|
35 |
+
$('.responsive-menu-button-icon-inactive').hide();
|
36 |
+
$('.responsive-menu-button-icon-active').show();
|
37 |
+
this.clearWrapperTranslate();
|
38 |
+
this.isOpen = false;
|
39 |
+
},
|
40 |
+
triggerMenu: function() {
|
41 |
+
this.isOpen ? this.closeMenu() : this.openMenu();
|
42 |
+
},
|
43 |
+
triggerSubArrow: function(subarrow) {
|
44 |
+
var sub_menu = $(subarrow).parent().next('.responsive-menu-submenu');
|
45 |
+
var self = this;
|
46 |
+
if(this.accordion == 'on') {
|
47 |
+
/* Get Top Most Parent and the siblings */
|
48 |
+
var top_siblings = sub_menu.parents('.responsive-menu-item-has-children').last().siblings('.responsive-menu-item-has-children');
|
49 |
+
var first_siblings = sub_menu.parents('.responsive-menu-item-has-children').first().siblings('.responsive-menu-item-has-children');
|
50 |
+
/* Close up just the top level parents to key the rest as it was */
|
51 |
+
top_siblings.children('.responsive-menu-submenu').slideUp(200, 'linear').removeClass('responsive-menu-submenu-open');
|
52 |
+
/* Set each parent arrow to inactive */
|
53 |
+
top_siblings.each(function() {
|
54 |
+
$(this).find('.responsive-menu-subarrow').first().html(self.inactiveArrow);
|
55 |
+
$(this).find('.responsive-menu-subarrow').first().removeClass('responsive-menu-subarrow-active');
|
56 |
+
});
|
57 |
+
/* Now Repeat for the current item siblings */
|
58 |
+
first_siblings.children('.responsive-menu-submenu').slideUp(200, 'linear').removeClass('responsive-menu-submenu-open');
|
59 |
+
first_siblings.each(function() {
|
60 |
+
$(this).find('.responsive-menu-subarrow').first().html(self.inactiveArrow);
|
61 |
+
$(this).find('.responsive-menu-subarrow').first().removeClass('responsive-menu-subarrow-active');
|
62 |
+
});
|
63 |
+
}
|
64 |
+
if(sub_menu.hasClass('responsive-menu-submenu-open')) {
|
65 |
+
sub_menu.slideUp(200, 'linear').removeClass('responsive-menu-submenu-open');
|
66 |
+
$(subarrow).html(this.inactiveArrow);
|
67 |
+
$(subarrow).removeClass('responsive-menu-subarrow-active');
|
68 |
+
} else {
|
69 |
+
sub_menu.slideDown(200, 'linear').addClass('responsive-menu-submenu-open');
|
70 |
+
$(subarrow).html(this.activeArrow);
|
71 |
+
$(subarrow).addClass('responsive-menu-subarrow-active');
|
72 |
+
}
|
73 |
+
},
|
74 |
+
menuHeight: function() {
|
75 |
+
return $(this.container).height();
|
76 |
+
},
|
77 |
+
menuWidth: function() {
|
78 |
+
return $(this.container).width();
|
79 |
+
},
|
80 |
+
wrapperHeight: function() {
|
81 |
+
return $(this.wrapper).height();
|
82 |
+
},
|
83 |
+
setWrapperTranslate: function() {
|
84 |
+
switch(this.animationSide) {
|
85 |
+
case 'left':
|
86 |
+
translate = 'translateX(' + this.menuWidth() + 'px)'; break;
|
87 |
+
case 'right':
|
88 |
+
translate = 'translateX(-' + this.menuWidth() + 'px)'; break;
|
89 |
+
case 'top':
|
90 |
+
translate = 'translateY(' + this.wrapperHeight() + 'px)'; break;
|
91 |
+
case 'bottom':
|
92 |
+
translate = 'translateY(-' + this.menuHeight() + 'px)'; break;
|
93 |
+
}
|
94 |
+
if(this.animationType == 'push') {
|
95 |
+
$(this.pageWrapper).css({'transform':translate});
|
96 |
+
$('html, body').css('overflow-x', 'hidden');
|
97 |
+
}
|
98 |
+
if(this.pushButton == 'on') {
|
99 |
+
$('#responsive-menu-button').css({'transform':translate});
|
100 |
+
}
|
101 |
+
},
|
102 |
+
clearWrapperTranslate: function() {
|
103 |
+
var self = this;
|
104 |
+
if(this.animationType == 'push') {
|
105 |
+
$(this.pageWrapper).css({'transform':''});
|
106 |
+
setTimeout(function() {
|
107 |
+
$('html, body').css('overflow-x', '');
|
108 |
+
}, self.animationSpeed);
|
109 |
+
}
|
110 |
+
if(this.pushButton == 'on') {
|
111 |
+
$('#responsive-menu-button').css({'transform':''});
|
112 |
+
}
|
113 |
+
},
|
114 |
+
init: function() {
|
115 |
+
var self = this;
|
116 |
+
$(this.trigger).on(this.triggerTypes, function(e){
|
117 |
+
e.stopPropagation();
|
118 |
+
self.triggerMenu();
|
119 |
+
});
|
120 |
+
$('.responsive-menu-subarrow').on('click', function(e) {
|
121 |
+
e.preventDefault();
|
122 |
+
e.stopPropagation();
|
123 |
+
self.triggerSubArrow(this);
|
124 |
+
});
|
125 |
+
$(window).resize(function() {
|
126 |
+
if($(window).width() > self.breakpoint) {
|
127 |
+
if(self.isOpen){
|
128 |
+
self.closeMenu();
|
129 |
+
}
|
130 |
+
} else {
|
131 |
+
if($('.responsive-menu-open').length>0){
|
132 |
+
self.setWrapperTranslate();
|
133 |
+
}
|
134 |
+
}
|
135 |
+
});
|
136 |
+
if(this.closeOnLinkClick == 'on') {
|
137 |
+
$(this.linkElement).on('click', function(e) {
|
138 |
+
e.preventDefault();
|
139 |
+
/* Fix for when close menu on parent clicks is on */
|
140 |
+
if(self.itemTriggerSubMenu == 'on' && $(this).is('.responsive-menu-item-has-children > ' + self.linkElement)) {
|
141 |
+
return;
|
142 |
+
}
|
143 |
+
old_href = $(this).attr('href');
|
144 |
+
old_target = typeof $(this).attr('target') == 'undefined' ? '_self' : $(this).attr('target');
|
145 |
+
if(self.isOpen) {
|
146 |
+
if($(e.target).closest('.responsive-menu-subarrow').length) {
|
147 |
+
return;
|
148 |
+
}
|
149 |
+
self.closeMenu();
|
150 |
+
setTimeout(function() {
|
151 |
+
window.open(old_href, old_target);
|
152 |
+
}, self.animationSpeed);
|
153 |
+
}
|
154 |
+
});
|
155 |
+
}
|
156 |
+
if(this.closeOnBodyClick == 'on') {
|
157 |
+
$(document).on('click', 'body', function(e) {
|
158 |
+
if(self.isOpen) {
|
159 |
+
if($(e.target).closest('#responsive-menu-container').length || $(e.target).closest('#responsive-menu-button').length) {
|
160 |
+
return;
|
161 |
+
}
|
162 |
+
}
|
163 |
+
self.closeMenu();
|
164 |
+
});
|
165 |
+
}
|
166 |
+
if(this.itemTriggerSubMenu == 'on') {
|
167 |
+
$('.responsive-menu-item-has-children > ' + this.linkElement).on('click', function(e) {
|
168 |
+
e.preventDefault();
|
169 |
+
self.triggerSubArrow($(this).children('.responsive-menu-subarrow').first());
|
170 |
+
});
|
171 |
+
}
|
172 |
+
}
|
173 |
+
};
|
174 |
+
ResponsiveMenu.init();
|
175 |
+
});
|
readme.txt
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
=== Responsive Menu ===
|
2 |
Contributors: ResponsiveMenu, peterfeatherstone
|
3 |
Donate link: https://responsive.menu/donate
|
4 |
-
Tags: responsive, menu, responsive menu, mobile menu, wordpress responsive menu, wp responsive menu, tablet menu, mobile, tablet, 3 lines, 3 line, three line, three lines
|
5 |
Requires at least: 3.5.0
|
6 |
-
Tested up to: 4.7.
|
7 |
-
Stable tag: 3.0
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -35,7 +35,7 @@ PHP 5.4+
|
|
35 |
<br /><br />
|
36 |
**Basic Functionality:**
|
37 |
<ul>
|
38 |
-
<li>Change every colour</li>
|
39 |
<li>Set the fonts, font sizes and text alignment you want to use</li>
|
40 |
<li>Set which side and where you want the button to show</li>
|
41 |
<li>Set which side the menu appears from (left, right, top or bottom)</li>
|
@@ -91,15 +91,7 @@ Alternatively:
|
|
91 |
|
92 |
== Frequently Asked Questions ==
|
93 |
|
94 |
-
|
95 |
-
|
96 |
-
This is due to your PHP version not being high enough, you need at least PHP 5.4 for the plugin to work.
|
97 |
-
|
98 |
-
2. I am getting a message similar to `Fatal error: Uncaught exception 'Exception' with message 'parse error: failed at $hamburger-layer-color: ;`, why?
|
99 |
-
|
100 |
-
All you need to do is login to your WordPress admin, go to my plugin page and hit 'Update Options' to fix this.
|
101 |
-
|
102 |
-
To view our whole FAQ, please go to https://responsive.menu/faq/
|
103 |
|
104 |
== Screenshots ==
|
105 |
|
@@ -119,6 +111,19 @@ To view our whole FAQ, please go to https://responsive.menu/faq/
|
|
119 |
|
120 |
== Changelog ==
|
121 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
= 3.0.18 (2nd February 2017) =
|
123 |
* **Requires PHP 5.4**
|
124 |
* Improved border sizes for sub-menus
|
1 |
=== Responsive Menu ===
|
2 |
Contributors: ResponsiveMenu, peterfeatherstone
|
3 |
Donate link: https://responsive.menu/donate
|
4 |
+
Tags: responsive, menu, responsive menu, mobile menu, wordpress responsive menu, wp responsive menu, tablet menu, hamburger menu, hamburger, mobile, tablet, 3 lines, 3 line, three line, three lines
|
5 |
Requires at least: 3.5.0
|
6 |
+
Tested up to: 4.7.3
|
7 |
+
Stable tag: 3.1.0
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
35 |
<br /><br />
|
36 |
**Basic Functionality:**
|
37 |
<ul>
|
38 |
+
<li>Change every text, background and border colour</li>
|
39 |
<li>Set the fonts, font sizes and text alignment you want to use</li>
|
40 |
<li>Set which side and where you want the button to show</li>
|
41 |
<li>Set which side the menu appears from (left, right, top or bottom)</li>
|
91 |
|
92 |
== Frequently Asked Questions ==
|
93 |
|
94 |
+
To view our FAQ, please go to <a href="https://responsive.menu/faq">https://responsive.menu/faq</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
|
96 |
== Screenshots ==
|
97 |
|
111 |
|
112 |
== Changelog ==
|
113 |
|
114 |
+
= 3.1.0 (25th April 2017) =
|
115 |
+
* **Requires PHP 5.4**
|
116 |
+
* Massive overhaul of codebase
|
117 |
+
* Speed improvements to front and back end
|
118 |
+
* Admin now uses BootStrap
|
119 |
+
* Twig templating engine implemented
|
120 |
+
* Added admin form validation to help catch data errors
|
121 |
+
* Added a rebuild database option
|
122 |
+
* Done away with SASS on the fly compilation
|
123 |
+
* Back to on slide effect now customisable - Pro only
|
124 |
+
* Added option to adjust for WP Admin bar - Pro only
|
125 |
+
* Bug fixes and compatibility fixes
|
126 |
+
|
127 |
= 3.0.18 (2nd February 2017) =
|
128 |
* **Requires PHP 5.4**
|
129 |
* Improved border sizes for sub-menus
|
responsive-menu.php
CHANGED
@@ -1,40 +1,36 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
Plugin Name: Responsive Menu
|
5 |
-
Plugin URI: https://responsive.menu
|
6 |
-
Description: Highly Customisable Responsive Menu Plugin for WordPress
|
7 |
-
Version: 3.0
|
8 |
-
Author: Peter Featherstone
|
9 |
-
Text Domain: responsive-menu
|
10 |
-
Author URI: https://peterfeatherstone.com
|
11 |
-
License: GPL2
|
12 |
-
Tags: responsive, menu, responsive menu
|
13 |
-
*/
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
function
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
include dirname(__FILE__) . '/
|
33 |
-
include dirname(__FILE__) . '/
|
34 |
-
|
35 |
-
|
36 |
-
include dirname(__FILE__) . '/
|
37 |
-
|
38 |
-
/* Finally route and initialise the plugin */
|
39 |
-
include dirname(__FILE__) . '/src/config/routing.php';
|
40 |
-
include dirname(__FILE__) . '/src/config/internationalise.php';
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
Plugin Name: Responsive Menu
|
5 |
+
Plugin URI: https://responsive.menu
|
6 |
+
Description: Highly Customisable Responsive Menu Plugin for WordPress
|
7 |
+
Version: 3.1.0
|
8 |
+
Author: Peter Featherstone
|
9 |
+
Text Domain: responsive-menu
|
10 |
+
Author URI: https://peterfeatherstone.com
|
11 |
+
License: GPL2
|
12 |
+
Tags: responsive, menu, responsive menu
|
13 |
+
*/
|
14 |
+
|
15 |
+
add_action('admin_init', 'check_responsive_menu_php_version');
|
16 |
+
function check_responsive_menu_php_version() {
|
17 |
+
if(version_compare(PHP_VERSION, '5.4', '<')):
|
18 |
+
add_action('admin_notices', 'responsive_menu_deactivation_text');
|
19 |
+
deactivate_plugins(plugin_basename(__FILE__));
|
20 |
+
endif;
|
21 |
+
}
|
22 |
+
|
23 |
+
function responsive_menu_deactivation_text() {
|
24 |
+
echo '<div class="error"><p>' . sprintf(__('Responsive Menu requires PHP 5.4 or higher to function and has therefore been automatically disabled. You are still on %s.%sPlease speak to your webhost about upgrading your PHP version. For more information please visit %s', 'responsive-menu'), PHP_VERSION, '<br /><br />', '<a target="_blank" href="https://responsive.menu/why-php-5-4/">this page</a>.') . '</p></div>';
|
25 |
+
}
|
26 |
+
|
27 |
+
if(version_compare(PHP_VERSION, '5.4', '<'))
|
28 |
+
return;
|
29 |
+
|
30 |
+
include dirname(__FILE__) . '/vendor/autoload.php';
|
31 |
+
include dirname(__FILE__) . '/config/default_options.php';
|
32 |
+
include dirname(__FILE__) . '/config/services.php';
|
33 |
+
include dirname(__FILE__) . '/config/wp/scripts.php';
|
34 |
+
include dirname(__FILE__) . '/config/routing.php';
|
35 |
+
include dirname(__FILE__) . '/migration.php';
|
36 |
+
include dirname(__FILE__) . '/config/polylang.php';
|
|
|
|
|
|
|
|
src/app/Collections/OptionsCollection.php
DELETED
@@ -1,83 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Collections;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
|
6 |
-
class OptionsCollection implements \ArrayAccess {
|
7 |
-
|
8 |
-
private $options;
|
9 |
-
|
10 |
-
public function add(Option $option) {
|
11 |
-
$this->options[$option->getName()] = $option;
|
12 |
-
}
|
13 |
-
|
14 |
-
public function get($name) {
|
15 |
-
return $this->options[$name];
|
16 |
-
}
|
17 |
-
|
18 |
-
public function all() {
|
19 |
-
return $this->options;
|
20 |
-
}
|
21 |
-
|
22 |
-
public function usesFontIcons() {
|
23 |
-
return false;
|
24 |
-
}
|
25 |
-
|
26 |
-
public function getActiveArrow() {
|
27 |
-
if($this->options['active_arrow_image'] && $this->options['active_arrow_image']->getValue())
|
28 |
-
return '<img alt="' . $this->options['active_arrow_image_alt'] .'" src="' . $this->options['active_arrow_image'] .'" />';
|
29 |
-
else
|
30 |
-
return $this->options['active_arrow_shape'];
|
31 |
-
|
32 |
-
}
|
33 |
-
|
34 |
-
public function getInActiveArrow() {
|
35 |
-
if($this->options['inactive_arrow_image'] && $this->options['inactive_arrow_image']->getValue())
|
36 |
-
return '<img alt="' . $this->options['inactive_arrow_image_alt'] .'" src="' . $this->options['inactive_arrow_image'] .'" />';
|
37 |
-
else
|
38 |
-
return $this->options['inactive_arrow_shape'];
|
39 |
-
|
40 |
-
}
|
41 |
-
|
42 |
-
public function getTitleImage() {
|
43 |
-
if($this->options['menu_title_image'] && $this->options['menu_title_image']->getValue())
|
44 |
-
return '<img alt="' . $this->options['menu_title_image_alt'] .'" src="' . $this->options['menu_title_image'] .'" />';
|
45 |
-
else
|
46 |
-
return null;
|
47 |
-
|
48 |
-
}
|
49 |
-
|
50 |
-
public function getButtonIcon() {
|
51 |
-
if($this->options['button_image'] && $this->options['button_image']->getValue())
|
52 |
-
return '<img alt="' . $this->options['button_image_alt'] .'" src="' . $this->options['button_image'] .'" class="responsive-menu-button-icon responsive-menu-button-icon-active" />';
|
53 |
-
else
|
54 |
-
return '<span class="responsive-menu-inner"></span>';
|
55 |
-
}
|
56 |
-
|
57 |
-
public function getButtonIconActive() {
|
58 |
-
if($this->options['button_image'] && $this->options['button_image']->getValue())
|
59 |
-
return '<img alt="' . $this->options['button_image_alt_when_clicked'] .'" src="' . $this->options['button_image_when_clicked'] .'" class="responsive-menu-button-icon responsive-menu-button-icon-inactive" />';
|
60 |
-
}
|
61 |
-
|
62 |
-
public function offsetExists($offset) {
|
63 |
-
return array_key_exists($offset, $this->options);
|
64 |
-
}
|
65 |
-
|
66 |
-
public function offsetGet($offset) {
|
67 |
-
return isset($this->options[$offset]) ? $this->options[$offset] : null;
|
68 |
-
}
|
69 |
-
|
70 |
-
public function offsetSet($offset, $value) {
|
71 |
-
$this->options[$offset] = $value;
|
72 |
-
}
|
73 |
-
|
74 |
-
public function offsetUnset($offset) {
|
75 |
-
if(isset($this->options[$offset]))
|
76 |
-
unset($this->options[$offset]);
|
77 |
-
}
|
78 |
-
|
79 |
-
public function isEmpty() {
|
80 |
-
return isset($this->options) && count($this->options) > 0 ? false : true;
|
81 |
-
}
|
82 |
-
|
83 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Controllers/Admin.php
DELETED
@@ -1,60 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Controllers;
|
4 |
-
use ResponsiveMenu\View\View;
|
5 |
-
use ResponsiveMenu\Services\OptionService;
|
6 |
-
|
7 |
-
class Admin {
|
8 |
-
|
9 |
-
public function __construct(OptionService $service, View $view) {
|
10 |
-
$this->service = $service;
|
11 |
-
$this->view = $view;
|
12 |
-
}
|
13 |
-
|
14 |
-
public function update($default_options, $new_options) {
|
15 |
-
|
16 |
-
update_option('responsive_menu_current_page', $new_options['responsive_menu_current_page']);
|
17 |
-
unset($new_options['responsive_menu_current_page']);
|
18 |
-
|
19 |
-
$updated_options = $this->service->combineOptions($default_options, $new_options);
|
20 |
-
return $this->view->render('main', [
|
21 |
-
'options' => $this->service->updateOptions($updated_options),
|
22 |
-
'flash' => ['success' => __('Responsive Menu Options Updated Successfully', 'responsive-menu')]
|
23 |
-
]);
|
24 |
-
}
|
25 |
-
|
26 |
-
public function reset($default_options) {
|
27 |
-
return $this->view->render('main', [
|
28 |
-
'options' => $this->service->updateOptions($default_options),
|
29 |
-
'flash' => ['success' => __('Responsive Menu Options Reset Successfully', 'responsive-menu')]
|
30 |
-
]);
|
31 |
-
}
|
32 |
-
|
33 |
-
public function index() {
|
34 |
-
return $this->view->render('main', ['options' => $this->service->all()]);
|
35 |
-
}
|
36 |
-
|
37 |
-
public function import($default_options, $imported_options) {
|
38 |
-
|
39 |
-
if(!empty($imported_options)):
|
40 |
-
$updated_options = $this->service->combineOptions($default_options, $imported_options);
|
41 |
-
$options = $this->service->updateOptions($updated_options);
|
42 |
-
$flash['success'] = __('Responsive Menu Options Imported Successfully', 'responsive-menu');
|
43 |
-
else:
|
44 |
-
$flash['errors'][] = __('No file selected', 'responsive-menu');
|
45 |
-
$options = $this->service->all();
|
46 |
-
endif;
|
47 |
-
|
48 |
-
return $this->view->render('main', ['options' => $options, 'flash' => $flash]);
|
49 |
-
}
|
50 |
-
|
51 |
-
public function export() {
|
52 |
-
$this->view->noCacheHeaders();
|
53 |
-
$final = [];
|
54 |
-
foreach($this->service->all()->all() as $option)
|
55 |
-
$final[$option->getName()] = $option->getValue();
|
56 |
-
$this->view->display(json_encode($final));
|
57 |
-
$this->view->stopProcessing();
|
58 |
-
}
|
59 |
-
|
60 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Controllers/Front.php
DELETED
@@ -1,38 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Controllers;
|
4 |
-
|
5 |
-
use ResponsiveMenu\Services\OptionService;
|
6 |
-
use ResponsiveMenu\View\View;
|
7 |
-
use ResponsiveMenu\ViewModels\Menu;
|
8 |
-
use ResponsiveMenu\ViewModels\Button;
|
9 |
-
|
10 |
-
class Front {
|
11 |
-
|
12 |
-
public function __construct(OptionService $service, View $view, Menu $menu, Button $button) {
|
13 |
-
$this->service = $service;
|
14 |
-
$this->view = $view;
|
15 |
-
$this->menu = $menu;
|
16 |
-
$this->button = $button;
|
17 |
-
}
|
18 |
-
|
19 |
-
public function index() {
|
20 |
-
|
21 |
-
$options = $this->service->all();
|
22 |
-
|
23 |
-
$this->view->echoOrIncludeScripts($options);
|
24 |
-
|
25 |
-
if($options['shortcode'] == 'off'):
|
26 |
-
$this->view->render('button', ['options' => $options, 'button' => $this->button->getHtml($options)]);
|
27 |
-
return $this->view->render('menu', ['options' => $options, 'menu' => $this->menu->getHtml($options)]);
|
28 |
-
else:
|
29 |
-
return $this->view->addShortcode($options, $this->button, $this->menu);
|
30 |
-
endif;
|
31 |
-
|
32 |
-
}
|
33 |
-
|
34 |
-
public function preview() {
|
35 |
-
return $this->view->render('preview');
|
36 |
-
}
|
37 |
-
|
38 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Database/Database.php
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Database;
|
4 |
-
|
5 |
-
interface Database {
|
6 |
-
public function update($table, array $to_update, array $where);
|
7 |
-
public function delete($table, $name);
|
8 |
-
public function all($table);
|
9 |
-
public function insert($table, array $arguments);
|
10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Database/Migration.php
DELETED
@@ -1,193 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Database;
|
4 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
-
use ResponsiveMenu\Database\Database;
|
6 |
-
use ResponsiveMenu\Services\OptionService;
|
7 |
-
|
8 |
-
class Migration {
|
9 |
-
|
10 |
-
protected $db;
|
11 |
-
|
12 |
-
protected $current_version;
|
13 |
-
protected $old_version;
|
14 |
-
protected $old_options;
|
15 |
-
protected $defaults;
|
16 |
-
|
17 |
-
protected static $table = 'responsive_menu';
|
18 |
-
protected static $version_var = 'RMVer';
|
19 |
-
|
20 |
-
public function __construct(Database $db, OptionService $service, $defaults, $current_version, $old_version, $old_options) {
|
21 |
-
$this->db = $db;
|
22 |
-
$this->service = $service;
|
23 |
-
$this->defaults = $defaults;
|
24 |
-
$this->current_version = $current_version;
|
25 |
-
$this->old_version = $old_version;
|
26 |
-
$this->old_options = $old_options;
|
27 |
-
}
|
28 |
-
|
29 |
-
public function addNewOptions() {
|
30 |
-
$options = $this->service->all();
|
31 |
-
if($options->isEmpty())
|
32 |
-
$this->service->createOptions($this->defaults);
|
33 |
-
else
|
34 |
-
$this->service->createOptions($this->getNewOptions($options));
|
35 |
-
}
|
36 |
-
|
37 |
-
public function tidyUpOptions() {
|
38 |
-
foreach($this->getOptionsToDelete() as $delete)
|
39 |
-
$this->db->delete(self::$table, array('name' => $delete));
|
40 |
-
}
|
41 |
-
|
42 |
-
public function getNewOptions(OptionsCollection $options) {
|
43 |
-
$current = [];
|
44 |
-
foreach($options->all() as $converted)
|
45 |
-
$current[$converted->getName()] = $converted->getValue();
|
46 |
-
return array_diff_key($this->defaults, $current);
|
47 |
-
}
|
48 |
-
|
49 |
-
public function setup() {
|
50 |
-
if(!$this->isVersion3()):
|
51 |
-
$this->db->createTable(self::$table);
|
52 |
-
$this->synchronise();
|
53 |
-
endif;
|
54 |
-
}
|
55 |
-
|
56 |
-
public function synchronise() {
|
57 |
-
|
58 |
-
# First Thing we need to do is migrate any old options
|
59 |
-
if($this->old_options && !$this->isVersion3())
|
60 |
-
$this->migrateVersion2Options();
|
61 |
-
|
62 |
-
if($this->needsUpdate()):
|
63 |
-
|
64 |
-
# Now we can add any new options
|
65 |
-
$this->addNewOptions();
|
66 |
-
|
67 |
-
# Finally delete any that are no longer used
|
68 |
-
$this->tidyUpOptions();
|
69 |
-
|
70 |
-
# And Update Version
|
71 |
-
$this->updateVersion();
|
72 |
-
|
73 |
-
endif;
|
74 |
-
|
75 |
-
}
|
76 |
-
|
77 |
-
public function needsUpdate() {
|
78 |
-
return version_compare($this->old_version, $this->current_version, '<');
|
79 |
-
}
|
80 |
-
|
81 |
-
protected function updateVersion() {
|
82 |
-
$this->db->updateOption(self::$version_var, $this->current_version);
|
83 |
-
$this->old_version = $this->current_version;
|
84 |
-
}
|
85 |
-
|
86 |
-
public function isVersion3() {
|
87 |
-
return substr($this->old_version, 0, 1) == 3;
|
88 |
-
}
|
89 |
-
|
90 |
-
public function migrateVersion2Options() {
|
91 |
-
$this->service->createOptions($this->getMigratedOptions());
|
92 |
-
$this->addNewOptions();
|
93 |
-
$this->updateVersion();
|
94 |
-
}
|
95 |
-
|
96 |
-
public function getOptionsToDelete() {
|
97 |
-
return array_diff(
|
98 |
-
array_map(function($a) { return $a->getName(); }, $this->service->all()->all()),
|
99 |
-
array_keys($this->defaults)
|
100 |
-
);
|
101 |
-
}
|
102 |
-
|
103 |
-
public function getMigratedOptions() {
|
104 |
-
$old_options = $this->old_options;
|
105 |
-
|
106 |
-
$new_options = [
|
107 |
-
'menu_to_use' => isset($old_options['RM']) ? $old_options['RM'] : '',
|
108 |
-
'breakpoint' => isset($old_options['RMBreak']) ? $old_options['RMBreak'] : '',
|
109 |
-
'menu_depth' => isset($old_options['RMDepth']) ? $old_options['RMDepth'] : '',
|
110 |
-
'button_top' => isset($old_options['RMTop']) ? $old_options['RMTop'] : '',
|
111 |
-
'button_distance_from_side' => isset($old_options['RMRight']) ? $old_options['RMRight'] : '',
|
112 |
-
'menu_to_hide' => isset($old_options['RMCss']) ? $old_options['RMCss'] : '',
|
113 |
-
'menu_title' => isset($old_options['RMTitle']) ? $old_options['RMTitle'] : '',
|
114 |
-
'button_line_colour' => isset($old_options['RMLineCol']) ? $old_options['RMLineCol'] : '',
|
115 |
-
'button_background_colour' => isset($old_options['RMClickBkg']) ? $old_options['RMClickBkg'] : '',
|
116 |
-
'button_title' => isset($old_options['RMClickTitle']) ? $old_options['RMClickTitle'] : '',
|
117 |
-
'button_transparent_background' => isset($old_options['RMBkgTran']) ? 'on' : '',
|
118 |
-
'menu_font' => isset($old_options['RMFont']) ? $old_options['RMFont'] : '',
|
119 |
-
'button_position_type' => isset($old_options['RMPos']) ? 'fixed' : '',
|
120 |
-
'menu_title_image' => isset($old_options['RMImage']) ? $old_options['RMImage'] : '',
|
121 |
-
'menu_width' => isset($old_options['RMWidth']) ? $old_options['RMWidth'] : '',
|
122 |
-
'menu_item_background_colour' => isset($old_options['RMBkg']) ? $old_options['RMBkg'] : '',
|
123 |
-
'menu_background_colour' => isset($old_options['RMBkg']) ? $old_options['RMBkg'] : '',
|
124 |
-
'menu_sub_arrow_background_colour' => isset($old_options['RMBkg']) ? $old_options['RMBkg'] : '',
|
125 |
-
'menu_item_background_hover_colour' => isset($old_options['RMBkgHov']) ? $old_options['RMBkgHov'] : '',
|
126 |
-
'menu_sub_arrow_background_hover_colour' => isset($old_options['RMBkgHov']) ? $old_options['RMBkgHov'] : '',
|
127 |
-
'menu_title_colour' => isset($old_options['RMTitleCol']) ? $old_options['RMTitleCol'] : '',
|
128 |
-
'menu_link_colour' => isset($old_options['RMTextCol']) ? $old_options['RMTextCol'] : '',
|
129 |
-
'menu_sub_arrow_shape_colour' => isset($old_options['RMTextCol']) ? $old_options['RMTextCol'] : '',
|
130 |
-
'menu_item_border_colour' => isset($old_options['RMBorCol']) ? $old_options['RMBorCol'] : '',
|
131 |
-
'menu_item_border_colour_hover' => isset($old_options['RMBorCol']) ? $old_options['RMBorCol'] : '',
|
132 |
-
'menu_sub_arrow_border_colour' => isset($old_options['RMBorCol']) ? $old_options['RMBorCol'] : '',
|
133 |
-
'menu_sub_arrow_border_hover_colour' => isset($old_options['RMBorCol']) ? $old_options['RMBorCol'] : '',
|
134 |
-
'menu_link_hover_colour' => isset($old_options['RMTextColHov']) ? $old_options['RMTextColHov'] : '',
|
135 |
-
'menu_sub_arrow_shape_hover_colour' => isset($old_options['RMTextColHov']) ? $old_options['RMTextColHov'] : '',
|
136 |
-
'menu_title_hover_colour' => isset($old_options['RMTitleColHov']) ? $old_options['RMTitleColHov'] : '',
|
137 |
-
'animation_type' => isset($old_options['RMAnim']) && $old_options['RMAnim'] == 'push' ? 'push' : '',
|
138 |
-
'page_wrapper' => isset($old_options['RMPushCSS']) ? $old_options['RMPushCSS'] : '',
|
139 |
-
'menu_title_background_colour' => isset($old_options['RMTitleBkg']) ? $old_options['RMTitleBkg'] : '',
|
140 |
-
'menu_title_background_hover_colour' => isset($old_options['RMTitleBkg']) ? $old_options['RMTitleBkg'] : '',
|
141 |
-
'menu_font_size' => isset($old_options['RMFontSize']) ? $old_options['RMFontSize'] : '',
|
142 |
-
'menu_title_font_size' => isset($old_options['RMTitleSize']) ? $old_options['RMTitleSize'] : '',
|
143 |
-
'button_font_size' => isset($old_options['RMBtnSize']) ? $old_options['RMBtnSize'] : '',
|
144 |
-
'menu_current_item_background_colour' => isset($old_options['RMCurBkg']) ? $old_options['RMCurBkg'] : '',
|
145 |
-
'menu_current_link_colour' => isset($old_options['RMCurCol']) ? $old_options['RMCurCol'] : '',
|
146 |
-
'animation_speed' => isset($old_options['RMAnimSpd']) ? $old_options['RMAnimSpd'] : '',
|
147 |
-
'transition_speed' => isset($old_options['RMTranSpd']) ? $old_options['RMTranSpd'] : '',
|
148 |
-
'menu_text_alignment' => isset($old_options['RMTxtAlign']) ? $old_options['RMTxtAlign'] : '',
|
149 |
-
'auto_expand_all_submenus' => isset($old_options['RMExpand']) ? 'on' : '',
|
150 |
-
'menu_links_height' => isset($old_options['RMLinkHeight']) ? $old_options['RMLinkHeight'] + 24 : '',
|
151 |
-
'submenu_arrow_height' => isset($old_options['RMLinkHeight']) ? $old_options['RMLinkHeight'] + 24 : '',
|
152 |
-
'submenu_arrow_width' => isset($old_options['RMLinkHeight']) ? $old_options['RMLinkHeight'] + 24 : '',
|
153 |
-
'external_files' => isset($old_options['RMExternal']) ? 'on' : '',
|
154 |
-
'menu_appear_from' => isset($old_options['RMSide']) ? $old_options['RMSide'] : '',
|
155 |
-
'scripts_in_footer' => isset($old_options['RMFooter']) ? 'on' : '',
|
156 |
-
'button_image' => isset($old_options['RMClickImg']) ? $old_options['RMClickImg'] : '',
|
157 |
-
'minify_scripts' => isset($old_options['RMMinify']) ? 'on' : '',
|
158 |
-
'menu_close_on_link_click' => isset($old_options['RMClickClose']) ? 'on' : '',
|
159 |
-
'menu_minimum_width' => isset($old_options['RMMinWidth']) ? $old_options['RMMinWidth'] : '',
|
160 |
-
'menu_maximum_width' => isset($old_options['RMMaxWidth']) ? $old_options['RMMaxWidth'] : '',
|
161 |
-
'auto_expand_current_submenus' => isset($old_options['RMExpandPar']) ? 'on' : '',
|
162 |
-
'menu_item_click_to_trigger_submenu' => isset($old_options['RMIgnParCli']) ? 'on' : '',
|
163 |
-
'menu_close_on_body_click' => isset($old_options['RMCliToClo']) ? 'on' : '',
|
164 |
-
'menu_title_link' => isset($old_options['RMTitleLink']) ? $old_options['RMTitleLink'] : '',
|
165 |
-
'menu_additional_content' => isset($old_options['RMHtml']) ? $old_options['RMHtml'] : '',
|
166 |
-
'shortcode' => isset($old_options['RMShortcode']) ? 'on' : '',
|
167 |
-
'button_line_height' => isset($old_options['RMLineHeight']) ? $old_options['RMLineHeight'] : '',
|
168 |
-
'button_line_width' => isset($old_options['RMLineWidth']) ? $old_options['RMLineWidth'] : '',
|
169 |
-
'button_line_margin' => isset($old_options['RMLineMargin']) ? $old_options['RMLineMargin'] : '',
|
170 |
-
'button_image_when_clicked' => isset($old_options['RMClickImgClicked']) ? $old_options['RMClickImgClicked'] : '',
|
171 |
-
'accordion_animation' => isset($old_options['RMAccordion']) ? 'on' : '',
|
172 |
-
'active_arrow_shape' => isset($old_options['RMArShpA']) ? json_decode($old_options['RMArShpA']) : '',
|
173 |
-
'inactive_arrow_shape' => isset($old_options['RMArShpI']) ? json_decode($old_options['RMArShpI']) : '',
|
174 |
-
'active_arrow_image' => isset($old_options['RMArImgA']) ? $old_options['RMArImgA'] : '',
|
175 |
-
'inactive_arrow_image' => isset($old_options['RMArImgI']) ? $old_options['RMArImgI'] : '',
|
176 |
-
'button_push_with_animation' => isset($old_options['RMPushBtn']) ? 'on' : '',
|
177 |
-
'menu_current_item_background_hover_colour' => isset($old_options['RMCurBkgHov']) ? $old_options['RMCurBkgHov'] : '',
|
178 |
-
'menu_current_link_hover_colour' => isset($old_options['RMCurColHov']) ? $old_options['RMCurColHov'] : '',
|
179 |
-
'custom_walker' => isset($old_options['RMWalker']) ? $old_options['RMWalker'] : '',
|
180 |
-
'button_left_or_right' => isset($old_options['RMLoc']) ? $old_options['RMLoc'] : '',
|
181 |
-
'theme_location_menu' => isset($old_options['RMThemeLocation']) ? $old_options['RMThemeLocation'] : '',
|
182 |
-
'button_title_position' => isset($old_options['RMClickTitlePos']) ? $old_options['RMClickTitlePos'] : '',
|
183 |
-
];
|
184 |
-
|
185 |
-
$to_save = [];
|
186 |
-
|
187 |
-
foreach(array_filter($new_options) as $key => $val)
|
188 |
-
$to_save[$key] = $val;
|
189 |
-
|
190 |
-
return $to_save;
|
191 |
-
}
|
192 |
-
|
193 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Database/WpDatabase.php
DELETED
@@ -1,52 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Database;
|
4 |
-
|
5 |
-
class WpDatabase implements Database {
|
6 |
-
|
7 |
-
public function __construct($wpdb) {
|
8 |
-
$this->db = $wpdb;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function update($table, array $to_update, array $where) {
|
12 |
-
return $this->db->update($this->db->prefix . $table, $to_update, $where);
|
13 |
-
}
|
14 |
-
|
15 |
-
public function delete($table, $name) {
|
16 |
-
return $this->db->delete($this->db->prefix . $table, $name);
|
17 |
-
}
|
18 |
-
|
19 |
-
public function all($table) {
|
20 |
-
return $this->db->get_results("SELECT * FROM {$this->db->prefix}{$table}");
|
21 |
-
}
|
22 |
-
|
23 |
-
public function insert($table, array $arguments) {
|
24 |
-
$arguments['created_at'] = current_time('mysql');
|
25 |
-
return $this->db->insert($this->db->prefix . $table, $arguments);
|
26 |
-
}
|
27 |
-
|
28 |
-
public function select($table, $column, $value) {
|
29 |
-
return $this->db->get_results("SELECT * FROM {$this->db->prefix}{$table} WHERE $column = '$value';");
|
30 |
-
}
|
31 |
-
|
32 |
-
public function mySqlTime() {
|
33 |
-
return current_time('mysql');
|
34 |
-
}
|
35 |
-
|
36 |
-
public function updateOption($key, $value) {
|
37 |
-
return update_option($key, $value);
|
38 |
-
}
|
39 |
-
|
40 |
-
public function createTable($table) {
|
41 |
-
$sql = "CREATE TABLE " . $this->db->prefix . $table . " (
|
42 |
-
name varchar(50) NOT NULL,
|
43 |
-
value varchar(5000) DEFAULT NULL,
|
44 |
-
created_at datetime NOT NULL,
|
45 |
-
updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
46 |
-
PRIMARY KEY (name)
|
47 |
-
) " . $this->db->get_charset_collate() . ";";
|
48 |
-
require_once(ABSPATH . 'wp-admin/includes/upgrade.php' );
|
49 |
-
dbDelta($sql);
|
50 |
-
}
|
51 |
-
|
52 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Factories/CssFactory.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Factories;
|
4 |
-
use ResponsiveMenu\Mappers\ScssBaseMapper;
|
5 |
-
use ResponsiveMenu\Mappers\ScssButtonMapper;
|
6 |
-
use ResponsiveMenu\Mappers\ScssMenuMapper;
|
7 |
-
use ResponsiveMenu\Formatters\Minify;
|
8 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
9 |
-
|
10 |
-
class CssFactory {
|
11 |
-
|
12 |
-
public function __construct(Minify $minifier, ScssBaseMapper $base, ScssButtonMapper $button, ScssMenuMapper $menu) {
|
13 |
-
$this->minifier = $minifier;
|
14 |
-
$this->base = $base;
|
15 |
-
$this->button = $button;
|
16 |
-
$this->menu = $menu;
|
17 |
-
}
|
18 |
-
|
19 |
-
public function build(OptionsCollection $options) {
|
20 |
-
|
21 |
-
$css = $this->base->map($options) . $this->button->map($options) . $this->menu->map($options);
|
22 |
-
|
23 |
-
if($options['minify_scripts'] == 'on')
|
24 |
-
$css = $this->minifier->minify($css);
|
25 |
-
|
26 |
-
return $css;
|
27 |
-
|
28 |
-
}
|
29 |
-
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Factories/JsFactory.php
DELETED
@@ -1,26 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Factories;
|
4 |
-
use ResponsiveMenu\Mappers\JsMapper;
|
5 |
-
use ResponsiveMenu\Formatters\Minify;
|
6 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
7 |
-
|
8 |
-
class JsFactory {
|
9 |
-
|
10 |
-
public function __construct(JsMapper $mapper, Minify $minifier) {
|
11 |
-
$this->mapper = $mapper;
|
12 |
-
$this->minifier = $minifier;
|
13 |
-
}
|
14 |
-
|
15 |
-
public function build(OptionsCollection $options) {
|
16 |
-
|
17 |
-
$js = $this->mapper->map($options);
|
18 |
-
|
19 |
-
if($options['minify_scripts'] == 'on')
|
20 |
-
$js = $this->minifier->minify($js);
|
21 |
-
|
22 |
-
return $js;
|
23 |
-
|
24 |
-
}
|
25 |
-
|
26 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Factories/OptionFactory.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Factories;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
|
6 |
-
class OptionFactory {
|
7 |
-
|
8 |
-
public function __construct($default_options, $option_helpers) {
|
9 |
-
$this->defaults = $default_options;
|
10 |
-
$this->helper = $option_helpers;
|
11 |
-
}
|
12 |
-
|
13 |
-
public function build($name, $value) {
|
14 |
-
|
15 |
-
$filter = isset($this->helper[$name]['filter'])
|
16 |
-
? new $this->helper[$name]['filter']
|
17 |
-
: new \ResponsiveMenu\Filters\TextFilter;
|
18 |
-
|
19 |
-
$value = isset($value) || $value == '0' ? $value : $this->defaults[$name];
|
20 |
-
$option = new Option($name, stripslashes_deep($value));
|
21 |
-
$option->setFilter($filter);
|
22 |
-
|
23 |
-
return $option;
|
24 |
-
|
25 |
-
}
|
26 |
-
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Filesystem/FileCreator.php
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Filesystem;
|
4 |
-
|
5 |
-
class FileCreator {
|
6 |
-
|
7 |
-
public function create($folder, $file_name, $content) {
|
8 |
-
return $this->open_write_and_close($folder . '/' . $file_name, $content);
|
9 |
-
}
|
10 |
-
|
11 |
-
protected function open_write_and_close($file_name, $data) {
|
12 |
-
try{
|
13 |
-
$file = fopen($file_name, 'w');
|
14 |
-
fwrite($file, $data);
|
15 |
-
fclose($file);
|
16 |
-
return true;
|
17 |
-
} catch(\Exception $e) {
|
18 |
-
return false;
|
19 |
-
}
|
20 |
-
}
|
21 |
-
|
22 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Filesystem/FolderCreator.php
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Filesystem;
|
4 |
-
|
5 |
-
class FolderCreator {
|
6 |
-
|
7 |
-
public function create($folder) {
|
8 |
-
return mkdir($folder);
|
9 |
-
}
|
10 |
-
|
11 |
-
public function exists($dir) {
|
12 |
-
return is_dir($dir);
|
13 |
-
}
|
14 |
-
|
15 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Filesystem/ScriptsBuilder.php
DELETED
@@ -1,38 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Filesystem;
|
4 |
-
use ResponsiveMenu\Filesystem\FileCreator;
|
5 |
-
use ResponsiveMenu\Filesystem\FolderCreator;
|
6 |
-
use ResponsiveMenu\Factories\CssFactory;
|
7 |
-
use ResponsiveMenu\Factories\JsFactory;
|
8 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
9 |
-
|
10 |
-
class ScriptsBuilder {
|
11 |
-
|
12 |
-
public function __construct(CssFactory $css, JsFactory $js, FileCreator $files, FolderCreator $folders, $site_id) {
|
13 |
-
$this->css = $css;
|
14 |
-
$this->js = $js;
|
15 |
-
$this->files = $files;
|
16 |
-
$this->folders = $folders;
|
17 |
-
$this->site_id = $site_id;
|
18 |
-
}
|
19 |
-
|
20 |
-
public function build(OptionsCollection $options) {
|
21 |
-
|
22 |
-
$data_folder_dir = dirname(dirname(dirname(dirname(dirname(__FILE__))))) . '/responsive-menu-data';
|
23 |
-
|
24 |
-
$js_folder = $data_folder_dir . '/js';
|
25 |
-
$css_folder = $data_folder_dir . '/css';
|
26 |
-
|
27 |
-
if(!$this->folders->exists($data_folder_dir)):
|
28 |
-
$this->folders->create($data_folder_dir);
|
29 |
-
$this->folders->create($css_folder);
|
30 |
-
$this->folders->create($js_folder);
|
31 |
-
endif;
|
32 |
-
|
33 |
-
$this->files->create($css_folder, 'responsive-menu-' . $this->site_id . '.css', $this->css->build($options));
|
34 |
-
$this->files->create($js_folder, 'responsive-menu-' . $this->site_id . '.js', $this->js->build($options));
|
35 |
-
|
36 |
-
}
|
37 |
-
|
38 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Filters/Filter.php
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Filters;
|
4 |
-
|
5 |
-
interface Filter {
|
6 |
-
public function filter($data);
|
7 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Filters/HtmlFilter.php
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Filters;
|
4 |
-
|
5 |
-
class HtmlFilter implements Filter {
|
6 |
-
|
7 |
-
public function filter($data) {
|
8 |
-
return $data;
|
9 |
-
}
|
10 |
-
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Filters/JsonFilter.php
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Filters;
|
4 |
-
|
5 |
-
class JsonFilter implements Filter {
|
6 |
-
|
7 |
-
public function filter($data) {
|
8 |
-
return is_string($data) ? $data : json_encode($data);
|
9 |
-
}
|
10 |
-
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Filters/TextFilter.php
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Filters;
|
4 |
-
|
5 |
-
class TextFilter implements Filter {
|
6 |
-
|
7 |
-
public function filter($data) {
|
8 |
-
return strip_tags($data);
|
9 |
-
}
|
10 |
-
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/Checkbox.php
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
use ResponsiveMenu\Form\FormComponent;
|
6 |
-
|
7 |
-
class Checkbox implements FormComponent {
|
8 |
-
|
9 |
-
public function render(Option $option) {
|
10 |
-
|
11 |
-
$checked = $option->getValue() == 'on' ? " checked='checked'" : "";
|
12 |
-
|
13 |
-
return "<div class='onoffswitch'>
|
14 |
-
<input type='checkbox' class='checkbox onoffswitch-checkbox' id='{$option->getName()}'{$checked} name='menu[{$option->getName()}]' value='on' />
|
15 |
-
<label class='onoffswitch-label' for='{$option->getName()}'>
|
16 |
-
<span class='onoffswitch-inner'></span>
|
17 |
-
<span class='onoffswitch-switch'></span>
|
18 |
-
</label>
|
19 |
-
</div>";
|
20 |
-
}
|
21 |
-
|
22 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/Colour.php
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
use ResponsiveMenu\Form\FormComponent;
|
6 |
-
|
7 |
-
class Colour implements FormComponent {
|
8 |
-
|
9 |
-
public function render(Option $option) {
|
10 |
-
return "<input type='text' class='colour wp-color-picker' id='{$option->getName()}' name='menu[{$option->getName()}]' value='{$option->getValue()}' />";
|
11 |
-
}
|
12 |
-
|
13 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/Export.php
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
|
5 |
-
class Export {
|
6 |
-
|
7 |
-
public function render() {
|
8 |
-
return '<input type="submit" class="button submit" name="responsive_menu_export" value="' . __('Export Options', 'responsive-menu') . '" />';
|
9 |
-
}
|
10 |
-
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/FontIconPageList.php
DELETED
@@ -1,74 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
use ResponsiveMenu\Form\FormComponent;
|
6 |
-
|
7 |
-
class FontIconPageList implements FormComponent {
|
8 |
-
|
9 |
-
public function render(Option $option) {
|
10 |
-
|
11 |
-
if($decoded = json_decode($option->getValue()))
|
12 |
-
$final = array_filter(array_combine($decoded->id, $decoded->icon));
|
13 |
-
else
|
14 |
-
$final = null;
|
15 |
-
|
16 |
-
$output = "<div class='font-icon-container'><div class='font-icon-row'><div class='font-icon-cell-id'>" . __('Id', 'responsive-menu') . "</div><div class='font-icon-cell-icon'>" . __('Icon', 'responsive-menu') . "</div></div>";
|
17 |
-
|
18 |
-
if(is_array($final) && !empty($final)):
|
19 |
-
foreach($final as $id => $icon):
|
20 |
-
$output .= "
|
21 |
-
<div class='font-icon-row'>
|
22 |
-
<div class='font-icon-cell-id'>
|
23 |
-
<input
|
24 |
-
type='text'
|
25 |
-
class='{$option->getName()}_id'
|
26 |
-
name='menu[{$option->getName()}][id][]'
|
27 |
-
value='{$id}' />
|
28 |
-
</div>
|
29 |
-
<div class='font-icon-cell-icon'>
|
30 |
-
<input
|
31 |
-
type='text'
|
32 |
-
class='{$option->getName()}_icon'
|
33 |
-
name='menu[{$option->getName()}][icon][]'
|
34 |
-
value='{$icon}' />
|
35 |
-
</div>
|
36 |
-
</div>";
|
37 |
-
endforeach;
|
38 |
-
else:
|
39 |
-
$output .= "
|
40 |
-
<div class='font-icon-row'>
|
41 |
-
<div class='font-icon-cell-id'>
|
42 |
-
<input
|
43 |
-
type='text'
|
44 |
-
class='{$option->getName()}_id'
|
45 |
-
name='menu[{$option->getName()}][id][]'
|
46 |
-
value='' />
|
47 |
-
</div>
|
48 |
-
<div class='font-icon-cell-icon'>
|
49 |
-
<input
|
50 |
-
type='text'
|
51 |
-
class='{$option->getName()}_icon'
|
52 |
-
name='menu[{$option->getName()}][icon][]'
|
53 |
-
value='' />
|
54 |
-
</div>
|
55 |
-
</div>";
|
56 |
-
endif;
|
57 |
-
|
58 |
-
$output .= "</div><div class='add-font-icon'>" . __('Add New Font Icon', 'responsive-menu') . "</div>";
|
59 |
-
|
60 |
-
$output .= "<script>
|
61 |
-
jQuery(document).ready(function($) {
|
62 |
-
$(document).on('click', '.add-font-icon', function(e) {
|
63 |
-
var lastRow = $('#{$option->getName()}_container .font-icon-row').last();
|
64 |
-
var nextRow = lastRow.clone();
|
65 |
-
nextRow.find(':text').val('')
|
66 |
-
lastRow.after(nextRow);
|
67 |
-
});
|
68 |
-
});
|
69 |
-
</script>";
|
70 |
-
|
71 |
-
return $output;
|
72 |
-
}
|
73 |
-
|
74 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/FormComponent.php
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
|
6 |
-
interface FormComponent {
|
7 |
-
public function render(Option $option);
|
8 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/HeaderBarOrdering.php
DELETED
@@ -1,49 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
use ResponsiveMenu\Form\FormComponent;
|
6 |
-
|
7 |
-
class HeaderBarOrdering implements FormComponent {
|
8 |
-
|
9 |
-
public function render(Option $option) {
|
10 |
-
|
11 |
-
$required = ['logo' => '', 'title' => '', 'search' => '', 'html content' => '', 'button' => ''];
|
12 |
-
$current_options = (array) json_decode($option->getValue());
|
13 |
-
$all_options = array_merge($current_options, $required);
|
14 |
-
unset($all_options['button']);
|
15 |
-
|
16 |
-
$output = '<ul id="header-bar-sortable">';
|
17 |
-
foreach($all_options as $name => $val):
|
18 |
-
$current_value = isset($current_options[$name]) ? $current_options[$name] : '';
|
19 |
-
$on_class = $current_value == 'on' ? 'order-option-switch-on' : '';
|
20 |
-
$output .= '<li class="draggable">'
|
21 |
-
. ucwords($name)
|
22 |
-
. '<input type="text" class="orderable-item" value="'.$current_value.'" name="menu['.$option->getName().']['.$name.']" />'
|
23 |
-
. '<div class="order-option-switch ' . $on_class . '"></div>'
|
24 |
-
. '</li>';
|
25 |
-
endforeach;
|
26 |
-
$output .= '</ul>';
|
27 |
-
|
28 |
-
$output .= '<script>
|
29 |
-
jQuery(document).ready(function($) {
|
30 |
-
$(document).on("click", ".order-option-switch", function() {
|
31 |
-
if($(this).siblings("input.orderable-item").val() != "on") {
|
32 |
-
console.log($(this));
|
33 |
-
$(this).siblings("input.orderable-item").val("on");
|
34 |
-
$(this).addClass("order-option-switch-on");
|
35 |
-
} else {
|
36 |
-
$(this).siblings("input.orderable-item").val("");
|
37 |
-
$(this).removeClass("order-option-switch-on");
|
38 |
-
}
|
39 |
-
});
|
40 |
-
$( "#header-bar-sortable" ).sortable({
|
41 |
-
revert: true
|
42 |
-
});
|
43 |
-
$( "#sortable, .draggable" ).disableSelection();
|
44 |
-
});
|
45 |
-
</script>';
|
46 |
-
return $output;
|
47 |
-
}
|
48 |
-
|
49 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/Image.php
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
use ResponsiveMenu\Form\FormComponent;
|
6 |
-
|
7 |
-
class Image implements FormComponent {
|
8 |
-
|
9 |
-
public function render(Option $option) {
|
10 |
-
return "<input type='text' class='image' id='{$option->getName()}' name='menu[{$option->getName()}]' value='{$option->getValue()}' />"
|
11 |
-
. "<button type='button' class='button image_button' for='{$option->getName()}' /><i class='fa fa-upload'></i></button>";
|
12 |
-
}
|
13 |
-
|
14 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/Import.php
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
|
5 |
-
class Import {
|
6 |
-
|
7 |
-
public function render() {
|
8 |
-
return '<input type="file" name="responsive_menu_import_file" /><input type="submit" class="button submit" name="responsive_menu_import" value="' . __('Import Options', 'responsive-menu') . '" />';
|
9 |
-
}
|
10 |
-
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/MenuOrdering.php
DELETED
@@ -1,48 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
use ResponsiveMenu\Form\FormComponent;
|
6 |
-
|
7 |
-
class MenuOrdering implements FormComponent {
|
8 |
-
|
9 |
-
public function render(Option $option) {
|
10 |
-
|
11 |
-
$required = ['title' => '', 'menu' => '', 'search' => '', 'additional content' => ''];
|
12 |
-
$current_options = (array) json_decode($option->getValue());
|
13 |
-
$all_options = array_merge($current_options, $required);
|
14 |
-
|
15 |
-
$output = '<ul id="menu-sortable">';
|
16 |
-
foreach($all_options as $name => $val):
|
17 |
-
$current_value = isset($current_options[$name]) ? $current_options[$name] : '';
|
18 |
-
$on_class = $current_value == 'on' ? 'menu-order-option-switch-on' : '';
|
19 |
-
|
20 |
-
$output .= '<li class="draggable">'
|
21 |
-
. ucwords($name)
|
22 |
-
. '<input type="text" class="orderable-item" value="'.$current_value.'" name="menu['.$option->getName().']['.$name.']" />'
|
23 |
-
. '<div class="menu-order-option-switch ' . $on_class . '"></div>'
|
24 |
-
. '</li>';
|
25 |
-
endforeach;
|
26 |
-
$output .= '</ul>';
|
27 |
-
|
28 |
-
$output .= '<script>
|
29 |
-
jQuery(document).ready(function($) {
|
30 |
-
$(document).on("click", ".menu-order-option-switch", function() {
|
31 |
-
if($(this).siblings("input.orderable-item").val() != "on") {
|
32 |
-
$(this).siblings("input.orderable-item").val("on");
|
33 |
-
$(this).addClass("menu-order-option-switch-on");
|
34 |
-
} else {
|
35 |
-
$(this).siblings("input.orderable-item").val("");
|
36 |
-
$(this).removeClass("menu-order-option-switch-on");
|
37 |
-
}
|
38 |
-
});
|
39 |
-
$( "#menu-sortable" ).sortable({
|
40 |
-
revert: true
|
41 |
-
});
|
42 |
-
$( "#sortable, .draggable" ).disableSelection();
|
43 |
-
});
|
44 |
-
</script>';
|
45 |
-
return $output;
|
46 |
-
}
|
47 |
-
|
48 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/Reset.php
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
|
5 |
-
class Reset {
|
6 |
-
|
7 |
-
public function render() {
|
8 |
-
return '<input type="submit" class="button submit" name="responsive_menu_reset" value="' . __('Reset Options', 'responsive-menu') . '" />';
|
9 |
-
}
|
10 |
-
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/Select.php
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
use ResponsiveMenu\Form\FormComponent;
|
6 |
-
|
7 |
-
class Select {
|
8 |
-
|
9 |
-
public function render(Option $option, array $select_data) {
|
10 |
-
|
11 |
-
$html = "<div class='select-style'><select class='select' name='menu[{$option->getName()}]' id='{$option->getName()}'>";
|
12 |
-
foreach($select_data as $data) :
|
13 |
-
$selected = $option->getValue() == $data['value'] ? " selected='selected'" : "";
|
14 |
-
$disabled = isset($data['disabled']) ? " disabled='disabled'" : "";
|
15 |
-
$pro = isset($data['disabled']) ? ' [PRO]' : '';
|
16 |
-
$html .= "<option value='{$data['value']}'{$selected}{$disabled}>{$data['display']}{$pro}</option>";
|
17 |
-
endforeach;
|
18 |
-
$html .= "</select></div>";
|
19 |
-
return $html;
|
20 |
-
}
|
21 |
-
|
22 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/Text.php
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
use ResponsiveMenu\Form\FormComponent;
|
6 |
-
|
7 |
-
class Text implements FormComponent {
|
8 |
-
|
9 |
-
public function render(Option $option) {
|
10 |
-
return "<input type='text' class='text' id='{$option->getName()}' name='menu[{$option->getName()}]' value='" . htmlentities($option->getValue(), ENT_QUOTES) . "' />";
|
11 |
-
}
|
12 |
-
|
13 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Form/TextArea.php
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Form;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
use ResponsiveMenu\Form\FormComponent;
|
6 |
-
|
7 |
-
class TextArea implements FormComponent {
|
8 |
-
|
9 |
-
public function render(Option $option) {
|
10 |
-
return "<textarea class='textarea' id='{$option->getName()}' name='menu[{$option->getName()}]'>{$option->getValue()}</textarea>";
|
11 |
-
}
|
12 |
-
|
13 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Formatters/Minify.php
DELETED
@@ -1,24 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Formatters;
|
4 |
-
|
5 |
-
class Minify {
|
6 |
-
|
7 |
-
public function minify($data) {
|
8 |
-
|
9 |
-
/* remove comments */
|
10 |
-
$minified = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $data);
|
11 |
-
|
12 |
-
/* remove tabs, spaces, newlines, etc. */
|
13 |
-
$minified = str_replace(array("\r\n","\r","\n","\t",' ',' ',' '), '', $minified);
|
14 |
-
|
15 |
-
/* remove other spaces before/after ; */
|
16 |
-
$minified = preg_replace(array('(( )+{)','({( )+)'), '{', $minified);
|
17 |
-
$minified = preg_replace(array('(( )+})','(}( )+)','(;( )*})'), '}', $minified);
|
18 |
-
$minified = preg_replace(array('(;( )+)','(( )+;)'), ';', $minified);
|
19 |
-
|
20 |
-
return $minified;
|
21 |
-
|
22 |
-
}
|
23 |
-
|
24 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Mappers/JsMapper.php
DELETED
@@ -1,196 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Mappers;
|
4 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
-
|
6 |
-
class JsMapper {
|
7 |
-
|
8 |
-
public function map(OptionsCollection $options) {
|
9 |
-
|
10 |
-
$animation_speed = $options['animation_speed'] ? $options['animation_speed']->getValue() * 1000 : 500;
|
11 |
-
|
12 |
-
$js = <<<JS
|
13 |
-
|
14 |
-
jQuery(document).ready(function($) {
|
15 |
-
|
16 |
-
var ResponsiveMenu = {
|
17 |
-
trigger: '{$options['button_click_trigger']}',
|
18 |
-
animationSpeed: {$animation_speed},
|
19 |
-
breakpoint: {$options['breakpoint']},
|
20 |
-
pushButton: '{$options['button_push_with_animation']}',
|
21 |
-
animationType: '{$options['animation_type']}',
|
22 |
-
animationSide: '{$options['menu_appear_from']}',
|
23 |
-
pageWrapper: '{$options['page_wrapper']}',
|
24 |
-
isOpen: false,
|
25 |
-
triggerTypes: 'click',
|
26 |
-
activeClass: 'is-active',
|
27 |
-
container: '#responsive-menu-container',
|
28 |
-
openClass: 'responsive-menu-open',
|
29 |
-
accordion: '{$options['accordion_animation']}',
|
30 |
-
activeArrow: '{$options->getActiveArrow()}',
|
31 |
-
inactiveArrow: '{$options->getInActiveArrow()}',
|
32 |
-
wrapper: '#responsive-menu-wrapper',
|
33 |
-
closeOnBodyClick: '{$options['menu_close_on_body_click']}',
|
34 |
-
closeOnLinkClick: '{$options['menu_close_on_link_click']}',
|
35 |
-
itemTriggerSubMenu: '{$options['menu_item_click_to_trigger_submenu']}',
|
36 |
-
linkElement: '.responsive-menu-item-link',
|
37 |
-
openMenu: function() {
|
38 |
-
$(this.trigger).addClass(this.activeClass);
|
39 |
-
$('html').addClass(this.openClass);
|
40 |
-
$('.responsive-menu-button-icon-active').hide();
|
41 |
-
$('.responsive-menu-button-icon-inactive').show();
|
42 |
-
this.setWrapperTranslate();
|
43 |
-
this.isOpen = true;
|
44 |
-
},
|
45 |
-
closeMenu: function() {
|
46 |
-
$(this.trigger).removeClass(this.activeClass);
|
47 |
-
$('html').removeClass(this.openClass);
|
48 |
-
$('.responsive-menu-button-icon-inactive').hide();
|
49 |
-
$('.responsive-menu-button-icon-active').show();
|
50 |
-
this.clearWrapperTranslate();
|
51 |
-
this.isOpen = false;
|
52 |
-
},
|
53 |
-
triggerMenu: function() {
|
54 |
-
this.isOpen ? this.closeMenu() : this.openMenu();
|
55 |
-
},
|
56 |
-
triggerSubArrow: function(subarrow) {
|
57 |
-
var sub_menu = $(subarrow).parent().next('.responsive-menu-submenu');
|
58 |
-
var self = this;
|
59 |
-
if(this.accordion == 'on') {
|
60 |
-
/* Get Top Most Parent and the siblings */
|
61 |
-
var top_siblings = sub_menu.parents('.responsive-menu-item-has-children').last().siblings('.responsive-menu-item-has-children');
|
62 |
-
var first_siblings = sub_menu.parents('.responsive-menu-item-has-children').first().siblings('.responsive-menu-item-has-children');
|
63 |
-
/* Close up just the top level parents to key the rest as it was */
|
64 |
-
top_siblings.children('.responsive-menu-submenu').slideUp(200, 'linear').removeClass('responsive-menu-submenu-open');
|
65 |
-
/* Set each parent arrow to inactive */
|
66 |
-
top_siblings.each(function() {
|
67 |
-
$(this).find('.responsive-menu-subarrow').first().html(self.inactiveArrow);
|
68 |
-
$(this).find('.responsive-menu-subarrow').first().removeClass('responsive-menu-subarrow-active');
|
69 |
-
});
|
70 |
-
/* Now Repeat for the current item siblings */
|
71 |
-
first_siblings.children('.responsive-menu-submenu').slideUp(200, 'linear').removeClass('responsive-menu-submenu-open');
|
72 |
-
first_siblings.each(function() {
|
73 |
-
$(this).find('.responsive-menu-subarrow').first().html(self.inactiveArrow);
|
74 |
-
$(this).find('.responsive-menu-subarrow').first().removeClass('responsive-menu-subarrow-active');
|
75 |
-
});
|
76 |
-
}
|
77 |
-
if(sub_menu.hasClass('responsive-menu-submenu-open')) {
|
78 |
-
sub_menu.slideUp(200, 'linear').removeClass('responsive-menu-submenu-open');
|
79 |
-
$(subarrow).html(this.inactiveArrow);
|
80 |
-
$(subarrow).removeClass('responsive-menu-subarrow-active');
|
81 |
-
} else {
|
82 |
-
sub_menu.slideDown(200, 'linear').addClass('responsive-menu-submenu-open');
|
83 |
-
$(subarrow).html(this.activeArrow);
|
84 |
-
$(subarrow).addClass('responsive-menu-subarrow-active');
|
85 |
-
}
|
86 |
-
},
|
87 |
-
menuHeight: function() {
|
88 |
-
return $(this.container).height();
|
89 |
-
},
|
90 |
-
menuWidth: function() {
|
91 |
-
return $(this.container).width();
|
92 |
-
},
|
93 |
-
wrapperHeight: function() {
|
94 |
-
return $(this.wrapper).height();
|
95 |
-
},
|
96 |
-
setWrapperTranslate: function() {
|
97 |
-
switch(this.animationSide) {
|
98 |
-
case 'left':
|
99 |
-
translate = 'translateX(' + this.menuWidth() + 'px)'; break;
|
100 |
-
case 'right':
|
101 |
-
translate = 'translateX(-' + this.menuWidth() + 'px)'; break;
|
102 |
-
case 'top':
|
103 |
-
translate = 'translateY(' + this.wrapperHeight() + 'px)'; break;
|
104 |
-
case 'bottom':
|
105 |
-
translate = 'translateY(-' + this.menuHeight() + 'px)'; break;
|
106 |
-
}
|
107 |
-
if(this.animationType == 'push') {
|
108 |
-
$(this.pageWrapper).css({'transform':translate});
|
109 |
-
$('html, body').css('overflow-x', 'hidden');
|
110 |
-
}
|
111 |
-
if(this.pushButton == 'on') {
|
112 |
-
$('#responsive-menu-button').css({'transform':translate});
|
113 |
-
}
|
114 |
-
},
|
115 |
-
clearWrapperTranslate: function() {
|
116 |
-
var self = this;
|
117 |
-
if(this.animationType == 'push') {
|
118 |
-
$(this.pageWrapper).css({'transform':''});
|
119 |
-
setTimeout(function() {
|
120 |
-
$('html, body').css('overflow-x', '');
|
121 |
-
}, self.animationSpeed);
|
122 |
-
}
|
123 |
-
if(this.pushButton == 'on') {
|
124 |
-
$('#responsive-menu-button').css({'transform':''});
|
125 |
-
}
|
126 |
-
},
|
127 |
-
init: function() {
|
128 |
-
var self = this;
|
129 |
-
$(this.trigger).on(this.triggerTypes, function(e){
|
130 |
-
e.stopPropagation();
|
131 |
-
self.triggerMenu();
|
132 |
-
});
|
133 |
-
$('.responsive-menu-subarrow').on('click', function(e) {
|
134 |
-
e.preventDefault();
|
135 |
-
e.stopPropagation();
|
136 |
-
self.triggerSubArrow(this);
|
137 |
-
});
|
138 |
-
$(window).resize(function() {
|
139 |
-
if($(window).width() > self.breakpoint) {
|
140 |
-
if(self.isOpen){
|
141 |
-
self.closeMenu();
|
142 |
-
}
|
143 |
-
} else {
|
144 |
-
if($('.responsive-menu-open').length>0){
|
145 |
-
self.setWrapperTranslate();
|
146 |
-
}
|
147 |
-
}
|
148 |
-
});
|
149 |
-
if(this.closeOnLinkClick == 'on') {
|
150 |
-
$(this.linkElement).on('click', function(e) {
|
151 |
-
e.preventDefault();
|
152 |
-
/* Fix for when close menu on parent clicks is on */
|
153 |
-
if(self.itemTriggerSubMenu == 'on' && $(this).is('.responsive-menu-item-has-children > ' + self.linkElement)) {
|
154 |
-
return;
|
155 |
-
}
|
156 |
-
old_href = $(this).attr('href');
|
157 |
-
old_target = typeof $(this).attr('target') == 'undefined' ? '_self' : $(this).attr('target');
|
158 |
-
if(self.isOpen) {
|
159 |
-
if($(e.target).closest('.responsive-menu-subarrow').length) {
|
160 |
-
return;
|
161 |
-
}
|
162 |
-
self.closeMenu();
|
163 |
-
setTimeout(function() {
|
164 |
-
window.open(old_href, old_target);
|
165 |
-
}, self.animationSpeed);
|
166 |
-
}
|
167 |
-
});
|
168 |
-
}
|
169 |
-
if(this.closeOnBodyClick == 'on') {
|
170 |
-
$(document).on('click', 'body', function(e) {
|
171 |
-
if(self.isOpen) {
|
172 |
-
if($(e.target).closest('#responsive-menu-container').length || $(e.target).closest('#responsive-menu-button').length) {
|
173 |
-
return;
|
174 |
-
}
|
175 |
-
}
|
176 |
-
self.closeMenu();
|
177 |
-
});
|
178 |
-
}
|
179 |
-
if(this.itemTriggerSubMenu == 'on') {
|
180 |
-
$('.responsive-menu-item-has-children > ' + this.linkElement).on('click', function(e) {
|
181 |
-
e.preventDefault();
|
182 |
-
self.triggerSubArrow($(this).children('.responsive-menu-subarrow').first());
|
183 |
-
});
|
184 |
-
}
|
185 |
-
}
|
186 |
-
};
|
187 |
-
ResponsiveMenu.init();
|
188 |
-
});
|
189 |
-
|
190 |
-
JS;
|
191 |
-
|
192 |
-
return $js;
|
193 |
-
|
194 |
-
}
|
195 |
-
|
196 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Mappers/ScssBaseMapper.php
DELETED
@@ -1,201 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Mappers;
|
4 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
-
|
6 |
-
class ScssBaseMapper extends ScssMapper {
|
7 |
-
|
8 |
-
public function map(OptionsCollection $options) {
|
9 |
-
|
10 |
-
$css = <<<CSS
|
11 |
-
|
12 |
-
button#responsive-menu-button,
|
13 |
-
#responsive-menu-container {
|
14 |
-
display: none;
|
15 |
-
-webkit-text-size-adjust: 100%;
|
16 |
-
}
|
17 |
-
|
18 |
-
@media screen and (max-width: {$options['breakpoint']}px) {
|
19 |
-
|
20 |
-
#responsive-menu-container {
|
21 |
-
display: block;
|
22 |
-
}
|
23 |
-
|
24 |
-
#responsive-menu-container {
|
25 |
-
position: fixed;
|
26 |
-
top: 0;
|
27 |
-
bottom: 0;
|
28 |
-
z-index: 99998;
|
29 |
-
/* Fix for scroll bars appearing when not needed */
|
30 |
-
padding-bottom: 5px;
|
31 |
-
margin-bottom: -5px;
|
32 |
-
outline: 1px solid transparent;
|
33 |
-
overflow-y: auto;
|
34 |
-
overflow-x: hidden;
|
35 |
-
.responsive-menu-search-box {
|
36 |
-
width: 100%;
|
37 |
-
padding: 0 2%;
|
38 |
-
border-radius: 2px;
|
39 |
-
height: 50px;
|
40 |
-
-webkit-appearance: none;
|
41 |
-
}
|
42 |
-
|
43 |
-
&.push-left,
|
44 |
-
&.slide-left {
|
45 |
-
transform: translateX(-100%);
|
46 |
-
-ms-transform: translateX(-100%);
|
47 |
-
-webkit-transform: translateX(-100%);
|
48 |
-
-moz-transform: translateX(-100%);
|
49 |
-
.responsive-menu-open & {
|
50 |
-
transform: translateX(0);
|
51 |
-
-ms-transform: translateX(0);
|
52 |
-
-webkit-transform: translateX(0);
|
53 |
-
-moz-transform: translateX(0);
|
54 |
-
}
|
55 |
-
}
|
56 |
-
|
57 |
-
&.push-top,
|
58 |
-
&.slide-top {
|
59 |
-
transform: translateY(-100%);
|
60 |
-
-ms-transform: translateY(-100%);
|
61 |
-
-webkit-transform: translateY(-100%);
|
62 |
-
-moz-transform: translateY(-100%);
|
63 |
-
.responsive-menu-open & {
|
64 |
-
transform: translateY(0);
|
65 |
-
-ms-transform: translateY(0);
|
66 |
-
-webkit-transform: translateY(0);
|
67 |
-
-moz-transform: translateY(0);
|
68 |
-
}
|
69 |
-
}
|
70 |
-
|
71 |
-
&.push-right,
|
72 |
-
&.slide-right {
|
73 |
-
transform: translateX(100%);
|
74 |
-
-ms-transform: translateX(100%);
|
75 |
-
-webkit-transform: translateX(100%);
|
76 |
-
-moz-transform: translateX(100%);
|
77 |
-
.responsive-menu-open & {
|
78 |
-
transform: translateX(0);
|
79 |
-
-ms-transform: translateX(0);
|
80 |
-
-webkit-transform: translateX(0);
|
81 |
-
-moz-transform: translateX(0);
|
82 |
-
}
|
83 |
-
}
|
84 |
-
|
85 |
-
&.push-bottom,
|
86 |
-
&.slide-bottom {
|
87 |
-
transform: translateY(100%);
|
88 |
-
-ms-transform: translateY(100%);
|
89 |
-
-webkit-transform: translateY(100%);
|
90 |
-
-moz-transform: translateY(100%);
|
91 |
-
.responsive-menu-open & {
|
92 |
-
transform: translateY(0);
|
93 |
-
-ms-transform: translateY(0);
|
94 |
-
-webkit-transform: translateY(0);
|
95 |
-
-moz-transform: translateY(0);
|
96 |
-
}
|
97 |
-
}
|
98 |
-
|
99 |
-
// Reset Styles for all our elements
|
100 |
-
&, &:before, &:after, & *, & *:before, & *:after {
|
101 |
-
box-sizing: border-box;
|
102 |
-
margin: 0;
|
103 |
-
padding: 0;
|
104 |
-
}
|
105 |
-
|
106 |
-
#responsive-menu-search-box,
|
107 |
-
#responsive-menu-additional-content,
|
108 |
-
#responsive-menu-title {
|
109 |
-
padding: 25px 5%;
|
110 |
-
}
|
111 |
-
|
112 |
-
#responsive-menu {
|
113 |
-
&, ul {
|
114 |
-
width: 100%;
|
115 |
-
}
|
116 |
-
& ul.responsive-menu-submenu {
|
117 |
-
display: none;
|
118 |
-
&.responsive-menu-submenu-open {
|
119 |
-
display: block;
|
120 |
-
}
|
121 |
-
}
|
122 |
-
@for \$i from 1 through 6 {
|
123 |
-
& ul.responsive-menu-submenu-depth-#{\$i}
|
124 |
-
a.responsive-menu-item-link {
|
125 |
-
padding-{$options['menu_text_alignment']}: 5% + (5% * \$i);
|
126 |
-
}
|
127 |
-
}
|
128 |
-
|
129 |
-
}
|
130 |
-
|
131 |
-
li.responsive-menu-item {
|
132 |
-
width: 100%;
|
133 |
-
list-style: none;
|
134 |
-
a {
|
135 |
-
width: 100%;
|
136 |
-
display: block;
|
137 |
-
text-decoration: none;
|
138 |
-
padding: 0 5%;
|
139 |
-
position: relative;
|
140 |
-
.fa {
|
141 |
-
margin-right: 15px;
|
142 |
-
}
|
143 |
-
.responsive-menu-subarrow {
|
144 |
-
position: absolute;
|
145 |
-
top: 0;
|
146 |
-
bottom: 0;
|
147 |
-
text-align: center;
|
148 |
-
overflow: hidden;
|
149 |
-
.fa {
|
150 |
-
margin-right: 0;
|
151 |
-
}
|
152 |
-
}
|
153 |
-
}
|
154 |
-
}
|
155 |
-
}
|
156 |
-
|
157 |
-
button#responsive-menu-button {
|
158 |
-
.responsive-menu-button-icon-inactive {
|
159 |
-
display: none;
|
160 |
-
}
|
161 |
-
}
|
162 |
-
|
163 |
-
button#responsive-menu-button {
|
164 |
-
z-index: 99999;
|
165 |
-
display: none;
|
166 |
-
overflow: hidden;
|
167 |
-
img {
|
168 |
-
max-width: 100%;
|
169 |
-
}
|
170 |
-
}
|
171 |
-
|
172 |
-
.responsive-menu-label {
|
173 |
-
display: inline-block;
|
174 |
-
font-weight: 600;
|
175 |
-
margin: 0 5px;
|
176 |
-
vertical-align: middle;
|
177 |
-
}
|
178 |
-
|
179 |
-
.responsive-menu-accessible {
|
180 |
-
display: inline-block;
|
181 |
-
}
|
182 |
-
|
183 |
-
.responsive-menu-accessible .responsive-menu-box {
|
184 |
-
display: inline-block;
|
185 |
-
vertical-align: middle;
|
186 |
-
}
|
187 |
-
|
188 |
-
.responsive-menu-label.responsive-menu-label-top,
|
189 |
-
.responsive-menu-label.responsive-menu-label-bottom
|
190 |
-
{
|
191 |
-
display: block;
|
192 |
-
margin: 0 auto;
|
193 |
-
}
|
194 |
-
|
195 |
-
}
|
196 |
-
CSS;
|
197 |
-
|
198 |
-
return $this->compiler->compile($css);
|
199 |
-
}
|
200 |
-
|
201 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Mappers/ScssButtonMapper.php
DELETED
@@ -1,63 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Mappers;
|
4 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
-
|
6 |
-
class ScssButtonMapper extends ScssMapper {
|
7 |
-
|
8 |
-
public function map(OptionsCollection $options) {
|
9 |
-
|
10 |
-
$hamburger_css_dir = dirname(dirname(dirname(__FILE__))) . '/public/scss/hamburgers/hamburgers.scss';
|
11 |
-
$no_animation = $options['button_click_animation'] == 'off' ? '$hamburger-types: ();' : '';
|
12 |
-
|
13 |
-
$css = <<<CSS
|
14 |
-
|
15 |
-
@media screen and ( max-width: {$options['breakpoint']}px ) {
|
16 |
-
|
17 |
-
\$hamburger-layer-height: {$options['button_line_height']}px;
|
18 |
-
\$hamburger-layer-spacing: {$options['button_line_margin']}px;
|
19 |
-
\$hamburger-layer-color: {$options['button_line_colour']};
|
20 |
-
\$hamburger-layer-width: {$options['button_line_width']}px;
|
21 |
-
\$hamburger-hover-opacity: 1;
|
22 |
-
{$no_animation}
|
23 |
-
|
24 |
-
@import "{$hamburger_css_dir}";
|
25 |
-
|
26 |
-
button#responsive-menu-button {
|
27 |
-
width: {$options['button_width']}px;
|
28 |
-
height: {$options['button_height']}px;
|
29 |
-
@if '{$options['button_transparent_background']}' == 'off' {
|
30 |
-
background: {$options['button_background_colour']};
|
31 |
-
&:hover {
|
32 |
-
background: {$options['button_background_colour_hover']};
|
33 |
-
}
|
34 |
-
}
|
35 |
-
position: {$options['button_position_type']};
|
36 |
-
top: {$options['button_top']}px;
|
37 |
-
{$options['button_left_or_right']}: {$options['button_distance_from_side']}%;
|
38 |
-
.responsive-menu-box {
|
39 |
-
color: {$options['button_line_colour']};
|
40 |
-
}
|
41 |
-
}
|
42 |
-
|
43 |
-
.responsive-menu-label {
|
44 |
-
color: {$options['button_text_colour']};
|
45 |
-
font-size: {$options['button_font_size']}px;
|
46 |
-
line-height: {$options['button_title_line_height']}px;
|
47 |
-
@if '{$options['button_font']}' != '' {
|
48 |
-
font-family: '{$options['button_font']}';
|
49 |
-
}
|
50 |
-
}
|
51 |
-
|
52 |
-
button#responsive-menu-button {
|
53 |
-
display: inline-block;
|
54 |
-
transition: transform {$options['animation_speed']}s, background-color {$options['transition_speed']}s;
|
55 |
-
}
|
56 |
-
}
|
57 |
-
CSS;
|
58 |
-
|
59 |
-
return $this->compiler->compile($css);
|
60 |
-
|
61 |
-
}
|
62 |
-
|
63 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Mappers/ScssMapper.php
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Mappers;
|
4 |
-
|
5 |
-
class ScssMapper {
|
6 |
-
|
7 |
-
public function __construct(\scssc_free $compiler) {
|
8 |
-
$this->compiler = $compiler;
|
9 |
-
}
|
10 |
-
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Mappers/ScssMenuMapper.php
DELETED
@@ -1,207 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Mappers;
|
4 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
-
|
6 |
-
class ScssMenuMapper extends ScssMapper {
|
7 |
-
|
8 |
-
public function map(OptionsCollection $options) {
|
9 |
-
|
10 |
-
$css = <<<CSS
|
11 |
-
|
12 |
-
@media screen and ( max-width: {$options['breakpoint']}px ) {
|
13 |
-
|
14 |
-
@if '{$options['menu_close_on_body_click']}' == 'on' {
|
15 |
-
html.responsive-menu-open {
|
16 |
-
cursor: pointer;
|
17 |
-
#responsive-menu-container {
|
18 |
-
cursor: initial;
|
19 |
-
}
|
20 |
-
}
|
21 |
-
}
|
22 |
-
|
23 |
-
@if '{$options['page_wrapper']}' != '' {
|
24 |
-
& {$options['page_wrapper']} {
|
25 |
-
transition: transform {$options['animation_speed']}s;
|
26 |
-
}
|
27 |
-
html.responsive-menu-open,
|
28 |
-
.responsive-menu-open body {
|
29 |
-
width: 100%;
|
30 |
-
}
|
31 |
-
}
|
32 |
-
|
33 |
-
#responsive-menu-container {
|
34 |
-
width: {$options['menu_width']}%;
|
35 |
-
{$options['menu_appear_from']}: 0;
|
36 |
-
|
37 |
-
background: {$options['menu_background_colour']};
|
38 |
-
transition: transform {$options['animation_speed']}s;
|
39 |
-
text-align: {$options['menu_text_alignment']};
|
40 |
-
|
41 |
-
& #responsive-menu-wrapper {
|
42 |
-
background: {$options['menu_background_colour']};
|
43 |
-
}
|
44 |
-
|
45 |
-
#responsive-menu-additional-content {
|
46 |
-
color: {$options['menu_additional_content_colour']};
|
47 |
-
}
|
48 |
-
|
49 |
-
.responsive-menu-search-box {
|
50 |
-
background: {$options['menu_search_box_background_colour']};
|
51 |
-
border: 2px solid {$options['menu_search_box_border_colour']};
|
52 |
-
color: {$options['menu_search_box_text_colour']};
|
53 |
-
&:-ms-input-placeholder {
|
54 |
-
color: {$options['menu_search_box_placholder_colour']};
|
55 |
-
}
|
56 |
-
&:-webkit-input-placeholder {
|
57 |
-
color: {$options['menu_search_box_placholder_colour']};
|
58 |
-
}
|
59 |
-
&:-moz-placeholder {
|
60 |
-
color: {$options['menu_search_box_placholder_colour']};
|
61 |
-
opacity: 1;
|
62 |
-
}
|
63 |
-
&::-moz-placeholder {
|
64 |
-
color: {$options['menu_search_box_placholder_colour']};
|
65 |
-
opacity: 1;
|
66 |
-
}
|
67 |
-
}
|
68 |
-
|
69 |
-
@if '{$options['menu_maximum_width']}' != '' {
|
70 |
-
max-width: {$options['menu_maximum_width']}px;
|
71 |
-
}
|
72 |
-
@if '{$options['menu_minimum_width']}' != '' {
|
73 |
-
min-width: {$options['menu_minimum_width']}px;
|
74 |
-
}
|
75 |
-
|
76 |
-
@if '{$options['menu_font']}' != '' {
|
77 |
-
font-family: '{$options['menu_font']}';
|
78 |
-
}
|
79 |
-
|
80 |
-
& .responsive-menu-item-link, & #responsive-menu-title, & .responsive-menu-subarrow {
|
81 |
-
transition: background-color {$options['transition_speed']}s, border-color {$options['transition_speed']}s, color {$options['transition_speed']}s;
|
82 |
-
}
|
83 |
-
|
84 |
-
#responsive-menu-title {
|
85 |
-
background-color: {$options['menu_title_background_colour']};
|
86 |
-
color: {$options['menu_title_colour']};
|
87 |
-
font-size: {$options['menu_title_font_size']}px;
|
88 |
-
a {
|
89 |
-
color: {$options['menu_title_colour']};
|
90 |
-
font-size: {$options['menu_title_font_size']}px;
|
91 |
-
text-decoration: none;
|
92 |
-
&:hover {
|
93 |
-
color: {$options['menu_title_hover_colour']};
|
94 |
-
}
|
95 |
-
}
|
96 |
-
&:hover {
|
97 |
-
background-color: {$options['menu_title_background_hover_colour']};
|
98 |
-
color: {$options['menu_title_hover_colour']};
|
99 |
-
a {
|
100 |
-
color: {$options['menu_title_hover_colour']};
|
101 |
-
}
|
102 |
-
}
|
103 |
-
#responsive-menu-title-image {
|
104 |
-
display: inline-block;
|
105 |
-
vertical-align: middle;
|
106 |
-
margin-right: 15px;
|
107 |
-
}
|
108 |
-
}
|
109 |
-
|
110 |
-
#responsive-menu {
|
111 |
-
|
112 |
-
> li.responsive-menu-item:first-child > a {
|
113 |
-
border-top: {$options['menu_border_width']}px solid {$options['menu_item_border_colour']};
|
114 |
-
}
|
115 |
-
|
116 |
-
li.responsive-menu-item {
|
117 |
-
.responsive-menu-item-link {
|
118 |
-
font-size: {$options['menu_font_size']}px;
|
119 |
-
}
|
120 |
-
|
121 |
-
a {
|
122 |
-
line-height: {$options['menu_links_height']}px;
|
123 |
-
border-bottom: {$options['menu_border_width']}px solid {$options['menu_item_border_colour']};
|
124 |
-
|
125 |
-
color: {$options['menu_link_colour']};
|
126 |
-
background-color: {$options['menu_item_background_colour']};
|
127 |
-
&:hover {
|
128 |
-
color: {$options['menu_link_hover_colour']};
|
129 |
-
background-color: {$options['menu_item_background_hover_colour']};
|
130 |
-
border-color: {$options['menu_item_border_colour_hover']};
|
131 |
-
.responsive-menu-subarrow {
|
132 |
-
color: {$options['menu_sub_arrow_shape_hover_colour']};
|
133 |
-
border-color: {$options['menu_sub_arrow_border_hover_colour']};
|
134 |
-
background-color: {$options['menu_sub_arrow_background_hover_colour']};
|
135 |
-
}
|
136 |
-
}
|
137 |
-
|
138 |
-
.responsive-menu-subarrow {
|
139 |
-
{$options['arrow_position']}: 0;
|
140 |
-
height: {$options['submenu_arrow_height']}px;
|
141 |
-
line-height: {$options['submenu_arrow_height']}px;
|
142 |
-
width: {$options['submenu_arrow_width']}px;
|
143 |
-
color: {$options['menu_sub_arrow_shape_colour']};
|
144 |
-
border-left: {$options['menu_border_width']}px solid {$options['menu_sub_arrow_border_colour']};
|
145 |
-
background-color: {$options['menu_sub_arrow_background_colour']};
|
146 |
-
&.responsive-menu-subarrow-active {
|
147 |
-
color: {$options['menu_sub_arrow_shape_colour_active']};
|
148 |
-
border-color: {$options['menu_sub_arrow_border_colour_active']};
|
149 |
-
background-color: {$options['menu_sub_arrow_background_colour_active']};
|
150 |
-
&:hover {
|
151 |
-
color: {$options['menu_sub_arrow_shape_hover_colour_active']};
|
152 |
-
border-color: {$options['menu_sub_arrow_border_hover_colour_active']};
|
153 |
-
background-color: {$options['menu_sub_arrow_background_hover_colour_active']};
|
154 |
-
}
|
155 |
-
}
|
156 |
-
&:hover {
|
157 |
-
color: {$options['menu_sub_arrow_shape_hover_colour']};
|
158 |
-
border-color: {$options['menu_sub_arrow_border_hover_colour']};
|
159 |
-
background-color: {$options['menu_sub_arrow_background_hover_colour']};
|
160 |
-
}
|
161 |
-
}
|
162 |
-
}
|
163 |
-
&.responsive-menu-current-item > .responsive-menu-item-link {
|
164 |
-
background-color: {$options['menu_current_item_background_colour']};
|
165 |
-
color: {$options['menu_current_link_colour']};
|
166 |
-
border-color: {$options['menu_current_item_border_colour']};
|
167 |
-
&:hover {
|
168 |
-
background-color: {$options['menu_current_item_background_hover_colour']};
|
169 |
-
color: {$options['menu_current_link_hover_colour']};
|
170 |
-
border-color: {$options['menu_current_item_border_hover_colour']};
|
171 |
-
}
|
172 |
-
}
|
173 |
-
}
|
174 |
-
}
|
175 |
-
|
176 |
-
@if '{$options['menu_background_image']}' != '' {
|
177 |
-
background: url('{$options['menu_background_image']}');
|
178 |
-
background-size: cover;
|
179 |
-
#responsive-menu-title,
|
180 |
-
#responsive-menu-title:hover,
|
181 |
-
#responsive-menu li.responsive-menu-item a,
|
182 |
-
#responsive-menu li.responsive-menu-item a:hover,
|
183 |
-
#responsive-menu li.responsive-menu-item a .responsive-menu-subarrow,
|
184 |
-
#responsive-menu li.responsive-menu-item a .responsive-menu-subarrow:hover,
|
185 |
-
#responsive-menu li.responsive-menu-item a:hover .responsive-menu-subarrow,
|
186 |
-
#responsive-menu li.responsive-menu-item.responsive-menu-current-item > .responsive-menu-item-link,
|
187 |
-
#responsive-menu li.responsive-menu-item.responsive-menu-current-item > .responsive-menu-item-link:hover,
|
188 |
-
#responsive-menu-wrapper {
|
189 |
-
background: none;
|
190 |
-
border: 0;
|
191 |
-
}
|
192 |
-
}
|
193 |
-
|
194 |
-
}
|
195 |
-
@if '{$options['menu_to_hide']}' != '' {
|
196 |
-
& {$options['menu_to_hide']} {
|
197 |
-
display: none !important;
|
198 |
-
}
|
199 |
-
}
|
200 |
-
}
|
201 |
-
|
202 |
-
CSS;
|
203 |
-
|
204 |
-
return $this->compiler->compile($css);
|
205 |
-
}
|
206 |
-
|
207 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Mappers/scss.inc.php
DELETED
@@ -1,4577 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* SCSS compiler written in PHP
|
4 |
-
*
|
5 |
-
* @copyright 2012-2013 Leaf Corcoran
|
6 |
-
*
|
7 |
-
* @license http://opensource.org/licenses/gpl-license GPL-3.0
|
8 |
-
* @license http://opensource.org/licenses/MIT MIT
|
9 |
-
*
|
10 |
-
* @link http://leafo.net/scssphp
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
* The scss compiler and parser.
|
15 |
-
*
|
16 |
-
* Converting SCSS to CSS is a three stage process. The incoming file is parsed
|
17 |
-
* by `scss_parser` into a syntax tree, then it is compiled into another tree
|
18 |
-
* representing the CSS structure by `scssc`. The CSS tree is fed into a
|
19 |
-
* formatter, like `scss_formatter` which then outputs CSS as a string.
|
20 |
-
*
|
21 |
-
* During the first compile, all values are *reduced*, which means that their
|
22 |
-
* types are brought to the lowest form before being dump as strings. This
|
23 |
-
* handles math equations, variable dereferences, and the like.
|
24 |
-
*
|
25 |
-
* The `parse` function of `scssc` is the entry point.
|
26 |
-
*
|
27 |
-
* In summary:
|
28 |
-
*
|
29 |
-
* The `scssc` class creates an instance of the parser, feeds it SCSS code,
|
30 |
-
* then transforms the resulting tree to a CSS tree. This class also holds the
|
31 |
-
* evaluation context, such as all available mixins and variables at any given
|
32 |
-
* time.
|
33 |
-
*
|
34 |
-
* The `scss_parser` class is only concerned with parsing its input.
|
35 |
-
*
|
36 |
-
* The `scss_formatter` takes a CSS tree, and dumps it to a formatted string,
|
37 |
-
* handling things like indentation.
|
38 |
-
*/
|
39 |
-
|
40 |
-
/**
|
41 |
-
* SCSS compiler
|
42 |
-
*
|
43 |
-
* @author Leaf Corcoran <leafot@gmail.com>
|
44 |
-
*/
|
45 |
-
class scssc_free {
|
46 |
-
static public $VERSION = 'v0.0.12';
|
47 |
-
|
48 |
-
static protected $operatorNames = array(
|
49 |
-
'+' => "add",
|
50 |
-
'-' => "sub",
|
51 |
-
'*' => "mul",
|
52 |
-
'/' => "div",
|
53 |
-
'%' => "mod",
|
54 |
-
|
55 |
-
'==' => "eq",
|
56 |
-
'!=' => "neq",
|
57 |
-
'<' => "lt",
|
58 |
-
'>' => "gt",
|
59 |
-
|
60 |
-
'<=' => "lte",
|
61 |
-
'>=' => "gte",
|
62 |
-
);
|
63 |
-
|
64 |
-
static protected $namespaces = array(
|
65 |
-
"special" => "%",
|
66 |
-
"mixin" => "@",
|
67 |
-
"function" => "^",
|
68 |
-
);
|
69 |
-
|
70 |
-
static protected $unitTable = array(
|
71 |
-
"in" => array(
|
72 |
-
"in" => 1,
|
73 |
-
"pt" => 72,
|
74 |
-
"pc" => 6,
|
75 |
-
"cm" => 2.54,
|
76 |
-
"mm" => 25.4,
|
77 |
-
"px" => 96,
|
78 |
-
)
|
79 |
-
);
|
80 |
-
|
81 |
-
static public $true = array("keyword", "true");
|
82 |
-
static public $false = array("keyword", "false");
|
83 |
-
static public $null = array("null");
|
84 |
-
|
85 |
-
static public $defaultValue = array("keyword", "");
|
86 |
-
static public $selfSelector = array("self");
|
87 |
-
|
88 |
-
protected $importPaths = array("");
|
89 |
-
protected $importCache = array();
|
90 |
-
|
91 |
-
protected $userFunctions = array();
|
92 |
-
protected $registeredVars = array();
|
93 |
-
|
94 |
-
protected $numberPrecision = 5;
|
95 |
-
|
96 |
-
protected $formatter = "scss_formatter_nested_free";
|
97 |
-
|
98 |
-
/**
|
99 |
-
* Compile scss
|
100 |
-
*
|
101 |
-
* @param string $code
|
102 |
-
* @param string $name
|
103 |
-
*
|
104 |
-
* @return string
|
105 |
-
*/
|
106 |
-
public function compile($code, $name = null)
|
107 |
-
{
|
108 |
-
try {
|
109 |
-
$this->indentLevel = -1;
|
110 |
-
$this->commentsSeen = array();
|
111 |
-
$this->extends = array();
|
112 |
-
$this->extendsMap = array();
|
113 |
-
$this->parsedFiles = array();
|
114 |
-
$this->env = null;
|
115 |
-
$this->scope = null;
|
116 |
-
|
117 |
-
$locale = setlocale(LC_NUMERIC, 0);
|
118 |
-
setlocale(LC_NUMERIC, "C");
|
119 |
-
|
120 |
-
$this->parser = new scss_parser_free($name);
|
121 |
-
|
122 |
-
$tree = $this->parser->parse($code);
|
123 |
-
|
124 |
-
$this->formatter = new $this->formatter();
|
125 |
-
|
126 |
-
$this->pushEnv($tree);
|
127 |
-
$this->injectVariables($this->registeredVars);
|
128 |
-
$this->compileRoot($tree);
|
129 |
-
$this->popEnv();
|
130 |
-
|
131 |
-
$out = $this->formatter->format($this->scope);
|
132 |
-
|
133 |
-
setlocale(LC_NUMERIC, $locale);
|
134 |
-
|
135 |
-
return $out;
|
136 |
-
} catch(Exception $e) {}
|
137 |
-
|
138 |
-
}
|
139 |
-
|
140 |
-
protected function isSelfExtend($target, $origin) {
|
141 |
-
foreach ($origin as $sel) {
|
142 |
-
if (in_array($target, $sel)) {
|
143 |
-
return true;
|
144 |
-
}
|
145 |
-
}
|
146 |
-
|
147 |
-
return false;
|
148 |
-
}
|
149 |
-
|
150 |
-
protected function pushExtends($target, $origin) {
|
151 |
-
if ($this->isSelfExtend($target, $origin)) {
|
152 |
-
return;
|
153 |
-
}
|
154 |
-
|
155 |
-
$i = count($this->extends);
|
156 |
-
$this->extends[] = array($target, $origin);
|
157 |
-
|
158 |
-
foreach ($target as $part) {
|
159 |
-
if (isset($this->extendsMap[$part])) {
|
160 |
-
$this->extendsMap[$part][] = $i;
|
161 |
-
} else {
|
162 |
-
$this->extendsMap[$part] = array($i);
|
163 |
-
}
|
164 |
-
}
|
165 |
-
}
|
166 |
-
|
167 |
-
protected function makeOutputBlock($type, $selectors = null) {
|
168 |
-
$out = new stdClass;
|
169 |
-
$out->type = $type;
|
170 |
-
$out->lines = array();
|
171 |
-
$out->children = array();
|
172 |
-
$out->parent = $this->scope;
|
173 |
-
$out->selectors = $selectors;
|
174 |
-
$out->depth = $this->env->depth;
|
175 |
-
|
176 |
-
return $out;
|
177 |
-
}
|
178 |
-
|
179 |
-
protected function matchExtendsSingle($single, &$outOrigin) {
|
180 |
-
$counts = array();
|
181 |
-
foreach ($single as $part) {
|
182 |
-
if (!is_string($part)) return false; // hmm
|
183 |
-
|
184 |
-
if (isset($this->extendsMap[$part])) {
|
185 |
-
foreach ($this->extendsMap[$part] as $idx) {
|
186 |
-
$counts[$idx] =
|
187 |
-
isset($counts[$idx]) ? $counts[$idx] + 1 : 1;
|
188 |
-
}
|
189 |
-
}
|
190 |
-
}
|
191 |
-
|
192 |
-
$outOrigin = array();
|
193 |
-
$found = false;
|
194 |
-
|
195 |
-
foreach ($counts as $idx => $count) {
|
196 |
-
list($target, $origin) = $this->extends[$idx];
|
197 |
-
|
198 |
-
// check count
|
199 |
-
if ($count != count($target)) continue;
|
200 |
-
|
201 |
-
// check if target is subset of single
|
202 |
-
if (array_diff(array_intersect($single, $target), $target)) continue;
|
203 |
-
|
204 |
-
$rem = array_diff($single, $target);
|
205 |
-
|
206 |
-
foreach ($origin as $j => $new) {
|
207 |
-
// prevent infinite loop when target extends itself
|
208 |
-
foreach ($new as $new_selector) {
|
209 |
-
if (!array_diff($single, $new_selector)) {
|
210 |
-
continue 2;
|
211 |
-
}
|
212 |
-
}
|
213 |
-
|
214 |
-
$origin[$j][count($origin[$j]) - 1] = $this->combineSelectorSingle(end($new), $rem);
|
215 |
-
}
|
216 |
-
|
217 |
-
$outOrigin = array_merge($outOrigin, $origin);
|
218 |
-
|
219 |
-
$found = true;
|
220 |
-
}
|
221 |
-
|
222 |
-
return $found;
|
223 |
-
}
|
224 |
-
|
225 |
-
protected function combineSelectorSingle($base, $other) {
|
226 |
-
$tag = null;
|
227 |
-
$out = array();
|
228 |
-
|
229 |
-
foreach (array($base, $other) as $single) {
|
230 |
-
foreach ($single as $part) {
|
231 |
-
if (preg_match('/^[^\[.#:]/', $part)) {
|
232 |
-
$tag = $part;
|
233 |
-
} else {
|
234 |
-
$out[] = $part;
|
235 |
-
}
|
236 |
-
}
|
237 |
-
}
|
238 |
-
|
239 |
-
if ($tag) {
|
240 |
-
array_unshift($out, $tag);
|
241 |
-
}
|
242 |
-
|
243 |
-
return $out;
|
244 |
-
}
|
245 |
-
|
246 |
-
protected function matchExtends($selector, &$out, $from = 0, $initial=true) {
|
247 |
-
foreach ($selector as $i => $part) {
|
248 |
-
if ($i < $from) continue;
|
249 |
-
|
250 |
-
if ($this->matchExtendsSingle($part, $origin)) {
|
251 |
-
$before = array_slice($selector, 0, $i);
|
252 |
-
$after = array_slice($selector, $i + 1);
|
253 |
-
|
254 |
-
foreach ($origin as $new) {
|
255 |
-
$k = 0;
|
256 |
-
|
257 |
-
// remove shared parts
|
258 |
-
if ($initial) {
|
259 |
-
foreach ($before as $k => $val) {
|
260 |
-
if (!isset($new[$k]) || $val != $new[$k]) {
|
261 |
-
break;
|
262 |
-
}
|
263 |
-
}
|
264 |
-
}
|
265 |
-
|
266 |
-
$result = array_merge(
|
267 |
-
$before,
|
268 |
-
$k > 0 ? array_slice($new, $k) : $new,
|
269 |
-
$after);
|
270 |
-
|
271 |
-
|
272 |
-
if ($result == $selector) continue;
|
273 |
-
$out[] = $result;
|
274 |
-
|
275 |
-
// recursively check for more matches
|
276 |
-
$this->matchExtends($result, $out, $i, false);
|
277 |
-
|
278 |
-
// selector sequence merging
|
279 |
-
if (!empty($before) && count($new) > 1) {
|
280 |
-
$result2 = array_merge(
|
281 |
-
array_slice($new, 0, -1),
|
282 |
-
$k > 0 ? array_slice($before, $k) : $before,
|
283 |
-
array_slice($new, -1),
|
284 |
-
$after);
|
285 |
-
|
286 |
-
$out[] = $result2;
|
287 |
-
}
|
288 |
-
}
|
289 |
-
}
|
290 |
-
}
|
291 |
-
}
|
292 |
-
|
293 |
-
protected function flattenSelectors($block, $parentKey = null) {
|
294 |
-
if ($block->selectors) {
|
295 |
-
$selectors = array();
|
296 |
-
foreach ($block->selectors as $s) {
|
297 |
-
$selectors[] = $s;
|
298 |
-
if (!is_array($s)) continue;
|
299 |
-
// check extends
|
300 |
-
if (!empty($this->extendsMap)) {
|
301 |
-
$this->matchExtends($s, $selectors);
|
302 |
-
}
|
303 |
-
}
|
304 |
-
|
305 |
-
$block->selectors = array();
|
306 |
-
$placeholderSelector = false;
|
307 |
-
foreach ($selectors as $selector) {
|
308 |
-
if ($this->hasSelectorPlaceholder($selector)) {
|
309 |
-
$placeholderSelector = true;
|
310 |
-
continue;
|
311 |
-
}
|
312 |
-
$block->selectors[] = $this->compileSelector($selector);
|
313 |
-
}
|
314 |
-
|
315 |
-
if ($placeholderSelector && 0 == count($block->selectors) && null !== $parentKey) {
|
316 |
-
unset($block->parent->children[$parentKey]);
|
317 |
-
return;
|
318 |
-
}
|
319 |
-
}
|
320 |
-
|
321 |
-
foreach ($block->children as $key => $child) {
|
322 |
-
$this->flattenSelectors($child, $key);
|
323 |
-
}
|
324 |
-
}
|
325 |
-
|
326 |
-
protected function compileRoot($rootBlock)
|
327 |
-
{
|
328 |
-
$this->scope = $this->makeOutputBlock('root');
|
329 |
-
|
330 |
-
$this->compileChildren($rootBlock->children, $this->scope);
|
331 |
-
$this->flattenSelectors($this->scope);
|
332 |
-
}
|
333 |
-
|
334 |
-
protected function compileMedia($media) {
|
335 |
-
$this->pushEnv($media);
|
336 |
-
|
337 |
-
$mediaQuery = $this->compileMediaQuery($this->multiplyMedia($this->env));
|
338 |
-
|
339 |
-
if (!empty($mediaQuery)) {
|
340 |
-
|
341 |
-
$this->scope = $this->makeOutputBlock("media", array($mediaQuery));
|
342 |
-
|
343 |
-
$parentScope = $this->mediaParent($this->scope);
|
344 |
-
|
345 |
-
$parentScope->children[] = $this->scope;
|
346 |
-
|
347 |
-
// top level properties in a media cause it to be wrapped
|
348 |
-
$needsWrap = false;
|
349 |
-
foreach ($media->children as $child) {
|
350 |
-
$type = $child[0];
|
351 |
-
if ($type !== 'block' && $type !== 'media' && $type !== 'directive') {
|
352 |
-
$needsWrap = true;
|
353 |
-
break;
|
354 |
-
}
|
355 |
-
}
|
356 |
-
|
357 |
-
if ($needsWrap) {
|
358 |
-
$wrapped = (object)array(
|
359 |
-
"selectors" => array(),
|
360 |
-
"children" => $media->children
|
361 |
-
);
|
362 |
-
$media->children = array(array("block", $wrapped));
|
363 |
-
}
|
364 |
-
|
365 |
-
$this->compileChildren($media->children, $this->scope);
|
366 |
-
|
367 |
-
$this->scope = $this->scope->parent;
|
368 |
-
}
|
369 |
-
|
370 |
-
$this->popEnv();
|
371 |
-
}
|
372 |
-
|
373 |
-
protected function mediaParent($scope) {
|
374 |
-
while (!empty($scope->parent)) {
|
375 |
-
if (!empty($scope->type) && $scope->type != "media") {
|
376 |
-
break;
|
377 |
-
}
|
378 |
-
$scope = $scope->parent;
|
379 |
-
}
|
380 |
-
|
381 |
-
return $scope;
|
382 |
-
}
|
383 |
-
|
384 |
-
// TODO refactor compileNestedBlock and compileMedia into same thing
|
385 |
-
protected function compileNestedBlock($block, $selectors) {
|
386 |
-
$this->pushEnv($block);
|
387 |
-
|
388 |
-
$this->scope = $this->makeOutputBlock($block->type, $selectors);
|
389 |
-
$this->scope->parent->children[] = $this->scope;
|
390 |
-
$this->compileChildren($block->children, $this->scope);
|
391 |
-
|
392 |
-
$this->scope = $this->scope->parent;
|
393 |
-
$this->popEnv();
|
394 |
-
}
|
395 |
-
|
396 |
-
/**
|
397 |
-
* Recursively compiles a block.
|
398 |
-
*
|
399 |
-
* A block is analogous to a CSS block in most cases. A single SCSS document
|
400 |
-
* is encapsulated in a block when parsed, but it does not have parent tags
|
401 |
-
* so all of its children appear on the root level when compiled.
|
402 |
-
*
|
403 |
-
* Blocks are made up of selectors and children.
|
404 |
-
*
|
405 |
-
* The children of a block are just all the blocks that are defined within.
|
406 |
-
*
|
407 |
-
* Compiling the block involves pushing a fresh environment on the stack,
|
408 |
-
* and iterating through the props, compiling each one.
|
409 |
-
*
|
410 |
-
* @see scss::compileChild()
|
411 |
-
*
|
412 |
-
* @param \StdClass $block
|
413 |
-
*/
|
414 |
-
protected function compileBlock($block) {
|
415 |
-
$env = $this->pushEnv($block);
|
416 |
-
|
417 |
-
$env->selectors =
|
418 |
-
array_map(array($this, "evalSelector"), $block->selectors);
|
419 |
-
|
420 |
-
$out = $this->makeOutputBlock(null, $this->multiplySelectors($env));
|
421 |
-
$this->scope->children[] = $out;
|
422 |
-
$this->compileChildren($block->children, $out);
|
423 |
-
|
424 |
-
$this->popEnv();
|
425 |
-
}
|
426 |
-
|
427 |
-
// joins together .classes and #ids
|
428 |
-
protected function flattenSelectorSingle($single) {
|
429 |
-
$joined = array();
|
430 |
-
foreach ($single as $part) {
|
431 |
-
if (empty($joined) ||
|
432 |
-
!is_string($part) ||
|
433 |
-
preg_match('/[\[.:#%]/', $part))
|
434 |
-
{
|
435 |
-
$joined[] = $part;
|
436 |
-
continue;
|
437 |
-
}
|
438 |
-
|
439 |
-
if (is_array(end($joined))) {
|
440 |
-
$joined[] = $part;
|
441 |
-
} else {
|
442 |
-
$joined[count($joined) - 1] .= $part;
|
443 |
-
}
|
444 |
-
}
|
445 |
-
|
446 |
-
return $joined;
|
447 |
-
}
|
448 |
-
|
449 |
-
// replaces all the interpolates
|
450 |
-
protected function evalSelector($selector) {
|
451 |
-
return array_map(array($this, "evalSelectorPart"), $selector);
|
452 |
-
}
|
453 |
-
|
454 |
-
protected function evalSelectorPart($piece) {
|
455 |
-
foreach ($piece as &$p) {
|
456 |
-
if (!is_array($p)) continue;
|
457 |
-
|
458 |
-
switch ($p[0]) {
|
459 |
-
case "interpolate":
|
460 |
-
$p = $this->compileValue($p);
|
461 |
-
break;
|
462 |
-
case "string":
|
463 |
-
$p = $this->compileValue($p);
|
464 |
-
break;
|
465 |
-
}
|
466 |
-
}
|
467 |
-
|
468 |
-
return $this->flattenSelectorSingle($piece);
|
469 |
-
}
|
470 |
-
|
471 |
-
// compiles to string
|
472 |
-
// self(&) should have been replaced by now
|
473 |
-
protected function compileSelector($selector) {
|
474 |
-
if (!is_array($selector)) return $selector; // media and the like
|
475 |
-
|
476 |
-
return implode(" ", array_map(
|
477 |
-
array($this, "compileSelectorPart"), $selector));
|
478 |
-
}
|
479 |
-
|
480 |
-
protected function compileSelectorPart($piece) {
|
481 |
-
foreach ($piece as &$p) {
|
482 |
-
if (!is_array($p)) continue;
|
483 |
-
|
484 |
-
switch ($p[0]) {
|
485 |
-
case "self":
|
486 |
-
$p = "&";
|
487 |
-
break;
|
488 |
-
default:
|
489 |
-
$p = $this->compileValue($p);
|
490 |
-
break;
|
491 |
-
}
|
492 |
-
}
|
493 |
-
|
494 |
-
return implode($piece);
|
495 |
-
}
|
496 |
-
|
497 |
-
protected function hasSelectorPlaceholder($selector)
|
498 |
-
{
|
499 |
-
if (!is_array($selector)) return false;
|
500 |
-
|
501 |
-
foreach ($selector as $parts) {
|
502 |
-
foreach ($parts as $part) {
|
503 |
-
if ('%' == $part[0]) {
|
504 |
-
return true;
|
505 |
-
}
|
506 |
-
}
|
507 |
-
}
|
508 |
-
|
509 |
-
return false;
|
510 |
-
}
|
511 |
-
|
512 |
-
protected function compileChildren($stms, $out) {
|
513 |
-
foreach ($stms as $stm) {
|
514 |
-
$ret = $this->compileChild($stm, $out);
|
515 |
-
if (isset($ret)) return $ret;
|
516 |
-
}
|
517 |
-
}
|
518 |
-
|
519 |
-
protected function compileMediaQuery($queryList) {
|
520 |
-
$out = "@media";
|
521 |
-
$first = true;
|
522 |
-
foreach ($queryList as $query){
|
523 |
-
$type = null;
|
524 |
-
$parts = array();
|
525 |
-
foreach ($query as $q) {
|
526 |
-
switch ($q[0]) {
|
527 |
-
case "mediaType":
|
528 |
-
if ($type) {
|
529 |
-
$type = $this->mergeMediaTypes($type, array_map(array($this, "compileValue"), array_slice($q, 1)));
|
530 |
-
if (empty($type)) { // merge failed
|
531 |
-
return null;
|
532 |
-
}
|
533 |
-
} else {
|
534 |
-
$type = array_map(array($this, "compileValue"), array_slice($q, 1));
|
535 |
-
}
|
536 |
-
break;
|
537 |
-
case "mediaExp":
|
538 |
-
if (isset($q[2])) {
|
539 |
-
$parts[] = "(". $this->compileValue($q[1]) . $this->formatter->assignSeparator . $this->compileValue($q[2]) . ")";
|
540 |
-
} else {
|
541 |
-
$parts[] = "(" . $this->compileValue($q[1]) . ")";
|
542 |
-
}
|
543 |
-
break;
|
544 |
-
}
|
545 |
-
}
|
546 |
-
if ($type) {
|
547 |
-
array_unshift($parts, implode(' ', array_filter($type)));
|
548 |
-
}
|
549 |
-
if (!empty($parts)) {
|
550 |
-
if ($first) {
|
551 |
-
$first = false;
|
552 |
-
$out .= " ";
|
553 |
-
} else {
|
554 |
-
$out .= $this->formatter->tagSeparator;
|
555 |
-
}
|
556 |
-
$out .= implode(" and ", $parts);
|
557 |
-
}
|
558 |
-
}
|
559 |
-
return $out;
|
560 |
-
}
|
561 |
-
|
562 |
-
protected function mergeMediaTypes($type1, $type2) {
|
563 |
-
if (empty($type1)) {
|
564 |
-
return $type2;
|
565 |
-
}
|
566 |
-
if (empty($type2)) {
|
567 |
-
return $type1;
|
568 |
-
}
|
569 |
-
$m1 = '';
|
570 |
-
$t1 = '';
|
571 |
-
if (count($type1) > 1) {
|
572 |
-
$m1= strtolower($type1[0]);
|
573 |
-
$t1= strtolower($type1[1]);
|
574 |
-
} else {
|
575 |
-
$t1 = strtolower($type1[0]);
|
576 |
-
}
|
577 |
-
$m2 = '';
|
578 |
-
$t2 = '';
|
579 |
-
if (count($type2) > 1) {
|
580 |
-
$m2 = strtolower($type2[0]);
|
581 |
-
$t2 = strtolower($type2[1]);
|
582 |
-
} else {
|
583 |
-
$t2 = strtolower($type2[0]);
|
584 |
-
}
|
585 |
-
if (($m1 == 'not') ^ ($m2 == 'not')) {
|
586 |
-
if ($t1 == $t2) {
|
587 |
-
return null;
|
588 |
-
}
|
589 |
-
return array(
|
590 |
-
$m1 == 'not' ? $m2 : $m1,
|
591 |
-
$m1 == 'not' ? $t2 : $t1
|
592 |
-
);
|
593 |
-
} elseif ($m1 == 'not' && $m2 == 'not') {
|
594 |
-
# CSS has no way of representing "neither screen nor print"
|
595 |
-
if ($t1 != $t2) {
|
596 |
-
return null;
|
597 |
-
}
|
598 |
-
return array('not', $t1);
|
599 |
-
} elseif ($t1 != $t2) {
|
600 |
-
return null;
|
601 |
-
} else { // t1 == t2, neither m1 nor m2 are "not"
|
602 |
-
return array(empty($m1)? $m2 : $m1, $t1);
|
603 |
-
}
|
604 |
-
}
|
605 |
-
|
606 |
-
// returns true if the value was something that could be imported
|
607 |
-
protected function compileImport($rawPath, $out) {
|
608 |
-
if ($rawPath[0] == "string") {
|
609 |
-
$path = $this->compileStringContent($rawPath);
|
610 |
-
if ($path = $this->findImport($path)) {
|
611 |
-
$this->importFile($path, $out);
|
612 |
-
return true;
|
613 |
-
}
|
614 |
-
return false;
|
615 |
-
}
|
616 |
-
if ($rawPath[0] == "list") {
|
617 |
-
// handle a list of strings
|
618 |
-
if (count($rawPath[2]) == 0) return false;
|
619 |
-
foreach ($rawPath[2] as $path) {
|
620 |
-
if ($path[0] != "string") return false;
|
621 |
-
}
|
622 |
-
|
623 |
-
foreach ($rawPath[2] as $path) {
|
624 |
-
$this->compileImport($path, $out);
|
625 |
-
}
|
626 |
-
|
627 |
-
return true;
|
628 |
-
}
|
629 |
-
|
630 |
-
return false;
|
631 |
-
}
|
632 |
-
|
633 |
-
// return a value to halt execution
|
634 |
-
protected function compileChild($child, $out) {
|
635 |
-
$this->sourcePos = isset($child[-1]) ? $child[-1] : -1;
|
636 |
-
$this->sourceParser = isset($child[-2]) ? $child[-2] : $this->parser;
|
637 |
-
|
638 |
-
switch ($child[0]) {
|
639 |
-
case "import":
|
640 |
-
list(,$rawPath) = $child;
|
641 |
-
$rawPath = $this->reduce($rawPath);
|
642 |
-
if (!$this->compileImport($rawPath, $out)) {
|
643 |
-
$out->lines[] = "@import " . $this->compileValue($rawPath) . ";";
|
644 |
-
}
|
645 |
-
break;
|
646 |
-
case "directive":
|
647 |
-
list(, $directive) = $child;
|
648 |
-
$s = "@" . $directive->name;
|
649 |
-
if (!empty($directive->value)) {
|
650 |
-
$s .= " " . $this->compileValue($directive->value);
|
651 |
-
}
|
652 |
-
$this->compileNestedBlock($directive, array($s));
|
653 |
-
break;
|
654 |
-
case "media":
|
655 |
-
$this->compileMedia($child[1]);
|
656 |
-
break;
|
657 |
-
case "block":
|
658 |
-
$this->compileBlock($child[1]);
|
659 |
-
break;
|
660 |
-
case "charset":
|
661 |
-
$out->lines[] = "@charset ".$this->compileValue($child[1]).";";
|
662 |
-
break;
|
663 |
-
case "assign":
|
664 |
-
list(,$name, $value) = $child;
|
665 |
-
if ($name[0] == "var") {
|
666 |
-
$isDefault = !empty($child[3]);
|
667 |
-
|
668 |
-
if ($isDefault) {
|
669 |
-
$existingValue = $this->get($name[1], true);
|
670 |
-
$shouldSet = $existingValue === true || $existingValue == self::$null;
|
671 |
-
}
|
672 |
-
|
673 |
-
if (!$isDefault || $shouldSet) {
|
674 |
-
$this->set($name[1], $this->reduce($value));
|
675 |
-
}
|
676 |
-
break;
|
677 |
-
}
|
678 |
-
|
679 |
-
// if the value reduces to null from something else then
|
680 |
-
// the property should be discarded
|
681 |
-
if ($value[0] != "null") {
|
682 |
-
$value = $this->reduce($value);
|
683 |
-
if ($value[0] == "null") {
|
684 |
-
break;
|
685 |
-
}
|
686 |
-
}
|
687 |
-
|
688 |
-
$compiledValue = $this->compileValue($value);
|
689 |
-
$out->lines[] = $this->formatter->property(
|
690 |
-
$this->compileValue($name),
|
691 |
-
$compiledValue);
|
692 |
-
break;
|
693 |
-
case "comment":
|
694 |
-
$out->lines[] = $child[1];
|
695 |
-
break;
|
696 |
-
case "mixin":
|
697 |
-
case "function":
|
698 |
-
list(,$block) = $child;
|
699 |
-
$this->set(self::$namespaces[$block->type] . $block->name, $block);
|
700 |
-
break;
|
701 |
-
case "extend":
|
702 |
-
list(, $selectors) = $child;
|
703 |
-
foreach ($selectors as $sel) {
|
704 |
-
// only use the first one
|
705 |
-
$sel = current($this->evalSelector($sel));
|
706 |
-
$this->pushExtends($sel, $out->selectors);
|
707 |
-
}
|
708 |
-
break;
|
709 |
-
case "if":
|
710 |
-
list(, $if) = $child;
|
711 |
-
if ($this->isTruthy($this->reduce($if->cond, true))) {
|
712 |
-
return $this->compileChildren($if->children, $out);
|
713 |
-
} else {
|
714 |
-
foreach ($if->cases as $case) {
|
715 |
-
if ($case->type == "else" ||
|
716 |
-
$case->type == "elseif" && $this->isTruthy($this->reduce($case->cond)))
|
717 |
-
{
|
718 |
-
return $this->compileChildren($case->children, $out);
|
719 |
-
}
|
720 |
-
}
|
721 |
-
}
|
722 |
-
break;
|
723 |
-
case "return":
|
724 |
-
return $this->reduce($child[1], true);
|
725 |
-
case "each":
|
726 |
-
list(,$each) = $child;
|
727 |
-
$list = $this->coerceList($this->reduce($each->list));
|
728 |
-
foreach ($list[2] as $item) {
|
729 |
-
$this->pushEnv();
|
730 |
-
$this->set($each->var, $item);
|
731 |
-
// TODO: allow return from here
|
732 |
-
$this->compileChildren($each->children, $out);
|
733 |
-
$this->popEnv();
|
734 |
-
}
|
735 |
-
break;
|
736 |
-
case "while":
|
737 |
-
list(,$while) = $child;
|
738 |
-
while ($this->isTruthy($this->reduce($while->cond, true))) {
|
739 |
-
$ret = $this->compileChildren($while->children, $out);
|
740 |
-
if ($ret) return $ret;
|
741 |
-
}
|
742 |
-
break;
|
743 |
-
case "for":
|
744 |
-
list(,$for) = $child;
|
745 |
-
$start = $this->reduce($for->start, true);
|
746 |
-
$start = $start[1];
|
747 |
-
$end = $this->reduce($for->end, true);
|
748 |
-
$end = $end[1];
|
749 |
-
$d = $start < $end ? 1 : -1;
|
750 |
-
|
751 |
-
while (true) {
|
752 |
-
if ((!$for->until && $start - $d == $end) ||
|
753 |
-
($for->until && $start == $end))
|
754 |
-
{
|
755 |
-
break;
|
756 |
-
}
|
757 |
-
|
758 |
-
$this->set($for->var, array("number", $start, ""));
|
759 |
-
$start += $d;
|
760 |
-
|
761 |
-
$ret = $this->compileChildren($for->children, $out);
|
762 |
-
if ($ret) return $ret;
|
763 |
-
}
|
764 |
-
|
765 |
-
break;
|
766 |
-
case "nestedprop":
|
767 |
-
list(,$prop) = $child;
|
768 |
-
$prefixed = array();
|
769 |
-
$prefix = $this->compileValue($prop->prefix) . "-";
|
770 |
-
foreach ($prop->children as $child) {
|
771 |
-
if ($child[0] == "assign") {
|
772 |
-
array_unshift($child[1][2], $prefix);
|
773 |
-
}
|
774 |
-
if ($child[0] == "nestedprop") {
|
775 |
-
array_unshift($child[1]->prefix[2], $prefix);
|
776 |
-
}
|
777 |
-
$prefixed[] = $child;
|
778 |
-
}
|
779 |
-
$this->compileChildren($prefixed, $out);
|
780 |
-
break;
|
781 |
-
case "include": // including a mixin
|
782 |
-
list(,$name, $argValues, $content) = $child;
|
783 |
-
$mixin = $this->get(self::$namespaces["mixin"] . $name, false);
|
784 |
-
if (!$mixin) {
|
785 |
-
$this->throwError("Undefined mixin $name");
|
786 |
-
}
|
787 |
-
|
788 |
-
$callingScope = $this->env;
|
789 |
-
|
790 |
-
// push scope, apply args
|
791 |
-
$this->pushEnv();
|
792 |
-
if ($this->env->depth > 0) {
|
793 |
-
$this->env->depth--;
|
794 |
-
}
|
795 |
-
|
796 |
-
if (isset($content)) {
|
797 |
-
$content->scope = $callingScope;
|
798 |
-
$this->setRaw(self::$namespaces["special"] . "content", $content);
|
799 |
-
}
|
800 |
-
|
801 |
-
if (isset($mixin->args)) {
|
802 |
-
$this->applyArguments($mixin->args, $argValues);
|
803 |
-
}
|
804 |
-
|
805 |
-
foreach ($mixin->children as $child) {
|
806 |
-
$this->compileChild($child, $out);
|
807 |
-
}
|
808 |
-
|
809 |
-
$this->popEnv();
|
810 |
-
|
811 |
-
break;
|
812 |
-
case "mixin_content":
|
813 |
-
$content = $this->get(self::$namespaces["special"] . "content");
|
814 |
-
if (!isset($content)) {
|
815 |
-
$this->throwError("Expected @content inside of mixin");
|
816 |
-
}
|
817 |
-
|
818 |
-
$strongTypes = array('include', 'block', 'for', 'while');
|
819 |
-
foreach ($content->children as $child) {
|
820 |
-
$this->storeEnv = (in_array($child[0], $strongTypes))
|
821 |
-
? null
|
822 |
-
: $content->scope;
|
823 |
-
|
824 |
-
$this->compileChild($child, $out);
|
825 |
-
}
|
826 |
-
|
827 |
-
unset($this->storeEnv);
|
828 |
-
break;
|
829 |
-
case "debug":
|
830 |
-
list(,$value, $pos) = $child;
|
831 |
-
$line = $this->parser->getLineNo($pos);
|
832 |
-
$value = $this->compileValue($this->reduce($value, true));
|
833 |
-
fwrite(STDERR, "Line $line DEBUG: $value\n");
|
834 |
-
break;
|
835 |
-
default:
|
836 |
-
$this->throwError("unknown child type: $child[0]");
|
837 |
-
}
|
838 |
-
}
|
839 |
-
|
840 |
-
protected function expToString($exp) {
|
841 |
-
list(, $op, $left, $right, $inParens, $whiteLeft, $whiteRight) = $exp;
|
842 |
-
$content = array($this->reduce($left));
|
843 |
-
if ($whiteLeft) $content[] = " ";
|
844 |
-
$content[] = $op;
|
845 |
-
if ($whiteRight) $content[] = " ";
|
846 |
-
$content[] = $this->reduce($right);
|
847 |
-
return array("string", "", $content);
|
848 |
-
}
|
849 |
-
|
850 |
-
protected function isTruthy($value) {
|
851 |
-
return $value != self::$false && $value != self::$null;
|
852 |
-
}
|
853 |
-
|
854 |
-
// should $value cause its operand to eval
|
855 |
-
protected function shouldEval($value) {
|
856 |
-
switch ($value[0]) {
|
857 |
-
case "exp":
|
858 |
-
if ($value[1] == "/") {
|
859 |
-
return $this->shouldEval($value[2], $value[3]);
|
860 |
-
}
|
861 |
-
case "var":
|
862 |
-
case "fncall":
|
863 |
-
return true;
|
864 |
-
}
|
865 |
-
return false;
|
866 |
-
}
|
867 |
-
|
868 |
-
protected function reduce($value, $inExp = false) {
|
869 |
-
list($type) = $value;
|
870 |
-
switch ($type) {
|
871 |
-
case "exp":
|
872 |
-
list(, $op, $left, $right, $inParens) = $value;
|
873 |
-
$opName = isset(self::$operatorNames[$op]) ? self::$operatorNames[$op] : $op;
|
874 |
-
|
875 |
-
$inExp = $inExp || $this->shouldEval($left) || $this->shouldEval($right);
|
876 |
-
|
877 |
-
$left = $this->reduce($left, true);
|
878 |
-
$right = $this->reduce($right, true);
|
879 |
-
|
880 |
-
// only do division in special cases
|
881 |
-
if ($opName == "div" && !$inParens && !$inExp) {
|
882 |
-
if ($left[0] != "color" && $right[0] != "color") {
|
883 |
-
return $this->expToString($value);
|
884 |
-
}
|
885 |
-
}
|
886 |
-
|
887 |
-
$left = $this->coerceForExpression($left);
|
888 |
-
$right = $this->coerceForExpression($right);
|
889 |
-
|
890 |
-
$ltype = $left[0];
|
891 |
-
$rtype = $right[0];
|
892 |
-
|
893 |
-
// this tries:
|
894 |
-
// 1. op_[op name]_[left type]_[right type]
|
895 |
-
// 2. op_[left type]_[right type] (passing the op as first arg
|
896 |
-
// 3. op_[op name]
|
897 |
-
$fn = "op_${opName}_${ltype}_${rtype}";
|
898 |
-
if (is_callable(array($this, $fn)) ||
|
899 |
-
(($fn = "op_${ltype}_${rtype}") &&
|
900 |
-
is_callable(array($this, $fn)) &&
|
901 |
-
$passOp = true) ||
|
902 |
-
(($fn = "op_${opName}") &&
|
903 |
-
is_callable(array($this, $fn)) &&
|
904 |
-
$genOp = true))
|
905 |
-
{
|
906 |
-
$unitChange = false;
|
907 |
-
if (!isset($genOp) &&
|
908 |
-
$left[0] == "number" && $right[0] == "number")
|
909 |
-
{
|
910 |
-
if ($opName == "mod" && $right[2] != "") {
|
911 |
-
$this->throwError("Cannot modulo by a number with units: $right[1]$right[2].");
|
912 |
-
}
|
913 |
-
|
914 |
-
$unitChange = true;
|
915 |
-
$emptyUnit = $left[2] == "" || $right[2] == "";
|
916 |
-
$targetUnit = "" != $left[2] ? $left[2] : $right[2];
|
917 |
-
|
918 |
-
if ($opName != "mul") {
|
919 |
-
$left[2] = "" != $left[2] ? $left[2] : $targetUnit;
|
920 |
-
$right[2] = "" != $right[2] ? $right[2] : $targetUnit;
|
921 |
-
}
|
922 |
-
|
923 |
-
if ($opName != "mod") {
|
924 |
-
$left = $this->normalizeNumber($left);
|
925 |
-
$right = $this->normalizeNumber($right);
|
926 |
-
}
|
927 |
-
|
928 |
-
if ($opName == "div" && !$emptyUnit && $left[2] == $right[2]) {
|
929 |
-
$targetUnit = "";
|
930 |
-
}
|
931 |
-
|
932 |
-
if ($opName == "mul") {
|
933 |
-
$left[2] = "" != $left[2] ? $left[2] : $right[2];
|
934 |
-
$right[2] = "" != $right[2] ? $right[2] : $left[2];
|
935 |
-
} elseif ($opName == "div" && $left[2] == $right[2]) {
|
936 |
-
$left[2] = "";
|
937 |
-
$right[2] = "";
|
938 |
-
}
|
939 |
-
}
|
940 |
-
|
941 |
-
$shouldEval = $inParens || $inExp;
|
942 |
-
if (isset($passOp)) {
|
943 |
-
$out = $this->$fn($op, $left, $right, $shouldEval);
|
944 |
-
} else {
|
945 |
-
$out = $this->$fn($left, $right, $shouldEval);
|
946 |
-
}
|
947 |
-
|
948 |
-
if (isset($out)) {
|
949 |
-
if ($unitChange && $out[0] == "number") {
|
950 |
-
$out = $this->coerceUnit($out, $targetUnit);
|
951 |
-
}
|
952 |
-
return $out;
|
953 |
-
}
|
954 |
-
}
|
955 |
-
|
956 |
-
return $this->expToString($value);
|
957 |
-
case "unary":
|
958 |
-
list(, $op, $exp, $inParens) = $value;
|
959 |
-
$inExp = $inExp || $this->shouldEval($exp);
|
960 |
-
|
961 |
-
$exp = $this->reduce($exp);
|
962 |
-
if ($exp[0] == "number") {
|
963 |
-
switch ($op) {
|
964 |
-
case "+":
|
965 |
-
return $exp;
|
966 |
-
case "-":
|
967 |
-
$exp[1] *= -1;
|
968 |
-
return $exp;
|
969 |
-
}
|
970 |
-
}
|
971 |
-
|
972 |
-
if ($op == "not") {
|
973 |
-
if ($inExp || $inParens) {
|
974 |
-
if ($exp == self::$false) {
|
975 |
-
return self::$true;
|
976 |
-
} else {
|
977 |
-
return self::$false;
|
978 |
-
}
|
979 |
-
} else {
|
980 |
-
$op = $op . " ";
|
981 |
-
}
|
982 |
-
}
|
983 |
-
|
984 |
-
return array("string", "", array($op, $exp));
|
985 |
-
case "var":
|
986 |
-
list(, $name) = $value;
|
987 |
-
return $this->reduce($this->get($name));
|
988 |
-
case "list":
|
989 |
-
foreach ($value[2] as &$item) {
|
990 |
-
$item = $this->reduce($item);
|
991 |
-
}
|
992 |
-
return $value;
|
993 |
-
case "string":
|
994 |
-
foreach ($value[2] as &$item) {
|
995 |
-
if (is_array($item)) {
|
996 |
-
$item = $this->reduce($item);
|
997 |
-
}
|
998 |
-
}
|
999 |
-
return $value;
|
1000 |
-
case "interpolate":
|
1001 |
-
$value[1] = $this->reduce($value[1]);
|
1002 |
-
return $value;
|
1003 |
-
case "fncall":
|
1004 |
-
list(,$name, $argValues) = $value;
|
1005 |
-
|
1006 |
-
// user defined function?
|
1007 |
-
$func = $this->get(self::$namespaces["function"] . $name, false);
|
1008 |
-
if ($func) {
|
1009 |
-
$this->pushEnv();
|
1010 |
-
|
1011 |
-
// set the args
|
1012 |
-
if (isset($func->args)) {
|
1013 |
-
$this->applyArguments($func->args, $argValues);
|
1014 |
-
}
|
1015 |
-
|
1016 |
-
// throw away lines and children
|
1017 |
-
$tmp = (object)array(
|
1018 |
-
"lines" => array(),
|
1019 |
-
"children" => array()
|
1020 |
-
);
|
1021 |
-
$ret = $this->compileChildren($func->children, $tmp);
|
1022 |
-
$this->popEnv();
|
1023 |
-
|
1024 |
-
return !isset($ret) ? self::$defaultValue : $ret;
|
1025 |
-
}
|
1026 |
-
|
1027 |
-
// built in function
|
1028 |
-
if ($this->callBuiltin($name, $argValues, $returnValue)) {
|
1029 |
-
return $returnValue;
|
1030 |
-
}
|
1031 |
-
|
1032 |
-
// need to flatten the arguments into a list
|
1033 |
-
$listArgs = array();
|
1034 |
-
foreach ((array)$argValues as $arg) {
|
1035 |
-
if (empty($arg[0])) {
|
1036 |
-
$listArgs[] = $this->reduce($arg[1]);
|
1037 |
-
}
|
1038 |
-
}
|
1039 |
-
return array("function", $name, array("list", ",", $listArgs));
|
1040 |
-
default:
|
1041 |
-
return $value;
|
1042 |
-
}
|
1043 |
-
}
|
1044 |
-
|
1045 |
-
public function normalizeValue($value) {
|
1046 |
-
$value = $this->coerceForExpression($this->reduce($value));
|
1047 |
-
list($type) = $value;
|
1048 |
-
|
1049 |
-
switch ($type) {
|
1050 |
-
case "list":
|
1051 |
-
$value = $this->extractInterpolation($value);
|
1052 |
-
if ($value[0] != "list") {
|
1053 |
-
return array("keyword", $this->compileValue($value));
|
1054 |
-
}
|
1055 |
-
foreach ($value[2] as $key => $item) {
|
1056 |
-
$value[2][$key] = $this->normalizeValue($item);
|
1057 |
-
}
|
1058 |
-
return $value;
|
1059 |
-
case "number":
|
1060 |
-
return $this->normalizeNumber($value);
|
1061 |
-
default:
|
1062 |
-
return $value;
|
1063 |
-
}
|
1064 |
-
}
|
1065 |
-
|
1066 |
-
// just does physical lengths for now
|
1067 |
-
protected function normalizeNumber($number) {
|
1068 |
-
list(, $value, $unit) = $number;
|
1069 |
-
if (isset(self::$unitTable["in"][$unit])) {
|
1070 |
-
$conv = self::$unitTable["in"][$unit];
|
1071 |
-
return array("number", $value / $conv, "in");
|
1072 |
-
}
|
1073 |
-
return $number;
|
1074 |
-
}
|
1075 |
-
|
1076 |
-
// $number should be normalized
|
1077 |
-
protected function coerceUnit($number, $unit) {
|
1078 |
-
list(, $value, $baseUnit) = $number;
|
1079 |
-
if (isset(self::$unitTable[$baseUnit][$unit])) {
|
1080 |
-
$value = $value * self::$unitTable[$baseUnit][$unit];
|
1081 |
-
}
|
1082 |
-
|
1083 |
-
return array("number", $value, $unit);
|
1084 |
-
}
|
1085 |
-
|
1086 |
-
protected function op_add_number_number($left, $right) {
|
1087 |
-
return array("number", $left[1] + $right[1], $left[2]);
|
1088 |
-
}
|
1089 |
-
|
1090 |
-
protected function op_mul_number_number($left, $right) {
|
1091 |
-
return array("number", $left[1] * $right[1], $left[2]);
|
1092 |
-
}
|
1093 |
-
|
1094 |
-
protected function op_sub_number_number($left, $right) {
|
1095 |
-
return array("number", $left[1] - $right[1], $left[2]);
|
1096 |
-
}
|
1097 |
-
|
1098 |
-
protected function op_div_number_number($left, $right) {
|
1099 |
-
return array("number", $left[1] / $right[1], $left[2]);
|
1100 |
-
}
|
1101 |
-
|
1102 |
-
protected function op_mod_number_number($left, $right) {
|
1103 |
-
return array("number", $left[1] % $right[1], $left[2]);
|
1104 |
-
}
|
1105 |
-
|
1106 |
-
// adding strings
|
1107 |
-
protected function op_add($left, $right) {
|
1108 |
-
if ($strLeft = $this->coerceString($left)) {
|
1109 |
-
if ($right[0] == "string") {
|
1110 |
-
$right[1] = "";
|
1111 |
-
}
|
1112 |
-
$strLeft[2][] = $right;
|
1113 |
-
return $strLeft;
|
1114 |
-
}
|
1115 |
-
|
1116 |
-
if ($strRight = $this->coerceString($right)) {
|
1117 |
-
if ($left[0] == "string") {
|
1118 |
-
$left[1] = "";
|
1119 |
-
}
|
1120 |
-
array_unshift($strRight[2], $left);
|
1121 |
-
return $strRight;
|
1122 |
-
}
|
1123 |
-
}
|
1124 |
-
|
1125 |
-
protected function op_and($left, $right, $shouldEval) {
|
1126 |
-
if (!$shouldEval) return;
|
1127 |
-
if ($left != self::$false) return $right;
|
1128 |
-
return $left;
|
1129 |
-
}
|
1130 |
-
|
1131 |
-
protected function op_or($left, $right, $shouldEval) {
|
1132 |
-
if (!$shouldEval) return;
|
1133 |
-
if ($left != self::$false) return $left;
|
1134 |
-
return $right;
|
1135 |
-
}
|
1136 |
-
|
1137 |
-
protected function op_color_color($op, $left, $right) {
|
1138 |
-
$out = array('color');
|
1139 |
-
foreach (range(1, 3) as $i) {
|
1140 |
-
$lval = isset($left[$i]) ? $left[$i] : 0;
|
1141 |
-
$rval = isset($right[$i]) ? $right[$i] : 0;
|
1142 |
-
switch ($op) {
|
1143 |
-
case '+':
|
1144 |
-
$out[] = $lval + $rval;
|
1145 |
-
break;
|
1146 |
-
case '-':
|
1147 |
-
$out[] = $lval - $rval;
|
1148 |
-
break;
|
1149 |
-
case '*':
|
1150 |
-
$out[] = $lval * $rval;
|
1151 |
-
break;
|
1152 |
-
case '%':
|
1153 |
-
$out[] = $lval % $rval;
|
1154 |
-
break;
|
1155 |
-
case '/':
|
1156 |
-
if ($rval == 0) {
|
1157 |
-
$this->throwError("color: Can't divide by zero");
|
1158 |
-
}
|
1159 |
-
$out[] = $lval / $rval;
|
1160 |
-
break;
|
1161 |
-
case "==":
|
1162 |
-
return $this->op_eq($left, $right);
|
1163 |
-
case "!=":
|
1164 |
-
return $this->op_neq($left, $right);
|
1165 |
-
default:
|
1166 |
-
$this->throwError("color: unknown op $op");
|
1167 |
-
}
|
1168 |
-
}
|
1169 |
-
|
1170 |
-
if (isset($left[4])) $out[4] = $left[4];
|
1171 |
-
elseif (isset($right[4])) $out[4] = $right[4];
|
1172 |
-
|
1173 |
-
return $this->fixColor($out);
|
1174 |
-
}
|
1175 |
-
|
1176 |
-
protected function op_color_number($op, $left, $right) {
|
1177 |
-
$value = $right[1];
|
1178 |
-
return $this->op_color_color($op, $left,
|
1179 |
-
array("color", $value, $value, $value));
|
1180 |
-
}
|
1181 |
-
|
1182 |
-
protected function op_number_color($op, $left, $right) {
|
1183 |
-
$value = $left[1];
|
1184 |
-
return $this->op_color_color($op,
|
1185 |
-
array("color", $value, $value, $value), $right);
|
1186 |
-
}
|
1187 |
-
|
1188 |
-
protected function op_eq($left, $right) {
|
1189 |
-
if (($lStr = $this->coerceString($left)) && ($rStr = $this->coerceString($right))) {
|
1190 |
-
$lStr[1] = "";
|
1191 |
-
$rStr[1] = "";
|
1192 |
-
return $this->toBool($this->compileValue($lStr) == $this->compileValue($rStr));
|
1193 |
-
}
|
1194 |
-
|
1195 |
-
return $this->toBool($left == $right);
|
1196 |
-
}
|
1197 |
-
|
1198 |
-
protected function op_neq($left, $right) {
|
1199 |
-
return $this->toBool($left != $right);
|
1200 |
-
}
|
1201 |
-
|
1202 |
-
protected function op_gte_number_number($left, $right) {
|
1203 |
-
return $this->toBool($left[1] >= $right[1]);
|
1204 |
-
}
|
1205 |
-
|
1206 |
-
protected function op_gt_number_number($left, $right) {
|
1207 |
-
return $this->toBool($left[1] > $right[1]);
|
1208 |
-
}
|
1209 |
-
|
1210 |
-
protected function op_lte_number_number($left, $right) {
|
1211 |
-
return $this->toBool($left[1] <= $right[1]);
|
1212 |
-
}
|
1213 |
-
|
1214 |
-
protected function op_lt_number_number($left, $right) {
|
1215 |
-
return $this->toBool($left[1] < $right[1]);
|
1216 |
-
}
|
1217 |
-
|
1218 |
-
public function toBool($thing) {
|
1219 |
-
return $thing ? self::$true : self::$false;
|
1220 |
-
}
|
1221 |
-
|
1222 |
-
/**
|
1223 |
-
* Compiles a primitive value into a CSS property value.
|
1224 |
-
*
|
1225 |
-
* Values in scssphp are typed by being wrapped in arrays, their format is
|
1226 |
-
* typically:
|
1227 |
-
*
|
1228 |
-
* array(type, contents [, additional_contents]*)
|
1229 |
-
*
|
1230 |
-
* The input is expected to be reduced. This function will not work on
|
1231 |
-
* things like expressions and variables.
|
1232 |
-
*
|
1233 |
-
* @param array $value
|
1234 |
-
*/
|
1235 |
-
protected function compileValue($value) {
|
1236 |
-
$value = $this->reduce($value);
|
1237 |
-
|
1238 |
-
list($type) = $value;
|
1239 |
-
switch ($type) {
|
1240 |
-
case "keyword":
|
1241 |
-
return $value[1];
|
1242 |
-
case "color":
|
1243 |
-
// [1] - red component (either number for a %)
|
1244 |
-
// [2] - green component
|
1245 |
-
// [3] - blue component
|
1246 |
-
// [4] - optional alpha component
|
1247 |
-
list(, $r, $g, $b) = $value;
|
1248 |
-
|
1249 |
-
$r = round($r);
|
1250 |
-
$g = round($g);
|
1251 |
-
$b = round($b);
|
1252 |
-
|
1253 |
-
if (count($value) == 5 && $value[4] != 1) { // rgba
|
1254 |
-
return 'rgba('.$r.', '.$g.', '.$b.', '.$value[4].')';
|
1255 |
-
}
|
1256 |
-
|
1257 |
-
$h = sprintf("#%02x%02x%02x", $r, $g, $b);
|
1258 |
-
|
1259 |
-
// Converting hex color to short notation (e.g. #003399 to #039)
|
1260 |
-
if ($h[1] === $h[2] && $h[3] === $h[4] && $h[5] === $h[6]) {
|
1261 |
-
$h = '#' . $h[1] . $h[3] . $h[5];
|
1262 |
-
}
|
1263 |
-
|
1264 |
-
return $h;
|
1265 |
-
case "number":
|
1266 |
-
return round($value[1], $this->numberPrecision) . $value[2];
|
1267 |
-
case "string":
|
1268 |
-
return $value[1] . $this->compileStringContent($value) . $value[1];
|
1269 |
-
case "function":
|
1270 |
-
$args = !empty($value[2]) ? $this->compileValue($value[2]) : "";
|
1271 |
-
return "$value[1]($args)";
|
1272 |
-
case "list":
|
1273 |
-
$value = $this->extractInterpolation($value);
|
1274 |
-
if ($value[0] != "list") return $this->compileValue($value);
|
1275 |
-
|
1276 |
-
list(, $delim, $items) = $value;
|
1277 |
-
|
1278 |
-
$filtered = array();
|
1279 |
-
foreach ($items as $item) {
|
1280 |
-
if ($item[0] == "null") continue;
|
1281 |
-
$filtered[] = $this->compileValue($item);
|
1282 |
-
}
|
1283 |
-
|
1284 |
-
return implode("$delim ", $filtered);
|
1285 |
-
case "interpolated": # node created by extractInterpolation
|
1286 |
-
list(, $interpolate, $left, $right) = $value;
|
1287 |
-
list(,, $whiteLeft, $whiteRight) = $interpolate;
|
1288 |
-
|
1289 |
-
$left = count($left[2]) > 0 ?
|
1290 |
-
$this->compileValue($left).$whiteLeft : "";
|
1291 |
-
|
1292 |
-
$right = count($right[2]) > 0 ?
|
1293 |
-
$whiteRight.$this->compileValue($right) : "";
|
1294 |
-
|
1295 |
-
return $left.$this->compileValue($interpolate).$right;
|
1296 |
-
|
1297 |
-
case "interpolate": # raw parse node
|
1298 |
-
list(, $exp) = $value;
|
1299 |
-
|
1300 |
-
// strip quotes if it's a string
|
1301 |
-
$reduced = $this->reduce($exp);
|
1302 |
-
switch ($reduced[0]) {
|
1303 |
-
case "string":
|
1304 |
-
$reduced = array("keyword",
|
1305 |
-
$this->compileStringContent($reduced));
|
1306 |
-
break;
|
1307 |
-
case "null":
|
1308 |
-
$reduced = array("keyword", "");
|
1309 |
-
}
|
1310 |
-
|
1311 |
-
return $this->compileValue($reduced);
|
1312 |
-
case "null":
|
1313 |
-
return "null";
|
1314 |
-
default:
|
1315 |
-
$this->throwError("unknown value type: $type");
|
1316 |
-
}
|
1317 |
-
}
|
1318 |
-
|
1319 |
-
protected function compileStringContent($string) {
|
1320 |
-
$parts = array();
|
1321 |
-
foreach ($string[2] as $part) {
|
1322 |
-
if (is_array($part)) {
|
1323 |
-
$parts[] = $this->compileValue($part);
|
1324 |
-
} else {
|
1325 |
-
$parts[] = $part;
|
1326 |
-
}
|
1327 |
-
}
|
1328 |
-
|
1329 |
-
return implode($parts);
|
1330 |
-
}
|
1331 |
-
|
1332 |
-
// doesn't need to be recursive, compileValue will handle that
|
1333 |
-
protected function extractInterpolation($list) {
|
1334 |
-
$items = $list[2];
|
1335 |
-
foreach ($items as $i => $item) {
|
1336 |
-
if ($item[0] == "interpolate") {
|
1337 |
-
$before = array("list", $list[1], array_slice($items, 0, $i));
|
1338 |
-
$after = array("list", $list[1], array_slice($items, $i + 1));
|
1339 |
-
return array("interpolated", $item, $before, $after);
|
1340 |
-
}
|
1341 |
-
}
|
1342 |
-
return $list;
|
1343 |
-
}
|
1344 |
-
|
1345 |
-
// find the final set of selectors
|
1346 |
-
protected function multiplySelectors($env) {
|
1347 |
-
$envs = array();
|
1348 |
-
while (null !== $env) {
|
1349 |
-
if (!empty($env->selectors)) {
|
1350 |
-
$envs[] = $env;
|
1351 |
-
}
|
1352 |
-
$env = $env->parent;
|
1353 |
-
};
|
1354 |
-
|
1355 |
-
$selectors = array();
|
1356 |
-
$parentSelectors = array(array());
|
1357 |
-
while ($env = array_pop($envs)) {
|
1358 |
-
$selectors = array();
|
1359 |
-
foreach ($env->selectors as $selector) {
|
1360 |
-
foreach ($parentSelectors as $parent) {
|
1361 |
-
$selectors[] = $this->joinSelectors($parent, $selector);
|
1362 |
-
}
|
1363 |
-
}
|
1364 |
-
$parentSelectors = $selectors;
|
1365 |
-
}
|
1366 |
-
|
1367 |
-
return $selectors;
|
1368 |
-
}
|
1369 |
-
|
1370 |
-
// looks for & to replace, or append parent before child
|
1371 |
-
protected function joinSelectors($parent, $child) {
|
1372 |
-
$setSelf = false;
|
1373 |
-
$out = array();
|
1374 |
-
foreach ($child as $part) {
|
1375 |
-
$newPart = array();
|
1376 |
-
foreach ($part as $p) {
|
1377 |
-
if ($p == self::$selfSelector) {
|
1378 |
-
$setSelf = true;
|
1379 |
-
foreach ($parent as $i => $parentPart) {
|
1380 |
-
if ($i > 0) {
|
1381 |
-
$out[] = $newPart;
|
1382 |
-
$newPart = array();
|
1383 |
-
}
|
1384 |
-
|
1385 |
-
foreach ($parentPart as $pp) {
|
1386 |
-
$newPart[] = $pp;
|
1387 |
-
}
|
1388 |
-
}
|
1389 |
-
} else {
|
1390 |
-
$newPart[] = $p;
|
1391 |
-
}
|
1392 |
-
}
|
1393 |
-
|
1394 |
-
$out[] = $newPart;
|
1395 |
-
}
|
1396 |
-
|
1397 |
-
return $setSelf ? $out : array_merge($parent, $child);
|
1398 |
-
}
|
1399 |
-
|
1400 |
-
protected function multiplyMedia($env, $childQueries = null) {
|
1401 |
-
if (!isset($env) ||
|
1402 |
-
!empty($env->block->type) && $env->block->type != "media")
|
1403 |
-
{
|
1404 |
-
return $childQueries;
|
1405 |
-
}
|
1406 |
-
|
1407 |
-
// plain old block, skip
|
1408 |
-
if (empty($env->block->type)) {
|
1409 |
-
return $this->multiplyMedia($env->parent, $childQueries);
|
1410 |
-
}
|
1411 |
-
|
1412 |
-
$parentQueries = $env->block->queryList;
|
1413 |
-
if ($childQueries == null) {
|
1414 |
-
$childQueries = $parentQueries;
|
1415 |
-
} else {
|
1416 |
-
$originalQueries = $childQueries;
|
1417 |
-
$childQueries = array();
|
1418 |
-
|
1419 |
-
foreach ($parentQueries as $parentQuery){
|
1420 |
-
foreach ($originalQueries as $childQuery) {
|
1421 |
-
$childQueries []= array_merge($parentQuery, $childQuery);
|
1422 |
-
}
|
1423 |
-
}
|
1424 |
-
}
|
1425 |
-
|
1426 |
-
return $this->multiplyMedia($env->parent, $childQueries);
|
1427 |
-
}
|
1428 |
-
|
1429 |
-
// convert something to list
|
1430 |
-
protected function coerceList($item, $delim = ",") {
|
1431 |
-
if (isset($item) && $item[0] == "list") {
|
1432 |
-
return $item;
|
1433 |
-
}
|
1434 |
-
|
1435 |
-
return array("list", $delim, !isset($item) ? array(): array($item));
|
1436 |
-
}
|
1437 |
-
|
1438 |
-
protected function applyArguments($argDef, $argValues) {
|
1439 |
-
$hasVariable = false;
|
1440 |
-
$args = array();
|
1441 |
-
foreach ($argDef as $i => $arg) {
|
1442 |
-
list($name, $default, $isVariable) = $argDef[$i];
|
1443 |
-
$args[$name] = array($i, $name, $default, $isVariable);
|
1444 |
-
$hasVariable |= $isVariable;
|
1445 |
-
}
|
1446 |
-
|
1447 |
-
$keywordArgs = array();
|
1448 |
-
$deferredKeywordArgs = array();
|
1449 |
-
$remaining = array();
|
1450 |
-
// assign the keyword args
|
1451 |
-
foreach ((array) $argValues as $arg) {
|
1452 |
-
if (!empty($arg[0])) {
|
1453 |
-
if (!isset($args[$arg[0][1]])) {
|
1454 |
-
if ($hasVariable) {
|
1455 |
-
$deferredKeywordArgs[$arg[0][1]] = $arg[1];
|
1456 |
-
} else {
|
1457 |
-
$this->throwError("Mixin or function doesn't have an argument named $%s.", $arg[0][1]);
|
1458 |
-
}
|
1459 |
-
} elseif ($args[$arg[0][1]][0] < count($remaining)) {
|
1460 |
-
$this->throwError("The argument $%s was passed both by position and by name.", $arg[0][1]);
|
1461 |
-
} else {
|
1462 |
-
$keywordArgs[$arg[0][1]] = $arg[1];
|
1463 |
-
}
|
1464 |
-
} elseif (count($keywordArgs)) {
|
1465 |
-
$this->throwError('Positional arguments must come before keyword arguments.');
|
1466 |
-
} elseif ($arg[2] == true) {
|
1467 |
-
$val = $this->reduce($arg[1], true);
|
1468 |
-
if ($val[0] == "list") {
|
1469 |
-
foreach ($val[2] as $name => $item) {
|
1470 |
-
if (!is_numeric($name)) {
|
1471 |
-
$keywordArgs[$name] = $item;
|
1472 |
-
} else {
|
1473 |
-
$remaining[] = $item;
|
1474 |
-
}
|
1475 |
-
}
|
1476 |
-
} else {
|
1477 |
-
$remaining[] = $val;
|
1478 |
-
}
|
1479 |
-
} else {
|
1480 |
-
$remaining[] = $arg[1];
|
1481 |
-
}
|
1482 |
-
}
|
1483 |
-
|
1484 |
-
foreach ($args as $arg) {
|
1485 |
-
list($i, $name, $default, $isVariable) = $arg;
|
1486 |
-
if ($isVariable) {
|
1487 |
-
$val = array("list", ",", array());
|
1488 |
-
for ($count = count($remaining); $i < $count; $i++) {
|
1489 |
-
$val[2][] = $remaining[$i];
|
1490 |
-
}
|
1491 |
-
foreach ($deferredKeywordArgs as $itemName => $item) {
|
1492 |
-
$val[2][$itemName] = $item;
|
1493 |
-
}
|
1494 |
-
} elseif (isset($remaining[$i])) {
|
1495 |
-
$val = $remaining[$i];
|
1496 |
-
} elseif (isset($keywordArgs[$name])) {
|
1497 |
-
$val = $keywordArgs[$name];
|
1498 |
-
} elseif (!empty($default)) {
|
1499 |
-
$val = $default;
|
1500 |
-
} else {
|
1501 |
-
$this->throwError("Missing argument $name");
|
1502 |
-
}
|
1503 |
-
|
1504 |
-
$this->set($name, $this->reduce($val, true), true);
|
1505 |
-
}
|
1506 |
-
}
|
1507 |
-
|
1508 |
-
protected function pushEnv($block=null) {
|
1509 |
-
$env = new stdClass;
|
1510 |
-
$env->parent = $this->env;
|
1511 |
-
$env->store = array();
|
1512 |
-
$env->block = $block;
|
1513 |
-
$env->depth = isset($this->env->depth) ? $this->env->depth + 1 : 0;
|
1514 |
-
|
1515 |
-
$this->env = $env;
|
1516 |
-
return $env;
|
1517 |
-
}
|
1518 |
-
|
1519 |
-
protected function normalizeName($name) {
|
1520 |
-
return str_replace("-", "_", $name);
|
1521 |
-
}
|
1522 |
-
|
1523 |
-
protected function getStoreEnv() {
|
1524 |
-
return isset($this->storeEnv) ? $this->storeEnv : $this->env;
|
1525 |
-
}
|
1526 |
-
|
1527 |
-
protected function set($name, $value, $shadow=false) {
|
1528 |
-
$name = $this->normalizeName($name);
|
1529 |
-
|
1530 |
-
if ($shadow) {
|
1531 |
-
$this->setRaw($name, $value);
|
1532 |
-
} else {
|
1533 |
-
$this->setExisting($name, $value);
|
1534 |
-
}
|
1535 |
-
}
|
1536 |
-
|
1537 |
-
protected function setExisting($name, $value, $env = null) {
|
1538 |
-
if (!isset($env)) $env = $this->getStoreEnv();
|
1539 |
-
|
1540 |
-
if (isset($env->store[$name]) || !isset($env->parent)) {
|
1541 |
-
$env->store[$name] = $value;
|
1542 |
-
} else {
|
1543 |
-
$this->setExisting($name, $value, $env->parent);
|
1544 |
-
}
|
1545 |
-
}
|
1546 |
-
|
1547 |
-
protected function setRaw($name, $value) {
|
1548 |
-
$env = $this->getStoreEnv();
|
1549 |
-
$env->store[$name] = $value;
|
1550 |
-
}
|
1551 |
-
|
1552 |
-
public function get($name, $defaultValue = null, $env = null) {
|
1553 |
-
$name = $this->normalizeName($name);
|
1554 |
-
|
1555 |
-
if (!isset($env)) $env = $this->getStoreEnv();
|
1556 |
-
if (!isset($defaultValue)) $defaultValue = self::$defaultValue;
|
1557 |
-
|
1558 |
-
if (isset($env->store[$name])) {
|
1559 |
-
return $env->store[$name];
|
1560 |
-
} elseif (isset($env->parent)) {
|
1561 |
-
return $this->get($name, $defaultValue, $env->parent);
|
1562 |
-
}
|
1563 |
-
|
1564 |
-
return $defaultValue; // found nothing
|
1565 |
-
}
|
1566 |
-
|
1567 |
-
protected function injectVariables(array $args)
|
1568 |
-
{
|
1569 |
-
if (empty($args)) {
|
1570 |
-
return;
|
1571 |
-
}
|
1572 |
-
|
1573 |
-
$parser = new scss_parser_free(__METHOD__, false);
|
1574 |
-
|
1575 |
-
foreach ($args as $name => $strValue) {
|
1576 |
-
if ($name[0] === '$') {
|
1577 |
-
$name = substr($name, 1);
|
1578 |
-
}
|
1579 |
-
|
1580 |
-
$parser->env = null;
|
1581 |
-
$parser->count = 0;
|
1582 |
-
$parser->buffer = (string) $strValue;
|
1583 |
-
$parser->inParens = false;
|
1584 |
-
$parser->eatWhiteDefault = true;
|
1585 |
-
$parser->insertComments = true;
|
1586 |
-
|
1587 |
-
if ( ! $parser->valueList($value)) {
|
1588 |
-
throw new Exception("failed to parse passed in variable $name: $strValue");
|
1589 |
-
}
|
1590 |
-
|
1591 |
-
$this->set($name, $value);
|
1592 |
-
}
|
1593 |
-
}
|
1594 |
-
|
1595 |
-
/**
|
1596 |
-
* Set variables
|
1597 |
-
*
|
1598 |
-
* @param array $variables
|
1599 |
-
*/
|
1600 |
-
public function setVariables(array $variables)
|
1601 |
-
{
|
1602 |
-
$this->registeredVars = array_merge($this->registeredVars, $variables);
|
1603 |
-
}
|
1604 |
-
|
1605 |
-
/**
|
1606 |
-
* Unset variable
|
1607 |
-
*
|
1608 |
-
* @param string $name
|
1609 |
-
*/
|
1610 |
-
public function unsetVariable($name)
|
1611 |
-
{
|
1612 |
-
unset($this->registeredVars[$name]);
|
1613 |
-
}
|
1614 |
-
|
1615 |
-
protected function popEnv() {
|
1616 |
-
$env = $this->env;
|
1617 |
-
$this->env = $this->env->parent;
|
1618 |
-
return $env;
|
1619 |
-
}
|
1620 |
-
|
1621 |
-
public function getParsedFiles() {
|
1622 |
-
return $this->parsedFiles;
|
1623 |
-
}
|
1624 |
-
|
1625 |
-
public function addImportPath($path) {
|
1626 |
-
$this->importPaths[] = $path;
|
1627 |
-
}
|
1628 |
-
|
1629 |
-
public function setImportPaths($path) {
|
1630 |
-
$this->importPaths = (array)$path;
|
1631 |
-
}
|
1632 |
-
|
1633 |
-
public function setNumberPrecision($numberPrecision) {
|
1634 |
-
$this->numberPrecision = $numberPrecision;
|
1635 |
-
}
|
1636 |
-
|
1637 |
-
public function setFormatter($formatterName) {
|
1638 |
-
$this->formatter = $formatterName;
|
1639 |
-
}
|
1640 |
-
|
1641 |
-
public function registerFunction($name, $func) {
|
1642 |
-
$this->userFunctions[$this->normalizeName($name)] = $func;
|
1643 |
-
}
|
1644 |
-
|
1645 |
-
public function unregisterFunction($name) {
|
1646 |
-
unset($this->userFunctions[$this->normalizeName($name)]);
|
1647 |
-
}
|
1648 |
-
|
1649 |
-
protected function importFile($path, $out) {
|
1650 |
-
// see if tree is cached
|
1651 |
-
$realPath = realpath($path);
|
1652 |
-
if (isset($this->importCache[$realPath])) {
|
1653 |
-
$tree = $this->importCache[$realPath];
|
1654 |
-
} else {
|
1655 |
-
$code = file_get_contents($path);
|
1656 |
-
$parser = new scss_parser_free($path, false);
|
1657 |
-
$tree = $parser->parse($code);
|
1658 |
-
$this->parsedFiles[] = $path;
|
1659 |
-
|
1660 |
-
$this->importCache[$realPath] = $tree;
|
1661 |
-
}
|
1662 |
-
|
1663 |
-
$pi = pathinfo($path);
|
1664 |
-
array_unshift($this->importPaths, $pi['dirname']);
|
1665 |
-
$this->compileChildren($tree->children, $out);
|
1666 |
-
array_shift($this->importPaths);
|
1667 |
-
}
|
1668 |
-
|
1669 |
-
// results the file path for an import url if it exists
|
1670 |
-
public function findImport($url) {
|
1671 |
-
$urls = array();
|
1672 |
-
|
1673 |
-
// for "normal" scss imports (ignore vanilla css and external requests)
|
1674 |
-
if (!preg_match('/\.css|^http:\/\/$/', $url)) {
|
1675 |
-
// try both normal and the _partial filename
|
1676 |
-
$urls = array($url, preg_replace('/[^\/]+$/', '_\0', $url));
|
1677 |
-
}
|
1678 |
-
|
1679 |
-
foreach ($this->importPaths as $dir) {
|
1680 |
-
if (is_string($dir)) {
|
1681 |
-
// check urls for normal import paths
|
1682 |
-
foreach ($urls as $full) {
|
1683 |
-
$full = $dir .
|
1684 |
-
(!empty($dir) && substr($dir, -1) != '/' ? '/' : '') .
|
1685 |
-
$full;
|
1686 |
-
|
1687 |
-
if ($this->fileExists($file = $full.'.scss') ||
|
1688 |
-
$this->fileExists($file = $full))
|
1689 |
-
{
|
1690 |
-
return $file;
|
1691 |
-
}
|
1692 |
-
}
|
1693 |
-
} else {
|
1694 |
-
// check custom callback for import path
|
1695 |
-
$file = call_user_func($dir,$url,$this);
|
1696 |
-
if ($file !== null) {
|
1697 |
-
return $file;
|
1698 |
-
}
|
1699 |
-
}
|
1700 |
-
}
|
1701 |
-
|
1702 |
-
return null;
|
1703 |
-
}
|
1704 |
-
|
1705 |
-
protected function fileExists($name) {
|
1706 |
-
return is_file($name);
|
1707 |
-
}
|
1708 |
-
|
1709 |
-
protected function callBuiltin($name, $args, &$returnValue) {
|
1710 |
-
// try a lib function
|
1711 |
-
$name = $this->normalizeName($name);
|
1712 |
-
$libName = "lib_".$name;
|
1713 |
-
$f = array($this, $libName);
|
1714 |
-
if (is_callable($f)) {
|
1715 |
-
$prototype = isset(self::$$libName) ? self::$$libName : null;
|
1716 |
-
$sorted = $this->sortArgs($prototype, $args);
|
1717 |
-
foreach ($sorted as &$val) {
|
1718 |
-
$val = $this->reduce($val, true);
|
1719 |
-
}
|
1720 |
-
$returnValue = call_user_func($f, $sorted, $this);
|
1721 |
-
} elseif (isset($this->userFunctions[$name])) {
|
1722 |
-
// see if we can find a user function
|
1723 |
-
$fn = $this->userFunctions[$name];
|
1724 |
-
|
1725 |
-
foreach ($args as &$val) {
|
1726 |
-
$val = $this->reduce($val[1], true);
|
1727 |
-
}
|
1728 |
-
|
1729 |
-
$returnValue = call_user_func($fn, $args, $this);
|
1730 |
-
}
|
1731 |
-
|
1732 |
-
if (isset($returnValue)) {
|
1733 |
-
// coerce a php value into a scss one
|
1734 |
-
if (is_numeric($returnValue)) {
|
1735 |
-
$returnValue = array('number', $returnValue, "");
|
1736 |
-
} elseif (is_bool($returnValue)) {
|
1737 |
-
$returnValue = $returnValue ? self::$true : self::$false;
|
1738 |
-
} elseif (!is_array($returnValue)) {
|
1739 |
-
$returnValue = array('keyword', $returnValue);
|
1740 |
-
}
|
1741 |
-
|
1742 |
-
return true;
|
1743 |
-
}
|
1744 |
-
|
1745 |
-
return false;
|
1746 |
-
}
|
1747 |
-
|
1748 |
-
// sorts any keyword arguments
|
1749 |
-
// TODO: merge with apply arguments
|
1750 |
-
protected function sortArgs($prototype, $args) {
|
1751 |
-
$keyArgs = array();
|
1752 |
-
$posArgs = array();
|
1753 |
-
|
1754 |
-
foreach ($args as $arg) {
|
1755 |
-
list($key, $value) = $arg;
|
1756 |
-
$key = $key[1];
|
1757 |
-
if (empty($key)) {
|
1758 |
-
$posArgs[] = $value;
|
1759 |
-
} else {
|
1760 |
-
$keyArgs[$key] = $value;
|
1761 |
-
}
|
1762 |
-
}
|
1763 |
-
|
1764 |
-
if (!isset($prototype)) return $posArgs;
|
1765 |
-
|
1766 |
-
$finalArgs = array();
|
1767 |
-
foreach ($prototype as $i => $names) {
|
1768 |
-
if (isset($posArgs[$i])) {
|
1769 |
-
$finalArgs[] = $posArgs[$i];
|
1770 |
-
continue;
|
1771 |
-
}
|
1772 |
-
|
1773 |
-
$set = false;
|
1774 |
-
foreach ((array)$names as $name) {
|
1775 |
-
if (isset($keyArgs[$name])) {
|
1776 |
-
$finalArgs[] = $keyArgs[$name];
|
1777 |
-
$set = true;
|
1778 |
-
break;
|
1779 |
-
}
|
1780 |
-
}
|
1781 |
-
|
1782 |
-
if (!$set) {
|
1783 |
-
$finalArgs[] = null;
|
1784 |
-
}
|
1785 |
-
}
|
1786 |
-
|
1787 |
-
return $finalArgs;
|
1788 |
-
}
|
1789 |
-
|
1790 |
-
protected function coerceForExpression($value) {
|
1791 |
-
if ($color = $this->coerceColor($value)) {
|
1792 |
-
return $color;
|
1793 |
-
}
|
1794 |
-
|
1795 |
-
return $value;
|
1796 |
-
}
|
1797 |
-
|
1798 |
-
protected function coerceColor($value) {
|
1799 |
-
switch ($value[0]) {
|
1800 |
-
case "color": return $value;
|
1801 |
-
case "keyword":
|
1802 |
-
$name = $value[1];
|
1803 |
-
if (isset(self::$cssColors[$name])) {
|
1804 |
-
$rgba = explode(',', self::$cssColors[$name]);
|
1805 |
-
return isset($rgba[3])
|
1806 |
-
? array('color', (int) $rgba[0], (int) $rgba[1], (int) $rgba[2], (int) $rgba[3])
|
1807 |
-
: array('color', (int) $rgba[0], (int) $rgba[1], (int) $rgba[2]);
|
1808 |
-
}
|
1809 |
-
return null;
|
1810 |
-
}
|
1811 |
-
|
1812 |
-
return null;
|
1813 |
-
}
|
1814 |
-
|
1815 |
-
protected function coerceString($value) {
|
1816 |
-
switch ($value[0]) {
|
1817 |
-
case "string":
|
1818 |
-
return $value;
|
1819 |
-
case "keyword":
|
1820 |
-
return array("string", "", array($value[1]));
|
1821 |
-
}
|
1822 |
-
return null;
|
1823 |
-
}
|
1824 |
-
|
1825 |
-
public function assertList($value) {
|
1826 |
-
if ($value[0] != "list")
|
1827 |
-
$this->throwError("expecting list");
|
1828 |
-
return $value;
|
1829 |
-
}
|
1830 |
-
|
1831 |
-
public function assertColor($value) {
|
1832 |
-
if ($color = $this->coerceColor($value)) return $color;
|
1833 |
-
$this->throwError("expecting color");
|
1834 |
-
}
|
1835 |
-
|
1836 |
-
public function assertNumber($value) {
|
1837 |
-
if ($value[0] != "number")
|
1838 |
-
$this->throwError("expecting number");
|
1839 |
-
return $value[1];
|
1840 |
-
}
|
1841 |
-
|
1842 |
-
protected function coercePercent($value) {
|
1843 |
-
if ($value[0] == "number") {
|
1844 |
-
if ($value[2] == "%") {
|
1845 |
-
return $value[1] / 100;
|
1846 |
-
}
|
1847 |
-
return $value[1];
|
1848 |
-
}
|
1849 |
-
return 0;
|
1850 |
-
}
|
1851 |
-
|
1852 |
-
// make sure a color's components don't go out of bounds
|
1853 |
-
protected function fixColor($c) {
|
1854 |
-
foreach (range(1, 3) as $i) {
|
1855 |
-
if ($c[$i] < 0) $c[$i] = 0;
|
1856 |
-
if ($c[$i] > 255) $c[$i] = 255;
|
1857 |
-
}
|
1858 |
-
|
1859 |
-
return $c;
|
1860 |
-
}
|
1861 |
-
|
1862 |
-
public function toHSL($red, $green, $blue) {
|
1863 |
-
$min = min($red, $green, $blue);
|
1864 |
-
$max = max($red, $green, $blue);
|
1865 |
-
|
1866 |
-
$l = $min + $max;
|
1867 |
-
|
1868 |
-
if ($min == $max) {
|
1869 |
-
$s = $h = 0;
|
1870 |
-
} else {
|
1871 |
-
$d = $max - $min;
|
1872 |
-
|
1873 |
-
if ($l < 255)
|
1874 |
-
$s = $d / $l;
|
1875 |
-
else
|
1876 |
-
$s = $d / (510 - $l);
|
1877 |
-
|
1878 |
-
if ($red == $max)
|
1879 |
-
$h = 60 * ($green - $blue) / $d;
|
1880 |
-
elseif ($green == $max)
|
1881 |
-
$h = 60 * ($blue - $red) / $d + 120;
|
1882 |
-
elseif ($blue == $max)
|
1883 |
-
$h = 60 * ($red - $green) / $d + 240;
|
1884 |
-
}
|
1885 |
-
|
1886 |
-
return array('hsl', fmod($h, 360), $s * 100, $l / 5.1);
|
1887 |
-
}
|
1888 |
-
|
1889 |
-
public function hueToRGB($m1, $m2, $h) {
|
1890 |
-
if ($h < 0)
|
1891 |
-
$h += 1;
|
1892 |
-
elseif ($h > 1)
|
1893 |
-
$h -= 1;
|
1894 |
-
|
1895 |
-
if ($h * 6 < 1)
|
1896 |
-
return $m1 + ($m2 - $m1) * $h * 6;
|
1897 |
-
|
1898 |
-
if ($h * 2 < 1)
|
1899 |
-
return $m2;
|
1900 |
-
|
1901 |
-
if ($h * 3 < 2)
|
1902 |
-
return $m1 + ($m2 - $m1) * (2/3 - $h) * 6;
|
1903 |
-
|
1904 |
-
return $m1;
|
1905 |
-
}
|
1906 |
-
|
1907 |
-
// H from 0 to 360, S and L from 0 to 100
|
1908 |
-
public function toRGB($hue, $saturation, $lightness) {
|
1909 |
-
if ($hue < 0) {
|
1910 |
-
$hue += 360;
|
1911 |
-
}
|
1912 |
-
|
1913 |
-
$h = $hue / 360;
|
1914 |
-
$s = min(100, max(0, $saturation)) / 100;
|
1915 |
-
$l = min(100, max(0, $lightness)) / 100;
|
1916 |
-
|
1917 |
-
$m2 = $l <= 0.5 ? $l * ($s + 1) : $l + $s - $l * $s;
|
1918 |
-
$m1 = $l * 2 - $m2;
|
1919 |
-
|
1920 |
-
$r = $this->hueToRGB($m1, $m2, $h + 1/3) * 255;
|
1921 |
-
$g = $this->hueToRGB($m1, $m2, $h) * 255;
|
1922 |
-
$b = $this->hueToRGB($m1, $m2, $h - 1/3) * 255;
|
1923 |
-
|
1924 |
-
$out = array('color', $r, $g, $b);
|
1925 |
-
return $out;
|
1926 |
-
}
|
1927 |
-
|
1928 |
-
// Built in functions
|
1929 |
-
|
1930 |
-
protected static $lib_if = array("condition", "if-true", "if-false");
|
1931 |
-
protected function lib_if($args) {
|
1932 |
-
list($cond,$t, $f) = $args;
|
1933 |
-
if (!$this->isTruthy($cond)) return $f;
|
1934 |
-
return $t;
|
1935 |
-
}
|
1936 |
-
|
1937 |
-
protected static $lib_index = array("list", "value");
|
1938 |
-
protected function lib_index($args) {
|
1939 |
-
list($list, $value) = $args;
|
1940 |
-
$list = $this->assertList($list);
|
1941 |
-
|
1942 |
-
$values = array();
|
1943 |
-
foreach ($list[2] as $item) {
|
1944 |
-
$values[] = $this->normalizeValue($item);
|
1945 |
-
}
|
1946 |
-
$key = array_search($this->normalizeValue($value), $values);
|
1947 |
-
|
1948 |
-
return false === $key ? false : $key + 1;
|
1949 |
-
}
|
1950 |
-
|
1951 |
-
protected static $lib_rgb = array("red", "green", "blue");
|
1952 |
-
protected function lib_rgb($args) {
|
1953 |
-
list($r,$g,$b) = $args;
|
1954 |
-
return array("color", $r[1], $g[1], $b[1]);
|
1955 |
-
}
|
1956 |
-
|
1957 |
-
protected static $lib_rgba = array(
|
1958 |
-
array("red", "color"),
|
1959 |
-
"green", "blue", "alpha");
|
1960 |
-
protected function lib_rgba($args) {
|
1961 |
-
if ($color = $this->coerceColor($args[0])) {
|
1962 |
-
$num = !isset($args[1]) ? $args[3] : $args[1];
|
1963 |
-
$alpha = $this->assertNumber($num);
|
1964 |
-
$color[4] = $alpha;
|
1965 |
-
return $color;
|
1966 |
-
}
|
1967 |
-
|
1968 |
-
list($r,$g,$b, $a) = $args;
|
1969 |
-
return array("color", $r[1], $g[1], $b[1], $a[1]);
|
1970 |
-
}
|
1971 |
-
|
1972 |
-
// helper function for adjust_color, change_color, and scale_color
|
1973 |
-
protected function alter_color($args, $fn) {
|
1974 |
-
$color = $this->assertColor($args[0]);
|
1975 |
-
|
1976 |
-
foreach (array(1,2,3,7) as $i) {
|
1977 |
-
if (isset($args[$i])) {
|
1978 |
-
$val = $this->assertNumber($args[$i]);
|
1979 |
-
$ii = $i == 7 ? 4 : $i; // alpha
|
1980 |
-
$color[$ii] =
|
1981 |
-
$this->$fn(isset($color[$ii]) ? $color[$ii] : 0, $val, $i);
|
1982 |
-
}
|
1983 |
-
}
|
1984 |
-
|
1985 |
-
if (isset($args[4]) || isset($args[5]) || isset($args[6])) {
|
1986 |
-
$hsl = $this->toHSL($color[1], $color[2], $color[3]);
|
1987 |
-
foreach (array(4,5,6) as $i) {
|
1988 |
-
if (isset($args[$i])) {
|
1989 |
-
$val = $this->assertNumber($args[$i]);
|
1990 |
-
$hsl[$i - 3] = $this->$fn($hsl[$i - 3], $val, $i);
|
1991 |
-
}
|
1992 |
-
}
|
1993 |
-
|
1994 |
-
$rgb = $this->toRGB($hsl[1], $hsl[2], $hsl[3]);
|
1995 |
-
if (isset($color[4])) $rgb[4] = $color[4];
|
1996 |
-
$color = $rgb;
|
1997 |
-
}
|
1998 |
-
|
1999 |
-
return $color;
|
2000 |
-
}
|
2001 |
-
|
2002 |
-
protected static $lib_adjust_color = array(
|
2003 |
-
"color", "red", "green", "blue",
|
2004 |
-
"hue", "saturation", "lightness", "alpha"
|
2005 |
-
);
|
2006 |
-
protected function adjust_color_helper($base, $alter, $i) {
|
2007 |
-
return $base += $alter;
|
2008 |
-
}
|
2009 |
-
protected function lib_adjust_color($args) {
|
2010 |
-
return $this->alter_color($args, "adjust_color_helper");
|
2011 |
-
}
|
2012 |
-
|
2013 |
-
protected static $lib_change_color = array(
|
2014 |
-
"color", "red", "green", "blue",
|
2015 |
-
"hue", "saturation", "lightness", "alpha"
|
2016 |
-
);
|
2017 |
-
protected function change_color_helper($base, $alter, $i) {
|
2018 |
-
return $alter;
|
2019 |
-
}
|
2020 |
-
protected function lib_change_color($args) {
|
2021 |
-
return $this->alter_color($args, "change_color_helper");
|
2022 |
-
}
|
2023 |
-
|
2024 |
-
protected static $lib_scale_color = array(
|
2025 |
-
"color", "red", "green", "blue",
|
2026 |
-
"hue", "saturation", "lightness", "alpha"
|
2027 |
-
);
|
2028 |
-
protected function scale_color_helper($base, $scale, $i) {
|
2029 |
-
// 1,2,3 - rgb
|
2030 |
-
// 4, 5, 6 - hsl
|
2031 |
-
// 7 - a
|
2032 |
-
switch ($i) {
|
2033 |
-
case 1:
|
2034 |
-
case 2:
|
2035 |
-
case 3:
|
2036 |
-
$max = 255; break;
|
2037 |
-
case 4:
|
2038 |
-
$max = 360; break;
|
2039 |
-
case 7:
|
2040 |
-
$max = 1; break;
|
2041 |
-
default:
|
2042 |
-
$max = 100;
|
2043 |
-
}
|
2044 |
-
|
2045 |
-
$scale = $scale / 100;
|
2046 |
-
if ($scale < 0) {
|
2047 |
-
return $base * $scale + $base;
|
2048 |
-
} else {
|
2049 |
-
return ($max - $base) * $scale + $base;
|
2050 |
-
}
|
2051 |
-
}
|
2052 |
-
protected function lib_scale_color($args) {
|
2053 |
-
return $this->alter_color($args, "scale_color_helper");
|
2054 |
-
}
|
2055 |
-
|
2056 |
-
protected static $lib_ie_hex_str = array("color");
|
2057 |
-
protected function lib_ie_hex_str($args) {
|
2058 |
-
$color = $this->coerceColor($args[0]);
|
2059 |
-
$color[4] = isset($color[4]) ? round(255*$color[4]) : 255;
|
2060 |
-
|
2061 |
-
return sprintf('#%02X%02X%02X%02X', $color[4], $color[1], $color[2], $color[3]);
|
2062 |
-
}
|
2063 |
-
|
2064 |
-
protected static $lib_red = array("color");
|
2065 |
-
protected function lib_red($args) {
|
2066 |
-
$color = $this->coerceColor($args[0]);
|
2067 |
-
return $color[1];
|
2068 |
-
}
|
2069 |
-
|
2070 |
-
protected static $lib_green = array("color");
|
2071 |
-
protected function lib_green($args) {
|
2072 |
-
$color = $this->coerceColor($args[0]);
|
2073 |
-
return $color[2];
|
2074 |
-
}
|
2075 |
-
|
2076 |
-
protected static $lib_blue = array("color");
|
2077 |
-
protected function lib_blue($args) {
|
2078 |
-
$color = $this->coerceColor($args[0]);
|
2079 |
-
return $color[3];
|
2080 |
-
}
|
2081 |
-
|
2082 |
-
protected static $lib_alpha = array("color");
|
2083 |
-
protected function lib_alpha($args) {
|
2084 |
-
if ($color = $this->coerceColor($args[0])) {
|
2085 |
-
return isset($color[4]) ? $color[4] : 1;
|
2086 |
-
}
|
2087 |
-
|
2088 |
-
// this might be the IE function, so return value unchanged
|
2089 |
-
return null;
|
2090 |
-
}
|
2091 |
-
|
2092 |
-
protected static $lib_opacity = array("color");
|
2093 |
-
protected function lib_opacity($args) {
|
2094 |
-
$value = $args[0];
|
2095 |
-
if ($value[0] === 'number') return null;
|
2096 |
-
return $this->lib_alpha($args);
|
2097 |
-
}
|
2098 |
-
|
2099 |
-
// mix two colors
|
2100 |
-
protected static $lib_mix = array("color-1", "color-2", "weight");
|
2101 |
-
protected function lib_mix($args) {
|
2102 |
-
list($first, $second, $weight) = $args;
|
2103 |
-
$first = $this->assertColor($first);
|
2104 |
-
$second = $this->assertColor($second);
|
2105 |
-
|
2106 |
-
if (!isset($weight)) {
|
2107 |
-
$weight = 0.5;
|
2108 |
-
} else {
|
2109 |
-
$weight = $this->coercePercent($weight);
|
2110 |
-
}
|
2111 |
-
|
2112 |
-
$firstAlpha = isset($first[4]) ? $first[4] : 1;
|
2113 |
-
$secondAlpha = isset($second[4]) ? $second[4] : 1;
|
2114 |
-
|
2115 |
-
$w = $weight * 2 - 1;
|
2116 |
-
$a = $firstAlpha - $secondAlpha;
|
2117 |
-
|
2118 |
-
$w1 = (($w * $a == -1 ? $w : ($w + $a)/(1 + $w * $a)) + 1) / 2.0;
|
2119 |
-
$w2 = 1.0 - $w1;
|
2120 |
-
|
2121 |
-
$new = array('color',
|
2122 |
-
$w1 * $first[1] + $w2 * $second[1],
|
2123 |
-
$w1 * $first[2] + $w2 * $second[2],
|
2124 |
-
$w1 * $first[3] + $w2 * $second[3],
|
2125 |
-
);
|
2126 |
-
|
2127 |
-
if ($firstAlpha != 1.0 || $secondAlpha != 1.0) {
|
2128 |
-
$new[] = $firstAlpha * $weight + $secondAlpha * ($weight - 1);
|
2129 |
-
}
|
2130 |
-
|
2131 |
-
return $this->fixColor($new);
|
2132 |
-
}
|
2133 |
-
|
2134 |
-
protected static $lib_hsl = array("hue", "saturation", "lightness");
|
2135 |
-
protected function lib_hsl($args) {
|
2136 |
-
list($h, $s, $l) = $args;
|
2137 |
-
return $this->toRGB($h[1], $s[1], $l[1]);
|
2138 |
-
}
|
2139 |
-
|
2140 |
-
protected static $lib_hsla = array("hue", "saturation",
|
2141 |
-
"lightness", "alpha");
|
2142 |
-
protected function lib_hsla($args) {
|
2143 |
-
list($h, $s, $l, $a) = $args;
|
2144 |
-
$color = $this->toRGB($h[1], $s[1], $l[1]);
|
2145 |
-
$color[4] = $a[1];
|
2146 |
-
return $color;
|
2147 |
-
}
|
2148 |
-
|
2149 |
-
protected static $lib_hue = array("color");
|
2150 |
-
protected function lib_hue($args) {
|
2151 |
-
$color = $this->assertColor($args[0]);
|
2152 |
-
$hsl = $this->toHSL($color[1], $color[2], $color[3]);
|
2153 |
-
return array("number", $hsl[1], "deg");
|
2154 |
-
}
|
2155 |
-
|
2156 |
-
protected static $lib_saturation = array("color");
|
2157 |
-
protected function lib_saturation($args) {
|
2158 |
-
$color = $this->assertColor($args[0]);
|
2159 |
-
$hsl = $this->toHSL($color[1], $color[2], $color[3]);
|
2160 |
-
return array("number", $hsl[2], "%");
|
2161 |
-
}
|
2162 |
-
|
2163 |
-
protected static $lib_lightness = array("color");
|
2164 |
-
protected function lib_lightness($args) {
|
2165 |
-
$color = $this->assertColor($args[0]);
|
2166 |
-
$hsl = $this->toHSL($color[1], $color[2], $color[3]);
|
2167 |
-
return array("number", $hsl[3], "%");
|
2168 |
-
}
|
2169 |
-
|
2170 |
-
protected function adjustHsl($color, $idx, $amount) {
|
2171 |
-
$hsl = $this->toHSL($color[1], $color[2], $color[3]);
|
2172 |
-
$hsl[$idx] += $amount;
|
2173 |
-
$out = $this->toRGB($hsl[1], $hsl[2], $hsl[3]);
|
2174 |
-
if (isset($color[4])) $out[4] = $color[4];
|
2175 |
-
return $out;
|
2176 |
-
}
|
2177 |
-
|
2178 |
-
protected static $lib_adjust_hue = array("color", "degrees");
|
2179 |
-
protected function lib_adjust_hue($args) {
|
2180 |
-
$color = $this->assertColor($args[0]);
|
2181 |
-
$degrees = $this->assertNumber($args[1]);
|
2182 |
-
return $this->adjustHsl($color, 1, $degrees);
|
2183 |
-
}
|
2184 |
-
|
2185 |
-
protected static $lib_lighten = array("color", "amount");
|
2186 |
-
protected function lib_lighten($args) {
|
2187 |
-
$color = $this->assertColor($args[0]);
|
2188 |
-
$amount = 100*$this->coercePercent($args[1]);
|
2189 |
-
return $this->adjustHsl($color, 3, $amount);
|
2190 |
-
}
|
2191 |
-
|
2192 |
-
protected static $lib_darken = array("color", "amount");
|
2193 |
-
protected function lib_darken($args) {
|
2194 |
-
$color = $this->assertColor($args[0]);
|
2195 |
-
$amount = 100*$this->coercePercent($args[1]);
|
2196 |
-
return $this->adjustHsl($color, 3, -$amount);
|
2197 |
-
}
|
2198 |
-
|
2199 |
-
protected static $lib_saturate = array("color", "amount");
|
2200 |
-
protected function lib_saturate($args) {
|
2201 |
-
$value = $args[0];
|
2202 |
-
if ($value[0] === 'number') return null;
|
2203 |
-
$color = $this->assertColor($value);
|
2204 |
-
$amount = 100*$this->coercePercent($args[1]);
|
2205 |
-
return $this->adjustHsl($color, 2, $amount);
|
2206 |
-
}
|
2207 |
-
|
2208 |
-
protected static $lib_desaturate = array("color", "amount");
|
2209 |
-
protected function lib_desaturate($args) {
|
2210 |
-
$color = $this->assertColor($args[0]);
|
2211 |
-
$amount = 100*$this->coercePercent($args[1]);
|
2212 |
-
return $this->adjustHsl($color, 2, -$amount);
|
2213 |
-
}
|
2214 |
-
|
2215 |
-
protected static $lib_grayscale = array("color");
|
2216 |
-
protected function lib_grayscale($args) {
|
2217 |
-
$value = $args[0];
|
2218 |
-
if ($value[0] === 'number') return null;
|
2219 |
-
return $this->adjustHsl($this->assertColor($value), 2, -100);
|
2220 |
-
}
|
2221 |
-
|
2222 |
-
protected static $lib_complement = array("color");
|
2223 |
-
protected function lib_complement($args) {
|
2224 |
-
return $this->adjustHsl($this->assertColor($args[0]), 1, 180);
|
2225 |
-
}
|
2226 |
-
|
2227 |
-
protected static $lib_invert = array("color");
|
2228 |
-
protected function lib_invert($args) {
|
2229 |
-
$value = $args[0];
|
2230 |
-
if ($value[0] === 'number') return null;
|
2231 |
-
$color = $this->assertColor($value);
|
2232 |
-
$color[1] = 255 - $color[1];
|
2233 |
-
$color[2] = 255 - $color[2];
|
2234 |
-
$color[3] = 255 - $color[3];
|
2235 |
-
return $color;
|
2236 |
-
}
|
2237 |
-
|
2238 |
-
// increases opacity by amount
|
2239 |
-
protected static $lib_opacify = array("color", "amount");
|
2240 |
-
protected function lib_opacify($args) {
|
2241 |
-
$color = $this->assertColor($args[0]);
|
2242 |
-
$amount = $this->coercePercent($args[1]);
|
2243 |
-
|
2244 |
-
$color[4] = (isset($color[4]) ? $color[4] : 1) + $amount;
|
2245 |
-
$color[4] = min(1, max(0, $color[4]));
|
2246 |
-
return $color;
|
2247 |
-
}
|
2248 |
-
|
2249 |
-
protected static $lib_fade_in = array("color", "amount");
|
2250 |
-
protected function lib_fade_in($args) {
|
2251 |
-
return $this->lib_opacify($args);
|
2252 |
-
}
|
2253 |
-
|
2254 |
-
// decreases opacity by amount
|
2255 |
-
protected static $lib_transparentize = array("color", "amount");
|
2256 |
-
protected function lib_transparentize($args) {
|
2257 |
-
$color = $this->assertColor($args[0]);
|
2258 |
-
$amount = $this->coercePercent($args[1]);
|
2259 |
-
|
2260 |
-
$color[4] = (isset($color[4]) ? $color[4] : 1) - $amount;
|
2261 |
-
$color[4] = min(1, max(0, $color[4]));
|
2262 |
-
return $color;
|
2263 |
-
}
|
2264 |
-
|
2265 |
-
protected static $lib_fade_out = array("color", "amount");
|
2266 |
-
protected function lib_fade_out($args) {
|
2267 |
-
return $this->lib_transparentize($args);
|
2268 |
-
}
|
2269 |
-
|
2270 |
-
protected static $lib_unquote = array("string");
|
2271 |
-
protected function lib_unquote($args) {
|
2272 |
-
$str = $args[0];
|
2273 |
-
if ($str[0] == "string") $str[1] = "";
|
2274 |
-
return $str;
|
2275 |
-
}
|
2276 |
-
|
2277 |
-
protected static $lib_quote = array("string");
|
2278 |
-
protected function lib_quote($args) {
|
2279 |
-
$value = $args[0];
|
2280 |
-
if ($value[0] == "string" && !empty($value[1]))
|
2281 |
-
return $value;
|
2282 |
-
return array("string", '"', array($value));
|
2283 |
-
}
|
2284 |
-
|
2285 |
-
protected static $lib_percentage = array("value");
|
2286 |
-
protected function lib_percentage($args) {
|
2287 |
-
return array("number",
|
2288 |
-
$this->coercePercent($args[0]) * 100,
|
2289 |
-
"%");
|
2290 |
-
}
|
2291 |
-
|
2292 |
-
protected static $lib_round = array("value");
|
2293 |
-
protected function lib_round($args) {
|
2294 |
-
$num = $args[0];
|
2295 |
-
$num[1] = round($num[1]);
|
2296 |
-
return $num;
|
2297 |
-
}
|
2298 |
-
|
2299 |
-
protected static $lib_floor = array("value");
|
2300 |
-
protected function lib_floor($args) {
|
2301 |
-
$num = $args[0];
|
2302 |
-
$num[1] = floor($num[1]);
|
2303 |
-
return $num;
|
2304 |
-
}
|
2305 |
-
|
2306 |
-
protected static $lib_ceil = array("value");
|
2307 |
-
protected function lib_ceil($args) {
|
2308 |
-
$num = $args[0];
|
2309 |
-
$num[1] = ceil($num[1]);
|
2310 |
-
return $num;
|
2311 |
-
}
|
2312 |
-
|
2313 |
-
protected static $lib_abs = array("value");
|
2314 |
-
protected function lib_abs($args) {
|
2315 |
-
$num = $args[0];
|
2316 |
-
$num[1] = abs($num[1]);
|
2317 |
-
return $num;
|
2318 |
-
}
|
2319 |
-
|
2320 |
-
protected function lib_min($args) {
|
2321 |
-
$numbers = $this->getNormalizedNumbers($args);
|
2322 |
-
$min = null;
|
2323 |
-
foreach ($numbers as $key => $number) {
|
2324 |
-
if (null === $min || $number[1] <= $min[1]) {
|
2325 |
-
$min = array($key, $number[1]);
|
2326 |
-
}
|
2327 |
-
}
|
2328 |
-
|
2329 |
-
return $args[$min[0]];
|
2330 |
-
}
|
2331 |
-
|
2332 |
-
protected function lib_max($args) {
|
2333 |
-
$numbers = $this->getNormalizedNumbers($args);
|
2334 |
-
$max = null;
|
2335 |
-
foreach ($numbers as $key => $number) {
|
2336 |
-
if (null === $max || $number[1] >= $max[1]) {
|
2337 |
-
$max = array($key, $number[1]);
|
2338 |
-
}
|
2339 |
-
}
|
2340 |
-
|
2341 |
-
return $args[$max[0]];
|
2342 |
-
}
|
2343 |
-
|
2344 |
-
protected function getNormalizedNumbers($args) {
|
2345 |
-
$unit = null;
|
2346 |
-
$originalUnit = null;
|
2347 |
-
$numbers = array();
|
2348 |
-
foreach ($args as $key => $item) {
|
2349 |
-
if ('number' != $item[0]) {
|
2350 |
-
$this->throwError("%s is not a number", $item[0]);
|
2351 |
-
}
|
2352 |
-
$number = $this->normalizeNumber($item);
|
2353 |
-
|
2354 |
-
if (null === $unit) {
|
2355 |
-
$unit = $number[2];
|
2356 |
-
$originalUnit = $item[2];
|
2357 |
-
} elseif ($unit !== $number[2]) {
|
2358 |
-
$this->throwError('Incompatible units: "%s" and "%s".', $originalUnit, $item[2]);
|
2359 |
-
}
|
2360 |
-
|
2361 |
-
$numbers[$key] = $number;
|
2362 |
-
}
|
2363 |
-
|
2364 |
-
return $numbers;
|
2365 |
-
}
|
2366 |
-
|
2367 |
-
protected static $lib_length = array("list");
|
2368 |
-
protected function lib_length($args) {
|
2369 |
-
$list = $this->coerceList($args[0]);
|
2370 |
-
return count($list[2]);
|
2371 |
-
}
|
2372 |
-
|
2373 |
-
protected static $lib_nth = array("list", "n");
|
2374 |
-
protected function lib_nth($args) {
|
2375 |
-
$list = $this->coerceList($args[0]);
|
2376 |
-
$n = $this->assertNumber($args[1]) - 1;
|
2377 |
-
return isset($list[2][$n]) ? $list[2][$n] : self::$defaultValue;
|
2378 |
-
}
|
2379 |
-
|
2380 |
-
protected function listSeparatorForJoin($list1, $sep) {
|
2381 |
-
if (!isset($sep)) return $list1[1];
|
2382 |
-
switch ($this->compileValue($sep)) {
|
2383 |
-
case "comma":
|
2384 |
-
return ",";
|
2385 |
-
case "space":
|
2386 |
-
return "";
|
2387 |
-
default:
|
2388 |
-
return $list1[1];
|
2389 |
-
}
|
2390 |
-
}
|
2391 |
-
|
2392 |
-
protected static $lib_join = array("list1", "list2", "separator");
|
2393 |
-
protected function lib_join($args) {
|
2394 |
-
list($list1, $list2, $sep) = $args;
|
2395 |
-
$list1 = $this->coerceList($list1, " ");
|
2396 |
-
$list2 = $this->coerceList($list2, " ");
|
2397 |
-
$sep = $this->listSeparatorForJoin($list1, $sep);
|
2398 |
-
return array("list", $sep, array_merge($list1[2], $list2[2]));
|
2399 |
-
}
|
2400 |
-
|
2401 |
-
protected static $lib_append = array("list", "val", "separator");
|
2402 |
-
protected function lib_append($args) {
|
2403 |
-
list($list1, $value, $sep) = $args;
|
2404 |
-
$list1 = $this->coerceList($list1, " ");
|
2405 |
-
$sep = $this->listSeparatorForJoin($list1, $sep);
|
2406 |
-
return array("list", $sep, array_merge($list1[2], array($value)));
|
2407 |
-
}
|
2408 |
-
|
2409 |
-
protected function lib_zip($args) {
|
2410 |
-
foreach ($args as $arg) {
|
2411 |
-
$this->assertList($arg);
|
2412 |
-
}
|
2413 |
-
|
2414 |
-
$lists = array();
|
2415 |
-
$firstList = array_shift($args);
|
2416 |
-
foreach ($firstList[2] as $key => $item) {
|
2417 |
-
$list = array("list", "", array($item));
|
2418 |
-
foreach ($args as $arg) {
|
2419 |
-
if (isset($arg[2][$key])) {
|
2420 |
-
$list[2][] = $arg[2][$key];
|
2421 |
-
} else {
|
2422 |
-
break 2;
|
2423 |
-
}
|
2424 |
-
}
|
2425 |
-
$lists[] = $list;
|
2426 |
-
}
|
2427 |
-
|
2428 |
-
return array("list", ",", $lists);
|
2429 |
-
}
|
2430 |
-
|
2431 |
-
protected static $lib_type_of = array("value");
|
2432 |
-
protected function lib_type_of($args) {
|
2433 |
-
$value = $args[0];
|
2434 |
-
switch ($value[0]) {
|
2435 |
-
case "keyword":
|
2436 |
-
if ($value == self::$true || $value == self::$false) {
|
2437 |
-
return "bool";
|
2438 |
-
}
|
2439 |
-
|
2440 |
-
if ($this->coerceColor($value)) {
|
2441 |
-
return "color";
|
2442 |
-
}
|
2443 |
-
|
2444 |
-
return "string";
|
2445 |
-
default:
|
2446 |
-
return $value[0];
|
2447 |
-
}
|
2448 |
-
}
|
2449 |
-
|
2450 |
-
protected static $lib_unit = array("number");
|
2451 |
-
protected function lib_unit($args) {
|
2452 |
-
$num = $args[0];
|
2453 |
-
if ($num[0] == "number") {
|
2454 |
-
return array("string", '"', array($num[2]));
|
2455 |
-
}
|
2456 |
-
return "";
|
2457 |
-
}
|
2458 |
-
|
2459 |
-
protected static $lib_unitless = array("number");
|
2460 |
-
protected function lib_unitless($args) {
|
2461 |
-
$value = $args[0];
|
2462 |
-
return $value[0] == "number" && empty($value[2]);
|
2463 |
-
}
|
2464 |
-
|
2465 |
-
protected static $lib_comparable = array("number-1", "number-2");
|
2466 |
-
protected function lib_comparable($args) {
|
2467 |
-
list($number1, $number2) = $args;
|
2468 |
-
if (!isset($number1[0]) || $number1[0] != "number" || !isset($number2[0]) || $number2[0] != "number") {
|
2469 |
-
$this->throwError('Invalid argument(s) for "comparable"');
|
2470 |
-
}
|
2471 |
-
|
2472 |
-
$number1 = $this->normalizeNumber($number1);
|
2473 |
-
$number2 = $this->normalizeNumber($number2);
|
2474 |
-
|
2475 |
-
return $number1[2] == $number2[2] || $number1[2] == "" || $number2[2] == "";
|
2476 |
-
}
|
2477 |
-
|
2478 |
-
/**
|
2479 |
-
* Workaround IE7's content counter bug.
|
2480 |
-
*
|
2481 |
-
* @param array $args
|
2482 |
-
*/
|
2483 |
-
protected function lib_counter($args) {
|
2484 |
-
$list = array_map(array($this, 'compileValue'), $args);
|
2485 |
-
return array('string', '', array('counter(' . implode(',', $list) . ')'));
|
2486 |
-
}
|
2487 |
-
|
2488 |
-
public function throwError($msg = null) {
|
2489 |
-
if (func_num_args() > 1) {
|
2490 |
-
$msg = call_user_func_array("sprintf", func_get_args());
|
2491 |
-
}
|
2492 |
-
|
2493 |
-
if ($this->sourcePos >= 0 && isset($this->sourceParser)) {
|
2494 |
-
$this->sourceParser->throwParseError($msg, $this->sourcePos);
|
2495 |
-
}
|
2496 |
-
|
2497 |
-
throw new Exception($msg);
|
2498 |
-
}
|
2499 |
-
|
2500 |
-
/**
|
2501 |
-
* CSS Colors
|
2502 |
-
*
|
2503 |
-
* @see http://www.w3.org/TR/css3-color
|
2504 |
-
*/
|
2505 |
-
static protected $cssColors = array(
|
2506 |
-
'aliceblue' => '240,248,255',
|
2507 |
-
'antiquewhite' => '250,235,215',
|
2508 |
-
'aqua' => '0,255,255',
|
2509 |
-
'aquamarine' => '127,255,212',
|
2510 |
-
'azure' => '240,255,255',
|
2511 |
-
'beige' => '245,245,220',
|
2512 |
-
'bisque' => '255,228,196',
|
2513 |
-
'black' => '0,0,0',
|
2514 |
-
'blanchedalmond' => '255,235,205',
|
2515 |
-
'blue' => '0,0,255',
|
2516 |
-
'blueviolet' => '138,43,226',
|
2517 |
-
'brown' => '165,42,42',
|
2518 |
-
'burlywood' => '222,184,135',
|
2519 |
-
'cadetblue' => '95,158,160',
|
2520 |
-
'chartreuse' => '127,255,0',
|
2521 |
-
'chocolate' => '210,105,30',
|
2522 |
-
'coral' => '255,127,80',
|
2523 |
-
'cornflowerblue' => '100,149,237',
|
2524 |
-
'cornsilk' => '255,248,220',
|
2525 |
-
'crimson' => '220,20,60',
|
2526 |
-
'cyan' => '0,255,255',
|
2527 |
-
'darkblue' => '0,0,139',
|
2528 |
-
'darkcyan' => '0,139,139',
|
2529 |
-
'darkgoldenrod' => '184,134,11',
|
2530 |
-
'darkgray' => '169,169,169',
|
2531 |
-
'darkgreen' => '0,100,0',
|
2532 |
-
'darkgrey' => '169,169,169',
|
2533 |
-
'darkkhaki' => '189,183,107',
|
2534 |
-
'darkmagenta' => '139,0,139',
|
2535 |
-
'darkolivegreen' => '85,107,47',
|
2536 |
-
'darkorange' => '255,140,0',
|
2537 |
-
'darkorchid' => '153,50,204',
|
2538 |
-
'darkred' => '139,0,0',
|
2539 |
-
'darksalmon' => '233,150,122',
|
2540 |
-
'darkseagreen' => '143,188,143',
|
2541 |
-
'darkslateblue' => '72,61,139',
|
2542 |
-
'darkslategray' => '47,79,79',
|
2543 |
-
'darkslategrey' => '47,79,79',
|
2544 |
-
'darkturquoise' => '0,206,209',
|
2545 |
-
'darkviolet' => '148,0,211',
|
2546 |
-
'deeppink' => '255,20,147',
|
2547 |
-
'deepskyblue' => '0,191,255',
|
2548 |
-
'dimgray' => '105,105,105',
|
2549 |
-
'dimgrey' => '105,105,105',
|
2550 |
-
'dodgerblue' => '30,144,255',
|
2551 |
-
'firebrick' => '178,34,34',
|
2552 |
-
'floralwhite' => '255,250,240',
|
2553 |
-
'forestgreen' => '34,139,34',
|
2554 |
-
'fuchsia' => '255,0,255',
|
2555 |
-
'gainsboro' => '220,220,220',
|
2556 |
-
'ghostwhite' => '248,248,255',
|
2557 |
-
'gold' => '255,215,0',
|
2558 |
-
'goldenrod' => '218,165,32',
|
2559 |
-
'gray' => '128,128,128',
|
2560 |
-
'green' => '0,128,0',
|
2561 |
-
'greenyellow' => '173,255,47',
|
2562 |
-
'grey' => '128,128,128',
|
2563 |
-
'honeydew' => '240,255,240',
|
2564 |
-
'hotpink' => '255,105,180',
|
2565 |
-
'indianred' => '205,92,92',
|
2566 |
-
'indigo' => '75,0,130',
|
2567 |
-
'ivory' => '255,255,240',
|
2568 |
-
'khaki' => '240,230,140',
|
2569 |
-
'lavender' => '230,230,250',
|
2570 |
-
'lavenderblush' => '255,240,245',
|
2571 |
-
'lawngreen' => '124,252,0',
|
2572 |
-
'lemonchiffon' => '255,250,205',
|
2573 |
-
'lightblue' => '173,216,230',
|
2574 |
-
'lightcoral' => '240,128,128',
|
2575 |
-
'lightcyan' => '224,255,255',
|
2576 |
-
'lightgoldenrodyellow' => '250,250,210',
|
2577 |
-
'lightgray' => '211,211,211',
|
2578 |
-
'lightgreen' => '144,238,144',
|
2579 |
-
'lightgrey' => '211,211,211',
|
2580 |
-
'lightpink' => '255,182,193',
|
2581 |
-
'lightsalmon' => '255,160,122',
|
2582 |
-
'lightseagreen' => '32,178,170',
|
2583 |
-
'lightskyblue' => '135,206,250',
|
2584 |
-
'lightslategray' => '119,136,153',
|
2585 |
-
'lightslategrey' => '119,136,153',
|
2586 |
-
'lightsteelblue' => '176,196,222',
|
2587 |
-
'lightyellow' => '255,255,224',
|
2588 |
-
'lime' => '0,255,0',
|
2589 |
-
'limegreen' => '50,205,50',
|
2590 |
-
'linen' => '250,240,230',
|
2591 |
-
'magenta' => '255,0,255',
|
2592 |
-
'maroon' => '128,0,0',
|
2593 |
-
'mediumaquamarine' => '102,205,170',
|
2594 |
-
'mediumblue' => '0,0,205',
|
2595 |
-
'mediumorchid' => '186,85,211',
|
2596 |
-
'mediumpurple' => '147,112,219',
|
2597 |
-
'mediumseagreen' => '60,179,113',
|
2598 |
-
'mediumslateblue' => '123,104,238',
|
2599 |
-
'mediumspringgreen' => '0,250,154',
|
2600 |
-
'mediumturquoise' => '72,209,204',
|
2601 |
-
'mediumvioletred' => '199,21,133',
|
2602 |
-
'midnightblue' => '25,25,112',
|
2603 |
-
'mintcream' => '245,255,250',
|
2604 |
-
'mistyrose' => '255,228,225',
|
2605 |
-
'moccasin' => '255,228,181',
|
2606 |
-
'navajowhite' => '255,222,173',
|
2607 |
-
'navy' => '0,0,128',
|
2608 |
-
'oldlace' => '253,245,230',
|
2609 |
-
'olive' => '128,128,0',
|
2610 |
-
'olivedrab' => '107,142,35',
|
2611 |
-
'orange' => '255,165,0',
|
2612 |
-
'orangered' => '255,69,0',
|
2613 |
-
'orchid' => '218,112,214',
|
2614 |
-
'palegoldenrod' => '238,232,170',
|
2615 |
-
'palegreen' => '152,251,152',
|
2616 |
-
'paleturquoise' => '175,238,238',
|
2617 |
-
'palevioletred' => '219,112,147',
|
2618 |
-
'papayawhip' => '255,239,213',
|
2619 |
-
'peachpuff' => '255,218,185',
|
2620 |
-
'peru' => '205,133,63',
|
2621 |
-
'pink' => '255,192,203',
|
2622 |
-
'plum' => '221,160,221',
|
2623 |
-
'powderblue' => '176,224,230',
|
2624 |
-
'purple' => '128,0,128',
|
2625 |
-
'red' => '255,0,0',
|
2626 |
-
'rosybrown' => '188,143,143',
|
2627 |
-
'royalblue' => '65,105,225',
|
2628 |
-
'saddlebrown' => '139,69,19',
|
2629 |
-
'salmon' => '250,128,114',
|
2630 |
-
'sandybrown' => '244,164,96',
|
2631 |
-
'seagreen' => '46,139,87',
|
2632 |
-
'seashell' => '255,245,238',
|
2633 |
-
'sienna' => '160,82,45',
|
2634 |
-
'silver' => '192,192,192',
|
2635 |
-
'skyblue' => '135,206,235',
|
2636 |
-
'slateblue' => '106,90,205',
|
2637 |
-
'slategray' => '112,128,144',
|
2638 |
-
'slategrey' => '112,128,144',
|
2639 |
-
'snow' => '255,250,250',
|
2640 |
-
'springgreen' => '0,255,127',
|
2641 |
-
'steelblue' => '70,130,180',
|
2642 |
-
'tan' => '210,180,140',
|
2643 |
-
'teal' => '0,128,128',
|
2644 |
-
'thistle' => '216,191,216',
|
2645 |
-
'tomato' => '255,99,71',
|
2646 |
-
'transparent' => '0,0,0,0',
|
2647 |
-
'turquoise' => '64,224,208',
|
2648 |
-
'violet' => '238,130,238',
|
2649 |
-
'wheat' => '245,222,179',
|
2650 |
-
'white' => '255,255,255',
|
2651 |
-
'whitesmoke' => '245,245,245',
|
2652 |
-
'yellow' => '255,255,0',
|
2653 |
-
'yellowgreen' => '154,205,50'
|
2654 |
-
);
|
2655 |
-
}
|
2656 |
-
|
2657 |
-
/**
|
2658 |
-
* SCSS parser
|
2659 |
-
*
|
2660 |
-
* @author Leaf Corcoran <leafot@gmail.com>
|
2661 |
-
*/
|
2662 |
-
class scss_parser_free {
|
2663 |
-
static protected $precedence = array(
|
2664 |
-
"or" => 0,
|
2665 |
-
"and" => 1,
|
2666 |
-
|
2667 |
-
'==' => 2,
|
2668 |
-
'!=' => 2,
|
2669 |
-
'<=' => 2,
|
2670 |
-
'>=' => 2,
|
2671 |
-
'=' => 2,
|
2672 |
-
'<' => 3,
|
2673 |
-
'>' => 2,
|
2674 |
-
|
2675 |
-
'+' => 3,
|
2676 |
-
'-' => 3,
|
2677 |
-
'*' => 4,
|
2678 |
-
'/' => 4,
|
2679 |
-
'%' => 4,
|
2680 |
-
);
|
2681 |
-
|
2682 |
-
static protected $operators = array("+", "-", "*", "/", "%",
|
2683 |
-
"==", "!=", "<=", ">=", "<", ">", "and", "or");
|
2684 |
-
|
2685 |
-
static protected $operatorStr;
|
2686 |
-
static protected $whitePattern;
|
2687 |
-
static protected $commentMulti;
|
2688 |
-
|
2689 |
-
static protected $commentSingle = "//";
|
2690 |
-
static protected $commentMultiLeft = "/*";
|
2691 |
-
static protected $commentMultiRight = "*/";
|
2692 |
-
|
2693 |
-
/**
|
2694 |
-
* Constructor
|
2695 |
-
*
|
2696 |
-
* @param string $sourceName
|
2697 |
-
* @param boolean $rootParser
|
2698 |
-
*/
|
2699 |
-
public function __construct($sourceName = null, $rootParser = true) {
|
2700 |
-
$this->sourceName = $sourceName;
|
2701 |
-
$this->rootParser = $rootParser;
|
2702 |
-
|
2703 |
-
if (empty(self::$operatorStr)) {
|
2704 |
-
self::$operatorStr = $this->makeOperatorStr(self::$operators);
|
2705 |
-
|
2706 |
-
$commentSingle = $this->preg_quote(self::$commentSingle);
|
2707 |
-
$commentMultiLeft = $this->preg_quote(self::$commentMultiLeft);
|
2708 |
-
$commentMultiRight = $this->preg_quote(self::$commentMultiRight);
|
2709 |
-
self::$commentMulti = $commentMultiLeft.'.*?'.$commentMultiRight;
|
2710 |
-
self::$whitePattern = '/'.$commentSingle.'[^\n]*\s*|('.self::$commentMulti.')\s*|\s+/Ais';
|
2711 |
-
}
|
2712 |
-
}
|
2713 |
-
|
2714 |
-
static protected function makeOperatorStr($operators) {
|
2715 |
-
return '('.implode('|', array_map(array('scss_parser_free','preg_quote'),
|
2716 |
-
$operators)).')';
|
2717 |
-
}
|
2718 |
-
|
2719 |
-
/**
|
2720 |
-
* Parser buffer
|
2721 |
-
*
|
2722 |
-
* @param string $buffer;
|
2723 |
-
*
|
2724 |
-
* @return \StdClass
|
2725 |
-
*/
|
2726 |
-
public function parse($buffer)
|
2727 |
-
{
|
2728 |
-
$this->count = 0;
|
2729 |
-
$this->env = null;
|
2730 |
-
$this->inParens = false;
|
2731 |
-
$this->eatWhiteDefault = true;
|
2732 |
-
$this->insertComments = true;
|
2733 |
-
$this->buffer = $buffer;
|
2734 |
-
|
2735 |
-
$this->pushBlock(null); // root block
|
2736 |
-
$this->whitespace();
|
2737 |
-
|
2738 |
-
while (false !== $this->parseChunk())
|
2739 |
-
;
|
2740 |
-
|
2741 |
-
if ($this->count != strlen($this->buffer)) {
|
2742 |
-
$this->throwParseError();
|
2743 |
-
}
|
2744 |
-
|
2745 |
-
if (!empty($this->env->parent)) {
|
2746 |
-
$this->throwParseError("unclosed block");
|
2747 |
-
}
|
2748 |
-
|
2749 |
-
$this->env->isRoot = true;
|
2750 |
-
|
2751 |
-
return $this->env;
|
2752 |
-
}
|
2753 |
-
|
2754 |
-
/**
|
2755 |
-
* Parse a single chunk off the head of the buffer and append it to the
|
2756 |
-
* current parse environment.
|
2757 |
-
*
|
2758 |
-
* Returns false when the buffer is empty, or when there is an error.
|
2759 |
-
*
|
2760 |
-
* This function is called repeatedly until the entire document is
|
2761 |
-
* parsed.
|
2762 |
-
*
|
2763 |
-
* This parser is most similar to a recursive descent parser. Single
|
2764 |
-
* functions represent discrete grammatical rules for the language, and
|
2765 |
-
* they are able to capture the text that represents those rules.
|
2766 |
-
*
|
2767 |
-
* Consider the function scssc::keyword(). (All parse functions are
|
2768 |
-
* structured the same.)
|
2769 |
-
*
|
2770 |
-
* The function takes a single reference argument. When calling the
|
2771 |
-
* function it will attempt to match a keyword on the head of the buffer.
|
2772 |
-
* If it is successful, it will place the keyword in the referenced
|
2773 |
-
* argument, advance the position in the buffer, and return true. If it
|
2774 |
-
* fails then it won't advance the buffer and it will return false.
|
2775 |
-
*
|
2776 |
-
* All of these parse functions are powered by scssc::match(), which behaves
|
2777 |
-
* the same way, but takes a literal regular expression. Sometimes it is
|
2778 |
-
* more convenient to use match instead of creating a new function.
|
2779 |
-
*
|
2780 |
-
* Because of the format of the functions, to parse an entire string of
|
2781 |
-
* grammatical rules, you can chain them together using &&.
|
2782 |
-
*
|
2783 |
-
* But, if some of the rules in the chain succeed before one fails, then
|
2784 |
-
* the buffer position will be left at an invalid state. In order to
|
2785 |
-
* avoid this, scssc::seek() is used to remember and set buffer positions.
|
2786 |
-
*
|
2787 |
-
* Before parsing a chain, use $s = $this->seek() to remember the current
|
2788 |
-
* position into $s. Then if a chain fails, use $this->seek($s) to
|
2789 |
-
* go back where we started.
|
2790 |
-
*
|
2791 |
-
* @return boolean
|
2792 |
-
*/
|
2793 |
-
protected function parseChunk() {
|
2794 |
-
$s = $this->seek();
|
2795 |
-
|
2796 |
-
// the directives
|
2797 |
-
if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] == "@") {
|
2798 |
-
if ($this->literal("@media") && $this->mediaQueryList($mediaQueryList) && $this->literal("{")) {
|
2799 |
-
$media = $this->pushSpecialBlock("media");
|
2800 |
-
$media->queryList = $mediaQueryList[2];
|
2801 |
-
return true;
|
2802 |
-
} else {
|
2803 |
-
$this->seek($s);
|
2804 |
-
}
|
2805 |
-
|
2806 |
-
if ($this->literal("@mixin") &&
|
2807 |
-
$this->keyword($mixinName) &&
|
2808 |
-
($this->argumentDef($args) || true) &&
|
2809 |
-
$this->literal("{"))
|
2810 |
-
{
|
2811 |
-
$mixin = $this->pushSpecialBlock("mixin");
|
2812 |
-
$mixin->name = $mixinName;
|
2813 |
-
$mixin->args = $args;
|
2814 |
-
return true;
|
2815 |
-
} else {
|
2816 |
-
$this->seek($s);
|
2817 |
-
}
|
2818 |
-
|
2819 |
-
if ($this->literal("@include") &&
|
2820 |
-
$this->keyword($mixinName) &&
|
2821 |
-
($this->literal("(") &&
|
2822 |
-
($this->argValues($argValues) || true) &&
|
2823 |
-
$this->literal(")") || true) &&
|
2824 |
-
($this->end() ||
|
2825 |
-
$this->literal("{") && $hasBlock = true))
|
2826 |
-
{
|
2827 |
-
$child = array("include",
|
2828 |
-
$mixinName, isset($argValues) ? $argValues : null, null);
|
2829 |
-
|
2830 |
-
if (!empty($hasBlock)) {
|
2831 |
-
$include = $this->pushSpecialBlock("include");
|
2832 |
-
$include->child = $child;
|
2833 |
-
} else {
|
2834 |
-
$this->append($child, $s);
|
2835 |
-
}
|
2836 |
-
|
2837 |
-
return true;
|
2838 |
-
} else {
|
2839 |
-
$this->seek($s);
|
2840 |
-
}
|
2841 |
-
|
2842 |
-
if ($this->literal("@import") &&
|
2843 |
-
$this->valueList($importPath) &&
|
2844 |
-
$this->end())
|
2845 |
-
{
|
2846 |
-
$this->append(array("import", $importPath), $s);
|
2847 |
-
return true;
|
2848 |
-
} else {
|
2849 |
-
$this->seek($s);
|
2850 |
-
}
|
2851 |
-
|
2852 |
-
if ($this->literal("@extend") &&
|
2853 |
-
$this->selectors($selector) &&
|
2854 |
-
$this->end())
|
2855 |
-
{
|
2856 |
-
$this->append(array("extend", $selector), $s);
|
2857 |
-
return true;
|
2858 |
-
} else {
|
2859 |
-
$this->seek($s);
|
2860 |
-
}
|
2861 |
-
|
2862 |
-
if ($this->literal("@function") &&
|
2863 |
-
$this->keyword($fnName) &&
|
2864 |
-
$this->argumentDef($args) &&
|
2865 |
-
$this->literal("{"))
|
2866 |
-
{
|
2867 |
-
$func = $this->pushSpecialBlock("function");
|
2868 |
-
$func->name = $fnName;
|
2869 |
-
$func->args = $args;
|
2870 |
-
return true;
|
2871 |
-
} else {
|
2872 |
-
$this->seek($s);
|
2873 |
-
}
|
2874 |
-
|
2875 |
-
if ($this->literal("@return") && $this->valueList($retVal) && $this->end()) {
|
2876 |
-
$this->append(array("return", $retVal), $s);
|
2877 |
-
return true;
|
2878 |
-
} else {
|
2879 |
-
$this->seek($s);
|
2880 |
-
}
|
2881 |
-
|
2882 |
-
if ($this->literal("@each") &&
|
2883 |
-
$this->variable($varName) &&
|
2884 |
-
$this->literal("in") &&
|
2885 |
-
$this->valueList($list) &&
|
2886 |
-
$this->literal("{"))
|
2887 |
-
{
|
2888 |
-
$each = $this->pushSpecialBlock("each");
|
2889 |
-
$each->var = $varName[1];
|
2890 |
-
$each->list = $list;
|
2891 |
-
return true;
|
2892 |
-
} else {
|
2893 |
-
$this->seek($s);
|
2894 |
-
}
|
2895 |
-
|
2896 |
-
if ($this->literal("@while") &&
|
2897 |
-
$this->expression($cond) &&
|
2898 |
-
$this->literal("{"))
|
2899 |
-
{
|
2900 |
-
$while = $this->pushSpecialBlock("while");
|
2901 |
-
$while->cond = $cond;
|
2902 |
-
return true;
|
2903 |
-
} else {
|
2904 |
-
$this->seek($s);
|
2905 |
-
}
|
2906 |
-
|
2907 |
-
if ($this->literal("@for") &&
|
2908 |
-
$this->variable($varName) &&
|
2909 |
-
$this->literal("from") &&
|
2910 |
-
$this->expression($start) &&
|
2911 |
-
($this->literal("through") ||
|
2912 |
-
($forUntil = true && $this->literal("to"))) &&
|
2913 |
-
$this->expression($end) &&
|
2914 |
-
$this->literal("{"))
|
2915 |
-
{
|
2916 |
-
$for = $this->pushSpecialBlock("for");
|
2917 |
-
$for->var = $varName[1];
|
2918 |
-
$for->start = $start;
|
2919 |
-
$for->end = $end;
|
2920 |
-
$for->until = isset($forUntil);
|
2921 |
-
return true;
|
2922 |
-
} else {
|
2923 |
-
$this->seek($s);
|
2924 |
-
}
|
2925 |
-
|
2926 |
-
if ($this->literal("@if") && $this->valueList($cond) && $this->literal("{")) {
|
2927 |
-
$if = $this->pushSpecialBlock("if");
|
2928 |
-
$if->cond = $cond;
|
2929 |
-
$if->cases = array();
|
2930 |
-
return true;
|
2931 |
-
} else {
|
2932 |
-
$this->seek($s);
|
2933 |
-
}
|
2934 |
-
|
2935 |
-
if (($this->literal("@debug") || $this->literal("@warn")) &&
|
2936 |
-
$this->valueList($value) &&
|
2937 |
-
$this->end()) {
|
2938 |
-
$this->append(array("debug", $value, $s), $s);
|
2939 |
-
return true;
|
2940 |
-
} else {
|
2941 |
-
$this->seek($s);
|
2942 |
-
}
|
2943 |
-
|
2944 |
-
if ($this->literal("@content") && $this->end()) {
|
2945 |
-
$this->append(array("mixin_content"), $s);
|
2946 |
-
return true;
|
2947 |
-
} else {
|
2948 |
-
$this->seek($s);
|
2949 |
-
}
|
2950 |
-
|
2951 |
-
$last = $this->last();
|
2952 |
-
if (isset($last) && $last[0] == "if") {
|
2953 |
-
list(, $if) = $last;
|
2954 |
-
if ($this->literal("@else")) {
|
2955 |
-
if ($this->literal("{")) {
|
2956 |
-
$else = $this->pushSpecialBlock("else");
|
2957 |
-
} elseif ($this->literal("if") && $this->valueList($cond) && $this->literal("{")) {
|
2958 |
-
$else = $this->pushSpecialBlock("elseif");
|
2959 |
-
$else->cond = $cond;
|
2960 |
-
}
|
2961 |
-
|
2962 |
-
if (isset($else)) {
|
2963 |
-
$else->dontAppend = true;
|
2964 |
-
$if->cases[] = $else;
|
2965 |
-
return true;
|
2966 |
-
}
|
2967 |
-
}
|
2968 |
-
|
2969 |
-
$this->seek($s);
|
2970 |
-
}
|
2971 |
-
|
2972 |
-
if ($this->literal("@charset") &&
|
2973 |
-
$this->valueList($charset) && $this->end())
|
2974 |
-
{
|
2975 |
-
$this->append(array("charset", $charset), $s);
|
2976 |
-
return true;
|
2977 |
-
} else {
|
2978 |
-
$this->seek($s);
|
2979 |
-
}
|
2980 |
-
|
2981 |
-
// doesn't match built in directive, do generic one
|
2982 |
-
if ($this->literal("@", false) && $this->keyword($dirName) &&
|
2983 |
-
($this->openString("{", $dirValue) || true) &&
|
2984 |
-
$this->literal("{"))
|
2985 |
-
{
|
2986 |
-
$directive = $this->pushSpecialBlock("directive");
|
2987 |
-
$directive->name = $dirName;
|
2988 |
-
if (isset($dirValue)) $directive->value = $dirValue;
|
2989 |
-
return true;
|
2990 |
-
}
|
2991 |
-
|
2992 |
-
$this->seek($s);
|
2993 |
-
return false;
|
2994 |
-
}
|
2995 |
-
|
2996 |
-
// property shortcut
|
2997 |
-
// captures most properties before having to parse a selector
|
2998 |
-
if ($this->keyword($name, false) &&
|
2999 |
-
$this->literal(": ") &&
|
3000 |
-
$this->valueList($value) &&
|
3001 |
-
$this->end())
|
3002 |
-
{
|
3003 |
-
$name = array("string", "", array($name));
|
3004 |
-
$this->append(array("assign", $name, $value), $s);
|
3005 |
-
return true;
|
3006 |
-
} else {
|
3007 |
-
$this->seek($s);
|
3008 |
-
}
|
3009 |
-
|
3010 |
-
// variable assigns
|
3011 |
-
if ($this->variable($name) &&
|
3012 |
-
$this->literal(":") &&
|
3013 |
-
$this->valueList($value) && $this->end())
|
3014 |
-
{
|
3015 |
-
// check for !default
|
3016 |
-
$defaultVar = $value[0] == "list" && $this->stripDefault($value);
|
3017 |
-
$this->append(array("assign", $name, $value, $defaultVar), $s);
|
3018 |
-
return true;
|
3019 |
-
} else {
|
3020 |
-
$this->seek($s);
|
3021 |
-
}
|
3022 |
-
|
3023 |
-
// misc
|
3024 |
-
if ($this->literal("-->")) {
|
3025 |
-
return true;
|
3026 |
-
}
|
3027 |
-
|
3028 |
-
// opening css block
|
3029 |
-
$oldComments = $this->insertComments;
|
3030 |
-
$this->insertComments = false;
|
3031 |
-
if ($this->selectors($selectors) && $this->literal("{")) {
|
3032 |
-
$this->pushBlock($selectors);
|
3033 |
-
$this->insertComments = $oldComments;
|
3034 |
-
return true;
|
3035 |
-
} else {
|
3036 |
-
$this->seek($s);
|
3037 |
-
}
|
3038 |
-
$this->insertComments = $oldComments;
|
3039 |
-
|
3040 |
-
// property assign, or nested assign
|
3041 |
-
if ($this->propertyName($name) && $this->literal(":")) {
|
3042 |
-
$foundSomething = false;
|
3043 |
-
if ($this->valueList($value)) {
|
3044 |
-
$this->append(array("assign", $name, $value), $s);
|
3045 |
-
$foundSomething = true;
|
3046 |
-
}
|
3047 |
-
|
3048 |
-
if ($this->literal("{")) {
|
3049 |
-
$propBlock = $this->pushSpecialBlock("nestedprop");
|
3050 |
-
$propBlock->prefix = $name;
|
3051 |
-
$foundSomething = true;
|
3052 |
-
} elseif ($foundSomething) {
|
3053 |
-
$foundSomething = $this->end();
|
3054 |
-
}
|
3055 |
-
|
3056 |
-
if ($foundSomething) {
|
3057 |
-
return true;
|
3058 |
-
}
|
3059 |
-
|
3060 |
-
$this->seek($s);
|
3061 |
-
} else {
|
3062 |
-
$this->seek($s);
|
3063 |
-
}
|
3064 |
-
|
3065 |
-
// closing a block
|
3066 |
-
if ($this->literal("}")) {
|
3067 |
-
$block = $this->popBlock();
|
3068 |
-
if (isset($block->type) && $block->type == "include") {
|
3069 |
-
$include = $block->child;
|
3070 |
-
unset($block->child);
|
3071 |
-
$include[3] = $block;
|
3072 |
-
$this->append($include, $s);
|
3073 |
-
} elseif (empty($block->dontAppend)) {
|
3074 |
-
$type = isset($block->type) ? $block->type : "block";
|
3075 |
-
$this->append(array($type, $block), $s);
|
3076 |
-
}
|
3077 |
-
return true;
|
3078 |
-
}
|
3079 |
-
|
3080 |
-
// extra stuff
|
3081 |
-
if ($this->literal(";") ||
|
3082 |
-
$this->literal("<!--"))
|
3083 |
-
{
|
3084 |
-
return true;
|
3085 |
-
}
|
3086 |
-
|
3087 |
-
return false;
|
3088 |
-
}
|
3089 |
-
|
3090 |
-
protected function stripDefault(&$value) {
|
3091 |
-
$def = end($value[2]);
|
3092 |
-
if ($def[0] == "keyword" && $def[1] == "!default") {
|
3093 |
-
array_pop($value[2]);
|
3094 |
-
$value = $this->flattenList($value);
|
3095 |
-
return true;
|
3096 |
-
}
|
3097 |
-
|
3098 |
-
if ($def[0] == "list") {
|
3099 |
-
return $this->stripDefault($value[2][count($value[2]) - 1]);
|
3100 |
-
}
|
3101 |
-
|
3102 |
-
return false;
|
3103 |
-
}
|
3104 |
-
|
3105 |
-
protected function literal($what, $eatWhitespace = null) {
|
3106 |
-
if (!isset($eatWhitespace)) $eatWhitespace = $this->eatWhiteDefault;
|
3107 |
-
|
3108 |
-
// shortcut on single letter
|
3109 |
-
if (!isset($what[1]) && isset($this->buffer[$this->count])) {
|
3110 |
-
if ($this->buffer[$this->count] == $what) {
|
3111 |
-
if (!$eatWhitespace) {
|
3112 |
-
$this->count++;
|
3113 |
-
return true;
|
3114 |
-
}
|
3115 |
-
// goes below...
|
3116 |
-
} else {
|
3117 |
-
return false;
|
3118 |
-
}
|
3119 |
-
}
|
3120 |
-
|
3121 |
-
return $this->match($this->preg_quote($what), $m, $eatWhitespace);
|
3122 |
-
}
|
3123 |
-
|
3124 |
-
// tree builders
|
3125 |
-
|
3126 |
-
protected function pushBlock($selectors) {
|
3127 |
-
$b = new stdClass;
|
3128 |
-
$b->parent = $this->env; // not sure if we need this yet
|
3129 |
-
|
3130 |
-
$b->selectors = $selectors;
|
3131 |
-
$b->children = array();
|
3132 |
-
|
3133 |
-
$this->env = $b;
|
3134 |
-
return $b;
|
3135 |
-
}
|
3136 |
-
|
3137 |
-
protected function pushSpecialBlock($type) {
|
3138 |
-
$block = $this->pushBlock(null);
|
3139 |
-
$block->type = $type;
|
3140 |
-
return $block;
|
3141 |
-
}
|
3142 |
-
|
3143 |
-
protected function popBlock() {
|
3144 |
-
if (empty($this->env->parent)) {
|
3145 |
-
$this->throwParseError("unexpected }");
|
3146 |
-
}
|
3147 |
-
|
3148 |
-
$old = $this->env;
|
3149 |
-
$this->env = $this->env->parent;
|
3150 |
-
unset($old->parent);
|
3151 |
-
return $old;
|
3152 |
-
}
|
3153 |
-
|
3154 |
-
protected function append($statement, $pos=null) {
|
3155 |
-
if ($pos !== null) {
|
3156 |
-
$statement[-1] = $pos;
|
3157 |
-
if (!$this->rootParser) $statement[-2] = $this;
|
3158 |
-
}
|
3159 |
-
$this->env->children[] = $statement;
|
3160 |
-
}
|
3161 |
-
|
3162 |
-
// last child that was appended
|
3163 |
-
protected function last() {
|
3164 |
-
$i = count($this->env->children) - 1;
|
3165 |
-
if (isset($this->env->children[$i]))
|
3166 |
-
return $this->env->children[$i];
|
3167 |
-
}
|
3168 |
-
|
3169 |
-
// high level parsers (they return parts of ast)
|
3170 |
-
|
3171 |
-
protected function mediaQueryList(&$out) {
|
3172 |
-
return $this->genericList($out, "mediaQuery", ",", false);
|
3173 |
-
}
|
3174 |
-
|
3175 |
-
protected function mediaQuery(&$out) {
|
3176 |
-
$s = $this->seek();
|
3177 |
-
|
3178 |
-
$expressions = null;
|
3179 |
-
$parts = array();
|
3180 |
-
|
3181 |
-
if (($this->literal("only") && ($only = true) || $this->literal("not") && ($not = true) || true) && $this->mixedKeyword($mediaType)) {
|
3182 |
-
$prop = array("mediaType");
|
3183 |
-
if (isset($only)) $prop[] = array("keyword", "only");
|
3184 |
-
if (isset($not)) $prop[] = array("keyword", "not");
|
3185 |
-
$media = array("list", "", array());
|
3186 |
-
foreach ((array)$mediaType as $type) {
|
3187 |
-
if (is_array($type)) {
|
3188 |
-
$media[2][] = $type;
|
3189 |
-
} else {
|
3190 |
-
$media[2][] = array("keyword", $type);
|
3191 |
-
}
|
3192 |
-
}
|
3193 |
-
$prop[] = $media;
|
3194 |
-
$parts[] = $prop;
|
3195 |
-
}
|
3196 |
-
|
3197 |
-
if (empty($parts) || $this->literal("and")) {
|
3198 |
-
$this->genericList($expressions, "mediaExpression", "and", false);
|
3199 |
-
if (is_array($expressions)) $parts = array_merge($parts, $expressions[2]);
|
3200 |
-
}
|
3201 |
-
|
3202 |
-
$out = $parts;
|
3203 |
-
return true;
|
3204 |
-
}
|
3205 |
-
|
3206 |
-
protected function mediaExpression(&$out) {
|
3207 |
-
$s = $this->seek();
|
3208 |
-
$value = null;
|
3209 |
-
if ($this->literal("(") &&
|
3210 |
-
$this->expression($feature) &&
|
3211 |
-
($this->literal(":") && $this->expression($value) || true) &&
|
3212 |
-
$this->literal(")"))
|
3213 |
-
{
|
3214 |
-
$out = array("mediaExp", $feature);
|
3215 |
-
if ($value) $out[] = $value;
|
3216 |
-
return true;
|
3217 |
-
}
|
3218 |
-
|
3219 |
-
$this->seek($s);
|
3220 |
-
return false;
|
3221 |
-
}
|
3222 |
-
|
3223 |
-
protected function argValues(&$out) {
|
3224 |
-
if ($this->genericList($list, "argValue", ",", false)) {
|
3225 |
-
$out = $list[2];
|
3226 |
-
return true;
|
3227 |
-
}
|
3228 |
-
return false;
|
3229 |
-
}
|
3230 |
-
|
3231 |
-
protected function argValue(&$out) {
|
3232 |
-
$s = $this->seek();
|
3233 |
-
|
3234 |
-
$keyword = null;
|
3235 |
-
if (!$this->variable($keyword) || !$this->literal(":")) {
|
3236 |
-
$this->seek($s);
|
3237 |
-
$keyword = null;
|
3238 |
-
}
|
3239 |
-
|
3240 |
-
if ($this->genericList($value, "expression")) {
|
3241 |
-
$out = array($keyword, $value, false);
|
3242 |
-
$s = $this->seek();
|
3243 |
-
if ($this->literal("...")) {
|
3244 |
-
$out[2] = true;
|
3245 |
-
} else {
|
3246 |
-
$this->seek($s);
|
3247 |
-
}
|
3248 |
-
return true;
|
3249 |
-
}
|
3250 |
-
|
3251 |
-
return false;
|
3252 |
-
}
|
3253 |
-
|
3254 |
-
/**
|
3255 |
-
* Parse list
|
3256 |
-
*
|
3257 |
-
* @param string $out
|
3258 |
-
*
|
3259 |
-
* @return boolean
|
3260 |
-
*/
|
3261 |
-
public function valueList(&$out)
|
3262 |
-
{
|
3263 |
-
return $this->genericList($out, 'spaceList', ',');
|
3264 |
-
}
|
3265 |
-
|
3266 |
-
protected function spaceList(&$out)
|
3267 |
-
{
|
3268 |
-
return $this->genericList($out, 'expression');
|
3269 |
-
}
|
3270 |
-
|
3271 |
-
protected function genericList(&$out, $parseItem, $delim="", $flatten=true) {
|
3272 |
-
$s = $this->seek();
|
3273 |
-
$items = array();
|
3274 |
-
while ($this->$parseItem($value)) {
|
3275 |
-
$items[] = $value;
|
3276 |
-
if ($delim) {
|
3277 |
-
if (!$this->literal($delim)) break;
|
3278 |
-
}
|
3279 |
-
}
|
3280 |
-
|
3281 |
-
if (count($items) == 0) {
|
3282 |
-
$this->seek($s);
|
3283 |
-
return false;
|
3284 |
-
}
|
3285 |
-
|
3286 |
-
if ($flatten && count($items) == 1) {
|
3287 |
-
$out = $items[0];
|
3288 |
-
} else {
|
3289 |
-
$out = array("list", $delim, $items);
|
3290 |
-
}
|
3291 |
-
|
3292 |
-
return true;
|
3293 |
-
}
|
3294 |
-
|
3295 |
-
protected function expression(&$out) {
|
3296 |
-
$s = $this->seek();
|
3297 |
-
|
3298 |
-
if ($this->literal("(")) {
|
3299 |
-
if ($this->literal(")")) {
|
3300 |
-
$out = array("list", "", array());
|
3301 |
-
return true;
|
3302 |
-
}
|
3303 |
-
|
3304 |
-
if ($this->valueList($out) && $this->literal(')') && $out[0] == "list") {
|
3305 |
-
return true;
|
3306 |
-
}
|
3307 |
-
|
3308 |
-
$this->seek($s);
|
3309 |
-
}
|
3310 |
-
|
3311 |
-
if ($this->value($lhs)) {
|
3312 |
-
$out = $this->expHelper($lhs, 0);
|
3313 |
-
return true;
|
3314 |
-
}
|
3315 |
-
|
3316 |
-
return false;
|
3317 |
-
}
|
3318 |
-
|
3319 |
-
protected function expHelper($lhs, $minP) {
|
3320 |
-
$opstr = self::$operatorStr;
|
3321 |
-
|
3322 |
-
$ss = $this->seek();
|
3323 |
-
$whiteBefore = isset($this->buffer[$this->count - 1]) &&
|
3324 |
-
ctype_space($this->buffer[$this->count - 1]);
|
3325 |
-
while ($this->match($opstr, $m) && self::$precedence[$m[1]] >= $minP) {
|
3326 |
-
$whiteAfter = isset($this->buffer[$this->count - 1]) &&
|
3327 |
-
ctype_space($this->buffer[$this->count - 1]);
|
3328 |
-
|
3329 |
-
$op = $m[1];
|
3330 |
-
|
3331 |
-
// don't turn negative numbers into expressions
|
3332 |
-
if ($op == "-" && $whiteBefore) {
|
3333 |
-
if (!$whiteAfter) break;
|
3334 |
-
}
|
3335 |
-
|
3336 |
-
if (!$this->value($rhs)) break;
|
3337 |
-
|
3338 |
-
// peek and see if rhs belongs to next operator
|
3339 |
-
if ($this->peek($opstr, $next) && self::$precedence[$next[1]] > self::$precedence[$op]) {
|
3340 |
-
$rhs = $this->expHelper($rhs, self::$precedence[$next[1]]);
|
3341 |
-
}
|
3342 |
-
|
3343 |
-
$lhs = array("exp", $op, $lhs, $rhs, $this->inParens, $whiteBefore, $whiteAfter);
|
3344 |
-
$ss = $this->seek();
|
3345 |
-
$whiteBefore = isset($this->buffer[$this->count - 1]) &&
|
3346 |
-
ctype_space($this->buffer[$this->count - 1]);
|
3347 |
-
}
|
3348 |
-
|
3349 |
-
$this->seek($ss);
|
3350 |
-
return $lhs;
|
3351 |
-
}
|
3352 |
-
|
3353 |
-
protected function value(&$out) {
|
3354 |
-
$s = $this->seek();
|
3355 |
-
|
3356 |
-
if ($this->literal("not", false) && $this->whitespace() && $this->value($inner)) {
|
3357 |
-
$out = array("unary", "not", $inner, $this->inParens);
|
3358 |
-
return true;
|
3359 |
-
} else {
|
3360 |
-
$this->seek($s);
|
3361 |
-
}
|
3362 |
-
|
3363 |
-
if ($this->literal("+") && $this->value($inner)) {
|
3364 |
-
$out = array("unary", "+", $inner, $this->inParens);
|
3365 |
-
return true;
|
3366 |
-
} else {
|
3367 |
-
$this->seek($s);
|
3368 |
-
}
|
3369 |
-
|
3370 |
-
// negation
|
3371 |
-
if ($this->literal("-", false) &&
|
3372 |
-
($this->variable($inner) ||
|
3373 |
-
$this->unit($inner) ||
|
3374 |
-
$this->parenValue($inner)))
|
3375 |
-
{
|
3376 |
-
$out = array("unary", "-", $inner, $this->inParens);
|
3377 |
-
return true;
|
3378 |
-
} else {
|
3379 |
-
$this->seek($s);
|
3380 |
-
}
|
3381 |
-
|
3382 |
-
if ($this->parenValue($out)) return true;
|
3383 |
-
if ($this->interpolation($out)) return true;
|
3384 |
-
if ($this->variable($out)) return true;
|
3385 |
-
if ($this->color($out)) return true;
|
3386 |
-
if ($this->unit($out)) return true;
|
3387 |
-
if ($this->text($out)) return true;
|
3388 |
-
if ($this->func($out)) return true;
|
3389 |
-
if ($this->progid($out)) return true;
|
3390 |
-
|
3391 |
-
if ($this->keyword($keyword)) {
|
3392 |
-
if ($keyword == "null") {
|
3393 |
-
$out = array("null");
|
3394 |
-
} else {
|
3395 |
-
$out = array("keyword", $keyword);
|
3396 |
-
}
|
3397 |
-
return true;
|
3398 |
-
}
|
3399 |
-
|
3400 |
-
return false;
|
3401 |
-
}
|
3402 |
-
|
3403 |
-
// value wrappen in parentheses
|
3404 |
-
protected function parenValue(&$out) {
|
3405 |
-
$s = $this->seek();
|
3406 |
-
|
3407 |
-
$inParens = $this->inParens;
|
3408 |
-
if ($this->literal("(") &&
|
3409 |
-
($this->inParens = true) && $this->expression($exp) &&
|
3410 |
-
$this->literal(")"))
|
3411 |
-
{
|
3412 |
-
$out = $exp;
|
3413 |
-
$this->inParens = $inParens;
|
3414 |
-
return true;
|
3415 |
-
} else {
|
3416 |
-
$this->inParens = $inParens;
|
3417 |
-
$this->seek($s);
|
3418 |
-
}
|
3419 |
-
|
3420 |
-
return false;
|
3421 |
-
}
|
3422 |
-
|
3423 |
-
protected function progid(&$out) {
|
3424 |
-
$s = $this->seek();
|
3425 |
-
if ($this->literal("progid:", false) &&
|
3426 |
-
$this->openString("(", $fn) &&
|
3427 |
-
$this->literal("("))
|
3428 |
-
{
|
3429 |
-
$this->openString(")", $args, "(");
|
3430 |
-
if ($this->literal(")")) {
|
3431 |
-
$out = array("string", "", array(
|
3432 |
-
"progid:", $fn, "(", $args, ")"
|
3433 |
-
));
|
3434 |
-
return true;
|
3435 |
-
}
|
3436 |
-
}
|
3437 |
-
|
3438 |
-
$this->seek($s);
|
3439 |
-
return false;
|
3440 |
-
}
|
3441 |
-
|
3442 |
-
protected function func(&$func) {
|
3443 |
-
$s = $this->seek();
|
3444 |
-
|
3445 |
-
if ($this->keyword($name, false) &&
|
3446 |
-
$this->literal("("))
|
3447 |
-
{
|
3448 |
-
if ($name == "alpha" && $this->argumentList($args)) {
|
3449 |
-
$func = array("function", $name, array("string", "", $args));
|
3450 |
-
return true;
|
3451 |
-
}
|
3452 |
-
|
3453 |
-
if ($name != "expression" && !preg_match("/^(-[a-z]+-)?calc$/", $name)) {
|
3454 |
-
$ss = $this->seek();
|
3455 |
-
if ($this->argValues($args) && $this->literal(")")) {
|
3456 |
-
$func = array("fncall", $name, $args);
|
3457 |
-
return true;
|
3458 |
-
}
|
3459 |
-
$this->seek($ss);
|
3460 |
-
}
|
3461 |
-
|
3462 |
-
if (($this->openString(")", $str, "(") || true ) &&
|
3463 |
-
$this->literal(")"))
|
3464 |
-
{
|
3465 |
-
$args = array();
|
3466 |
-
if (!empty($str)) {
|
3467 |
-
$args[] = array(null, array("string", "", array($str)));
|
3468 |
-
}
|
3469 |
-
|
3470 |
-
$func = array("fncall", $name, $args);
|
3471 |
-
return true;
|
3472 |
-
}
|
3473 |
-
}
|
3474 |
-
|
3475 |
-
$this->seek($s);
|
3476 |
-
return false;
|
3477 |
-
}
|
3478 |
-
|
3479 |
-
protected function argumentList(&$out) {
|
3480 |
-
$s = $this->seek();
|
3481 |
-
$this->literal("(");
|
3482 |
-
|
3483 |
-
$args = array();
|
3484 |
-
while ($this->keyword($var)) {
|
3485 |
-
$ss = $this->seek();
|
3486 |
-
|
3487 |
-
if ($this->literal("=") && $this->expression($exp)) {
|
3488 |
-
$args[] = array("string", "", array($var."="));
|
3489 |
-
$arg = $exp;
|
3490 |
-
} else {
|
3491 |
-
break;
|
3492 |
-
}
|
3493 |
-
|
3494 |
-
$args[] = $arg;
|
3495 |
-
|
3496 |
-
if (!$this->literal(",")) break;
|
3497 |
-
|
3498 |
-
$args[] = array("string", "", array(", "));
|
3499 |
-
}
|
3500 |
-
|
3501 |
-
if (!$this->literal(")") || !count($args)) {
|
3502 |
-
$this->seek($s);
|
3503 |
-
return false;
|
3504 |
-
}
|
3505 |
-
|
3506 |
-
$out = $args;
|
3507 |
-
return true;
|
3508 |
-
}
|
3509 |
-
|
3510 |
-
protected function argumentDef(&$out) {
|
3511 |
-
$s = $this->seek();
|
3512 |
-
$this->literal("(");
|
3513 |
-
|
3514 |
-
$args = array();
|
3515 |
-
while ($this->variable($var)) {
|
3516 |
-
$arg = array($var[1], null, false);
|
3517 |
-
|
3518 |
-
$ss = $this->seek();
|
3519 |
-
if ($this->literal(":") && $this->genericList($defaultVal, "expression")) {
|
3520 |
-
$arg[1] = $defaultVal;
|
3521 |
-
} else {
|
3522 |
-
$this->seek($ss);
|
3523 |
-
}
|
3524 |
-
|
3525 |
-
$ss = $this->seek();
|
3526 |
-
if ($this->literal("...")) {
|
3527 |
-
$sss = $this->seek();
|
3528 |
-
if (!$this->literal(")")) {
|
3529 |
-
$this->throwParseError("... has to be after the final argument");
|
3530 |
-
}
|
3531 |
-
$arg[2] = true;
|
3532 |
-
$this->seek($sss);
|
3533 |
-
} else {
|
3534 |
-
$this->seek($ss);
|
3535 |
-
}
|
3536 |
-
|
3537 |
-
$args[] = $arg;
|
3538 |
-
if (!$this->literal(",")) break;
|
3539 |
-
}
|
3540 |
-
|
3541 |
-
if (!$this->literal(")")) {
|
3542 |
-
$this->seek($s);
|
3543 |
-
return false;
|
3544 |
-
}
|
3545 |
-
|
3546 |
-
$out = $args;
|
3547 |
-
return true;
|
3548 |
-
}
|
3549 |
-
|
3550 |
-
protected function color(&$out) {
|
3551 |
-
$color = array('color');
|
3552 |
-
|
3553 |
-
if ($this->match('(#([0-9a-f]{6})|#([0-9a-f]{3}))', $m)) {
|
3554 |
-
if (isset($m[3])) {
|
3555 |
-
$num = $m[3];
|
3556 |
-
$width = 16;
|
3557 |
-
} else {
|
3558 |
-
$num = $m[2];
|
3559 |
-
$width = 256;
|
3560 |
-
}
|
3561 |
-
|
3562 |
-
$num = hexdec($num);
|
3563 |
-
foreach (array(3,2,1) as $i) {
|
3564 |
-
$t = $num % $width;
|
3565 |
-
$num /= $width;
|
3566 |
-
|
3567 |
-
$color[$i] = $t * (256/$width) + $t * floor(16/$width);
|
3568 |
-
}
|
3569 |
-
|
3570 |
-
$out = $color;
|
3571 |
-
return true;
|
3572 |
-
}
|
3573 |
-
|
3574 |
-
return false;
|
3575 |
-
}
|
3576 |
-
|
3577 |
-
protected function unit(&$unit) {
|
3578 |
-
if ($this->match('([0-9]*(\.)?[0-9]+)([%a-zA-Z]+)?', $m)) {
|
3579 |
-
$unit = array("number", $m[1], empty($m[3]) ? "" : $m[3]);
|
3580 |
-
return true;
|
3581 |
-
}
|
3582 |
-
return false;
|
3583 |
-
}
|
3584 |
-
|
3585 |
-
protected function text(&$out) {
|
3586 |
-
$s = $this->seek();
|
3587 |
-
if ($this->literal('"', false)) {
|
3588 |
-
$delim = '"';
|
3589 |
-
} elseif ($this->literal("'", false)) {
|
3590 |
-
$delim = "'";
|
3591 |
-
} else {
|
3592 |
-
return false;
|
3593 |
-
}
|
3594 |
-
|
3595 |
-
$content = array();
|
3596 |
-
$oldWhite = $this->eatWhiteDefault;
|
3597 |
-
$this->eatWhiteDefault = false;
|
3598 |
-
|
3599 |
-
while ($this->matchString($m, $delim)) {
|
3600 |
-
$content[] = $m[1];
|
3601 |
-
if ($m[2] == "#{") {
|
3602 |
-
$this->count -= strlen($m[2]);
|
3603 |
-
if ($this->interpolation($inter, false)) {
|
3604 |
-
$content[] = $inter;
|
3605 |
-
} else {
|
3606 |
-
$this->count += strlen($m[2]);
|
3607 |
-
$content[] = "#{"; // ignore it
|
3608 |
-
}
|
3609 |
-
} elseif ($m[2] == '\\') {
|
3610 |
-
$content[] = $m[2];
|
3611 |
-
if ($this->literal($delim, false)) {
|
3612 |
-
$content[] = $delim;
|
3613 |
-
}
|
3614 |
-
} else {
|
3615 |
-
$this->count -= strlen($delim);
|
3616 |
-
break; // delim
|
3617 |
-
}
|
3618 |
-
}
|
3619 |
-
|
3620 |
-
$this->eatWhiteDefault = $oldWhite;
|
3621 |
-
|
3622 |
-
if ($this->literal($delim)) {
|
3623 |
-
$out = array("string", $delim, $content);
|
3624 |
-
return true;
|
3625 |
-
}
|
3626 |
-
|
3627 |
-
$this->seek($s);
|
3628 |
-
return false;
|
3629 |
-
}
|
3630 |
-
|
3631 |
-
protected function mixedKeyword(&$out) {
|
3632 |
-
$s = $this->seek();
|
3633 |
-
|
3634 |
-
$parts = array();
|
3635 |
-
|
3636 |
-
$oldWhite = $this->eatWhiteDefault;
|
3637 |
-
$this->eatWhiteDefault = false;
|
3638 |
-
|
3639 |
-
while (true) {
|
3640 |
-
if ($this->keyword($key)) {
|
3641 |
-
$parts[] = $key;
|
3642 |
-
continue;
|
3643 |
-
}
|
3644 |
-
|
3645 |
-
if ($this->interpolation($inter)) {
|
3646 |
-
$parts[] = $inter;
|
3647 |
-
continue;
|
3648 |
-
}
|
3649 |
-
|
3650 |
-
break;
|
3651 |
-
}
|
3652 |
-
|
3653 |
-
$this->eatWhiteDefault = $oldWhite;
|
3654 |
-
|
3655 |
-
if (count($parts) == 0) return false;
|
3656 |
-
|
3657 |
-
if ($this->eatWhiteDefault) {
|
3658 |
-
$this->whitespace();
|
3659 |
-
}
|
3660 |
-
|
3661 |
-
$out = $parts;
|
3662 |
-
return true;
|
3663 |
-
}
|
3664 |
-
|
3665 |
-
// an unbounded string stopped by $end
|
3666 |
-
protected function openString($end, &$out, $nestingOpen=null) {
|
3667 |
-
$oldWhite = $this->eatWhiteDefault;
|
3668 |
-
$this->eatWhiteDefault = false;
|
3669 |
-
|
3670 |
-
$stop = array("'", '"', "#{", $end);
|
3671 |
-
$stop = array_map(array($this, "preg_quote"), $stop);
|
3672 |
-
$stop[] = self::$commentMulti;
|
3673 |
-
|
3674 |
-
$patt = '(.*?)('.implode("|", $stop).')';
|
3675 |
-
|
3676 |
-
$nestingLevel = 0;
|
3677 |
-
|
3678 |
-
$content = array();
|
3679 |
-
while ($this->match($patt, $m, false)) {
|
3680 |
-
if (isset($m[1]) && $m[1] !== '') {
|
3681 |
-
$content[] = $m[1];
|
3682 |
-
if ($nestingOpen) {
|
3683 |
-
$nestingLevel += substr_count($m[1], $nestingOpen);
|
3684 |
-
}
|
3685 |
-
}
|
3686 |
-
|
3687 |
-
$tok = $m[2];
|
3688 |
-
|
3689 |
-
$this->count-= strlen($tok);
|
3690 |
-
if ($tok == $end) {
|
3691 |
-
if ($nestingLevel == 0) {
|
3692 |
-
break;
|
3693 |
-
} else {
|
3694 |
-
$nestingLevel--;
|
3695 |
-
}
|
3696 |
-
}
|
3697 |
-
|
3698 |
-
if (($tok == "'" || $tok == '"') && $this->text($str)) {
|
3699 |
-
$content[] = $str;
|
3700 |
-
continue;
|
3701 |
-
}
|
3702 |
-
|
3703 |
-
if ($tok == "#{" && $this->interpolation($inter)) {
|
3704 |
-
$content[] = $inter;
|
3705 |
-
continue;
|
3706 |
-
}
|
3707 |
-
|
3708 |
-
$content[] = $tok;
|
3709 |
-
$this->count+= strlen($tok);
|
3710 |
-
}
|
3711 |
-
|
3712 |
-
$this->eatWhiteDefault = $oldWhite;
|
3713 |
-
|
3714 |
-
if (count($content) == 0) return false;
|
3715 |
-
|
3716 |
-
// trim the end
|
3717 |
-
if (is_string(end($content))) {
|
3718 |
-
$content[count($content) - 1] = rtrim(end($content));
|
3719 |
-
}
|
3720 |
-
|
3721 |
-
$out = array("string", "", $content);
|
3722 |
-
return true;
|
3723 |
-
}
|
3724 |
-
|
3725 |
-
// $lookWhite: save information about whitespace before and after
|
3726 |
-
protected function interpolation(&$out, $lookWhite=true) {
|
3727 |
-
$oldWhite = $this->eatWhiteDefault;
|
3728 |
-
$this->eatWhiteDefault = true;
|
3729 |
-
|
3730 |
-
$s = $this->seek();
|
3731 |
-
if ($this->literal("#{") && $this->valueList($value) && $this->literal("}", false)) {
|
3732 |
-
|
3733 |
-
// TODO: don't error if out of bounds
|
3734 |
-
|
3735 |
-
if ($lookWhite) {
|
3736 |
-
$left = preg_match('/\s/', $this->buffer[$s - 1]) ? " " : "";
|
3737 |
-
$right = preg_match('/\s/', $this->buffer[$this->count]) ? " ": "";
|
3738 |
-
} else {
|
3739 |
-
$left = $right = false;
|
3740 |
-
}
|
3741 |
-
|
3742 |
-
$out = array("interpolate", $value, $left, $right);
|
3743 |
-
$this->eatWhiteDefault = $oldWhite;
|
3744 |
-
if ($this->eatWhiteDefault) $this->whitespace();
|
3745 |
-
return true;
|
3746 |
-
}
|
3747 |
-
|
3748 |
-
$this->seek($s);
|
3749 |
-
$this->eatWhiteDefault = $oldWhite;
|
3750 |
-
return false;
|
3751 |
-
}
|
3752 |
-
|
3753 |
-
// low level parsers
|
3754 |
-
|
3755 |
-
// returns an array of parts or a string
|
3756 |
-
protected function propertyName(&$out) {
|
3757 |
-
$s = $this->seek();
|
3758 |
-
$parts = array();
|
3759 |
-
|
3760 |
-
$oldWhite = $this->eatWhiteDefault;
|
3761 |
-
$this->eatWhiteDefault = false;
|
3762 |
-
|
3763 |
-
while (true) {
|
3764 |
-
if ($this->interpolation($inter)) {
|
3765 |
-
$parts[] = $inter;
|
3766 |
-
} elseif ($this->keyword($text)) {
|
3767 |
-
$parts[] = $text;
|
3768 |
-
} elseif (count($parts) == 0 && $this->match('[:.#]', $m, false)) {
|
3769 |
-
// css hacks
|
3770 |
-
$parts[] = $m[0];
|
3771 |
-
} else {
|
3772 |
-
break;
|
3773 |
-
}
|
3774 |
-
}
|
3775 |
-
|
3776 |
-
$this->eatWhiteDefault = $oldWhite;
|
3777 |
-
if (count($parts) == 0) return false;
|
3778 |
-
|
3779 |
-
// match comment hack
|
3780 |
-
if (preg_match(self::$whitePattern,
|
3781 |
-
$this->buffer, $m, null, $this->count))
|
3782 |
-
{
|
3783 |
-
if (!empty($m[0])) {
|
3784 |
-
$parts[] = $m[0];
|
3785 |
-
$this->count += strlen($m[0]);
|
3786 |
-
}
|
3787 |
-
}
|
3788 |
-
|
3789 |
-
$this->whitespace(); // get any extra whitespace
|
3790 |
-
|
3791 |
-
$out = array("string", "", $parts);
|
3792 |
-
return true;
|
3793 |
-
}
|
3794 |
-
|
3795 |
-
// comma separated list of selectors
|
3796 |
-
protected function selectors(&$out) {
|
3797 |
-
$s = $this->seek();
|
3798 |
-
$selectors = array();
|
3799 |
-
while ($this->selector($sel)) {
|
3800 |
-
$selectors[] = $sel;
|
3801 |
-
if (!$this->literal(",")) break;
|
3802 |
-
while ($this->literal(",")); // ignore extra
|
3803 |
-
}
|
3804 |
-
|
3805 |
-
if (count($selectors) == 0) {
|
3806 |
-
$this->seek($s);
|
3807 |
-
return false;
|
3808 |
-
}
|
3809 |
-
|
3810 |
-
$out = $selectors;
|
3811 |
-
return true;
|
3812 |
-
}
|
3813 |
-
|
3814 |
-
// whitespace separated list of selectorSingle
|
3815 |
-
protected function selector(&$out) {
|
3816 |
-
$selector = array();
|
3817 |
-
|
3818 |
-
while (true) {
|
3819 |
-
if ($this->match('[>+~]+', $m)) {
|
3820 |
-
$selector[] = array($m[0]);
|
3821 |
-
} elseif ($this->selectorSingle($part)) {
|
3822 |
-
$selector[] = $part;
|
3823 |
-
$this->whitespace();
|
3824 |
-
} elseif ($this->match('\/[^\/]+\/', $m)) {
|
3825 |
-
$selector[] = array($m[0]);
|
3826 |
-
} else {
|
3827 |
-
break;
|
3828 |
-
}
|
3829 |
-
|
3830 |
-
}
|
3831 |
-
|
3832 |
-
if (count($selector) == 0) {
|
3833 |
-
return false;
|
3834 |
-
}
|
3835 |
-
|
3836 |
-
$out = $selector;
|
3837 |
-
return true;
|
3838 |
-
}
|
3839 |
-
|
3840 |
-
// the parts that make up
|
3841 |
-
// div[yes=no]#something.hello.world:nth-child(-2n+1)%placeholder
|
3842 |
-
protected function selectorSingle(&$out) {
|
3843 |
-
$oldWhite = $this->eatWhiteDefault;
|
3844 |
-
$this->eatWhiteDefault = false;
|
3845 |
-
|
3846 |
-
$parts = array();
|
3847 |
-
|
3848 |
-
if ($this->literal("*", false)) {
|
3849 |
-
$parts[] = "*";
|
3850 |
-
}
|
3851 |
-
|
3852 |
-
while (true) {
|
3853 |
-
// see if we can stop early
|
3854 |
-
if ($this->match("\s*[{,]", $m)) {
|
3855 |
-
$this->count--;
|
3856 |
-
break;
|
3857 |
-
}
|
3858 |
-
|
3859 |
-
$s = $this->seek();
|
3860 |
-
// self
|
3861 |
-
if ($this->literal("&", false)) {
|
3862 |
-
$parts[] = scssc_free::$selfSelector;
|
3863 |
-
continue;
|
3864 |
-
}
|
3865 |
-
|
3866 |
-
if ($this->literal(".", false)) {
|
3867 |
-
$parts[] = ".";
|
3868 |
-
continue;
|
3869 |
-
}
|
3870 |
-
|
3871 |
-
if ($this->literal("|", false)) {
|
3872 |
-
$parts[] = "|";
|
3873 |
-
continue;
|
3874 |
-
}
|
3875 |
-
|
3876 |
-
// for keyframes
|
3877 |
-
if ($this->unit($unit)) {
|
3878 |
-
$parts[] = $unit;
|
3879 |
-
continue;
|
3880 |
-
}
|
3881 |
-
|
3882 |
-
if ($this->keyword($name)) {
|
3883 |
-
$parts[] = $name;
|
3884 |
-
continue;
|
3885 |
-
}
|
3886 |
-
|
3887 |
-
if ($this->interpolation($inter)) {
|
3888 |
-
$parts[] = $inter;
|
3889 |
-
continue;
|
3890 |
-
}
|
3891 |
-
|
3892 |
-
if ($this->literal('%', false) && $this->placeholder($placeholder)) {
|
3893 |
-
$parts[] = '%';
|
3894 |
-
$parts[] = $placeholder;
|
3895 |
-
continue;
|
3896 |
-
}
|
3897 |
-
|
3898 |
-
if ($this->literal("#", false)) {
|
3899 |
-
$parts[] = "#";
|
3900 |
-
continue;
|
3901 |
-
}
|
3902 |
-
|
3903 |
-
// a pseudo selector
|
3904 |
-
if ($this->match("::?", $m) && $this->mixedKeyword($nameParts)) {
|
3905 |
-
$parts[] = $m[0];
|
3906 |
-
foreach ($nameParts as $sub) {
|
3907 |
-
$parts[] = $sub;
|
3908 |
-
}
|
3909 |
-
|
3910 |
-
$ss = $this->seek();
|
3911 |
-
if ($this->literal("(") &&
|
3912 |
-
($this->openString(")", $str, "(") || true ) &&
|
3913 |
-
$this->literal(")"))
|
3914 |
-
{
|
3915 |
-
$parts[] = "(";
|
3916 |
-
if (!empty($str)) $parts[] = $str;
|
3917 |
-
$parts[] = ")";
|
3918 |
-
} else {
|
3919 |
-
$this->seek($ss);
|
3920 |
-
}
|
3921 |
-
|
3922 |
-
continue;
|
3923 |
-
} else {
|
3924 |
-
$this->seek($s);
|
3925 |
-
}
|
3926 |
-
|
3927 |
-
// attribute selector
|
3928 |
-
// TODO: replace with open string?
|
3929 |
-
if ($this->literal("[", false)) {
|
3930 |
-
$attrParts = array("[");
|
3931 |
-
// keyword, string, operator
|
3932 |
-
while (true) {
|
3933 |
-
if ($this->literal("]", false)) {
|
3934 |
-
$this->count--;
|
3935 |
-
break; // get out early
|
3936 |
-
}
|
3937 |
-
|
3938 |
-
if ($this->match('\s+', $m)) {
|
3939 |
-
$attrParts[] = " ";
|
3940 |
-
continue;
|
3941 |
-
}
|
3942 |
-
if ($this->text($str)) {
|
3943 |
-
$attrParts[] = $str;
|
3944 |
-
continue;
|
3945 |
-
}
|
3946 |
-
|
3947 |
-
if ($this->keyword($word)) {
|
3948 |
-
$attrParts[] = $word;
|
3949 |
-
continue;
|
3950 |
-
}
|
3951 |
-
|
3952 |
-
if ($this->interpolation($inter, false)) {
|
3953 |
-
$attrParts[] = $inter;
|
3954 |
-
continue;
|
3955 |
-
}
|
3956 |
-
|
3957 |
-
// operator, handles attr namespace too
|
3958 |
-
if ($this->match('[|-~\$\*\^=]+', $m)) {
|
3959 |
-
$attrParts[] = $m[0];
|
3960 |
-
continue;
|
3961 |
-
}
|
3962 |
-
|
3963 |
-
break;
|
3964 |
-
}
|
3965 |
-
|
3966 |
-
if ($this->literal("]", false)) {
|
3967 |
-
$attrParts[] = "]";
|
3968 |
-
foreach ($attrParts as $part) {
|
3969 |
-
$parts[] = $part;
|
3970 |
-
}
|
3971 |
-
continue;
|
3972 |
-
}
|
3973 |
-
$this->seek($s);
|
3974 |
-
// should just break here?
|
3975 |
-
}
|
3976 |
-
|
3977 |
-
break;
|
3978 |
-
}
|
3979 |
-
|
3980 |
-
$this->eatWhiteDefault = $oldWhite;
|
3981 |
-
|
3982 |
-
if (count($parts) == 0) return false;
|
3983 |
-
|
3984 |
-
$out = $parts;
|
3985 |
-
return true;
|
3986 |
-
}
|
3987 |
-
|
3988 |
-
protected function variable(&$out) {
|
3989 |
-
$s = $this->seek();
|
3990 |
-
if ($this->literal("$", false) && $this->keyword($name)) {
|
3991 |
-
$out = array("var", $name);
|
3992 |
-
return true;
|
3993 |
-
}
|
3994 |
-
$this->seek($s);
|
3995 |
-
return false;
|
3996 |
-
}
|
3997 |
-
|
3998 |
-
protected function keyword(&$word, $eatWhitespace = null) {
|
3999 |
-
if ($this->match('([\w_\-\*!"\'\\\\][\w\-_"\'\\\\]*)',
|
4000 |
-
$m, $eatWhitespace))
|
4001 |
-
{
|
4002 |
-
$word = $m[1];
|
4003 |
-
return true;
|
4004 |
-
}
|
4005 |
-
return false;
|
4006 |
-
}
|
4007 |
-
|
4008 |
-
protected function placeholder(&$placeholder) {
|
4009 |
-
if ($this->match('([\w\-_]+)', $m)) {
|
4010 |
-
$placeholder = $m[1];
|
4011 |
-
return true;
|
4012 |
-
}
|
4013 |
-
return false;
|
4014 |
-
}
|
4015 |
-
|
4016 |
-
// consume an end of statement delimiter
|
4017 |
-
protected function end() {
|
4018 |
-
if ($this->literal(';')) {
|
4019 |
-
return true;
|
4020 |
-
} elseif ($this->count == strlen($this->buffer) || $this->buffer[$this->count] == '}') {
|
4021 |
-
// if there is end of file or a closing block next then we don't need a ;
|
4022 |
-
return true;
|
4023 |
-
}
|
4024 |
-
return false;
|
4025 |
-
}
|
4026 |
-
|
4027 |
-
// advance counter to next occurrence of $what
|
4028 |
-
// $until - don't include $what in advance
|
4029 |
-
// $allowNewline, if string, will be used as valid char set
|
4030 |
-
protected function to($what, &$out, $until = false, $allowNewline = false) {
|
4031 |
-
if (is_string($allowNewline)) {
|
4032 |
-
$validChars = $allowNewline;
|
4033 |
-
} else {
|
4034 |
-
$validChars = $allowNewline ? "." : "[^\n]";
|
4035 |
-
}
|
4036 |
-
if (!$this->match('('.$validChars.'*?)'.$this->preg_quote($what), $m, !$until)) return false;
|
4037 |
-
if ($until) $this->count -= strlen($what); // give back $what
|
4038 |
-
$out = $m[1];
|
4039 |
-
return true;
|
4040 |
-
}
|
4041 |
-
|
4042 |
-
public function throwParseError($msg = "parse error", $count = null) {
|
4043 |
-
$count = !isset($count) ? $this->count : $count;
|
4044 |
-
|
4045 |
-
$line = $this->getLineNo($count);
|
4046 |
-
|
4047 |
-
if (!empty($this->sourceName)) {
|
4048 |
-
$loc = "$this->sourceName on line $line";
|
4049 |
-
} else {
|
4050 |
-
$loc = "line: $line";
|
4051 |
-
}
|
4052 |
-
|
4053 |
-
if ($this->peek("(.*?)(\n|$)", $m, $count)) {
|
4054 |
-
throw new Exception("$msg: failed at `$m[1]` $loc");
|
4055 |
-
} else {
|
4056 |
-
throw new Exception("$msg: $loc");
|
4057 |
-
}
|
4058 |
-
}
|
4059 |
-
|
4060 |
-
public function getLineNo($pos) {
|
4061 |
-
return 1 + substr_count(substr($this->buffer, 0, $pos), "\n");
|
4062 |
-
}
|
4063 |
-
|
4064 |
-
/**
|
4065 |
-
* Match string looking for either ending delim, escape, or string interpolation
|
4066 |
-
*
|
4067 |
-
* {@internal This is a workaround for preg_match's 250K string match limit. }}
|
4068 |
-
*
|
4069 |
-
* @param array $m Matches (passed by reference)
|
4070 |
-
* @param string $delim Delimeter
|
4071 |
-
*
|
4072 |
-
* @return boolean True if match; false otherwise
|
4073 |
-
*/
|
4074 |
-
protected function matchString(&$m, $delim) {
|
4075 |
-
$token = null;
|
4076 |
-
|
4077 |
-
$end = strpos($this->buffer, "\n", $this->count);
|
4078 |
-
if ($end === false || $this->buffer[$end - 1] == '\\' || $this->buffer[$end - 2] == '\\' && $this->buffer[$end - 1] == "\r") {
|
4079 |
-
$end = strlen($this->buffer);
|
4080 |
-
}
|
4081 |
-
|
4082 |
-
// look for either ending delim, escape, or string interpolation
|
4083 |
-
foreach (array('#{', '\\', $delim) as $lookahead) {
|
4084 |
-
$pos = strpos($this->buffer, $lookahead, $this->count);
|
4085 |
-
if ($pos !== false && $pos < $end) {
|
4086 |
-
$end = $pos;
|
4087 |
-
$token = $lookahead;
|
4088 |
-
}
|
4089 |
-
}
|
4090 |
-
|
4091 |
-
if (!isset($token)) {
|
4092 |
-
return false;
|
4093 |
-
}
|
4094 |
-
|
4095 |
-
$match = substr($this->buffer, $this->count, $end - $this->count);
|
4096 |
-
$m = array(
|
4097 |
-
$match . $token,
|
4098 |
-
$match,
|
4099 |
-
$token
|
4100 |
-
);
|
4101 |
-
$this->count = $end + strlen($token);
|
4102 |
-
|
4103 |
-
return true;
|
4104 |
-
}
|
4105 |
-
|
4106 |
-
// try to match something on head of buffer
|
4107 |
-
protected function match($regex, &$out, $eatWhitespace = null) {
|
4108 |
-
if (!isset($eatWhitespace)) $eatWhitespace = $this->eatWhiteDefault;
|
4109 |
-
|
4110 |
-
$r = '/'.$regex.'/Ais';
|
4111 |
-
if (preg_match($r, $this->buffer, $out, null, $this->count)) {
|
4112 |
-
$this->count += strlen($out[0]);
|
4113 |
-
if ($eatWhitespace) $this->whitespace();
|
4114 |
-
return true;
|
4115 |
-
}
|
4116 |
-
return false;
|
4117 |
-
}
|
4118 |
-
|
4119 |
-
// match some whitespace
|
4120 |
-
protected function whitespace() {
|
4121 |
-
$gotWhite = false;
|
4122 |
-
while (preg_match(self::$whitePattern, $this->buffer, $m, null, $this->count)) {
|
4123 |
-
if ($this->insertComments) {
|
4124 |
-
if (isset($m[1]) && empty($this->commentsSeen[$this->count])) {
|
4125 |
-
$this->append(array("comment", $m[1]));
|
4126 |
-
$this->commentsSeen[$this->count] = true;
|
4127 |
-
}
|
4128 |
-
}
|
4129 |
-
$this->count += strlen($m[0]);
|
4130 |
-
$gotWhite = true;
|
4131 |
-
}
|
4132 |
-
return $gotWhite;
|
4133 |
-
}
|
4134 |
-
|
4135 |
-
protected function peek($regex, &$out, $from=null) {
|
4136 |
-
if (!isset($from)) $from = $this->count;
|
4137 |
-
|
4138 |
-
$r = '/'.$regex.'/Ais';
|
4139 |
-
$result = preg_match($r, $this->buffer, $out, null, $from);
|
4140 |
-
|
4141 |
-
return $result;
|
4142 |
-
}
|
4143 |
-
|
4144 |
-
protected function seek($where = null) {
|
4145 |
-
if ($where === null) return $this->count;
|
4146 |
-
else $this->count = $where;
|
4147 |
-
return true;
|
4148 |
-
}
|
4149 |
-
|
4150 |
-
static function preg_quote($what) {
|
4151 |
-
return preg_quote($what, '/');
|
4152 |
-
}
|
4153 |
-
|
4154 |
-
protected function show() {
|
4155 |
-
if ($this->peek("(.*?)(\n|$)", $m, $this->count)) {
|
4156 |
-
return $m[1];
|
4157 |
-
}
|
4158 |
-
return "";
|
4159 |
-
}
|
4160 |
-
|
4161 |
-
// turn list of length 1 into value type
|
4162 |
-
protected function flattenList($value) {
|
4163 |
-
if ($value[0] == "list" && count($value[2]) == 1) {
|
4164 |
-
return $this->flattenList($value[2][0]);
|
4165 |
-
}
|
4166 |
-
return $value;
|
4167 |
-
}
|
4168 |
-
}
|
4169 |
-
|
4170 |
-
/**
|
4171 |
-
* SCSS base formatter
|
4172 |
-
*
|
4173 |
-
* @author Leaf Corcoran <leafot@gmail.com>
|
4174 |
-
*/
|
4175 |
-
class scss_formatter_free {
|
4176 |
-
public $indentChar = " ";
|
4177 |
-
|
4178 |
-
public $break = "\n";
|
4179 |
-
public $open = " {";
|
4180 |
-
public $close = "}";
|
4181 |
-
public $tagSeparator = ", ";
|
4182 |
-
public $assignSeparator = ": ";
|
4183 |
-
|
4184 |
-
public function __construct() {
|
4185 |
-
$this->indentLevel = 0;
|
4186 |
-
}
|
4187 |
-
|
4188 |
-
public function indentStr($n = 0) {
|
4189 |
-
return str_repeat($this->indentChar, max($this->indentLevel + $n, 0));
|
4190 |
-
}
|
4191 |
-
|
4192 |
-
public function property($name, $value) {
|
4193 |
-
return $name . $this->assignSeparator . $value . ";";
|
4194 |
-
}
|
4195 |
-
|
4196 |
-
protected function block($block) {
|
4197 |
-
if (empty($block->lines) && empty($block->children)) return;
|
4198 |
-
|
4199 |
-
$inner = $pre = $this->indentStr();
|
4200 |
-
|
4201 |
-
if (!empty($block->selectors)) {
|
4202 |
-
echo $pre .
|
4203 |
-
implode($this->tagSeparator, $block->selectors) .
|
4204 |
-
$this->open . $this->break;
|
4205 |
-
$this->indentLevel++;
|
4206 |
-
$inner = $this->indentStr();
|
4207 |
-
}
|
4208 |
-
|
4209 |
-
if (!empty($block->lines)) {
|
4210 |
-
$glue = $this->break.$inner;
|
4211 |
-
echo $inner . implode($glue, $block->lines);
|
4212 |
-
if (!empty($block->children)) {
|
4213 |
-
echo $this->break;
|
4214 |
-
}
|
4215 |
-
}
|
4216 |
-
|
4217 |
-
foreach ($block->children as $child) {
|
4218 |
-
$this->block($child);
|
4219 |
-
}
|
4220 |
-
|
4221 |
-
if (!empty($block->selectors)) {
|
4222 |
-
$this->indentLevel--;
|
4223 |
-
if (empty($block->children)) echo $this->break;
|
4224 |
-
echo $pre . $this->close . $this->break;
|
4225 |
-
}
|
4226 |
-
}
|
4227 |
-
|
4228 |
-
public function format($block) {
|
4229 |
-
ob_start();
|
4230 |
-
$this->block($block);
|
4231 |
-
$out = ob_get_clean();
|
4232 |
-
|
4233 |
-
return $out;
|
4234 |
-
}
|
4235 |
-
}
|
4236 |
-
|
4237 |
-
/**
|
4238 |
-
* SCSS nested formatter
|
4239 |
-
*
|
4240 |
-
* @author Leaf Corcoran <leafot@gmail.com>
|
4241 |
-
*/
|
4242 |
-
class scss_formatter_nested_free extends scss_formatter_free {
|
4243 |
-
public $close = " }";
|
4244 |
-
|
4245 |
-
// adjust the depths of all children, depth first
|
4246 |
-
public function adjustAllChildren($block) {
|
4247 |
-
// flatten empty nested blocks
|
4248 |
-
$children = array();
|
4249 |
-
foreach ($block->children as $i => $child) {
|
4250 |
-
if (empty($child->lines) && empty($child->children)) {
|
4251 |
-
if (isset($block->children[$i + 1])) {
|
4252 |
-
$block->children[$i + 1]->depth = $child->depth;
|
4253 |
-
}
|
4254 |
-
continue;
|
4255 |
-
}
|
4256 |
-
$children[] = $child;
|
4257 |
-
}
|
4258 |
-
|
4259 |
-
$count = count($children);
|
4260 |
-
for ($i = 0; $i < $count; $i++) {
|
4261 |
-
$depth = $children[$i]->depth;
|
4262 |
-
$j = $i + 1;
|
4263 |
-
if (isset($children[$j]) && $depth < $children[$j]->depth) {
|
4264 |
-
$childDepth = $children[$j]->depth;
|
4265 |
-
for (; $j < $count; $j++) {
|
4266 |
-
if ($depth < $children[$j]->depth && $childDepth >= $children[$j]->depth) {
|
4267 |
-
$children[$j]->depth = $depth + 1;
|
4268 |
-
}
|
4269 |
-
}
|
4270 |
-
}
|
4271 |
-
}
|
4272 |
-
|
4273 |
-
$block->children = $children;
|
4274 |
-
|
4275 |
-
// make relative to parent
|
4276 |
-
foreach ($block->children as $child) {
|
4277 |
-
$this->adjustAllChildren($child);
|
4278 |
-
$child->depth = $child->depth - $block->depth;
|
4279 |
-
}
|
4280 |
-
}
|
4281 |
-
|
4282 |
-
protected function block($block) {
|
4283 |
-
if ($block->type == "root") {
|
4284 |
-
$this->adjustAllChildren($block);
|
4285 |
-
}
|
4286 |
-
|
4287 |
-
$inner = $pre = $this->indentStr($block->depth - 1);
|
4288 |
-
if (!empty($block->selectors)) {
|
4289 |
-
echo $pre .
|
4290 |
-
implode($this->tagSeparator, $block->selectors) .
|
4291 |
-
$this->open . $this->break;
|
4292 |
-
$this->indentLevel++;
|
4293 |
-
$inner = $this->indentStr($block->depth - 1);
|
4294 |
-
}
|
4295 |
-
|
4296 |
-
if (!empty($block->lines)) {
|
4297 |
-
$glue = $this->break.$inner;
|
4298 |
-
echo $inner . implode($glue, $block->lines);
|
4299 |
-
if (!empty($block->children)) echo $this->break;
|
4300 |
-
}
|
4301 |
-
|
4302 |
-
foreach ($block->children as $i => $child) {
|
4303 |
-
// echo "*** block: ".$block->depth." child: ".$child->depth."\n";
|
4304 |
-
$this->block($child);
|
4305 |
-
if ($i < count($block->children) - 1) {
|
4306 |
-
echo $this->break;
|
4307 |
-
|
4308 |
-
if (isset($block->children[$i + 1])) {
|
4309 |
-
$next = $block->children[$i + 1];
|
4310 |
-
if ($next->depth == max($block->depth, 1) && $child->depth >= $next->depth) {
|
4311 |
-
echo $this->break;
|
4312 |
-
}
|
4313 |
-
}
|
4314 |
-
}
|
4315 |
-
}
|
4316 |
-
|
4317 |
-
if (!empty($block->selectors)) {
|
4318 |
-
$this->indentLevel--;
|
4319 |
-
echo $this->close;
|
4320 |
-
}
|
4321 |
-
|
4322 |
-
if ($block->type == "root") {
|
4323 |
-
echo $this->break;
|
4324 |
-
}
|
4325 |
-
}
|
4326 |
-
}
|
4327 |
-
|
4328 |
-
/**
|
4329 |
-
* SCSS compressed formatter
|
4330 |
-
*
|
4331 |
-
* @author Leaf Corcoran <leafot@gmail.com>
|
4332 |
-
*/
|
4333 |
-
class scss_formatter_compressed_free extends scss_formatter_free {
|
4334 |
-
public $open = "{";
|
4335 |
-
public $tagSeparator = ",";
|
4336 |
-
public $assignSeparator = ":";
|
4337 |
-
public $break = "";
|
4338 |
-
|
4339 |
-
public function indentStr($n = 0) {
|
4340 |
-
return "";
|
4341 |
-
}
|
4342 |
-
}
|
4343 |
-
|
4344 |
-
/**
|
4345 |
-
* SCSS server
|
4346 |
-
*
|
4347 |
-
* @author Leaf Corcoran <leafot@gmail.com>
|
4348 |
-
*/
|
4349 |
-
class scss_server_free {
|
4350 |
-
/**
|
4351 |
-
* Join path components
|
4352 |
-
*
|
4353 |
-
* @param string $left Path component, left of the directory separator
|
4354 |
-
* @param string $right Path component, right of the directory separator
|
4355 |
-
*
|
4356 |
-
* @return string
|
4357 |
-
*/
|
4358 |
-
protected function join($left, $right) {
|
4359 |
-
return rtrim($left, '/\\') . DIRECTORY_SEPARATOR . ltrim($right, '/\\');
|
4360 |
-
}
|
4361 |
-
|
4362 |
-
/**
|
4363 |
-
* Get name of requested .scss file
|
4364 |
-
*
|
4365 |
-
* @return string|null
|
4366 |
-
*/
|
4367 |
-
protected function inputName() {
|
4368 |
-
switch (true) {
|
4369 |
-
case isset($_GET['p']):
|
4370 |
-
return $_GET['p'];
|
4371 |
-
case isset($_SERVER['PATH_INFO']):
|
4372 |
-
return $_SERVER['PATH_INFO'];
|
4373 |
-
case isset($_SERVER['DOCUMENT_URI']):
|
4374 |
-
return substr($_SERVER['DOCUMENT_URI'], strlen($_SERVER['SCRIPT_NAME']));
|
4375 |
-
}
|
4376 |
-
}
|
4377 |
-
|
4378 |
-
/**
|
4379 |
-
* Get path to requested .scss file
|
4380 |
-
*
|
4381 |
-
* @return string
|
4382 |
-
*/
|
4383 |
-
protected function findInput() {
|
4384 |
-
if (($input = $this->inputName())
|
4385 |
-
&& strpos($input, '..') === false
|
4386 |
-
&& substr($input, -5) === '.scss'
|
4387 |
-
) {
|
4388 |
-
$name = $this->join($this->dir, $input);
|
4389 |
-
|
4390 |
-
if (is_file($name) && is_readable($name)) {
|
4391 |
-
return $name;
|
4392 |
-
}
|
4393 |
-
}
|
4394 |
-
|
4395 |
-
return false;
|
4396 |
-
}
|
4397 |
-
|
4398 |
-
/**
|
4399 |
-
* Get path to cached .css file
|
4400 |
-
*
|
4401 |
-
* @return string
|
4402 |
-
*/
|
4403 |
-
protected function cacheName($fname) {
|
4404 |
-
return $this->join($this->cacheDir, md5($fname) . '.css');
|
4405 |
-
}
|
4406 |
-
|
4407 |
-
/**
|
4408 |
-
* Get path to cached imports
|
4409 |
-
*
|
4410 |
-
* @return string
|
4411 |
-
*/
|
4412 |
-
protected function importsCacheName($out) {
|
4413 |
-
return $out . '.imports';
|
4414 |
-
}
|
4415 |
-
|
4416 |
-
/**
|
4417 |
-
* Determine whether .scss file needs to be re-compiled.
|
4418 |
-
*
|
4419 |
-
* @param string $in Input path
|
4420 |
-
* @param string $out Output path
|
4421 |
-
*
|
4422 |
-
* @return boolean True if compile required.
|
4423 |
-
*/
|
4424 |
-
protected function needsCompile($in, $out) {
|
4425 |
-
if (!is_file($out)) return true;
|
4426 |
-
|
4427 |
-
$mtime = filemtime($out);
|
4428 |
-
if (filemtime($in) > $mtime) return true;
|
4429 |
-
|
4430 |
-
// look for modified imports
|
4431 |
-
$icache = $this->importsCacheName($out);
|
4432 |
-
if (is_readable($icache)) {
|
4433 |
-
$imports = unserialize(file_get_contents($icache));
|
4434 |
-
foreach ($imports as $import) {
|
4435 |
-
if (filemtime($import) > $mtime) return true;
|
4436 |
-
}
|
4437 |
-
}
|
4438 |
-
return false;
|
4439 |
-
}
|
4440 |
-
|
4441 |
-
/**
|
4442 |
-
* Get If-Modified-Since header from client request
|
4443 |
-
*
|
4444 |
-
* @return string
|
4445 |
-
*/
|
4446 |
-
protected function getModifiedSinceHeader()
|
4447 |
-
{
|
4448 |
-
$modifiedSince = '';
|
4449 |
-
|
4450 |
-
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
|
4451 |
-
$modifiedSince = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
|
4452 |
-
|
4453 |
-
if (false !== ($semicolonPos = strpos($modifiedSince, ';'))) {
|
4454 |
-
$modifiedSince = substr($modifiedSince, 0, $semicolonPos);
|
4455 |
-
}
|
4456 |
-
}
|
4457 |
-
|
4458 |
-
return $modifiedSince;
|
4459 |
-
}
|
4460 |
-
|
4461 |
-
/**
|
4462 |
-
* Compile .scss file
|
4463 |
-
*
|
4464 |
-
* @param string $in Input path (.scss)
|
4465 |
-
* @param string $out Output path (.css)
|
4466 |
-
*
|
4467 |
-
* @return string
|
4468 |
-
*/
|
4469 |
-
protected function compile($in, $out) {
|
4470 |
-
$start = microtime(true);
|
4471 |
-
$css = $this->scss->compile(file_get_contents($in), $in);
|
4472 |
-
$elapsed = round((microtime(true) - $start), 4);
|
4473 |
-
|
4474 |
-
$v = scssc_free::$VERSION;
|
4475 |
-
$t = @date('r');
|
4476 |
-
$css = "/* compiled by scssphp $v on $t (${elapsed}s) */\n\n" . $css;
|
4477 |
-
|
4478 |
-
file_put_contents($out, $css);
|
4479 |
-
file_put_contents($this->importsCacheName($out),
|
4480 |
-
serialize($this->scss->getParsedFiles()));
|
4481 |
-
return $css;
|
4482 |
-
}
|
4483 |
-
|
4484 |
-
/**
|
4485 |
-
* Compile requested scss and serve css. Outputs HTTP response.
|
4486 |
-
*
|
4487 |
-
* @param string $salt Prefix a string to the filename for creating the cache name hash
|
4488 |
-
*/
|
4489 |
-
public function serve($salt = '') {
|
4490 |
-
$protocol = isset($_SERVER['SERVER_PROTOCOL'])
|
4491 |
-
? $_SERVER['SERVER_PROTOCOL']
|
4492 |
-
: 'HTTP/1.0';
|
4493 |
-
|
4494 |
-
if ($input = $this->findInput()) {
|
4495 |
-
$output = $this->cacheName($salt . $input);
|
4496 |
-
|
4497 |
-
if ($this->needsCompile($input, $output)) {
|
4498 |
-
try {
|
4499 |
-
$css = $this->compile($input, $output);
|
4500 |
-
|
4501 |
-
$lastModified = gmdate('D, d M Y H:i:s', filemtime($output)) . ' GMT';
|
4502 |
-
|
4503 |
-
header('Last-Modified: ' . $lastModified);
|
4504 |
-
header('Content-type: text/css');
|
4505 |
-
|
4506 |
-
echo $css;
|
4507 |
-
|
4508 |
-
return;
|
4509 |
-
} catch (Exception $e) {
|
4510 |
-
header($protocol . ' 500 Internal Server Error');
|
4511 |
-
header('Content-type: text/plain');
|
4512 |
-
|
4513 |
-
echo 'Parse error: ' . $e->getMessage() . "\n";
|
4514 |
-
}
|
4515 |
-
}
|
4516 |
-
|
4517 |
-
header('X-SCSS-Cache: true');
|
4518 |
-
header('Content-type: text/css');
|
4519 |
-
|
4520 |
-
$modifiedSince = $this->getModifiedSinceHeader();
|
4521 |
-
$mtime = filemtime($output);
|
4522 |
-
|
4523 |
-
if (@strtotime($modifiedSince) === $mtime) {
|
4524 |
-
header($protocol . ' 304 Not Modified');
|
4525 |
-
|
4526 |
-
return;
|
4527 |
-
}
|
4528 |
-
|
4529 |
-
$lastModified = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
|
4530 |
-
header('Last-Modified: ' . $lastModified);
|
4531 |
-
|
4532 |
-
echo file_get_contents($output);
|
4533 |
-
|
4534 |
-
return;
|
4535 |
-
}
|
4536 |
-
|
4537 |
-
header($protocol . ' 404 Not Found');
|
4538 |
-
header('Content-type: text/plain');
|
4539 |
-
|
4540 |
-
$v = scssc_free::$VERSION;
|
4541 |
-
echo "/* INPUT NOT FOUND scss $v */\n";
|
4542 |
-
}
|
4543 |
-
|
4544 |
-
/**
|
4545 |
-
* Constructor
|
4546 |
-
*
|
4547 |
-
* @param string $dir Root directory to .scss files
|
4548 |
-
* @param string $cacheDir Cache directory
|
4549 |
-
* @param \scssc|null $scss SCSS compiler instance
|
4550 |
-
*/
|
4551 |
-
public function __construct($dir, $cacheDir=null, $scss=null) {
|
4552 |
-
$this->dir = $dir;
|
4553 |
-
|
4554 |
-
if (!isset($cacheDir)) {
|
4555 |
-
$cacheDir = $this->join($dir, 'scss_cache');
|
4556 |
-
}
|
4557 |
-
|
4558 |
-
$this->cacheDir = $cacheDir;
|
4559 |
-
if (!is_dir($this->cacheDir)) mkdir($this->cacheDir, 0755, true);
|
4560 |
-
|
4561 |
-
if (!isset($scss)) {
|
4562 |
-
$scss = new scssc_free();
|
4563 |
-
$scss->setImportPaths($this->dir);
|
4564 |
-
}
|
4565 |
-
$this->scss = $scss;
|
4566 |
-
}
|
4567 |
-
|
4568 |
-
/**
|
4569 |
-
* Helper method to serve compiled scss
|
4570 |
-
*
|
4571 |
-
* @param string $path Root path
|
4572 |
-
*/
|
4573 |
-
static public function serveFrom($path) {
|
4574 |
-
$server = new self($path);
|
4575 |
-
$server->serve();
|
4576 |
-
}
|
4577 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Models/Option.php
DELETED
@@ -1,45 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Models;
|
4 |
-
use ResponsiveMenu\Filters\Filter;
|
5 |
-
|
6 |
-
class Option {
|
7 |
-
|
8 |
-
private $value;
|
9 |
-
private $name;
|
10 |
-
private $filter;
|
11 |
-
|
12 |
-
public function __construct($name, $value) {
|
13 |
-
$this->name = $name;
|
14 |
-
$this->value = $value;
|
15 |
-
}
|
16 |
-
|
17 |
-
public function setFilter(Filter $filter) {
|
18 |
-
$this->filter = $filter;
|
19 |
-
}
|
20 |
-
|
21 |
-
public function getName() {
|
22 |
-
return $this->name;
|
23 |
-
}
|
24 |
-
|
25 |
-
public function getValue() {
|
26 |
-
return $this->value;
|
27 |
-
}
|
28 |
-
|
29 |
-
public function setValue($value) {
|
30 |
-
$this->value = $value;
|
31 |
-
}
|
32 |
-
|
33 |
-
public function getFiltered() {
|
34 |
-
return $this->filter->filter($this->value);
|
35 |
-
}
|
36 |
-
|
37 |
-
public function getFilter() {
|
38 |
-
return $this->filter;
|
39 |
-
}
|
40 |
-
|
41 |
-
public function __toString() {
|
42 |
-
return (string) $this->value;
|
43 |
-
}
|
44 |
-
|
45 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Repositories/OptionRepository.php
DELETED
@@ -1,56 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Repositories;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
-
use ResponsiveMenu\Database\Database;
|
7 |
-
use ResponsiveMenu\Factories\OptionFactory;
|
8 |
-
|
9 |
-
class OptionRepository {
|
10 |
-
|
11 |
-
protected static $table = 'responsive_menu';
|
12 |
-
|
13 |
-
public function __construct(Database $db, OptionFactory $factory, array $defaults) {
|
14 |
-
$this->db = $db;
|
15 |
-
$this->factory = $factory;
|
16 |
-
$this->defaults = $defaults;
|
17 |
-
}
|
18 |
-
|
19 |
-
public function all() {
|
20 |
-
$options = $this->db->all(self::$table);
|
21 |
-
$collection = new OptionsCollection;
|
22 |
-
foreach($options as $option)
|
23 |
-
$collection->add($this->factory->build($option->name, $option->value));
|
24 |
-
return $collection;
|
25 |
-
}
|
26 |
-
|
27 |
-
public function update(Option $option) {
|
28 |
-
return $this->db->update(self::$table,
|
29 |
-
['value' => $option->getFiltered()],
|
30 |
-
['name' => $option->getName()]
|
31 |
-
);
|
32 |
-
}
|
33 |
-
|
34 |
-
public function create(Option $option) {
|
35 |
-
$arguments['name'] = $option->getName();
|
36 |
-
$arguments['value'] = $option->getFiltered();
|
37 |
-
$arguments['created_at'] = $this->db->mySqlTime();
|
38 |
-
return $this->db->insert(self::$table, $arguments);
|
39 |
-
}
|
40 |
-
|
41 |
-
public function remove($name) {
|
42 |
-
return $this->db->delete(self::$table, $name);
|
43 |
-
}
|
44 |
-
|
45 |
-
public function buildFromArray(array $array) {
|
46 |
-
$collection = new OptionsCollection;
|
47 |
-
foreach(array_merge($this->defaults, $array) as $name => $value):
|
48 |
-
$option = $this->factory->build($name, $value);
|
49 |
-
$option->setValue($option->getFiltered());
|
50 |
-
$collection->add($option);
|
51 |
-
endforeach;
|
52 |
-
|
53 |
-
return $collection;
|
54 |
-
}
|
55 |
-
|
56 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Routing/Container.php
DELETED
@@ -1,47 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Routing;
|
4 |
-
|
5 |
-
class Container implements \ArrayAccess
|
6 |
-
{
|
7 |
-
private $values = [];
|
8 |
-
private $raw = [];
|
9 |
-
private $keys = [];
|
10 |
-
|
11 |
-
public function offsetSet($id, $value) {
|
12 |
-
$this->values[$id] = $value;
|
13 |
-
$this->keys[$id] = true;
|
14 |
-
}
|
15 |
-
|
16 |
-
public function offsetGet($id) {
|
17 |
-
|
18 |
-
if(!isset($this->keys[$id])) {
|
19 |
-
throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id));
|
20 |
-
}
|
21 |
-
|
22 |
-
if(isset($this->raw[$id]) || !is_object($this->values[$id]) || !method_exists($this->values[$id], '__invoke')) {
|
23 |
-
return $this->values[$id];
|
24 |
-
}
|
25 |
-
|
26 |
-
$raw = $this->values[$id];
|
27 |
-
$val = $this->values[$id] = $raw($this);
|
28 |
-
$this->raw[$id] = $this->values[$id];
|
29 |
-
|
30 |
-
return $this->values[$id];
|
31 |
-
}
|
32 |
-
|
33 |
-
public function offsetExists($id) {
|
34 |
-
return isset($this->keys[$id]);
|
35 |
-
}
|
36 |
-
|
37 |
-
public function offsetUnset($id) {
|
38 |
-
if(isset($this->keys[$id])) {
|
39 |
-
unset($this->values[$id], $this->raw[$id], $this->keys[$id]);
|
40 |
-
}
|
41 |
-
}
|
42 |
-
|
43 |
-
public function keys() {
|
44 |
-
return array_keys($this->values);
|
45 |
-
}
|
46 |
-
|
47 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Services/OptionService.php
DELETED
@@ -1,57 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Services;
|
4 |
-
use ResponsiveMenu\Repositories\OptionRepository;
|
5 |
-
use ResponsiveMenu\Translation\Translator;
|
6 |
-
use ResponsiveMenu\Factories\OptionFactory;
|
7 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
8 |
-
use ResponsiveMenu\Filesystem\ScriptsBuilder;
|
9 |
-
|
10 |
-
class OptionService {
|
11 |
-
|
12 |
-
public function __construct(OptionRepository $repository, OptionFactory $factory, Translator $translator, ScriptsBuilder $builder) {
|
13 |
-
$this->repository = $repository;
|
14 |
-
$this->factory = $factory;
|
15 |
-
$this->translator = $translator;
|
16 |
-
$this->builder = $builder;
|
17 |
-
}
|
18 |
-
|
19 |
-
public function all() {
|
20 |
-
return $this->repository->all();
|
21 |
-
}
|
22 |
-
|
23 |
-
public function updateOptions(array $options) {
|
24 |
-
|
25 |
-
foreach($options as $key => $val)
|
26 |
-
$this->repository->update($this->factory->build($key, $val));
|
27 |
-
|
28 |
-
return $this->processAfterSavingOptions();
|
29 |
-
}
|
30 |
-
|
31 |
-
public function createOptions(array $options) {
|
32 |
-
|
33 |
-
foreach($options as $key => $val)
|
34 |
-
$this->repository->create($this->factory->build($key, $val));
|
35 |
-
|
36 |
-
return $this->processAfterSavingOptions();
|
37 |
-
}
|
38 |
-
|
39 |
-
private function processAfterSavingOptions() {
|
40 |
-
$options = $this->all();
|
41 |
-
$this->translator->saveTranslations($options);
|
42 |
-
if($options['external_files'] == 'on')
|
43 |
-
$this->builder->build($options);
|
44 |
-
return $options;
|
45 |
-
}
|
46 |
-
|
47 |
-
public function buildFromPostArray(array $post) {
|
48 |
-
return $this->repository->buildFromArray($post);
|
49 |
-
}
|
50 |
-
|
51 |
-
public function combineOptions($default_options, $new_options) {
|
52 |
-
return array_merge($default_options, array_filter($new_options, function($value) {
|
53 |
-
return ($value !== null && $value !== false && $value !== '');
|
54 |
-
}));
|
55 |
-
}
|
56 |
-
|
57 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Translation/Translator.php
DELETED
@@ -1,41 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Translation;
|
4 |
-
use ResponsiveMenu\Models\Option;
|
5 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
-
|
7 |
-
class Translator {
|
8 |
-
|
9 |
-
private $translatables = [
|
10 |
-
'menu_to_use',
|
11 |
-
'button_title',
|
12 |
-
'menu_title',
|
13 |
-
'menu_title_link',
|
14 |
-
'menu_additional_content'
|
15 |
-
];
|
16 |
-
|
17 |
-
public function translate(Option $option) {
|
18 |
-
// WPML Support
|
19 |
-
$translated = apply_filters('wpml_translate_single_string', $option->getValue(), 'Responsive Menu', $option->getName());
|
20 |
-
|
21 |
-
// Polylang Support
|
22 |
-
$translated = function_exists('pll__') ? pll__($translated) : $translated;
|
23 |
-
|
24 |
-
return $translated;
|
25 |
-
}
|
26 |
-
|
27 |
-
public function searchUrl() {
|
28 |
-
return function_exists('icl_get_home_url') ? icl_get_home_url() : get_home_url();
|
29 |
-
}
|
30 |
-
|
31 |
-
public function saveTranslations(OptionsCollection $options) {
|
32 |
-
foreach($this->translatables as $option_name)
|
33 |
-
if(isset($options[$option_name]))
|
34 |
-
do_action('wpml_register_single_string', 'Responsive Menu', $option_name, $options[$option_name]->getValue());
|
35 |
-
}
|
36 |
-
|
37 |
-
public function allowShortcode($text) {
|
38 |
-
return do_shortcode($text);
|
39 |
-
}
|
40 |
-
|
41 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/View/AdminView.php
DELETED
@@ -1,50 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\View;
|
4 |
-
|
5 |
-
class AdminView implements View {
|
6 |
-
|
7 |
-
public function __construct() {
|
8 |
-
if(is_admin() && isset($_GET['page']) && $_GET['page'] == 'responsive-menu'):
|
9 |
-
|
10 |
-
wp_enqueue_media();
|
11 |
-
|
12 |
-
wp_enqueue_style('wp-color-picker');
|
13 |
-
wp_enqueue_script('wp-color-picker');
|
14 |
-
|
15 |
-
wp_enqueue_script('responsive-menu-font-awesome', 'https://use.fontawesome.com/b6bedb3084.js', null, null);
|
16 |
-
|
17 |
-
wp_enqueue_script('postbox');
|
18 |
-
|
19 |
-
wp_enqueue_script('jquery-ui-core');
|
20 |
-
|
21 |
-
wp_register_style('responsive-menu-admin-css', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/css/admin/main.css', false, null);
|
22 |
-
wp_enqueue_style('responsive-menu-admin-css');
|
23 |
-
|
24 |
-
wp_register_script('responsive-menu-admin-js', plugin_dir_url(dirname(dirname(__FILE__))) . 'public/js/admin/main.js', 'jquery', null);
|
25 |
-
wp_enqueue_script('responsive-menu-admin-js');
|
26 |
-
|
27 |
-
endif;
|
28 |
-
}
|
29 |
-
|
30 |
-
public function render($location, $l = []) {
|
31 |
-
include dirname(dirname(dirname(__FILE__))) . '/views/admin/' . $location . '.phtml';
|
32 |
-
}
|
33 |
-
|
34 |
-
public function noCacheHeaders() {
|
35 |
-
header('Cache-Control: no-cache, no-store, must-revalidate');
|
36 |
-
header('Pragma: no-cache');
|
37 |
-
header('Expires: 0');
|
38 |
-
header('Content-Type: application/json; charset=utf-8');
|
39 |
-
header('Content-Disposition: attachment; filename=export.json');
|
40 |
-
}
|
41 |
-
|
42 |
-
public function stopProcessing() {
|
43 |
-
exit();
|
44 |
-
}
|
45 |
-
|
46 |
-
public function display($content) {
|
47 |
-
echo $content;
|
48 |
-
}
|
49 |
-
|
50 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/View/FrontView.php
DELETED
@@ -1,73 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\View;
|
4 |
-
|
5 |
-
use ResponsiveMenu\Factories\CssFactory;
|
6 |
-
use ResponsiveMenu\Factories\JsFactory;
|
7 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
8 |
-
use ResponsiveMenu\ViewModels\Menu;
|
9 |
-
use ResponsiveMenu\ViewModels\Button;
|
10 |
-
|
11 |
-
class FrontView implements View {
|
12 |
-
|
13 |
-
public function __construct(JsFactory $js, CssFactory $css) {
|
14 |
-
$this->js = $js;
|
15 |
-
$this->css = $css;
|
16 |
-
}
|
17 |
-
|
18 |
-
public function render($location, $l = []) {
|
19 |
-
add_action('wp_footer', function() use ($location, $l) {
|
20 |
-
include dirname(dirname(dirname(__FILE__))) . '/views/' . $location . '.phtml';
|
21 |
-
});
|
22 |
-
}
|
23 |
-
|
24 |
-
public function make($location, $l = []) {
|
25 |
-
ob_start();
|
26 |
-
include dirname(dirname(dirname(__FILE__))) . '/views/' . $location . '.phtml';
|
27 |
-
$output = ob_get_contents();
|
28 |
-
ob_end_clean();
|
29 |
-
return $output;
|
30 |
-
}
|
31 |
-
|
32 |
-
public function echoOrIncludeScripts(OptionsCollection $options) {
|
33 |
-
|
34 |
-
$css = $this->css->build($options);
|
35 |
-
$js = $this->js->build($options);
|
36 |
-
|
37 |
-
add_filter('body_class', function($classes) use($options) {
|
38 |
-
$classes[] = 'responsive-menu-' . $options['animation_type'] . '-' . $options['menu_appear_from'];
|
39 |
-
return $classes;
|
40 |
-
});
|
41 |
-
|
42 |
-
wp_enqueue_script('jquery');
|
43 |
-
|
44 |
-
if($options['external_files'] == 'on') :
|
45 |
-
$data_folder_dir = plugins_url(). '/responsive-menu-data';
|
46 |
-
$css_file = $data_folder_dir . '/css/responsive-menu-' . get_current_blog_id() . '.css';
|
47 |
-
$js_file = $data_folder_dir . '/js/responsive-menu-' . get_current_blog_id() . '.js';
|
48 |
-
wp_enqueue_style('responsive-menu', $css_file, null, false);
|
49 |
-
wp_enqueue_script('responsive-menu', $js_file, ['jquery'], false, $options['scripts_in_footer'] == 'on' ? true : false);
|
50 |
-
else :
|
51 |
-
add_action('wp_head', function() use ($css) {
|
52 |
-
echo '<style>' . $css . '</style>';
|
53 |
-
}, 100);
|
54 |
-
add_action($options['scripts_in_footer'] == 'on' ? 'wp_footer' : 'wp_head', function() use ($js) {
|
55 |
-
echo '<script>' . $js . '</script>';
|
56 |
-
}, 100);
|
57 |
-
endif;
|
58 |
-
}
|
59 |
-
|
60 |
-
public function addShortcode($options, Button $button, Menu $menu) {
|
61 |
-
add_shortcode('responsive_menu', function($atts) use($options, $button, $menu) {
|
62 |
-
|
63 |
-
if($atts)
|
64 |
-
array_walk($atts, function($a, $b) use ($options) { $options[$b]->setValue($a); });
|
65 |
-
|
66 |
-
$html = $this->make('button', ['options' => $options, 'button' => $button->getHtml($options)]);
|
67 |
-
|
68 |
-
return $html . $this->make('menu', ['options' => $options, 'menu' => $menu->getHtml($options)]);
|
69 |
-
|
70 |
-
});
|
71 |
-
}
|
72 |
-
|
73 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/View/View.php
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\View;
|
4 |
-
|
5 |
-
interface View
|
6 |
-
{
|
7 |
-
public function render($location, $l = []);
|
8 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/ViewModels/Button.php
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels;
|
4 |
-
use ResponsiveMenu\ViewModels\Components\Button\Button as ButtonComponent;
|
5 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
-
|
7 |
-
class Button {
|
8 |
-
|
9 |
-
public function __construct(ButtonComponent $component) {
|
10 |
-
$this->component = $component;
|
11 |
-
}
|
12 |
-
|
13 |
-
public function getHtml(OptionsCollection $options) {
|
14 |
-
return $this->component->render($options);
|
15 |
-
}
|
16 |
-
|
17 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/ViewModels/Components/Admin/Boxes.php
DELETED
@@ -1,113 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Admin;
|
4 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
-
use ResponsiveMenu\Form;
|
6 |
-
|
7 |
-
class Boxes {
|
8 |
-
|
9 |
-
private $config;
|
10 |
-
private $options;
|
11 |
-
private $current_page;
|
12 |
-
|
13 |
-
public function __construct(array $config, OptionsCollection $options, $current_page) {
|
14 |
-
$this->config = $config;
|
15 |
-
$this->options = $options;
|
16 |
-
$this->current_page = $current_page;
|
17 |
-
}
|
18 |
-
|
19 |
-
public function render() {
|
20 |
-
$output = '';
|
21 |
-
foreach($this->config as $tab_name => $sub_menus):
|
22 |
-
$display = $this->i($tab_name) == $this->current_page ? 'block' : 'none';
|
23 |
-
$output .= '<div class="tab_container" id="tab_container_' . $this->i($tab_name) . '" style="display: ' . $display . ';">';
|
24 |
-
foreach($sub_menus as $sub_menu_name => $options):
|
25 |
-
$output .= '
|
26 |
-
<div class="postbox" id="postbox_' . $this->i($sub_menu_name).'">
|
27 |
-
<div class="handlediv">
|
28 |
-
<button aria-expanded="true" class="button-link" type="button">
|
29 |
-
<span class="screen-reader-text">' . __('Toggle panel: Location', 'responsive-menu') . '</span>
|
30 |
-
<span aria-hidden="true" class="toggle-indicator"></span>
|
31 |
-
</button>
|
32 |
-
</div> <!-- .handlediv -->
|
33 |
-
<h2 class="ui-sortable-handle hndle">' . $tab_name . ' » ' . $sub_menu_name . '</h2>
|
34 |
-
<div class="inside">
|
35 |
-
<table class="widefat">';
|
36 |
-
foreach($options as $option):
|
37 |
-
$pro = isset($option['pro']) ? 'pro_option' : '';
|
38 |
-
$semi_pro = isset($option['semi_pro']) ? 'semi_pro_option' : '';
|
39 |
-
$type = isset($option['type']) ? $option['type'] : null;
|
40 |
-
$unit = isset($option['unit']) ? '<span class="units">' . $option['unit'] . '</span>' : null;
|
41 |
-
$has_sub_options_class = isset($option['sub_options']) ? 'has-sub-options' : '';
|
42 |
-
$select = isset($option['select']) ? $option['select'] : null;
|
43 |
-
$output .= '<tr class="' . $pro . ' ' . $semi_pro . '" id="' . $option['option'] . '_container">
|
44 |
-
<td>
|
45 |
-
<div class="label">' . $option['title'] . '</div>
|
46 |
-
<span class="description">' . $option['label'] . '</span>';
|
47 |
-
$output .= isset($option['beta']) ? '<span class="beta">beta</span>' : '';
|
48 |
-
$output .= '</td>
|
49 |
-
<td class="' . $has_sub_options_class . '">';
|
50 |
-
$output .= $this->f($type, $option['option'], $select);
|
51 |
-
if(isset($option['sub_options']))
|
52 |
-
foreach($option['sub_options'] as $sub_option)
|
53 |
-
$output .= $this->f($sub_option['type'], $sub_option['option'], $sub_option['select']);
|
54 |
-
$output .= isset($option['pro']) ? '<a href="https://responsive.menu/why-go-pro/?utm_source=free-plugin&utm_medium=option&utm_campaign=free-plugin-option-upgrade" target="_blank" class="responsive-menu-pro-overlay"><div class="responsive-menu-pro-overlay-text">Click to upgrade now to use</div></a>' : '';
|
55 |
-
$output .= $unit . '</td>
|
56 |
-
</tr>';
|
57 |
-
endforeach;
|
58 |
-
$output .= '</table>
|
59 |
-
</div> <!-- .inside -->
|
60 |
-
</div> <!-- .postbox -->';
|
61 |
-
endforeach;
|
62 |
-
$output .= '</div> <!-- .tab_container -->';
|
63 |
-
endforeach;
|
64 |
-
return $output;
|
65 |
-
}
|
66 |
-
|
67 |
-
public function i($data) {
|
68 |
-
return strtolower(str_replace([' ', '/'], '_', $data));
|
69 |
-
}
|
70 |
-
|
71 |
-
public function f($type, $option_name, $select) {
|
72 |
-
switch($type):
|
73 |
-
case 'checkbox' : $comp = new Form\Checkbox;
|
74 |
-
return $comp->render($this->options[$option_name]);
|
75 |
-
break;
|
76 |
-
case 'colour' : $comp = new Form\Colour;
|
77 |
-
return $comp->render($this->options[$option_name]);
|
78 |
-
break;
|
79 |
-
case 'textarea' : $comp = new Form\TextArea;
|
80 |
-
return $comp->render($this->options[$option_name]);
|
81 |
-
break;
|
82 |
-
case 'select' : $comp = new Form\Select;
|
83 |
-
return $comp->render($this->options[$option_name], $select);
|
84 |
-
break;
|
85 |
-
case 'image' : $comp = new Form\Image;
|
86 |
-
return $comp->render($this->options[$option_name]);
|
87 |
-
break;
|
88 |
-
case 'menu_ordering' : $comp = new Form\MenuOrdering;
|
89 |
-
return $comp->render($this->options[$option_name]);
|
90 |
-
break;
|
91 |
-
case 'header_ordering' : $comp = new Form\HeaderBarOrdering;
|
92 |
-
return $comp->render($this->options[$option_name]);
|
93 |
-
break;
|
94 |
-
case 'fonticons' : $comp = new Form\FontIconPageList;
|
95 |
-
return $comp->render($this->options[$option_name]);
|
96 |
-
break;
|
97 |
-
case 'import' : $comp = new Form\Import;
|
98 |
-
return $comp->render();
|
99 |
-
break;
|
100 |
-
case 'export' : $comp = new Form\Export;
|
101 |
-
return $comp->render();
|
102 |
-
break;
|
103 |
-
case 'reset' : $comp = new Form\Reset;
|
104 |
-
return $comp->render();
|
105 |
-
break;
|
106 |
-
default : $comp = new Form\Text;
|
107 |
-
return $comp->render($this->options[$option_name]);
|
108 |
-
break;
|
109 |
-
endswitch;
|
110 |
-
|
111 |
-
}
|
112 |
-
|
113 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/ViewModels/Components/Admin/Tabs.php
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Admin;
|
4 |
-
|
5 |
-
class Tabs {
|
6 |
-
|
7 |
-
private $config;
|
8 |
-
private $current_tab;
|
9 |
-
|
10 |
-
public function __construct(array $config, $current_tab) {
|
11 |
-
$this->config = $config;
|
12 |
-
$this->current_tab = $current_tab;
|
13 |
-
}
|
14 |
-
|
15 |
-
public function render() {
|
16 |
-
$output = '';
|
17 |
-
foreach(array_keys($this->config) as $tab_name) {
|
18 |
-
$active_class = $this->i($tab_name) == $this->current_tab ? ' active_tab' : '';
|
19 |
-
$output .= '<a id="tab_' . $this->i($tab_name) . '" class="tab page-title-action' . $active_class . '">' . $tab_name . '</a>';
|
20 |
-
}
|
21 |
-
return $output;
|
22 |
-
}
|
23 |
-
|
24 |
-
public function i($data) {
|
25 |
-
return strtolower(str_replace([' ', '/'], '_', $data));
|
26 |
-
}
|
27 |
-
|
28 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/ViewModels/Components/Button/Button.php
DELETED
@@ -1,39 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Button;
|
4 |
-
|
5 |
-
use ResponsiveMenu\ViewModels\Components\ViewComponent;
|
6 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
7 |
-
use ResponsiveMenu\Translation\Translator;
|
8 |
-
|
9 |
-
class Button implements ViewComponent {
|
10 |
-
|
11 |
-
public function __construct(Translator $translator) {
|
12 |
-
$this->translator = $translator;
|
13 |
-
}
|
14 |
-
|
15 |
-
public function render(OptionsCollection $options) {
|
16 |
-
|
17 |
-
$button_title = $this->translator->translate($options['button_title']);
|
18 |
-
|
19 |
-
$button_title_pos = $options['button_title_position']->getValue();
|
20 |
-
$button_title_html = $button_title != '' ? '<span class="responsive-menu-label responsive-menu-label-'.$button_title_pos.'">'.$button_title.'</span>' : '';
|
21 |
-
|
22 |
-
$accessible = in_array($button_title_pos, array('left', 'right')) ? 'responsive-menu-accessible' : '';
|
23 |
-
$content = '';
|
24 |
-
|
25 |
-
$content .= '<button id="responsive-menu-button"
|
26 |
-
class="responsive-menu-button ' . $accessible .
|
27 |
-
' responsive-menu-' . $options['button_click_animation'] . '"
|
28 |
-
type="button"
|
29 |
-
aria-label="Menu">';
|
30 |
-
$content .= in_array($button_title_pos, array('top', 'left')) ? $button_title_html : '';
|
31 |
-
$content .= '<span class="responsive-menu-box">' . $options->getButtonIcon() . $options->getButtonIconActive() . '</span>';
|
32 |
-
$content .= in_array($button_title_pos, array('bottom', 'right')) ? $button_title_html : '';
|
33 |
-
$content .= '</button>';
|
34 |
-
|
35 |
-
return $content;
|
36 |
-
|
37 |
-
}
|
38 |
-
|
39 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/ViewModels/Components/ComponentFactory.php
DELETED
@@ -1,21 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components;
|
4 |
-
use ResponsiveMenu\Translation\Translator;
|
5 |
-
|
6 |
-
class ComponentFactory {
|
7 |
-
|
8 |
-
public function build($key) {
|
9 |
-
|
10 |
-
$components = [
|
11 |
-
'title' => 'ResponsiveMenu\ViewModels\Components\Menu\Title',
|
12 |
-
'menu' => 'ResponsiveMenu\ViewModels\Components\Menu\Menu',
|
13 |
-
'search' => 'ResponsiveMenu\ViewModels\Components\Menu\Search',
|
14 |
-
'additional content' => 'ResponsiveMenu\ViewModels\Components\Menu\AdditionalContent'
|
15 |
-
];
|
16 |
-
|
17 |
-
return new $components[$key](new Translator);
|
18 |
-
|
19 |
-
}
|
20 |
-
|
21 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/ViewModels/Components/Menu/AdditionalContent.php
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Menu;
|
4 |
-
use ResponsiveMenu\ViewModels\Components\ViewComponent;
|
5 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
-
use ResponsiveMenu\Translation\Translator;
|
7 |
-
|
8 |
-
class AdditionalContent implements ViewComponent {
|
9 |
-
|
10 |
-
public function __construct(Translator $translator) {
|
11 |
-
$this->translator = $translator;
|
12 |
-
}
|
13 |
-
|
14 |
-
public function render(OptionsCollection $options) {
|
15 |
-
|
16 |
-
$content = $this->translator->translate($options['menu_additional_content']);
|
17 |
-
|
18 |
-
if($content)
|
19 |
-
return '<div id="responsive-menu-additional-content">' . $this->translator->allowShortcode($content) . '</div>';
|
20 |
-
|
21 |
-
}
|
22 |
-
|
23 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/ViewModels/Components/Menu/Menu.php
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Menu;
|
4 |
-
use ResponsiveMenu\ViewModels\Components\ViewComponent;
|
5 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
-
use ResponsiveMenu\Walkers\WpWalker;
|
7 |
-
use ResponsiveMenu\Translation\Translator;
|
8 |
-
|
9 |
-
class Menu implements ViewComponent {
|
10 |
-
|
11 |
-
public function __construct(Translator $translator) {
|
12 |
-
$this->translator = $translator;
|
13 |
-
}
|
14 |
-
|
15 |
-
public function render(OptionsCollection $options) {
|
16 |
-
|
17 |
-
$menu = $this->translator->translate($options['menu_to_use']);
|
18 |
-
$walker = $options['custom_walker']->getValue();
|
19 |
-
|
20 |
-
return wp_nav_menu(
|
21 |
-
[
|
22 |
-
'container' => '',
|
23 |
-
'menu_id' => 'responsive-menu',
|
24 |
-
'menu_class' => null,
|
25 |
-
'menu' => $menu && !$options['theme_location_menu']->getValue() ? $menu : null,
|
26 |
-
'depth' => $options['menu_depth']->getValue() ? $options['menu_depth']->getValue() : 0,
|
27 |
-
'theme_location' => $options['theme_location_menu']->getValue() ? $options['theme_location_menu']->getValue() : null,
|
28 |
-
'walker' => $walker ? new $walker($options) : new WpWalker($options),
|
29 |
-
'echo' => false
|
30 |
-
]
|
31 |
-
);
|
32 |
-
|
33 |
-
}
|
34 |
-
|
35 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/ViewModels/Components/Menu/Search.php
DELETED
@@ -1,24 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Menu;
|
4 |
-
use ResponsiveMenu\ViewModels\Components\ViewComponent;
|
5 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
-
use ResponsiveMenu\Translation\Translator;
|
7 |
-
|
8 |
-
class Search implements ViewComponent {
|
9 |
-
|
10 |
-
public function __construct(Translator $translator) {
|
11 |
-
$this->translator = $translator;
|
12 |
-
}
|
13 |
-
|
14 |
-
public function render(OptionsCollection $options) {
|
15 |
-
|
16 |
-
return '<div id="responsive-menu-search-box">
|
17 |
-
<form action="'.$this->translator->searchUrl().'" class="responsive-menu-search-form" role="search">
|
18 |
-
<input type="search" name="s" placeholder="' . __('Search', 'responsive-menu') . '" class="responsive-menu-search-box">
|
19 |
-
</form>
|
20 |
-
</div>';
|
21 |
-
|
22 |
-
}
|
23 |
-
|
24 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/ViewModels/Components/Menu/Title.php
DELETED
@@ -1,48 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Menu;
|
4 |
-
use ResponsiveMenu\ViewModels\Components\ViewComponent;
|
5 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
-
use ResponsiveMenu\Translation\Translator;
|
7 |
-
|
8 |
-
class Title implements ViewComponent {
|
9 |
-
|
10 |
-
public function __construct(Translator $translator) {
|
11 |
-
$this->translator = $translator;
|
12 |
-
}
|
13 |
-
|
14 |
-
public function render(OptionsCollection $options) {
|
15 |
-
|
16 |
-
$title = $this->translator->translate($options['menu_title']);
|
17 |
-
$link = $this->translator->translate($options['menu_title_link']);
|
18 |
-
|
19 |
-
if($options['menu_title']->getValue() || $options->getTitleImage()):
|
20 |
-
|
21 |
-
$content = '<div id="responsive-menu-title">';
|
22 |
-
|
23 |
-
if($options['menu_title_link']->getValue())
|
24 |
-
$content .= '<a href="'.$link.'" target="'.$options['menu_title_link_location'].'">';
|
25 |
-
|
26 |
-
if($options->getTitleImage())
|
27 |
-
$content .= '<div id="responsive-menu-title-image">' . $options->getTitleImage() . '</div>';
|
28 |
-
|
29 |
-
if($options['menu_title_link']->getValue())
|
30 |
-
$content .= '</a>';
|
31 |
-
|
32 |
-
if($options['menu_title_link']->getValue())
|
33 |
-
$content .= '<a href="'.$link.'" target="'.$options['menu_title_link_location'].'">';
|
34 |
-
|
35 |
-
$content .= $title;
|
36 |
-
|
37 |
-
if($options['menu_title_link']->getValue())
|
38 |
-
$content .= '</a>';
|
39 |
-
|
40 |
-
$content .= '</div>';
|
41 |
-
|
42 |
-
return $content;
|
43 |
-
|
44 |
-
endif;
|
45 |
-
|
46 |
-
}
|
47 |
-
|
48 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/ViewModels/Components/ViewComponent.php
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components;
|
4 |
-
|
5 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
-
|
7 |
-
interface ViewComponent {
|
8 |
-
|
9 |
-
public function render(OptionsCollection $collection);
|
10 |
-
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/ViewModels/Menu.php
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels;
|
4 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
-
use ResponsiveMenu\ViewModels\Components\ComponentFactory;
|
6 |
-
|
7 |
-
class Menu {
|
8 |
-
|
9 |
-
public function __construct(ComponentFactory $factory) {
|
10 |
-
$this->factory = $factory;
|
11 |
-
}
|
12 |
-
|
13 |
-
public function getHtml(OptionsCollection $options) {
|
14 |
-
$content = '';
|
15 |
-
|
16 |
-
foreach(json_decode($options['items_order']) as $key => $val)
|
17 |
-
if($val == 'on')
|
18 |
-
$content .= $this->factory->build($key)->render($options);
|
19 |
-
|
20 |
-
return $content;
|
21 |
-
}
|
22 |
-
|
23 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/app/Walkers/WpWalker.php
DELETED
@@ -1,131 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Walkers;
|
4 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
-
|
6 |
-
class WpWalker extends \Walker_Nav_Menu {
|
7 |
-
|
8 |
-
private $current_item;
|
9 |
-
|
10 |
-
public function __construct(OptionsCollection $options) {
|
11 |
-
$this->options = $options;
|
12 |
-
}
|
13 |
-
|
14 |
-
public function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
|
15 |
-
|
16 |
-
$this->setCurrentItem($item);
|
17 |
-
|
18 |
-
$classes = empty($item->classes) ? array() : (array) $item->classes;
|
19 |
-
$responsive_menu_classes = $classes;
|
20 |
-
|
21 |
-
# Turn into our Responsive Menu Classes
|
22 |
-
foreach($classes as $class):
|
23 |
-
switch($class):
|
24 |
-
case 'menu-item': $responsive_menu_classes[] = 'responsive-menu-item'; break;
|
25 |
-
case 'current-menu-item': $responsive_menu_classes[] = 'responsive-menu-current-item'; break;
|
26 |
-
case 'menu-item-has-children': $responsive_menu_classes[] = 'responsive-menu-item-has-children'; break;
|
27 |
-
case 'current-menu-parent': $responsive_menu_classes[] = 'responsive-menu-item-current-parent'; break;
|
28 |
-
case 'current-menu-ancestor': $responsive_menu_classes[] = 'responsive-menu-item-current-ancestor'; break;
|
29 |
-
endswitch;
|
30 |
-
endforeach;
|
31 |
-
|
32 |
-
/* Clear child class if we are at the final depth level */
|
33 |
-
if(isset($responsive_menu_classes)):
|
34 |
-
if($depth + 1 == $this->options['menu_depth']->getValue() && ($key = array_search('responsive-menu-item-has-children', $responsive_menu_classes)) !== false) {
|
35 |
-
unset($responsive_menu_classes[$key]);
|
36 |
-
}
|
37 |
-
endif;
|
38 |
-
|
39 |
-
$class_names = join(' ', array_unique($responsive_menu_classes));
|
40 |
-
$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
|
41 |
-
|
42 |
-
$id = ' id="responsive-menu-item-' . esc_attr( $item->ID ) . '"';
|
43 |
-
|
44 |
-
$output .= '<li' . $id . $class_names .'>';
|
45 |
-
|
46 |
-
$atts = array();
|
47 |
-
$atts['title'] = ! empty( $item->attr_title ) ? $item->attr_title : '';
|
48 |
-
$atts['target'] = ! empty( $item->target ) ? $item->target : '';
|
49 |
-
$atts['rel'] = ! empty( $item->xfn ) ? $item->xfn : '';
|
50 |
-
$atts['href'] = ! empty( $item->url ) ? $item->url : '';
|
51 |
-
$atts['class'] = 'responsive-menu-item-link';
|
52 |
-
|
53 |
-
$atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args, $depth );
|
54 |
-
|
55 |
-
$attributes = '';
|
56 |
-
foreach ( $atts as $attr => $value ) {
|
57 |
-
if ( ! empty( $value ) ) {
|
58 |
-
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
|
59 |
-
$attributes .= ' ' . $attr . '="' . $value . '"';
|
60 |
-
}
|
61 |
-
}
|
62 |
-
|
63 |
-
/** This filter is documented in wp-includes/post-template.php */
|
64 |
-
$title = apply_filters( 'the_title', $item->title, $item->ID );
|
65 |
-
|
66 |
-
$title = apply_filters( 'nav_menu_item_title', $title, $item, $args, $depth );
|
67 |
-
|
68 |
-
/* Calculate which arrow to show */
|
69 |
-
if(in_array('responsive-menu-item-has-children', $responsive_menu_classes)):
|
70 |
-
$inactive_arrow = '<div class="responsive-menu-subarrow">' . $this->options->getInActiveArrow() . '</div>';
|
71 |
-
$active_arrow = '<div class="responsive-menu-subarrow responsive-menu-subarrow-active">' . $this->options->getActiveArrow() . '</div>';
|
72 |
-
if($this->options['auto_expand_all_submenus'] == 'on'):
|
73 |
-
$initial_arrow = $active_arrow;
|
74 |
-
elseif(
|
75 |
-
$this->options['auto_expand_current_submenus'] == 'on' && (in_array('responsive-menu-item-current-parent', $responsive_menu_classes)
|
76 |
-
|| in_array('responsive-menu-item-current-ancestor', $responsive_menu_classes))):
|
77 |
-
$initial_arrow = $active_arrow;
|
78 |
-
else:
|
79 |
-
$initial_arrow = $inactive_arrow;
|
80 |
-
endif;
|
81 |
-
else:
|
82 |
-
$initial_arrow = '';
|
83 |
-
endif;
|
84 |
-
|
85 |
-
/* Clear Arrow if we are at the final depth level */
|
86 |
-
if($depth + 1 == $this->options['menu_depth']->getValue())
|
87 |
-
$initial_arrow = '';
|
88 |
-
|
89 |
-
$item_output = '<a'. $attributes .'>';
|
90 |
-
$item_output .= $title;
|
91 |
-
$item_output .= $initial_arrow;
|
92 |
-
$item_output .= '</a>';
|
93 |
-
|
94 |
-
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
|
95 |
-
|
96 |
-
}
|
97 |
-
|
98 |
-
public function start_lvl(&$output, $depth = 0, $args = array()) {
|
99 |
-
$output .= "<ul class='responsive-menu-submenu responsive-menu-submenu-depth-" . ($depth + 1) . $this->getSubmenuClassOpenOrNot() . "'>";
|
100 |
-
}
|
101 |
-
|
102 |
-
public function end_el(&$output, $item, $depth = 0, $args = array()) {
|
103 |
-
$output .= "</li>";
|
104 |
-
}
|
105 |
-
|
106 |
-
public function end_lvl(&$output, $depth = 0, $args = array()) {
|
107 |
-
$output .= "</ul>";
|
108 |
-
}
|
109 |
-
|
110 |
-
public function setCurrentItem($item) {
|
111 |
-
$this->current_item = $item;
|
112 |
-
}
|
113 |
-
|
114 |
-
public function getCurrentItem() {
|
115 |
-
return $this->current_item;
|
116 |
-
}
|
117 |
-
|
118 |
-
public function getSubmenuClassOpenOrNot() {
|
119 |
-
return $this->expandAllSubmenuOptionsIsOn() || $this->expandCurrentSubmenuOnAndItemIsParent() ? ' responsive-menu-submenu-open' : '';
|
120 |
-
}
|
121 |
-
|
122 |
-
public function expandAllSubmenuOptionsIsOn() {
|
123 |
-
return $this->options['auto_expand_all_submenus'] == 'on';
|
124 |
-
}
|
125 |
-
|
126 |
-
public function expandCurrentSubmenuOnAndItemIsParent() {
|
127 |
-
return ($this->options['auto_expand_current_submenus'] == 'on')
|
128 |
-
&& ($this->getCurrentItem()->current_item_ancestor || $this->getCurrentItem()->current_item_parent);
|
129 |
-
}
|
130 |
-
|
131 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/config/admin_ordering.php
DELETED
@@ -1,1505 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
$menus_array = [];
|
4 |
-
foreach(get_terms('nav_menu') as $menu) $menus_array[] = [ 'value' => $menu->slug, 'display' => $menu->name];
|
5 |
-
foreach(get_registered_nav_menus() as $location => $menu) $location_menus[] = ['value' => $location, 'display' => $menu];
|
6 |
-
$location_menus[] = ['value' => '', 'display' => 'None'];
|
7 |
-
|
8 |
-
$unit_options = [
|
9 |
-
['value' => 'px', 'display' => 'px'],
|
10 |
-
['value' => 'em', 'display' => 'em', 'disabled' => true],
|
11 |
-
['value' => 'rem', 'display' => 'rem', 'disabled' => true],
|
12 |
-
['value' => '%', 'display' => '%', 'disabled' => true]
|
13 |
-
];
|
14 |
-
|
15 |
-
$percentage_unit_options = [
|
16 |
-
['value' => 'px', 'display' => 'px', 'disabled' => true],
|
17 |
-
['value' => 'em', 'display' => 'em', 'disabled' => true],
|
18 |
-
['value' => 'rem', 'display' => 'rem', 'disabled' => true],
|
19 |
-
['value' => '%', 'display' => '%']
|
20 |
-
];
|
21 |
-
|
22 |
-
$order_mapping = [
|
23 |
-
|
24 |
-
/*
|
25 |
-
*
|
26 |
-
* INITIAL SETUP
|
27 |
-
*
|
28 |
-
*/
|
29 |
-
|
30 |
-
__('Initial Setup', 'responsive-menu') => [
|
31 |
-
__('Menu', 'responsive-menu') =>
|
32 |
-
[
|
33 |
-
[
|
34 |
-
'option' => 'breakpoint',
|
35 |
-
'title' => __('Breakpoint', 'responsive-menu'),
|
36 |
-
'label' => __('This is the width of the screen at which point you would like the menu to start showing', 'responsive-menu'),
|
37 |
-
'unit' => 'px'
|
38 |
-
],
|
39 |
-
[
|
40 |
-
'option' => 'menu_to_use',
|
41 |
-
'title' => __('Menu to Use', 'responsive-menu'),
|
42 |
-
'label' => __('', 'responsive-menu'),
|
43 |
-
'type' => 'select',
|
44 |
-
'select' => $menus_array
|
45 |
-
],
|
46 |
-
[
|
47 |
-
'option' => 'menu_to_hide',
|
48 |
-
'title' => __('CSS of Menu to Hide', 'responsive-menu'),
|
49 |
-
'label' => __('', 'responsive-menu')
|
50 |
-
]
|
51 |
-
]
|
52 |
-
],
|
53 |
-
|
54 |
-
|
55 |
-
/*
|
56 |
-
*
|
57 |
-
* MENU
|
58 |
-
*
|
59 |
-
*/
|
60 |
-
|
61 |
-
__('Menu', 'responsive-menu') => [
|
62 |
-
__('Section Ordering', 'responsive-menu') => [
|
63 |
-
[
|
64 |
-
'option' => 'items_order',
|
65 |
-
'title' => __('Order of Menu Items', 'responsive-menu'),
|
66 |
-
'label' => __('Drag the items to re-order and click to turn them on/off', 'responsive-menu'),
|
67 |
-
'type' => 'menu_ordering'
|
68 |
-
]
|
69 |
-
],
|
70 |
-
__('Font Icons', 'responsive-menu') =>
|
71 |
-
[
|
72 |
-
[
|
73 |
-
'option' => 'menu_font_icons',
|
74 |
-
'title' => __('Font Icons', 'responsive-menu'),
|
75 |
-
'label' => __('Responsive Menu uses the brilliant <a href="http://fontawesome.io/icons/" target="_blank">Awesome Font Icons</a> for implementing icons in your menu - for more info please visit our doc pages at <a href="https://responsive.menu/docs/basic-setup/font-icons/" target="_blank">https://responsive.menu/docs/basic-setup/font-icons/</a>', 'responsive-menu'),
|
76 |
-
'type' => 'fonticons',
|
77 |
-
'pro' => true
|
78 |
-
]
|
79 |
-
],
|
80 |
-
__('Sizing', 'responsive-menu') =>
|
81 |
-
[
|
82 |
-
[
|
83 |
-
'option' => 'menu_width',
|
84 |
-
'title' => __('Menu Width', 'responsive-menu'),
|
85 |
-
'label' => __('', 'responsive-menu'),
|
86 |
-
'semi_pro' => true,
|
87 |
-
'sub_options' =>
|
88 |
-
[
|
89 |
-
[
|
90 |
-
'option' => 'menu_width_unit',
|
91 |
-
'type' => 'select',
|
92 |
-
'select' => $percentage_unit_options
|
93 |
-
]
|
94 |
-
]
|
95 |
-
],
|
96 |
-
[
|
97 |
-
'option' => 'menu_maximum_width',
|
98 |
-
'title' => __('Maximum Width', 'responsive-menu'),
|
99 |
-
'label' => __('', 'responsive-menu'),
|
100 |
-
'semi_pro' => true,
|
101 |
-
'sub_options' =>
|
102 |
-
[
|
103 |
-
[
|
104 |
-
'option' => 'menu_maximum_width_unit',
|
105 |
-
'type' => 'select',
|
106 |
-
'select' => $unit_options
|
107 |
-
]
|
108 |
-
]
|
109 |
-
],
|
110 |
-
[
|
111 |
-
'option' => 'menu_minimum_width',
|
112 |
-
'title' => __('Minimum Width', 'responsive-menu'),
|
113 |
-
'label' => __('', 'responsive-menu'),
|
114 |
-
'semi_pro' => true,
|
115 |
-
'sub_options' =>
|
116 |
-
[
|
117 |
-
[
|
118 |
-
'option' => 'menu_minimum_width_unit',
|
119 |
-
'type' => 'select',
|
120 |
-
'select' => $unit_options
|
121 |
-
]
|
122 |
-
]
|
123 |
-
],
|
124 |
-
[
|
125 |
-
'option' => 'menu_links_height',
|
126 |
-
'title' => __('Links Height', 'responsive-menu'),
|
127 |
-
'label' => __('', 'responsive-menu'),
|
128 |
-
'semi_pro' => true,
|
129 |
-
'sub_options' =>
|
130 |
-
[
|
131 |
-
[
|
132 |
-
'option' => 'menu_links_height_unit',
|
133 |
-
'type' => 'select',
|
134 |
-
'select' => $unit_options
|
135 |
-
]
|
136 |
-
]
|
137 |
-
],
|
138 |
-
[
|
139 |
-
'option' => 'menu_border_width',
|
140 |
-
'title' => __('Border Width', 'responsive-menu'),
|
141 |
-
'label' => __('', 'responsive-menu'),
|
142 |
-
'semi_pro' => true,
|
143 |
-
'sub_options' =>
|
144 |
-
[
|
145 |
-
[
|
146 |
-
'option' => 'menu_border_width_unit',
|
147 |
-
'type' => 'select',
|
148 |
-
'select' => $unit_options
|
149 |
-
]
|
150 |
-
]
|
151 |
-
],
|
152 |
-
[
|
153 |
-
'option' => 'menu_auto_height',
|
154 |
-
'title' => __('Menu Auto Height', 'responsive-menu'),
|
155 |
-
'label' => __('', 'responsive-menu'),
|
156 |
-
'type' => 'checkbox',
|
157 |
-
'pro' => true
|
158 |
-
],
|
159 |
-
],
|
160 |
-
__('Title', 'responsive-menu') =>
|
161 |
-
[
|
162 |
-
[
|
163 |
-
'option' => 'menu_title',
|
164 |
-
'title' => __('Text', 'responsive-menu'),
|
165 |
-
'label' => __('', 'responsive-menu')
|
166 |
-
],
|
167 |
-
[
|
168 |
-
'option' => 'menu_title_link',
|
169 |
-
'title' => __('Link', 'responsive-menu'),
|
170 |
-
'label' => __('', 'responsive-menu'),
|
171 |
-
],
|
172 |
-
[
|
173 |
-
'option' => 'menu_title_link_location',
|
174 |
-
'title' => __('Link Location', 'responsive-menu'),
|
175 |
-
'label' => __('', 'responsive-menu'),
|
176 |
-
'type' => 'select',
|
177 |
-
'select' => [
|
178 |
-
['value' => '_blank', 'display' => 'New Tab'],
|
179 |
-
['value' => '_self', 'display' => 'Same Page'],
|
180 |
-
['value' => '_parent', 'display' => 'Parent Page'],
|
181 |
-
['value' => '_top', 'display' => 'Full Window Body']
|
182 |
-
]
|
183 |
-
],
|
184 |
-
[
|
185 |
-
'option' => 'menu_title_font_size',
|
186 |
-
'title' => __('Title Font Size', 'responsive-menu'),
|
187 |
-
'label' => __('', 'responsive-menu'),
|
188 |
-
'semi_pro' => true,
|
189 |
-
'sub_options' =>
|
190 |
-
[
|
191 |
-
[
|
192 |
-
'option' => 'menu_title_font_size_unit',
|
193 |
-
'type' => 'select',
|
194 |
-
'select' => $unit_options
|
195 |
-
]
|
196 |
-
]
|
197 |
-
],
|
198 |
-
[
|
199 |
-
'option' => 'menu_title_font_icon',
|
200 |
-
'title' => __('Font Icon', 'responsive-menu'),
|
201 |
-
'label' => __('', 'responsive-menu'),
|
202 |
-
'pro' => true
|
203 |
-
],
|
204 |
-
[
|
205 |
-
'option' => 'menu_title_image',
|
206 |
-
'title' => __('Image', 'responsive-menu'),
|
207 |
-
'label' => __('', 'responsive-menu'),
|
208 |
-
'type' => 'image'
|
209 |
-
],
|
210 |
-
[
|
211 |
-
'option' => 'menu_title_image_alt',
|
212 |
-
'title' => __('Alt Text', 'responsive-menu'),
|
213 |
-
'label' => __('', 'responsive-menu'),
|
214 |
-
],
|
215 |
-
[
|
216 |
-
'option' => 'menu_title_background_colour',
|
217 |
-
'title' => __('Title Background Colour', 'responsive-menu'),
|
218 |
-
'label' => __('', 'responsive-menu'),
|
219 |
-
'type' => 'colour',
|
220 |
-
'semi_pro' => true
|
221 |
-
],
|
222 |
-
[
|
223 |
-
'option' => 'menu_title_background_hover_colour',
|
224 |
-
'title' => __('Title Background Colour Hover', 'responsive-menu'),
|
225 |
-
'label' => __('', 'responsive-menu'),
|
226 |
-
'type' => 'colour',
|
227 |
-
'semi_pro' => true
|
228 |
-
],
|
229 |
-
[
|
230 |
-
'option' => 'menu_title_colour',
|
231 |
-
'title' => __('Title Colour', 'responsive-menu'),
|
232 |
-
'label' => __('', 'responsive-menu'),
|
233 |
-
'type' => 'colour',
|
234 |
-
'semi_pro' => true
|
235 |
-
],
|
236 |
-
[
|
237 |
-
'option' => 'menu_title_hover_colour',
|
238 |
-
'title' => __('Title Hover Colour', 'responsive-menu'),
|
239 |
-
'label' => __('', 'responsive-menu'),
|
240 |
-
'type' => 'colour',
|
241 |
-
'semi_pro' => true
|
242 |
-
]
|
243 |
-
|
244 |
-
],
|
245 |
-
__('Additional Content', 'responsive-menu') =>
|
246 |
-
[
|
247 |
-
[
|
248 |
-
'option' => 'menu_additional_content',
|
249 |
-
'title' => __('Text', 'responsive-menu'),
|
250 |
-
'label' => __('HTMl and Shortcodes can be used', 'responsive-menu'),
|
251 |
-
'type' => 'textarea'
|
252 |
-
],
|
253 |
-
[
|
254 |
-
'option' => 'menu_additional_content_colour',
|
255 |
-
'title' => __('Colour', 'responsive-menu'),
|
256 |
-
'label' => __('', 'responsive-menu'),
|
257 |
-
'type' => 'colour'
|
258 |
-
],
|
259 |
-
],
|
260 |
-
__('Animation', 'responsive-menu') =>
|
261 |
-
[
|
262 |
-
[
|
263 |
-
'option' => 'menu_appear_from',
|
264 |
-
'title' => __('Appear From', 'responsive-menu'),
|
265 |
-
'label' => __('', 'responsive-menu'),
|
266 |
-
'type' => 'select',
|
267 |
-
'select' => [
|
268 |
-
['value' => 'top', 'display' => 'Top'],
|
269 |
-
['value' => 'left', 'display' => 'Left'],
|
270 |
-
['value' => 'right', 'display' => 'Right'],
|
271 |
-
['value' => 'bottom', 'display' => 'Bottom']
|
272 |
-
],
|
273 |
-
],
|
274 |
-
[
|
275 |
-
'option' => 'animation_type',
|
276 |
-
'title' => __('Animation Type', 'responsive-menu'),
|
277 |
-
'label' => __('', 'responsive-menu'),
|
278 |
-
'type' => 'select',
|
279 |
-
'semi_pro' => true,
|
280 |
-
'select' => [
|
281 |
-
['value' => 'slide', 'display' => 'Slide'],
|
282 |
-
['value' => 'push', 'display' => 'Push'],
|
283 |
-
['value' => 'fade', 'display' => 'Fade', 'disabled' => true]
|
284 |
-
]
|
285 |
-
],
|
286 |
-
[
|
287 |
-
'option' => 'page_wrapper',
|
288 |
-
'title' => __('Page Wrapper CSS selector', 'responsive-menu'),
|
289 |
-
'label' => __('This is only needed if you are using the push animation above', 'responsive-menu')
|
290 |
-
],
|
291 |
-
[
|
292 |
-
'option' => 'menu_close_on_body_click',
|
293 |
-
'title' => __('Close Menu on Body Clicks', 'responsive-menu'),
|
294 |
-
'label' => __('', 'responsive-menu'),
|
295 |
-
'type' => 'checkbox'
|
296 |
-
],
|
297 |
-
[
|
298 |
-
'option' => 'menu_close_on_link_click',
|
299 |
-
'title' => __('Close Menu on Link Clicks', 'responsive-menu'),
|
300 |
-
'label' => __('', 'responsive-menu'),
|
301 |
-
'type' => 'checkbox'
|
302 |
-
],
|
303 |
-
],
|
304 |
-
__('Search Box', 'responsive-menu') =>
|
305 |
-
[
|
306 |
-
[
|
307 |
-
'option' => 'menu_search_box_text',
|
308 |
-
'title' => __('Text', 'responsive-menu'),
|
309 |
-
'label' => __('', 'responsive-menu'),
|
310 |
-
'pro' => true
|
311 |
-
],
|
312 |
-
[
|
313 |
-
'option' => 'menu_search_box_text_colour',
|
314 |
-
'title' => __('Text Colour', 'responsive-menu'),
|
315 |
-
'label' => __('', 'responsive-menu'),
|
316 |
-
'type' => 'colour'
|
317 |
-
],
|
318 |
-
[
|
319 |
-
'option' => 'menu_search_box_border_colour',
|
320 |
-
'title' => __('Border Colour', 'responsive-menu'),
|
321 |
-
'label' => __('', 'responsive-menu'),
|
322 |
-
'type' => 'colour'
|
323 |
-
],
|
324 |
-
[
|
325 |
-
'option' => 'menu_search_box_background_colour',
|
326 |
-
'title' => __('Background Colour', 'responsive-menu'),
|
327 |
-
'label' => __('', 'responsive-menu'),
|
328 |
-
'type' => 'colour'
|
329 |
-
],
|
330 |
-
[
|
331 |
-
'option' => 'menu_search_box_placholder_colour',
|
332 |
-
'title' => __('Placeholder Colour', 'responsive-menu'),
|
333 |
-
'label' => __('', 'responsive-menu'),
|
334 |
-
'type' => 'colour'
|
335 |
-
]
|
336 |
-
],
|
337 |
-
__('Background Colours', 'responsive-menu') =>
|
338 |
-
[
|
339 |
-
[
|
340 |
-
'option' => 'menu_background_image',
|
341 |
-
'title' => __('Background Image', 'responsive-menu'),
|
342 |
-
'label' => __('Enabling this will deactivate all other colour options', 'responsive-menu'),
|
343 |
-
'type' => 'image'
|
344 |
-
],
|
345 |
-
[
|
346 |
-
'option' => 'menu_background_colour',
|
347 |
-
'title' => __('Background Colour', 'responsive-menu'),
|
348 |
-
'label' => __('', 'responsive-menu'),
|
349 |
-
'type' => 'colour',
|
350 |
-
'semi_pro' => true
|
351 |
-
],
|
352 |
-
[
|
353 |
-
'option' => 'menu_item_background_colour',
|
354 |
-
'title' => __('Item Background Colour', 'responsive-menu'),
|
355 |
-
'label' => __('', 'responsive-menu'),
|
356 |
-
'type' => 'colour',
|
357 |
-
'semi_pro' => true
|
358 |
-
],
|
359 |
-
[
|
360 |
-
'option' => 'menu_item_background_hover_colour',
|
361 |
-
'title' => __('Item Background Colour Hover', 'responsive-menu'),
|
362 |
-
'label' => __('', 'responsive-menu'),
|
363 |
-
'type' => 'colour',
|
364 |
-
'semi_pro' => true
|
365 |
-
],
|
366 |
-
[
|
367 |
-
'option' => 'menu_current_item_background_colour',
|
368 |
-
'title' => __('Current Item Background Colour', 'responsive-menu'),
|
369 |
-
'label' => __('', 'responsive-menu'),
|
370 |
-
'type' => 'colour',
|
371 |
-
'semi_pro' => true
|
372 |
-
],
|
373 |
-
[
|
374 |
-
'option' => 'menu_current_item_background_hover_colour',
|
375 |
-
'title' => __('Current Item Background Colour Hover', 'responsive-menu'),
|
376 |
-
'label' => __('', 'responsive-menu'),
|
377 |
-
'type' => 'colour',
|
378 |
-
'semi_pro' => true
|
379 |
-
],
|
380 |
-
],
|
381 |
-
__('Border Colours', 'responsive-menu-pro') =>
|
382 |
-
[
|
383 |
-
[
|
384 |
-
'option' => 'menu_item_border_colour',
|
385 |
-
'title' => __('Item Border Colour', 'responsive-menu'),
|
386 |
-
'label' => __('', 'responsive-menu'),
|
387 |
-
'type' => 'colour',
|
388 |
-
'semi_pro' => true
|
389 |
-
],
|
390 |
-
[
|
391 |
-
'option' => 'menu_item_border_colour_hover',
|
392 |
-
'title' => __('Item Border Colour Hover', 'responsive-menu'),
|
393 |
-
'label' => __('', 'responsive-menu'),
|
394 |
-
'type' => 'colour',
|
395 |
-
'semi_pro' => true
|
396 |
-
],
|
397 |
-
[
|
398 |
-
'option' => 'menu_current_item_border_colour',
|
399 |
-
'title' => __('Current Item Border Colour', 'responsive-menu'),
|
400 |
-
'label' => __('', 'responsive-menu'),
|
401 |
-
'type' => 'colour',
|
402 |
-
'semi_pro' => true
|
403 |
-
],
|
404 |
-
[
|
405 |
-
'option' => 'menu_current_item_border_hover_colour',
|
406 |
-
'title' => __('Current Item Border Colour Hover', 'responsive-menu'),
|
407 |
-
'label' => __('', 'responsive-menu'),
|
408 |
-
'type' => 'colour',
|
409 |
-
'semi_pro' => true
|
410 |
-
]
|
411 |
-
],
|
412 |
-
__('Text Colours', 'responsive-menu') =>
|
413 |
-
[
|
414 |
-
|
415 |
-
[
|
416 |
-
'option' => 'menu_link_colour',
|
417 |
-
'title' => __('Link Colour', 'responsive-menu'),
|
418 |
-
'label' => __('', 'responsive-menu'),
|
419 |
-
'type' => 'colour',
|
420 |
-
'semi_pro' => true
|
421 |
-
],
|
422 |
-
[
|
423 |
-
'option' => 'menu_link_hover_colour',
|
424 |
-
'title' => __('Link Hover Colour', 'responsive-menu'),
|
425 |
-
'label' => __('', 'responsive-menu'),
|
426 |
-
'type' => 'colour',
|
427 |
-
'semi_pro' => true
|
428 |
-
],
|
429 |
-
[
|
430 |
-
'option' => 'menu_current_link_colour',
|
431 |
-
'title' => __('Current Link Colour', 'responsive-menu'),
|
432 |
-
'label' => __('', 'responsive-menu'),
|
433 |
-
'type' => 'colour',
|
434 |
-
'semi_pro' => true
|
435 |
-
],
|
436 |
-
[
|
437 |
-
'option' => 'menu_current_link_hover_colour',
|
438 |
-
'title' => __('Current Link Hover Colour', 'responsive-menu'),
|
439 |
-
'label' => __('', 'responsive-menu'),
|
440 |
-
'type' => 'colour',
|
441 |
-
'semi_pro' => true
|
442 |
-
],
|
443 |
-
|
444 |
-
],
|
445 |
-
__('Text Styling', 'responsive-menu') =>
|
446 |
-
[
|
447 |
-
[
|
448 |
-
'option' => 'menu_font',
|
449 |
-
'title' => __('Font', 'responsive-menu'),
|
450 |
-
'label' => __('', 'responsive-menu')
|
451 |
-
],
|
452 |
-
[
|
453 |
-
'option' => 'menu_font_size',
|
454 |
-
'title' => __('Font Size', 'responsive-menu'),
|
455 |
-
'label' => __('', 'responsive-menu'),
|
456 |
-
'semi_pro' => true,
|
457 |
-
'sub_options' =>
|
458 |
-
[
|
459 |
-
[
|
460 |
-
'option' => 'menu_font_size_unit',
|
461 |
-
'type' => 'select',
|
462 |
-
'select' => $unit_options
|
463 |
-
]
|
464 |
-
]
|
465 |
-
],
|
466 |
-
[
|
467 |
-
'option' => 'menu_text_alignment',
|
468 |
-
'title' => __('Text Alignment', 'responsive-menu'),
|
469 |
-
'label' => __('', 'responsive-menu'),
|
470 |
-
'type' => 'select',
|
471 |
-
'select' => [
|
472 |
-
['value' => 'left', 'display' => 'Left'],
|
473 |
-
['value' => 'right', 'display' => 'Right'],
|
474 |
-
['value' => 'center', 'display' => 'Centred'],
|
475 |
-
['value' => 'justify', 'display' => 'Justified']
|
476 |
-
]
|
477 |
-
],
|
478 |
-
[
|
479 |
-
'option' => 'menu_word_wrap',
|
480 |
-
'title' => __('Word Wrap', 'responsive-menu'),
|
481 |
-
'label' => __('', 'responsive-menu'),
|
482 |
-
'type' => 'checkbox',
|
483 |
-
'pro' => true
|
484 |
-
],
|
485 |
-
],
|
486 |
-
__('Page Overlay', 'responsive-menu') =>
|
487 |
-
[
|
488 |
-
[
|
489 |
-
'option' => 'menu_overlay',
|
490 |
-
'title' => __('Add Page Overlay When Menu Open', 'responsive-menu'),
|
491 |
-
'label' => __('', 'responsive-menu'),
|
492 |
-
'type' => 'checkbox',
|
493 |
-
'pro' => true
|
494 |
-
],
|
495 |
-
[
|
496 |
-
'option' => 'menu_overlay_colour',
|
497 |
-
'title' => __('Overlay Colour', 'responsive-menu'),
|
498 |
-
'label' => __('', 'responsive-menu'),
|
499 |
-
'type' => 'colour',
|
500 |
-
'pro' => true
|
501 |
-
],
|
502 |
-
],
|
503 |
-
__('Advanced', 'responsive-menu') =>
|
504 |
-
[
|
505 |
-
[
|
506 |
-
'option' => 'menu_depth',
|
507 |
-
'title' => __('Depth', 'responsive-menu'),
|
508 |
-
'label' => __('', 'responsive-menu'),
|
509 |
-
'type' => 'select',
|
510 |
-
'select' => [
|
511 |
-
['value' => 1, 'display' => 1],
|
512 |
-
['value' => 2, 'display' => 2],
|
513 |
-
['value' => 3, 'display' => 3],
|
514 |
-
['value' => 4, 'display' => 4],
|
515 |
-
['value' => 5, 'display' => 5],
|
516 |
-
]
|
517 |
-
],
|
518 |
-
[
|
519 |
-
'option' => 'menu_disable_scrolling',
|
520 |
-
'title' => __('Disable Scrolling when Menu Active', 'responsive-menu'),
|
521 |
-
'label' => __('', 'responsive-menu'),
|
522 |
-
'type' => 'checkbox',
|
523 |
-
'pro' => true
|
524 |
-
],
|
525 |
-
[
|
526 |
-
'option' => 'theme_location_menu',
|
527 |
-
'title' => __('Theme Location Menu', 'responsive-menu'),
|
528 |
-
'label' => __('', 'responsive-menu'),
|
529 |
-
'type' => 'select',
|
530 |
-
'select' => $location_menus
|
531 |
-
]
|
532 |
-
],
|
533 |
-
],
|
534 |
-
|
535 |
-
/*
|
536 |
-
*
|
537 |
-
* BUTTON
|
538 |
-
*
|
539 |
-
*/
|
540 |
-
|
541 |
-
__('Button', 'responsive-menu') => [
|
542 |
-
__('Animation', 'responsive-menu') =>
|
543 |
-
[
|
544 |
-
[
|
545 |
-
'option' => 'button_click_animation',
|
546 |
-
'title' => __('Animation Type', 'responsive-menu'),
|
547 |
-
'label' => __('To see all animations in action please visit <a href="https://jonsuh.com/hamburgers/" target="_blank">this page</a>', 'responsive-menu'),
|
548 |
-
'type' => 'select',
|
549 |
-
'select' => [
|
550 |
-
['value' => 'off', 'display' => 'Off'],
|
551 |
-
['value' => '3dx', 'display' => '3DX', 'disabled' => true],
|
552 |
-
['value' => '3dx-r', 'display' => '3DX Reverse', 'disabled' => true],
|
553 |
-
['value' => '3dy', 'display' => '3DY', 'disabled' => true],
|
554 |
-
['value' => '3dy-r', 'display' => '3DY Reverse', 'disabled' => true],
|
555 |
-
['value' => 'arrow', 'display' => 'Arrow', 'disabled' => true],
|
556 |
-
['value' => 'arrow-r', 'display' => 'Arrow Reverse', 'disabled' => true],
|
557 |
-
['value' => 'arrowalt', 'display' => 'Arrow Alt', 'disabled' => true],
|
558 |
-
['value' => 'arrowalt-r', 'display' => 'Arrow Alt Reverse', 'disabled' => true],
|
559 |
-
['value' => 'boring', 'display' => 'Boring'],
|
560 |
-
['value' => 'collapse', 'display' => 'Collapse', 'disabled' => true],
|
561 |
-
['value' => 'collapse-r', 'display' => 'Collapse Reverse', 'disabled' => true],
|
562 |
-
['value' => 'elastic', 'display' => 'Elastic', 'disabled' => true],
|
563 |
-
['value' => 'elastic-r', 'display' => 'Elastic Reverse', 'disabled' => true],
|
564 |
-
['value' => 'emphatic', 'display' => 'Emphatic', 'disabled' => true],
|
565 |
-
['value' => 'emphatic-r', 'display' => 'Emphatic Reverse', 'disabled' => true],
|
566 |
-
['value' => 'slider', 'display' => 'Slider', 'disabled' => true],
|
567 |
-
['value' => 'slider-r', 'display' => 'Slider Reverse', 'disabled' => true],
|
568 |
-
['value' => 'spin', 'display' => 'Spin', 'disabled' => true],
|
569 |
-
['value' => 'spin-r', 'display' => 'Spin Reverse', 'disabled' => true],
|
570 |
-
['value' => 'spring', 'display' => 'Spring', 'disabled' => true],
|
571 |
-
['value' => 'spring-r', 'display' => 'Spring Reverse', 'disabled' => true],
|
572 |
-
['value' => 'stand', 'display' => 'Stand', 'disabled' => true],
|
573 |
-
['value' => 'stand-r', 'display' => 'Stand Reverse', 'disabled' => true],
|
574 |
-
['value' => 'squeeze', 'display' => 'Squeeze', 'disabled' => true],
|
575 |
-
['value' => 'vortex', 'display' => 'Vortex', 'disabled' => true],
|
576 |
-
['value' => 'vortex-r', 'display' => 'Vortex Reverse', 'disabled' => true]
|
577 |
-
],
|
578 |
-
'semi_pro' => true
|
579 |
-
],
|
580 |
-
[
|
581 |
-
'option' => 'button_position_type',
|
582 |
-
'title' => __('Position Type', 'responsive-menu'),
|
583 |
-
'label' => __('', 'responsive-menu'),
|
584 |
-
'type' => 'select',
|
585 |
-
'select' => [
|
586 |
-
['value' => 'absolute', 'display' => 'Absolute'],
|
587 |
-
['value' => 'fixed', 'display' => 'Fixed'],
|
588 |
-
['value' => 'relative', 'display' => 'Relative']
|
589 |
-
]
|
590 |
-
],
|
591 |
-
[
|
592 |
-
'option' => 'button_push_with_animation',
|
593 |
-
'title' => __('Push Button with Animation', 'responsive-menu'),
|
594 |
-
'label' => __('', 'responsive-menu'),
|
595 |
-
'type' => 'checkbox'
|
596 |
-
],
|
597 |
-
],
|
598 |
-
__('Location', 'responsive-menu') =>
|
599 |
-
[
|
600 |
-
[
|
601 |
-
'option' => 'button_distance_from_side',
|
602 |
-
'title' => __('Distance from Side', 'responsive-menu'),
|
603 |
-
'label' => __('', 'responsive-menu'),
|
604 |
-
'semi_pro' => true,
|
605 |
-
'sub_options' =>
|
606 |
-
[
|
607 |
-
[
|
608 |
-
'option' => 'button_distance_from_side_unit',
|
609 |
-
'type' => 'select',
|
610 |
-
'select' => $percentage_unit_options
|
611 |
-
]
|
612 |
-
]
|
613 |
-
],
|
614 |
-
[
|
615 |
-
'option' => 'button_left_or_right',
|
616 |
-
'title' => __('Button Side', 'responsive-menu'),
|
617 |
-
'label' => __('', 'responsive-menu'),
|
618 |
-
'type' => 'select',
|
619 |
-
'select' => [
|
620 |
-
['value' => 'left', 'display' => 'Left'],
|
621 |
-
['value' => 'right', 'display' => 'Right']
|
622 |
-
]
|
623 |
-
],
|
624 |
-
[
|
625 |
-
'option' => 'button_top',
|
626 |
-
'title' => __('Distance from Top', 'responsive-menu'),
|
627 |
-
'label' => __('', 'responsive-menu'),
|
628 |
-
'semi_pro' => true,
|
629 |
-
'sub_options' =>
|
630 |
-
[
|
631 |
-
[
|
632 |
-
'option' => 'button_top_unit',
|
633 |
-
'type' => 'select',
|
634 |
-
'select' => $unit_options
|
635 |
-
]
|
636 |
-
]
|
637 |
-
],
|
638 |
-
],
|
639 |
-
__('Container Sizing', 'responsive-menu') =>
|
640 |
-
[
|
641 |
-
[
|
642 |
-
'option' => 'button_height',
|
643 |
-
'title' => __('Height', 'responsive-menu'),
|
644 |
-
'label' => __('', 'responsive-menu'),
|
645 |
-
'semi_pro' => true,
|
646 |
-
'sub_options' =>
|
647 |
-
[
|
648 |
-
[
|
649 |
-
'option' => 'button_height_unit',
|
650 |
-
'type' => 'select',
|
651 |
-
'select' => $unit_options
|
652 |
-
]
|
653 |
-
]
|
654 |
-
],
|
655 |
-
[
|
656 |
-
'option' => 'button_width',
|
657 |
-
'title' => __('Width', 'responsive-menu'),
|
658 |
-
'label' => __('', 'responsive-menu'),
|
659 |
-
'semi_pro' => true,
|
660 |
-
'sub_options' =>
|
661 |
-
[
|
662 |
-
[
|
663 |
-
'option' => 'button_width_unit',
|
664 |
-
'type' => 'select',
|
665 |
-
'select' => $unit_options
|
666 |
-
]
|
667 |
-
]
|
668 |
-
],
|
669 |
-
],
|
670 |
-
__('Hamburger Sizing', 'responsive-menu') =>
|
671 |
-
[
|
672 |
-
[
|
673 |
-
'option' => 'button_line_height',
|
674 |
-
'title' => __('Line Height', 'responsive-menu'),
|
675 |
-
'label' => __('', 'responsive-menu'),
|
676 |
-
'semi_pro' => true,
|
677 |
-
'sub_options' =>
|
678 |
-
[
|
679 |
-
[
|
680 |
-
'option' => 'button_line_height_unit',
|
681 |
-
'type' => 'select',
|
682 |
-
'select' => $unit_options
|
683 |
-
]
|
684 |
-
]
|
685 |
-
],
|
686 |
-
[
|
687 |
-
'option' => 'button_line_margin',
|
688 |
-
'title' => __('Line Margin', 'responsive-menu'),
|
689 |
-
'label' => __('', 'responsive-menu'),
|
690 |
-
'semi_pro' => true,
|
691 |
-
'sub_options' =>
|
692 |
-
[
|
693 |
-
[
|
694 |
-
'option' => 'button_line_margin_unit',
|
695 |
-
'type' => 'select',
|
696 |
-
'select' => $unit_options
|
697 |
-
]
|
698 |
-
]
|
699 |
-
],
|
700 |
-
[
|
701 |
-
'option' => 'button_line_width',
|
702 |
-
'title' => __('Line Width', 'responsive-menu'),
|
703 |
-
'label' => __('', 'responsive-menu'),
|
704 |
-
'semi_pro' => true,
|
705 |
-
'sub_options' =>
|
706 |
-
[
|
707 |
-
[
|
708 |
-
'option' => 'button_line_width_unit',
|
709 |
-
'type' => 'select',
|
710 |
-
'select' => $unit_options
|
711 |
-
]
|
712 |
-
]
|
713 |
-
],
|
714 |
-
|
715 |
-
],
|
716 |
-
__('Background Colours', 'responsive-menu') => [
|
717 |
-
[
|
718 |
-
'option' => 'button_background_colour',
|
719 |
-
'title' => __('Background Colour', 'responsive-menu'),
|
720 |
-
'label' => __('', 'responsive-menu'),
|
721 |
-
'type' => 'colour',
|
722 |
-
'semi_pro' => true
|
723 |
-
],
|
724 |
-
[
|
725 |
-
'option' => 'button_background_colour_hover',
|
726 |
-
'title' => __('Background Hover Colour', 'responsive-menu'),
|
727 |
-
'label' => __('', 'responsive-menu'),
|
728 |
-
'type' => 'colour',
|
729 |
-
'semi_pro' => true
|
730 |
-
],
|
731 |
-
[
|
732 |
-
'option' => 'button_transparent_background',
|
733 |
-
'title' => __('Transparent Background', 'responsive-menu'),
|
734 |
-
'label' => __('', 'responsive-menu'),
|
735 |
-
'type' => 'checkbox'
|
736 |
-
]
|
737 |
-
],
|
738 |
-
__('Line Colours', 'responsive-menu') => [
|
739 |
-
[
|
740 |
-
'option' => 'button_line_colour',
|
741 |
-
'title' => __('Line Colour', 'responsive-menu'),
|
742 |
-
'label' => __('', 'responsive-menu'),
|
743 |
-
'type' => 'colour',
|
744 |
-
'semi_pro' => true
|
745 |
-
],
|
746 |
-
],
|
747 |
-
__('Title', 'responsive-menu') => [
|
748 |
-
[
|
749 |
-
'option' => 'button_title',
|
750 |
-
'title' => __('Text', 'responsive-menu'),
|
751 |
-
'label' => __('', 'responsive-menu'),
|
752 |
-
],
|
753 |
-
[
|
754 |
-
'option' => 'button_text_colour',
|
755 |
-
'title' => __('Colour', 'responsive-menu'),
|
756 |
-
'label' => __('', 'responsive-menu'),
|
757 |
-
'type' => 'colour',
|
758 |
-
'semi_pro' => true
|
759 |
-
],
|
760 |
-
[
|
761 |
-
'option' => 'button_title_position',
|
762 |
-
'title' => __('Title Text Position', 'responsive-menu'),
|
763 |
-
'label' => __('', 'responsive-menu'),
|
764 |
-
'type' => 'select',
|
765 |
-
'select' => [
|
766 |
-
['value' => 'left', 'display' => 'Left'],
|
767 |
-
['value' => 'right', 'display' => 'Right'],
|
768 |
-
['value' => 'top', 'display' => 'Top'],
|
769 |
-
['value' => 'bottom', 'display' => 'Bottom']
|
770 |
-
]
|
771 |
-
],
|
772 |
-
[
|
773 |
-
'option' => 'button_font',
|
774 |
-
'title' => __('Font', 'responsive-menu'),
|
775 |
-
'label' => __('', 'responsive-menu'),
|
776 |
-
],
|
777 |
-
[
|
778 |
-
'option' => 'button_font_size',
|
779 |
-
'title' => __('Font Size', 'responsive-menu'),
|
780 |
-
'label' => __('', 'responsive-menu'),
|
781 |
-
'semi_pro' => true,
|
782 |
-
'sub_options' =>
|
783 |
-
[
|
784 |
-
[
|
785 |
-
'option' => 'button_font_size_unit',
|
786 |
-
'type' => 'select',
|
787 |
-
'select' => $unit_options
|
788 |
-
]
|
789 |
-
]
|
790 |
-
],
|
791 |
-
[
|
792 |
-
'option' => 'button_title_line_height',
|
793 |
-
'title' => __('Line Height', 'responsive-menu'),
|
794 |
-
'label' => __('', 'responsive-menu'),
|
795 |
-
'semi_pro' => true,
|
796 |
-
'sub_options' =>
|
797 |
-
[
|
798 |
-
[
|
799 |
-
'option' => 'button_title_line_height_unit',
|
800 |
-
'type' => 'select',
|
801 |
-
'select' => $unit_options
|
802 |
-
]
|
803 |
-
]
|
804 |
-
],
|
805 |
-
],
|
806 |
-
__('Image', 'responsive-menu') =>
|
807 |
-
[
|
808 |
-
[
|
809 |
-
'option' => 'button_font_icon',
|
810 |
-
'title' => __('Font Icon', 'responsive-menu'),
|
811 |
-
'label' => __('', 'responsive-menu'),
|
812 |
-
'pro' => true
|
813 |
-
],
|
814 |
-
[
|
815 |
-
'option' => 'button_font_icon_when_clicked',
|
816 |
-
'title' => __('Font Icon When Clicked', 'responsive-menu'),
|
817 |
-
'label' => __('', 'responsive-menu'),
|
818 |
-
'pro' => true
|
819 |
-
],
|
820 |
-
[
|
821 |
-
'option' => 'button_image',
|
822 |
-
'title' => __('Image', 'responsive-menu'),
|
823 |
-
'label' => __('', 'responsive-menu'),
|
824 |
-
'type' => 'image'
|
825 |
-
],
|
826 |
-
[
|
827 |
-
'option' => 'button_image_alt',
|
828 |
-
'title' => __('Alt Text', 'responsive-menu'),
|
829 |
-
'label' => __('', 'responsive-menu')
|
830 |
-
],
|
831 |
-
[
|
832 |
-
'option' => 'button_image_when_clicked',
|
833 |
-
'title' => __('Image When Clicked', 'responsive-menu'),
|
834 |
-
'label' => __('', 'responsive-menu'),
|
835 |
-
'type' => 'image'
|
836 |
-
],
|
837 |
-
[
|
838 |
-
'option' => 'button_image_alt_when_clicked',
|
839 |
-
'title' => __('Alt Text', 'responsive-menu'),
|
840 |
-
'label' => __('', 'responsive-menu')
|
841 |
-
]
|
842 |
-
],
|
843 |
-
__('Advanced', 'responsive-menu') =>
|
844 |
-
[
|
845 |
-
[
|
846 |
-
'option' => 'button_click_trigger',
|
847 |
-
'title' => __('Trigger', 'responsive-menu'),
|
848 |
-
'label' => __('', 'responsive-menu'),
|
849 |
-
],
|
850 |
-
],
|
851 |
-
],
|
852 |
-
|
853 |
-
/*
|
854 |
-
*
|
855 |
-
* SUB MENUS
|
856 |
-
*
|
857 |
-
*/
|
858 |
-
__('Sub-Menus', 'responsive-menu') => [
|
859 |
-
|
860 |
-
__('Toggle Button Background Colours', 'responsive-menu') =>
|
861 |
-
[
|
862 |
-
[
|
863 |
-
'option' => 'menu_sub_arrow_background_colour',
|
864 |
-
'title' => __('Background Colour', 'responsive-menu'),
|
865 |
-
'label' => __('', 'responsive-menu'),
|
866 |
-
'type' => 'colour',
|
867 |
-
'semi_pro' => true
|
868 |
-
],
|
869 |
-
[
|
870 |
-
'option' => 'menu_sub_arrow_background_hover_colour',
|
871 |
-
'title' => __('Background Hover Colour', 'responsive-menu'),
|
872 |
-
'label' => __('', 'responsive-menu'),
|
873 |
-
'type' => 'colour',
|
874 |
-
'semi_pro' => true
|
875 |
-
],
|
876 |
-
[
|
877 |
-
'option' => 'menu_sub_arrow_background_colour_active',
|
878 |
-
'title' => __('Background Colour Active', 'responsive-menu'),
|
879 |
-
'label' => __('', 'responsive-menu'),
|
880 |
-
'type' => 'colour',
|
881 |
-
'semi_pro' => true
|
882 |
-
],
|
883 |
-
[
|
884 |
-
'option' => 'menu_sub_arrow_background_hover_colour_active',
|
885 |
-
'title' => __('Background Hover Colour Active', 'responsive-menu'),
|
886 |
-
'label' => __('', 'responsive-menu'),
|
887 |
-
'type' => 'colour',
|
888 |
-
'semi_pro' => true
|
889 |
-
],
|
890 |
-
],
|
891 |
-
__('Toggle Button Border Colours', 'responsive-menu') =>
|
892 |
-
[
|
893 |
-
[
|
894 |
-
'option' => 'menu_sub_arrow_border_colour',
|
895 |
-
'title' => __('Border Colour', 'responsive-menu'),
|
896 |
-
'label' => __('', 'responsive-menu'),
|
897 |
-
'type' => 'colour',
|
898 |
-
'semi_pro' => true
|
899 |
-
],
|
900 |
-
[
|
901 |
-
'option' => 'menu_sub_arrow_border_hover_colour',
|
902 |
-
'title' => __('Border Hover Colour', 'responsive-menu'),
|
903 |
-
'label' => __('', 'responsive-menu'),
|
904 |
-
'type' => 'colour',
|
905 |
-
'semi_pro' => true
|
906 |
-
],
|
907 |
-
[
|
908 |
-
'option' => 'menu_sub_arrow_border_colour_active',
|
909 |
-
'title' => __('Border Colour Active', 'responsive-menu'),
|
910 |
-
'label' => __('', 'responsive-menu'),
|
911 |
-
'type' => 'colour',
|
912 |
-
'semi_pro' => true
|
913 |
-
],
|
914 |
-
[
|
915 |
-
'option' => 'menu_sub_arrow_border_hover_colour_active',
|
916 |
-
'title' => __('Border Hover Colour Active', 'responsive-menu'),
|
917 |
-
'label' => __('', 'responsive-menu'),
|
918 |
-
'type' => 'colour',
|
919 |
-
'semi_pro' => true
|
920 |
-
],
|
921 |
-
],
|
922 |
-
__('Toggle Button Icon Colours', 'responsive-menu') =>
|
923 |
-
[
|
924 |
-
[
|
925 |
-
'option' => 'menu_sub_arrow_shape_colour',
|
926 |
-
'title' => __('Icon Colour', 'responsive-menu'),
|
927 |
-
'label' => __('', 'responsive-menu'),
|
928 |
-
'type' => 'colour',
|
929 |
-
'semi_pro' => true
|
930 |
-
],
|
931 |
-
[
|
932 |
-
'option' => 'menu_sub_arrow_shape_hover_colour',
|
933 |
-
'title' => __('Icon Hover Colour', 'responsive-menu'),
|
934 |
-
'label' => __('', 'responsive-menu'),
|
935 |
-
'type' => 'colour',
|
936 |
-
'semi_pro' => true
|
937 |
-
],
|
938 |
-
[
|
939 |
-
'option' => 'menu_sub_arrow_shape_colour_active',
|
940 |
-
'title' => __('Icon Colour Active', 'responsive-menu'),
|
941 |
-
'label' => __('', 'responsive-menu'),
|
942 |
-
'type' => 'colour',
|
943 |
-
'semi_pro' => true
|
944 |
-
],
|
945 |
-
[
|
946 |
-
'option' => 'menu_sub_arrow_shape_hover_colour_active',
|
947 |
-
'title' => __('Icon Hover Colour Active', 'responsive-menu'),
|
948 |
-
'label' => __('', 'responsive-menu'),
|
949 |
-
'type' => 'colour',
|
950 |
-
'semi_pro' => true
|
951 |
-
],
|
952 |
-
],
|
953 |
-
__('Animations', 'responsive-menu') =>
|
954 |
-
[
|
955 |
-
[
|
956 |
-
'option' => 'accordion_animation',
|
957 |
-
'title' => __('Use Accordion Animation', 'responsive-menu'),
|
958 |
-
'label' => __('', 'responsive-menu'),
|
959 |
-
'type' => 'checkbox'
|
960 |
-
],
|
961 |
-
[
|
962 |
-
'option' => 'auto_expand_all_submenus',
|
963 |
-
'title' => __('Auto Expand All Submenus', 'responsive-menu'),
|
964 |
-
'label' => __('', 'responsive-menu'),
|
965 |
-
'type' => 'checkbox'
|
966 |
-
],
|
967 |
-
[
|
968 |
-
'option' => 'auto_expand_current_submenus',
|
969 |
-
'title' => __('Auto Expand Current Submenus', 'responsive-menu'),
|
970 |
-
'label' => __('', 'responsive-menu'),
|
971 |
-
'type' => 'checkbox'
|
972 |
-
],
|
973 |
-
[
|
974 |
-
'option' => 'menu_item_click_to_trigger_submenu',
|
975 |
-
'title' => __('Disable Parent Item Clicks', 'responsive-menu'),
|
976 |
-
'label' => __('', 'responsive-menu'),
|
977 |
-
'type' => 'checkbox'
|
978 |
-
],
|
979 |
-
[
|
980 |
-
'option' => 'use_slide_effect',
|
981 |
-
'title' => __('Use slide effect instead of drop-down', 'responsive-menu'),
|
982 |
-
'label' => __('', 'responsive-menu'),
|
983 |
-
'type' => 'checkbox',
|
984 |
-
'pro' => true,
|
985 |
-
'beta' => true
|
986 |
-
]
|
987 |
-
],
|
988 |
-
__('Fade Links In', 'responsive-menu') =>
|
989 |
-
[
|
990 |
-
[
|
991 |
-
'option' => 'fade_submenus',
|
992 |
-
'title' => __('Enabled', 'responsive-menu'),
|
993 |
-
'label' => __('', 'responsive-menu'),
|
994 |
-
'type' => 'checkbox',
|
995 |
-
'pro' => true
|
996 |
-
],
|
997 |
-
[
|
998 |
-
'option' => 'fade_submenus_side',
|
999 |
-
'title' => __('Fade from side', 'responsive-menu'),
|
1000 |
-
'label' => __('', 'responsive-menu'),
|
1001 |
-
'type' => 'select',
|
1002 |
-
'select' => [
|
1003 |
-
['value' => 'left', 'display' => 'Left'],
|
1004 |
-
['value' => 'right', 'display' => 'Right']
|
1005 |
-
],
|
1006 |
-
'pro' => true
|
1007 |
-
],
|
1008 |
-
[
|
1009 |
-
'option' => 'fade_submenus_delay',
|
1010 |
-
'title' => __('Delay between items', 'responsive-menu'),
|
1011 |
-
'label' => __('', 'responsive-menu'),
|
1012 |
-
'unit' => 'ms',
|
1013 |
-
'pro' => true
|
1014 |
-
],
|
1015 |
-
[
|
1016 |
-
'option' => 'fade_submenus_speed',
|
1017 |
-
'title' => __('Speed of fade', 'responsive-menu'),
|
1018 |
-
'label' => __('', 'responsive-menu'),
|
1019 |
-
'unit' => 'ms',
|
1020 |
-
'pro' => true
|
1021 |
-
]
|
1022 |
-
],
|
1023 |
-
__('Sizing', 'responsive-menu') =>
|
1024 |
-
[
|
1025 |
-
[
|
1026 |
-
'option' => 'submenu_arrow_height',
|
1027 |
-
'title' => __('Toggle Button Height', 'responsive-menu'),
|
1028 |
-
'label' => __('', 'responsive-menu'),
|
1029 |
-
'semi_pro' => true,
|
1030 |
-
'sub_options' =>
|
1031 |
-
[
|
1032 |
-
[
|
1033 |
-
'option' => 'submenu_arrow_height_unit',
|
1034 |
-
'type' => 'select',
|
1035 |
-
'select' => $unit_options
|
1036 |
-
]
|
1037 |
-
]
|
1038 |
-
],
|
1039 |
-
[
|
1040 |
-
'option' => 'submenu_arrow_width',
|
1041 |
-
'title' => __('Toggle Button Width', 'responsive-menu'),
|
1042 |
-
'label' => __('', 'responsive-menu'),
|
1043 |
-
'semi_pro' => true,
|
1044 |
-
'sub_options' =>
|
1045 |
-
[
|
1046 |
-
[
|
1047 |
-
'option' => 'submenu_arrow_width_unit',
|
1048 |
-
'type' => 'select',
|
1049 |
-
'select' => $unit_options
|
1050 |
-
]
|
1051 |
-
]
|
1052 |
-
],
|
1053 |
-
|
1054 |
-
],
|
1055 |
-
__('Toggle Icons', 'responsive-menu') =>
|
1056 |
-
[
|
1057 |
-
[
|
1058 |
-
'option' => 'active_arrow_font_icon',
|
1059 |
-
'title' => __('Font Icon Active', 'responsive-menu'),
|
1060 |
-
'label' => __('', 'responsive-menu'),
|
1061 |
-
'pro' => true
|
1062 |
-
],
|
1063 |
-
[
|
1064 |
-
'option' => 'inactive_arrow_font_icon',
|
1065 |
-
'title' => __('Font Icon Inactive', 'responsive-menu'),
|
1066 |
-
'label' => __('', 'responsive-menu'),
|
1067 |
-
'pro' => true
|
1068 |
-
],
|
1069 |
-
[
|
1070 |
-
'option' => 'active_arrow_shape',
|
1071 |
-
'title' => __('HTML Shape Active', 'responsive-menu'),
|
1072 |
-
'label' => __('', 'responsive-menu')
|
1073 |
-
],
|
1074 |
-
[
|
1075 |
-
'option' => 'inactive_arrow_shape',
|
1076 |
-
'title' => __('HTML Shape Inactive', 'responsive-menu'),
|
1077 |
-
'label' => __('', 'responsive-menu')
|
1078 |
-
],
|
1079 |
-
[
|
1080 |
-
'option' => 'active_arrow_image',
|
1081 |
-
'title' => __('Image Active', 'responsive-menu'),
|
1082 |
-
'label' => __('', 'responsive-menu'),
|
1083 |
-
'type' => 'image'
|
1084 |
-
],
|
1085 |
-
[
|
1086 |
-
'option' => 'active_arrow_image_alt',
|
1087 |
-
'title' => __('Alt Text', 'responsive-menu'),
|
1088 |
-
'label' => __('', 'responsive-menu')
|
1089 |
-
],
|
1090 |
-
[
|
1091 |
-
'option' => 'inactive_arrow_image',
|
1092 |
-
'title' => __('Image Inactive', 'responsive-menu'),
|
1093 |
-
'label' => __('', 'responsive-menu'),
|
1094 |
-
'type' => 'image'
|
1095 |
-
],
|
1096 |
-
[
|
1097 |
-
'option' => 'inactive_arrow_image_alt',
|
1098 |
-
'title' => __('Alt Text', 'responsive-menu'),
|
1099 |
-
'label' => __('', 'responsive-menu')
|
1100 |
-
],
|
1101 |
-
[
|
1102 |
-
'option' => 'arrow_position',
|
1103 |
-
'title' => __('Icon Position', 'responsive-menu'),
|
1104 |
-
'label' => __('', 'responsive-menu'),
|
1105 |
-
'type' => 'select',
|
1106 |
-
'select' => [
|
1107 |
-
['value' => 'left', 'display' => 'Left'],
|
1108 |
-
['value' => 'right', 'display' => 'Right']
|
1109 |
-
],
|
1110 |
-
]
|
1111 |
-
],
|
1112 |
-
],
|
1113 |
-
|
1114 |
-
/*
|
1115 |
-
*
|
1116 |
-
* TECHNICAL
|
1117 |
-
*
|
1118 |
-
*/
|
1119 |
-
|
1120 |
-
__('Technical', 'responsive-menu') => [
|
1121 |
-
__('Scripts', 'responsive-menu') => [
|
1122 |
-
[
|
1123 |
-
'option' => 'external_files',
|
1124 |
-
'title' => __('Use External Files?', 'responsive-menu'),
|
1125 |
-
'label' => __('This will create external files for CSS and JavaScript', 'responsive-menu'),
|
1126 |
-
'type' => 'checkbox'
|
1127 |
-
],
|
1128 |
-
[
|
1129 |
-
'option' => 'minify_scripts',
|
1130 |
-
'title' => __('Minify Scripts?', 'responsive-menu'),
|
1131 |
-
'label' => __('This will minify CSS and JavaScript output', 'responsive-menu'),
|
1132 |
-
'type' => 'checkbox'
|
1133 |
-
],
|
1134 |
-
[
|
1135 |
-
'option' => 'scripts_in_footer',
|
1136 |
-
'title' => __('Place Scripts In Footer?', 'responsive-menu'),
|
1137 |
-
'label' => __('This will place the JavaScript file in the footer', 'responsive-menu'),
|
1138 |
-
'type' => 'checkbox'
|
1139 |
-
]
|
1140 |
-
],
|
1141 |
-
__('Menu', 'responsive-menu') => [
|
1142 |
-
[
|
1143 |
-
'option' => 'custom_walker',
|
1144 |
-
'title' => __('Custom Walker', 'responsive-menu'),
|
1145 |
-
'label' => __('Warning: For extremely advanced use only', 'responsive-menu'),
|
1146 |
-
],
|
1147 |
-
[
|
1148 |
-
'option' => 'mobile_only',
|
1149 |
-
'title' => __('Show on mobile devices only?', 'responsive-menu'),
|
1150 |
-
'label' => __('This will make it not a responsive menu but a "mobile menu"', 'responsive-menu'),
|
1151 |
-
'type' => 'checkbox',
|
1152 |
-
'pro' => true
|
1153 |
-
],
|
1154 |
-
[
|
1155 |
-
'option' => 'shortcode',
|
1156 |
-
'title' => __('Use Shortcode?', 'responsive-menu'),
|
1157 |
-
'label' => __('Please place [responsive_menu] in your files to use. Full documentation can be found <a target="_blank" href="https://responsive.menu/docs/advanced-setup/shortcode/">here</a>', 'responsive-menu'),
|
1158 |
-
'type' => 'checkbox'
|
1159 |
-
]
|
1160 |
-
],
|
1161 |
-
__('Animation Speeds', 'responsive-menu') =>
|
1162 |
-
[
|
1163 |
-
[
|
1164 |
-
'option' => 'animation_speed',
|
1165 |
-
'title' => __('Animation Speed', 'responsive-menu'),
|
1166 |
-
'label' => __('', 'responsive-menu'),
|
1167 |
-
'unit' => 's'
|
1168 |
-
],
|
1169 |
-
[
|
1170 |
-
'option' => 'transition_speed',
|
1171 |
-
'title' => __('Transition Speed', 'responsive-menu'),
|
1172 |
-
'label' => __('', 'responsive-menu'),
|
1173 |
-
'unit' => 's'
|
1174 |
-
]
|
1175 |
-
],
|
1176 |
-
],
|
1177 |
-
/*
|
1178 |
-
*
|
1179 |
-
* CUSTOM CSS
|
1180 |
-
*
|
1181 |
-
*/
|
1182 |
-
|
1183 |
-
__('Custom CSS', 'responsive-menu') => [
|
1184 |
-
__('CSS', 'responsive-menu') => [
|
1185 |
-
[
|
1186 |
-
'option' => 'custom_css',
|
1187 |
-
'title' => __('Custom CSS', 'responsive-menu'),
|
1188 |
-
'label' => __('', 'responsive-menu'),
|
1189 |
-
'type' => 'textarea',
|
1190 |
-
'pro' => true
|
1191 |
-
]
|
1192 |
-
]
|
1193 |
-
],
|
1194 |
-
/*
|
1195 |
-
*
|
1196 |
-
* HEADER BAR
|
1197 |
-
*
|
1198 |
-
*/
|
1199 |
-
__('Header Bar', 'responsive-menu') => [
|
1200 |
-
__('Setup', 'responsive-menu') => [
|
1201 |
-
[
|
1202 |
-
'option' => 'use_header_bar',
|
1203 |
-
'title' => __('Use Header Bar', 'responsive-menu'),
|
1204 |
-
'label' => __('', 'responsive-menu'),
|
1205 |
-
'type' => 'checkbox',
|
1206 |
-
'pro' => true
|
1207 |
-
],
|
1208 |
-
[
|
1209 |
-
'option' => 'header_bar_position_type',
|
1210 |
-
'title' => __('Position Type', 'responsive-menu'),
|
1211 |
-
'label' => __('', 'responsive-menu'),
|
1212 |
-
'type' => 'select',
|
1213 |
-
'select' => [
|
1214 |
-
['value' => 'fixed', 'display' => 'Fixed'],
|
1215 |
-
['value' => 'relative', 'display' => 'Relative'],
|
1216 |
-
['value' => 'absolute', 'display' => 'Absolute']
|
1217 |
-
],
|
1218 |
-
'pro' => true
|
1219 |
-
],
|
1220 |
-
[
|
1221 |
-
'option' => 'header_bar_breakpoint',
|
1222 |
-
'title' => __('Breakpoint', 'responsive-menu'),
|
1223 |
-
'label' => __('', 'responsive-menu'),
|
1224 |
-
'unit' => 'px',
|
1225 |
-
'pro' => true
|
1226 |
-
],
|
1227 |
-
],
|
1228 |
-
__('Ordering', 'responsive-menu') => [
|
1229 |
-
[
|
1230 |
-
'option' => 'header_bar_items_order',
|
1231 |
-
'title' => __('Ordering', 'responsive-menu'),
|
1232 |
-
'label' => __('', 'responsive-menu'),
|
1233 |
-
'type' => 'header_ordering',
|
1234 |
-
'pro' => true
|
1235 |
-
]
|
1236 |
-
],
|
1237 |
-
__('Logo', 'responsive-menu') => [
|
1238 |
-
[
|
1239 |
-
'option' => 'header_bar_logo',
|
1240 |
-
'title' => __('Image', 'responsive-menu'),
|
1241 |
-
'label' => __('', 'responsive-menu'),
|
1242 |
-
'type' => 'image',
|
1243 |
-
'pro' => true
|
1244 |
-
],
|
1245 |
-
[
|
1246 |
-
'option' => 'header_bar_logo_alt',
|
1247 |
-
'title' => __('Alt Text', 'responsive-menu'),
|
1248 |
-
'label' => __('', 'responsive-menu'),
|
1249 |
-
'pro' => true
|
1250 |
-
],
|
1251 |
-
[
|
1252 |
-
'option' => 'header_bar_logo_link',
|
1253 |
-
'title' => __('Link', 'responsive-menu'),
|
1254 |
-
'label' => __('', 'responsive-menu'),
|
1255 |
-
'pro' => true
|
1256 |
-
],
|
1257 |
-
],
|
1258 |
-
__('Title', 'responsive-menu') => [
|
1259 |
-
[
|
1260 |
-
'option' => 'header_bar_title',
|
1261 |
-
'title' => __('Title', 'responsive-menu'),
|
1262 |
-
'label' => __('', 'responsive-menu'),
|
1263 |
-
'pro' => true
|
1264 |
-
]
|
1265 |
-
],
|
1266 |
-
__('Content', 'responsive-menu') => [
|
1267 |
-
[
|
1268 |
-
'option' => 'header_bar_html_content',
|
1269 |
-
'title' => __('HTML Content', 'responsive-menu'),
|
1270 |
-
'label' => __('Accepts shortcodes', 'responsive-menu'),
|
1271 |
-
'type' => 'textarea',
|
1272 |
-
'pro' => true
|
1273 |
-
]
|
1274 |
-
],
|
1275 |
-
__('Text', 'responsive-menu') => [
|
1276 |
-
[
|
1277 |
-
'option' => 'header_bar_font',
|
1278 |
-
'title' => __('Font', 'responsive-menu'),
|
1279 |
-
'label' => __('', 'responsive-menu'),
|
1280 |
-
'pro' => true
|
1281 |
-
],
|
1282 |
-
[
|
1283 |
-
'option' => 'header_bar_font_size',
|
1284 |
-
'title' => __('Font Size', 'responsive-menu'),
|
1285 |
-
'label' => __('', 'responsive-menu'),
|
1286 |
-
'pro' => true,
|
1287 |
-
'sub_options' =>
|
1288 |
-
[
|
1289 |
-
[
|
1290 |
-
'option' => 'header_bar_font_size_unit',
|
1291 |
-
'type' => 'select',
|
1292 |
-
'select' => $unit_options
|
1293 |
-
]
|
1294 |
-
]
|
1295 |
-
],
|
1296 |
-
],
|
1297 |
-
__('Sizing', 'responsive-menu') => [
|
1298 |
-
[
|
1299 |
-
'option' => 'header_bar_height',
|
1300 |
-
'title' => __('Height', 'responsive-menu'),
|
1301 |
-
'label' => __('', 'responsive-menu'),
|
1302 |
-
'pro' => true,
|
1303 |
-
'sub_options' =>
|
1304 |
-
[
|
1305 |
-
[
|
1306 |
-
'option' => 'header_bar_height_unit',
|
1307 |
-
'type' => 'select',
|
1308 |
-
'select' => $unit_options
|
1309 |
-
]
|
1310 |
-
]
|
1311 |
-
],
|
1312 |
-
],
|
1313 |
-
__('Colours', 'responsive-menu') => [
|
1314 |
-
[
|
1315 |
-
'option' => 'header_bar_background_color',
|
1316 |
-
'title' => __('Background Colour', 'responsive-menu'),
|
1317 |
-
'label' => __('', 'responsive-menu'),
|
1318 |
-
'type' => 'colour',
|
1319 |
-
'pro' => true
|
1320 |
-
],
|
1321 |
-
[
|
1322 |
-
'option' => 'header_bar_text_color',
|
1323 |
-
'title' => __('Text Colour', 'responsive-menu'),
|
1324 |
-
'label' => __('', 'responsive-menu'),
|
1325 |
-
'type' => 'colour',
|
1326 |
-
'pro' => true
|
1327 |
-
],
|
1328 |
-
],
|
1329 |
-
],
|
1330 |
-
|
1331 |
-
/*
|
1332 |
-
*
|
1333 |
-
* SINGLE MENU
|
1334 |
-
*
|
1335 |
-
*/
|
1336 |
-
__('Single Menu', 'responsive-menu') => [
|
1337 |
-
__('Setup', 'responsive-menu') => [
|
1338 |
-
[
|
1339 |
-
'option' => 'use_single_menu',
|
1340 |
-
'title' => __('Use Single Menu', 'responsive-menu'),
|
1341 |
-
'label' => __('To use this option you must turn the Shortcode option on and use the shortcode in your theme where you want the menu to appear', 'responsive-menu'),
|
1342 |
-
'type' => 'checkbox',
|
1343 |
-
'pro' => true
|
1344 |
-
]
|
1345 |
-
],
|
1346 |
-
__('Menu Colours', 'responsive-menu') => [
|
1347 |
-
[
|
1348 |
-
'option' => 'single_menu_item_background_colour',
|
1349 |
-
'title' => __('Background Colour', 'responsive-menu'),
|
1350 |
-
'label' => __('', 'responsive-menu'),
|
1351 |
-
'type' => 'colour',
|
1352 |
-
'pro' => true
|
1353 |
-
],
|
1354 |
-
[
|
1355 |
-
'option' => 'single_menu_item_background_colour_hover',
|
1356 |
-
'title' => __('Background Hover Colour', 'responsive-menu'),
|
1357 |
-
'label' => __('', 'responsive-menu'),
|
1358 |
-
'type' => 'colour',
|
1359 |
-
'pro' => true
|
1360 |
-
],
|
1361 |
-
[
|
1362 |
-
'option' => 'single_menu_item_link_colour',
|
1363 |
-
'title' => __('Text Colour', 'responsive-menu'),
|
1364 |
-
'label' => __('', 'responsive-menu'),
|
1365 |
-
'type' => 'colour',
|
1366 |
-
'pro' => true
|
1367 |
-
],
|
1368 |
-
[
|
1369 |
-
'option' => 'single_menu_item_link_colour_hover',
|
1370 |
-
'title' => __('Text Hover Colour', 'responsive-menu'),
|
1371 |
-
'label' => __('', 'responsive-menu'),
|
1372 |
-
'type' => 'colour',
|
1373 |
-
'pro' => true
|
1374 |
-
],
|
1375 |
-
],
|
1376 |
-
__('Sub-Menu Colours', 'responsive-menu') => [
|
1377 |
-
[
|
1378 |
-
'option' => 'single_menu_item_submenu_background_colour',
|
1379 |
-
'title' => __('Background Colour', 'responsive-menu'),
|
1380 |
-
'label' => __('', 'responsive-menu'),
|
1381 |
-
'type' => 'colour',
|
1382 |
-
'pro' => true
|
1383 |
-
],
|
1384 |
-
[
|
1385 |
-
'option' => 'single_menu_item_submenu_background_colour_hover',
|
1386 |
-
'title' => __('Background Hover Colour', 'responsive-menu'),
|
1387 |
-
'label' => __('', 'responsive-menu'),
|
1388 |
-
'type' => 'colour',
|
1389 |
-
'pro' => true
|
1390 |
-
],
|
1391 |
-
[
|
1392 |
-
'option' => 'single_menu_item_submenu_link_colour',
|
1393 |
-
'title' => __('Text Colour', 'responsive-menu'),
|
1394 |
-
'label' => __('', 'responsive-menu'),
|
1395 |
-
'type' => 'colour',
|
1396 |
-
'pro' => true
|
1397 |
-
],
|
1398 |
-
[
|
1399 |
-
'option' => 'single_menu_item_submenu_link_colour_hover',
|
1400 |
-
'title' => __('Text Hover Colour', 'responsive-menu'),
|
1401 |
-
'label' => __('', 'responsive-menu'),
|
1402 |
-
'type' => 'colour',
|
1403 |
-
'pro' => true
|
1404 |
-
]
|
1405 |
-
],
|
1406 |
-
__('Menu Styling', 'responsive-menu') => [
|
1407 |
-
[
|
1408 |
-
'option' => 'single_menu_font',
|
1409 |
-
'title' => __('Font', 'responsive-menu'),
|
1410 |
-
'label' => __('', 'responsive-menu'),
|
1411 |
-
'pro' => true
|
1412 |
-
],
|
1413 |
-
[
|
1414 |
-
'option' => 'single_menu_font_size',
|
1415 |
-
'title' => __('Font Size', 'responsive-menu'),
|
1416 |
-
'label' => __('', 'responsive-menu'),
|
1417 |
-
'pro' => true,
|
1418 |
-
'sub_options' =>
|
1419 |
-
[
|
1420 |
-
[
|
1421 |
-
'option' => 'single_menu_font_size_unit',
|
1422 |
-
'type' => 'select',
|
1423 |
-
'select' => $unit_options
|
1424 |
-
]
|
1425 |
-
]
|
1426 |
-
]
|
1427 |
-
],
|
1428 |
-
__('Sub-Menu Styling', 'responsive-menu') => [
|
1429 |
-
[
|
1430 |
-
'option' => 'single_menu_submenu_font',
|
1431 |
-
'title' => __('Font', 'responsive-menu'),
|
1432 |
-
'label' => __('', 'responsive-menu'),
|
1433 |
-
'pro' => true
|
1434 |
-
],
|
1435 |
-
[
|
1436 |
-
'option' => 'single_menu_submenu_font_size',
|
1437 |
-
'title' => __('Font Size', 'responsive-menu'),
|
1438 |
-
'label' => __('', 'responsive-menu'),
|
1439 |
-
'pro' => true,
|
1440 |
-
'sub_options' =>
|
1441 |
-
[
|
1442 |
-
[
|
1443 |
-
'option' => 'single_menu_submenu_font_size_unit',
|
1444 |
-
'type' => 'select',
|
1445 |
-
'select' => $unit_options
|
1446 |
-
]
|
1447 |
-
]
|
1448 |
-
]
|
1449 |
-
],
|
1450 |
-
__('Menu Sizing', 'responsive-menu') => [
|
1451 |
-
[
|
1452 |
-
'option' => 'single_menu_height',
|
1453 |
-
'title' => __('Height', 'responsive-menu'),
|
1454 |
-
'label' => __('', 'responsive-menu'),
|
1455 |
-
'pro' => true,
|
1456 |
-
'sub_options' =>
|
1457 |
-
[
|
1458 |
-
[
|
1459 |
-
'option' => 'single_menu_height_unit',
|
1460 |
-
'type' => 'select',
|
1461 |
-
'select' => $unit_options
|
1462 |
-
]
|
1463 |
-
]
|
1464 |
-
]
|
1465 |
-
],
|
1466 |
-
__('Sub-Menu Sizing', 'responsive-menu') => [
|
1467 |
-
[
|
1468 |
-
'option' => 'single_menu_submenu_height',
|
1469 |
-
'title' => __('Height', 'responsive-menu'),
|
1470 |
-
'label' => __('', 'responsive-menu'),
|
1471 |
-
'pro' => true,
|
1472 |
-
'sub_options' =>
|
1473 |
-
[
|
1474 |
-
[
|
1475 |
-
'option' => 'single_menu_submenu_height_unit',
|
1476 |
-
'type' => 'select',
|
1477 |
-
'select' => $unit_options
|
1478 |
-
]
|
1479 |
-
]
|
1480 |
-
]
|
1481 |
-
]
|
1482 |
-
],
|
1483 |
-
'Import/Export' => [
|
1484 |
-
__('Import/Export', 'responsive-menu') => [
|
1485 |
-
[
|
1486 |
-
'option' => 'import',
|
1487 |
-
'title' => __('Import', 'responsive-menu'),
|
1488 |
-
'label' => __('', 'responsive-menu'),
|
1489 |
-
'type' => 'import'
|
1490 |
-
],
|
1491 |
-
[
|
1492 |
-
'option' => 'export',
|
1493 |
-
'title' => __('Export', 'responsive-menu'),
|
1494 |
-
'label' => __('', 'responsive-menu'),
|
1495 |
-
'type' => 'export'
|
1496 |
-
],
|
1497 |
-
[
|
1498 |
-
'option' => 'reset',
|
1499 |
-
'title' => __('Reset', 'responsive-menu'),
|
1500 |
-
'label' => __('', 'responsive-menu'),
|
1501 |
-
'type' => 'reset'
|
1502 |
-
]
|
1503 |
-
]
|
1504 |
-
]
|
1505 |
-
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/config/default_options.php
DELETED
@@ -1,202 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
$default_options = [
|
4 |
-
|
5 |
-
'breakpoint' => 800,
|
6 |
-
'menu_to_hide' => '',
|
7 |
-
'menu_depth' => 5,
|
8 |
-
'menu_to_use' => '',
|
9 |
-
'theme_location_menu' => '',
|
10 |
-
|
11 |
-
// Button Settings
|
12 |
-
'button_title' => null,
|
13 |
-
'button_image' => null,
|
14 |
-
'button_image_alt' => null,
|
15 |
-
'button_image_when_clicked' => null,
|
16 |
-
'button_image_alt_when_clicked' => null,
|
17 |
-
'button_font' => null,
|
18 |
-
'button_font_icon' => null,
|
19 |
-
'button_font_icon_when_clicked' => null,
|
20 |
-
'button_click_trigger' => '#responsive-menu-button',
|
21 |
-
'button_title_position' => 'left',
|
22 |
-
'button_title_line_height' => '13',
|
23 |
-
'button_title_line_height_unit' => 'px',
|
24 |
-
'button_background_colour' => '#000',
|
25 |
-
'button_background_colour_hover' => '#000',
|
26 |
-
'button_click_animation' => 'boring',
|
27 |
-
'button_line_colour' => '#fff',
|
28 |
-
'button_text_colour' => '#fff',
|
29 |
-
'button_transparent_background' => 'off',
|
30 |
-
'button_width' => 55,
|
31 |
-
'button_width_unit' => 'px',
|
32 |
-
'button_height' => 55,
|
33 |
-
'button_height_unit' => 'px',
|
34 |
-
'button_line_margin' => 5,
|
35 |
-
'button_line_margin_unit' => 'px',
|
36 |
-
'button_line_height' => 3,
|
37 |
-
'button_line_height_unit' => 'px',
|
38 |
-
'button_line_width' => 25,
|
39 |
-
'button_line_width_unit' => 'px',
|
40 |
-
'button_top' => 15,
|
41 |
-
'button_top_unit' => 'px',
|
42 |
-
'button_distance_from_side' => 5,
|
43 |
-
'button_distance_from_side_unit' => '%',
|
44 |
-
'button_left_or_right' => 'right',
|
45 |
-
'button_position_type' => 'fixed',
|
46 |
-
'button_push_with_animation' => 'off',
|
47 |
-
'button_font_size' => 14,
|
48 |
-
'button_font_size_unit' => 'px',
|
49 |
-
|
50 |
-
// Animation Settings
|
51 |
-
'animation_type' => 'slide',
|
52 |
-
'page_wrapper' => null,
|
53 |
-
'animation_speed' => 0.5,
|
54 |
-
'transition_speed' => 0.5,
|
55 |
-
|
56 |
-
// Menu Settings
|
57 |
-
'active_arrow_shape' => '▲',
|
58 |
-
'inactive_arrow_shape' => '▼',
|
59 |
-
'active_arrow_image' => '',
|
60 |
-
'active_arrow_image_alt' => '',
|
61 |
-
'inactive_arrow_image' => '',
|
62 |
-
'inactive_arrow_image_alt' => '',
|
63 |
-
'active_arrow_font_icon' => '',
|
64 |
-
'inactive_arrow_font_icon' => '',
|
65 |
-
'arrow_position' => 'right',
|
66 |
-
'submenu_arrow_width' => '40',
|
67 |
-
'submenu_arrow_width_unit' => 'px',
|
68 |
-
'submenu_arrow_height' => '40',
|
69 |
-
'submenu_arrow_height_unit' => 'px',
|
70 |
-
'accordion_animation' => 'off',
|
71 |
-
'auto_expand_all_submenus' => 'off',
|
72 |
-
'auto_expand_current_submenus' => 'off',
|
73 |
-
|
74 |
-
'menu_background_colour' => '#212121',
|
75 |
-
'menu_background_image' => '',
|
76 |
-
'menu_item_background_colour' => '#212121',
|
77 |
-
'menu_item_background_hover_colour' => '#3f3f3f',
|
78 |
-
'menu_item_border_colour' => '#212121',
|
79 |
-
'menu_item_border_colour_hover' => '#212121',
|
80 |
-
'menu_title_background_colour' => '#212121',
|
81 |
-
'menu_title_background_hover_colour' => '#212121',
|
82 |
-
'menu_current_item_background_colour' => '#212121',
|
83 |
-
'menu_current_item_background_hover_colour' => '#3f3f3f',
|
84 |
-
'menu_current_item_border_colour' => '#212121',
|
85 |
-
'menu_current_item_border_hover_colour' => '#3f3f3f',
|
86 |
-
'menu_title_colour' => '#fff',
|
87 |
-
'menu_title_hover_colour' => '#fff',
|
88 |
-
'menu_link_colour' => '#fff',
|
89 |
-
'menu_link_hover_colour' => '#fff',
|
90 |
-
'menu_current_link_colour' => '#fff',
|
91 |
-
'menu_current_link_hover_colour' => '#fff',
|
92 |
-
'menu_sub_arrow_border_colour' => '#212121',
|
93 |
-
'menu_sub_arrow_border_hover_colour' => '#3f3f3f',
|
94 |
-
'menu_sub_arrow_border_colour_active' => '#212121',
|
95 |
-
'menu_sub_arrow_border_hover_colour_active' => '#3f3f3f',
|
96 |
-
'menu_sub_arrow_background_colour' => '#212121',
|
97 |
-
'menu_sub_arrow_background_hover_colour' => '#3f3f3f',
|
98 |
-
'menu_sub_arrow_background_colour_active' => '#212121',
|
99 |
-
'menu_sub_arrow_background_hover_colour_active' => '#3f3f3f',
|
100 |
-
'menu_sub_arrow_shape_colour' => '#fff',
|
101 |
-
'menu_sub_arrow_shape_hover_colour' => '#fff',
|
102 |
-
'menu_sub_arrow_shape_colour_active' => '#fff',
|
103 |
-
'menu_sub_arrow_shape_hover_colour_active' => '#fff',
|
104 |
-
'menu_font' => null,
|
105 |
-
'menu_font_size' => 13,
|
106 |
-
'menu_font_size_unit' => 'px',
|
107 |
-
'menu_title_font_size' => 13,
|
108 |
-
'menu_title_font_size_unit' => 'px',
|
109 |
-
'menu_text_alignment' => 'left',
|
110 |
-
'menu_links_height' => 40,
|
111 |
-
'menu_links_height_unit' => 'px',
|
112 |
-
'menu_border_width' => 1,
|
113 |
-
'menu_border_width_unit' => 'px',
|
114 |
-
'menu_minimum_width' => null,
|
115 |
-
'menu_minimum_width_unit' => 'px',
|
116 |
-
'menu_maximum_width' => null,
|
117 |
-
'menu_maximum_width_unit' => 'px',
|
118 |
-
'menu_auto_height' => 'off',
|
119 |
-
'menu_additional_content' => null,
|
120 |
-
'menu_additional_content_colour' => '#fff',
|
121 |
-
'menu_title' => null,
|
122 |
-
'menu_title_image' => null,
|
123 |
-
'menu_title_image_alt' => null,
|
124 |
-
'menu_title_font_icon' => null,
|
125 |
-
'menu_appear_from' => 'left',
|
126 |
-
'menu_title_link' => null,
|
127 |
-
'menu_title_link_location' => '_self',
|
128 |
-
'menu_width' => 75,
|
129 |
-
'menu_width_unit' => '%',
|
130 |
-
'menu_close_on_link_click' => 'off',
|
131 |
-
'menu_close_on_body_click' => 'off',
|
132 |
-
'menu_item_click_to_trigger_submenu' => 'off',
|
133 |
-
'menu_disable_scrolling' => 'off',
|
134 |
-
'menu_overlay' => 'off',
|
135 |
-
'menu_overlay_colour' => 'rgba(0,0,0,0.7)',
|
136 |
-
'menu_font_icons' => '',
|
137 |
-
'menu_search_box_text' => 'Search',
|
138 |
-
'menu_search_box_text_colour' => '#333',
|
139 |
-
'menu_search_box_border_colour' => '#dadada',
|
140 |
-
'menu_search_box_background_colour' => '#fff',
|
141 |
-
'menu_search_box_placholder_colour' => '#C7C7CD',
|
142 |
-
'menu_word_wrap' => 'off',
|
143 |
-
|
144 |
-
'minify_scripts' => 'off',
|
145 |
-
'scripts_in_footer' => 'off',
|
146 |
-
'external_files' => 'off',
|
147 |
-
|
148 |
-
'shortcode' => 'off',
|
149 |
-
'mobile_only' => 'off',
|
150 |
-
'custom_walker' => null,
|
151 |
-
'custom_css' => null,
|
152 |
-
|
153 |
-
'use_single_menu' => 'off',
|
154 |
-
|
155 |
-
'single_menu_height' => '80',
|
156 |
-
'single_menu_height_unit' => 'px',
|
157 |
-
'single_menu_font' => null,
|
158 |
-
'single_menu_font_size' => '14',
|
159 |
-
'single_menu_font_size_unit' => 'px',
|
160 |
-
|
161 |
-
'single_menu_submenu_height' => '40',
|
162 |
-
'single_menu_submenu_height_unit' => 'px',
|
163 |
-
'single_menu_submenu_font' => null,
|
164 |
-
'single_menu_submenu_font_size' => '12',
|
165 |
-
'single_menu_submenu_font_size_unit' => 'px',
|
166 |
-
|
167 |
-
'single_menu_item_link_colour' => '#ffffff',
|
168 |
-
'single_menu_item_link_colour_hover' => '#ffffff',
|
169 |
-
'single_menu_item_background_colour' => '#ffffff',
|
170 |
-
'single_menu_item_background_colour_hover' => '#ffffff',
|
171 |
-
|
172 |
-
'single_menu_item_submenu_link_colour' => '#ffffff',
|
173 |
-
'single_menu_item_submenu_link_colour_hover' => '#ffffff',
|
174 |
-
'single_menu_item_submenu_background_colour' => '#ffffff',
|
175 |
-
'single_menu_item_submenu_background_colour_hover' => '#ffffff',
|
176 |
-
|
177 |
-
'use_header_bar' => 'off',
|
178 |
-
'header_bar_breakpoint' => '800',
|
179 |
-
'header_bar_logo' => null,
|
180 |
-
'header_bar_logo_alt' => '',
|
181 |
-
'header_bar_logo_link' => null,
|
182 |
-
'header_bar_title' => null,
|
183 |
-
'header_bar_html_content' => null,
|
184 |
-
'header_bar_height' => '80',
|
185 |
-
'header_bar_height_unit' => 'px',
|
186 |
-
'header_bar_font_size' => '14',
|
187 |
-
'header_bar_font_size_unit' => 'px',
|
188 |
-
'header_bar_font' => null,
|
189 |
-
'header_bar_background_color' => '#ffffff',
|
190 |
-
'header_bar_text_color' => '#ffffff',
|
191 |
-
'header_bar_position_type' => 'fixed',
|
192 |
-
|
193 |
-
'items_order' => '{"title":"on","menu":"on","search":"on","additional content":"on"}',
|
194 |
-
'header_bar_items_order' => '{"logo":"on","title":"on","search":"on","html content":"on"}',
|
195 |
-
|
196 |
-
'fade_submenus' => 'off',
|
197 |
-
'fade_submenus_side' => 'left',
|
198 |
-
'fade_submenus_delay' => 100,
|
199 |
-
'fade_submenus_speed' => 500,
|
200 |
-
|
201 |
-
'use_slide_effect' => 'off'
|
202 |
-
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/config/internationalise.php
DELETED
@@ -1,29 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
add_action('plugins_loaded', function() {
|
4 |
-
load_plugin_textdomain('responsive-menu', false, basename(dirname(dirname(dirname(__FILE__)))) . '/translations/');
|
5 |
-
});
|
6 |
-
|
7 |
-
if(is_admin()):
|
8 |
-
|
9 |
-
/*
|
10 |
-
Polylang Integration Section */
|
11 |
-
add_action('plugins_loaded', function() use($container) {
|
12 |
-
if(function_exists('pll_register_string')):
|
13 |
-
$service = $container['option_service'];
|
14 |
-
$options = $service->all();
|
15 |
-
|
16 |
-
$menu_to_use = isset($options['menu_to_use']) ? $options['menu_to_use']->getValue() : '';
|
17 |
-
$button_title = isset($options['button_title']) ? $options['button_title']->getValue() : '';
|
18 |
-
$menu_title = isset($options['menu_title']) ? $options['menu_title']->getValue() : '';
|
19 |
-
$menu_title_link = isset($options['menu_title_link']) ? $options['menu_title_link']->getValue() : '';
|
20 |
-
$menu_additional_content = isset($options['menu_additional_content']) ? $options['menu_additional_content']->getValue() : '';
|
21 |
-
|
22 |
-
pll_register_string('menu_to_use', $menu_to_use, 'Responsive Menu');
|
23 |
-
pll_register_string('button_title', $button_title, 'Responsive Menu');
|
24 |
-
pll_register_string('menu_title', $menu_title, 'Responsive Menu');
|
25 |
-
pll_register_string('menu_title_link', $menu_title_link, 'Responsive Menu');
|
26 |
-
pll_register_string('menu_additional_content', $menu_additional_content, 'Responsive Menu');
|
27 |
-
endif;
|
28 |
-
});
|
29 |
-
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/config/option_helpers.php
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
$option_helpers = [
|
4 |
-
'menu_font_icons' => [
|
5 |
-
'filter' => 'ResponsiveMenu\Filters\JsonFilter'
|
6 |
-
],
|
7 |
-
'menu_title' => [
|
8 |
-
'filter' => 'ResponsiveMenu\Filters\HtmlFilter'
|
9 |
-
],
|
10 |
-
'menu_additional_content' => [
|
11 |
-
'filter' => 'ResponsiveMenu\Filters\HtmlFilter'
|
12 |
-
],
|
13 |
-
'items_order' => [
|
14 |
-
'filter' => 'ResponsiveMenu\Filters\JsonFilter'
|
15 |
-
],
|
16 |
-
'header_bar_items_order' => [
|
17 |
-
'filter' => 'ResponsiveMenu\Filters\JsonFilter'
|
18 |
-
],
|
19 |
-
'header_bar_html_content' => [
|
20 |
-
'filter' => 'ResponsiveMenu\Filters\HtmlFilter'
|
21 |
-
]
|
22 |
-
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/config/routing.php
DELETED
@@ -1,55 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
if(is_admin()):
|
4 |
-
add_action('admin_menu', function() use($container) {
|
5 |
-
|
6 |
-
if(isset($_POST['responsive_menu_submit'])):
|
7 |
-
$method = 'update';
|
8 |
-
elseif(isset($_POST['responsive_menu_reset'])):
|
9 |
-
$method = 'reset';
|
10 |
-
elseif(isset($_POST['responsive_menu_export'])):
|
11 |
-
$controller = $container['admin_controller'];
|
12 |
-
$controller->export();
|
13 |
-
elseif(isset($_POST['responsive_menu_import'])):
|
14 |
-
$method = 'import';
|
15 |
-
else:
|
16 |
-
$method = 'index';
|
17 |
-
endif;
|
18 |
-
|
19 |
-
add_menu_page(
|
20 |
-
'Responsive Menu',
|
21 |
-
'Responsive Menu',
|
22 |
-
'manage_options',
|
23 |
-
'responsive-menu',
|
24 |
-
function() use ($method, $container) {
|
25 |
-
$controller = $container['admin_controller'];
|
26 |
-
switch ($method) :
|
27 |
-
case 'update':
|
28 |
-
$controller->$method($container['default_options'], $_POST['menu']);
|
29 |
-
break;
|
30 |
-
case 'reset':
|
31 |
-
$controller->$method($container['default_options']);
|
32 |
-
break;
|
33 |
-
case 'import':
|
34 |
-
$file = $_FILES['responsive_menu_import_file'];
|
35 |
-
$file_options = isset($file['tmp_name']) ? (array) json_decode(file_get_contents($file['tmp_name'])) : null;
|
36 |
-
$controller->$method($container['default_options'], $file_options);
|
37 |
-
break;
|
38 |
-
default:
|
39 |
-
$controller->$method();
|
40 |
-
break;
|
41 |
-
endswitch;
|
42 |
-
},
|
43 |
-
'dashicons-menu');
|
44 |
-
});
|
45 |
-
else:
|
46 |
-
if(isset($_GET['responsive-menu-preview']) && isset($_POST['menu'])):
|
47 |
-
add_action('template_redirect', function() use($container) {
|
48 |
-
$container['front_controller']->preview();
|
49 |
-
});
|
50 |
-
else:
|
51 |
-
add_action('template_redirect', function() use($container) {
|
52 |
-
$container['front_controller']->index();
|
53 |
-
});
|
54 |
-
endif;
|
55 |
-
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/config/services.php
DELETED
@@ -1,164 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
$container = new ResponsiveMenu\Routing\Container();
|
4 |
-
|
5 |
-
$container['current_version'] = function($c) {
|
6 |
-
return '3.0.18';
|
7 |
-
};
|
8 |
-
|
9 |
-
$container['option_helpers'] = function($c) {
|
10 |
-
include dirname(__FILE__) . '/option_helpers.php';
|
11 |
-
return $option_helpers;
|
12 |
-
};
|
13 |
-
|
14 |
-
$container['default_options'] = function($c) {
|
15 |
-
include dirname(__FILE__) . '/default_options.php';
|
16 |
-
return $default_options;
|
17 |
-
};
|
18 |
-
|
19 |
-
$container['site_id'] = get_current_blog_id();
|
20 |
-
|
21 |
-
$container['database'] = function($c) {
|
22 |
-
global $wpdb;
|
23 |
-
return new ResponsiveMenu\Database\WpDatabase($wpdb);
|
24 |
-
};
|
25 |
-
|
26 |
-
$container['translator'] = function($c) {
|
27 |
-
return new ResponsiveMenu\Translation\Translator;
|
28 |
-
};
|
29 |
-
|
30 |
-
$container['minifier'] = function($c) {
|
31 |
-
return new ResponsiveMenu\Formatters\Minify;
|
32 |
-
};
|
33 |
-
|
34 |
-
$container['js_mapper'] = function($c) {
|
35 |
-
return new ResponsiveMenu\Mappers\JsMapper;
|
36 |
-
};
|
37 |
-
|
38 |
-
$container['js_factory'] = function($c) {
|
39 |
-
return new ResponsiveMenu\Factories\JsFactory(
|
40 |
-
$c['js_mapper'],
|
41 |
-
$c['minifier']
|
42 |
-
);
|
43 |
-
};
|
44 |
-
|
45 |
-
$container['scss_compiler'] = function($c) {
|
46 |
-
return new scssc_free;
|
47 |
-
};
|
48 |
-
|
49 |
-
$container['css_base_mapper'] = function($c) {
|
50 |
-
return new ResponsiveMenu\Mappers\ScssBaseMapper($c['scss_compiler']);
|
51 |
-
};
|
52 |
-
|
53 |
-
$container['css_button_mapper'] = function($c) {
|
54 |
-
return new ResponsiveMenu\Mappers\ScssButtonMapper($c['scss_compiler']);
|
55 |
-
};
|
56 |
-
|
57 |
-
$container['css_menu_mapper'] = function($c) {
|
58 |
-
return new ResponsiveMenu\Mappers\ScssMenuMapper($c['scss_compiler']);
|
59 |
-
};
|
60 |
-
|
61 |
-
$container['css_factory'] = function($c) {
|
62 |
-
return new ResponsiveMenu\Factories\CssFactory(
|
63 |
-
$c['minifier'],
|
64 |
-
$c['css_base_mapper'],
|
65 |
-
$c['css_button_mapper'],
|
66 |
-
$c['css_menu_mapper']
|
67 |
-
);
|
68 |
-
};
|
69 |
-
|
70 |
-
$container['scripts_builder'] = function($c) {
|
71 |
-
return new ResponsiveMenu\Filesystem\ScriptsBuilder(
|
72 |
-
$c['css_factory'],
|
73 |
-
$c['js_factory'],
|
74 |
-
new ResponsiveMenu\Filesystem\FileCreator,
|
75 |
-
new ResponsiveMenu\Filesystem\FolderCreator,
|
76 |
-
$c['site_id']
|
77 |
-
);
|
78 |
-
};
|
79 |
-
|
80 |
-
$container['option_factory'] = function($c) {
|
81 |
-
return new ResponsiveMenu\Factories\OptionFactory(
|
82 |
-
$c['default_options'],
|
83 |
-
$c['option_helpers']
|
84 |
-
);
|
85 |
-
};
|
86 |
-
|
87 |
-
$container['option_repository'] = function($c) {
|
88 |
-
return new ResponsiveMenu\Repositories\OptionRepository(
|
89 |
-
$c['database'],
|
90 |
-
$c['option_factory'],
|
91 |
-
$c['default_options']
|
92 |
-
);
|
93 |
-
};
|
94 |
-
|
95 |
-
$container['option_service'] = function($c) {
|
96 |
-
return new ResponsiveMenu\Services\OptionService(
|
97 |
-
$c['option_repository'],
|
98 |
-
$c['option_factory'],
|
99 |
-
$c['translator'],
|
100 |
-
$c['scripts_builder']
|
101 |
-
);
|
102 |
-
};
|
103 |
-
|
104 |
-
$container['old_version'] = function($c) {
|
105 |
-
return get_option('RMVer');
|
106 |
-
};
|
107 |
-
|
108 |
-
$container['old_options'] = function($c) {
|
109 |
-
return get_option('RMOptions');
|
110 |
-
};
|
111 |
-
|
112 |
-
$container['migration'] = function($c) {
|
113 |
-
return new ResponsiveMenu\Database\Migration(
|
114 |
-
$c['database'],
|
115 |
-
$c['option_service'],
|
116 |
-
$c['default_options'],
|
117 |
-
$c['current_version'],
|
118 |
-
$c['old_version'],
|
119 |
-
$c['old_options']
|
120 |
-
);
|
121 |
-
};
|
122 |
-
|
123 |
-
$container['admin_view'] = function($c) {
|
124 |
-
return new ResponsiveMenu\View\AdminView;
|
125 |
-
};
|
126 |
-
|
127 |
-
$container['front_view'] = function($c) {
|
128 |
-
return new ResponsiveMenu\View\FrontView(
|
129 |
-
$c['js_factory'],
|
130 |
-
$c['css_factory']
|
131 |
-
);
|
132 |
-
};
|
133 |
-
|
134 |
-
$container['admin_controller'] = function($c) {
|
135 |
-
return new ResponsiveMenu\Controllers\Admin(
|
136 |
-
$c['option_service'],
|
137 |
-
$c['admin_view']
|
138 |
-
);
|
139 |
-
};
|
140 |
-
|
141 |
-
$container['component_factory'] = function($c) {
|
142 |
-
return new ResponsiveMenu\ViewModels\Components\ComponentFactory;
|
143 |
-
};
|
144 |
-
|
145 |
-
$container['button_component'] = function($c) {
|
146 |
-
return new ResponsiveMenu\ViewModels\Components\Button\Button($c['translator']);
|
147 |
-
};
|
148 |
-
|
149 |
-
$container['menu_view'] = function($c) {
|
150 |
-
return new ResponsiveMenu\ViewModels\Menu($c['component_factory']);
|
151 |
-
};
|
152 |
-
|
153 |
-
$container['button_view'] = function($c) {
|
154 |
-
return new ResponsiveMenu\ViewModels\Button($c['button_component']);
|
155 |
-
};
|
156 |
-
|
157 |
-
$container['front_controller'] = function($c) {
|
158 |
-
return new ResponsiveMenu\Controllers\Front(
|
159 |
-
$c['option_service'],
|
160 |
-
$c['front_view'],
|
161 |
-
$c['menu_view'],
|
162 |
-
$c['button_view']
|
163 |
-
);
|
164 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/config/setup.php
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
add_action('init', function() use($container) {
|
4 |
-
$migration = $container['migration'];
|
5 |
-
$migration->setup();
|
6 |
-
$migration->synchronise();
|
7 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/public/css/admin/main.css
DELETED
@@ -1,767 +0,0 @@
|
|
1 |
-
.tab_container {
|
2 |
-
display: none;
|
3 |
-
}
|
4 |
-
|
5 |
-
.tabs_container {
|
6 |
-
margin: 25px 0 15px 0;
|
7 |
-
}
|
8 |
-
|
9 |
-
.responsive-menu-postbox-container {
|
10 |
-
direction: ltr;
|
11 |
-
}
|
12 |
-
|
13 |
-
.wrap .notice,
|
14 |
-
.wrap div.error,
|
15 |
-
.wrap div.updated {
|
16 |
-
margin: 0;
|
17 |
-
}
|
18 |
-
|
19 |
-
#submitdiv {
|
20 |
-
width: 100%;
|
21 |
-
min-width: 100%;
|
22 |
-
}
|
23 |
-
|
24 |
-
#menu-sortable {
|
25 |
-
position: relative;
|
26 |
-
}
|
27 |
-
|
28 |
-
#menu-sortable,
|
29 |
-
#items_order_container td:last-child {
|
30 |
-
width:400px;
|
31 |
-
}
|
32 |
-
|
33 |
-
#postbox_order .fa {
|
34 |
-
position: absolute;
|
35 |
-
right: 3%;
|
36 |
-
top: 13px;
|
37 |
-
}
|
38 |
-
|
39 |
-
#postbox_ordering .fa {
|
40 |
-
position: absolute;
|
41 |
-
left: 47%;
|
42 |
-
bottom: 11px;
|
43 |
-
}
|
44 |
-
|
45 |
-
#postbox_ordering li.draggable {
|
46 |
-
height: 41px;
|
47 |
-
vertical-align: top;
|
48 |
-
}
|
49 |
-
|
50 |
-
.menu-order-option-switch,
|
51 |
-
.order-option-switch {
|
52 |
-
background: #DE4B42;
|
53 |
-
color: white;
|
54 |
-
position: absolute;
|
55 |
-
left: 0;
|
56 |
-
top: 0;
|
57 |
-
bottom: 0;
|
58 |
-
line-height: 40px;
|
59 |
-
padding: 0 5px;
|
60 |
-
width: 30px;
|
61 |
-
text-align: center;
|
62 |
-
cursor: pointer;
|
63 |
-
}
|
64 |
-
|
65 |
-
.menu-order-option-switch.menu-order-option-switch-on,
|
66 |
-
.order-option-switch.order-option-switch-on {
|
67 |
-
background: green;
|
68 |
-
}
|
69 |
-
|
70 |
-
.menu-order-option-switch:after,
|
71 |
-
.order-option-switch:after {
|
72 |
-
content: "OFF";
|
73 |
-
}
|
74 |
-
|
75 |
-
.menu-order-option-switch.menu-order-option-switch-on:after,
|
76 |
-
.order-option-switch.order-option-switch-on:after {
|
77 |
-
content: "ON";
|
78 |
-
}
|
79 |
-
|
80 |
-
li.draggable {
|
81 |
-
position: relative;
|
82 |
-
}
|
83 |
-
|
84 |
-
.postbox > h4 {
|
85 |
-
background: #ffffff none repeat scroll 0 0;
|
86 |
-
border-bottom: 1px solid #eee;
|
87 |
-
box-sizing: border-box;
|
88 |
-
display: block;
|
89 |
-
font-size: 14px;
|
90 |
-
line-height: 1.4;
|
91 |
-
padding: 8px 12px;
|
92 |
-
width: 100%;
|
93 |
-
margin: 0;
|
94 |
-
}
|
95 |
-
|
96 |
-
.add-font-icon {
|
97 |
-
display: inline-block;
|
98 |
-
background: #298CBA;
|
99 |
-
color: white;
|
100 |
-
padding: 10px 25px;
|
101 |
-
border-radius: 2px;
|
102 |
-
cursor: pointer;
|
103 |
-
margin-top: 15px;
|
104 |
-
font-weight: bold;
|
105 |
-
}
|
106 |
-
|
107 |
-
.postbox .inside .image_button,
|
108 |
-
.postbox .inside .image,
|
109 |
-
.postbox .inside .text {
|
110 |
-
padding: 5px 15px;
|
111 |
-
height: 30px;
|
112 |
-
margin-right: 10px;
|
113 |
-
}
|
114 |
-
|
115 |
-
.postbox .inside .select {
|
116 |
-
height: 27px;
|
117 |
-
}
|
118 |
-
|
119 |
-
.postbox .inside .textarea {
|
120 |
-
height: 100px;
|
121 |
-
padding: 15px;
|
122 |
-
width: 100%;
|
123 |
-
}
|
124 |
-
|
125 |
-
.font-icon-container .font-icon-row:first-child {
|
126 |
-
font-weight: bold;
|
127 |
-
}
|
128 |
-
|
129 |
-
.postbox .inside {
|
130 |
-
padding: 0;
|
131 |
-
margin: 0 !important;
|
132 |
-
}
|
133 |
-
|
134 |
-
.postbox .inside table {
|
135 |
-
width: 100%;
|
136 |
-
border-spacing: 0;
|
137 |
-
}
|
138 |
-
|
139 |
-
.postbox .inside table .description {
|
140 |
-
color: #899194;
|
141 |
-
line-height: 16px;
|
142 |
-
font-size: 12px;
|
143 |
-
}
|
144 |
-
|
145 |
-
.postbox .inside table tr td {
|
146 |
-
border-bottom: 1px solid #f5f5f5;
|
147 |
-
vertical-align: middle;
|
148 |
-
}
|
149 |
-
|
150 |
-
.postbox .inside table tr td:first-child {
|
151 |
-
background: #F9F9F9;
|
152 |
-
font-weight: bold;
|
153 |
-
border-right: 1px solid #e1e1e1;
|
154 |
-
color: #333;
|
155 |
-
width: 250px;
|
156 |
-
}
|
157 |
-
|
158 |
-
.postbox .inside table tr td:last-child:hover {
|
159 |
-
background: #EDEAEA;
|
160 |
-
}
|
161 |
-
|
162 |
-
.responsive-menu-pro-overlay {
|
163 |
-
display: none;
|
164 |
-
position: absolute;
|
165 |
-
top: 0;
|
166 |
-
right: 0;
|
167 |
-
left: 0;
|
168 |
-
bottom: 0;
|
169 |
-
background: rgba(222, 75, 66, 0.6);
|
170 |
-
color: white;
|
171 |
-
}
|
172 |
-
|
173 |
-
.postbox .inside table tr td:last-child:hover .responsive-menu-pro-overlay {
|
174 |
-
color: white;
|
175 |
-
display: block;
|
176 |
-
}
|
177 |
-
|
178 |
-
.responsive-menu-pro-overlay-text {
|
179 |
-
top: 50%;
|
180 |
-
transform: translateY(-50%);
|
181 |
-
position: relative;
|
182 |
-
text-align: center;
|
183 |
-
font-size: 12px;
|
184 |
-
font-weight: bold;
|
185 |
-
}
|
186 |
-
|
187 |
-
.beta {
|
188 |
-
color: orange;
|
189 |
-
display: block;
|
190 |
-
}
|
191 |
-
|
192 |
-
.postbox .inside table tr td:last-child {
|
193 |
-
text-align: left;
|
194 |
-
position: relative;
|
195 |
-
}
|
196 |
-
|
197 |
-
input[type="text"].image,
|
198 |
-
.select-style,
|
199 |
-
.inside .minicolors-theme-default.minicolors,
|
200 |
-
.postbox .inside .textarea,
|
201 |
-
.postbox .inside input.text {
|
202 |
-
width: 74%;
|
203 |
-
}
|
204 |
-
|
205 |
-
#normal-sortables .button.submit,
|
206 |
-
.postbox .inside .image_button {
|
207 |
-
background: #298CBA;
|
208 |
-
color: white;
|
209 |
-
border-color: #298CBA;
|
210 |
-
}
|
211 |
-
|
212 |
-
#normal-sortables .button.submit {
|
213 |
-
padding: 0 35px;
|
214 |
-
height: 50px;
|
215 |
-
line-height: 50px;
|
216 |
-
font-weight: bold;
|
217 |
-
font-size: 11px;
|
218 |
-
}
|
219 |
-
|
220 |
-
#normal-sortables .button.submit:hover {
|
221 |
-
background: #40A1CE;
|
222 |
-
}
|
223 |
-
|
224 |
-
.postbox .inside .image_button .fa {
|
225 |
-
vertical-align: text-top;
|
226 |
-
}
|
227 |
-
|
228 |
-
#header_bar_items_order_container td {
|
229 |
-
width: 100%;
|
230 |
-
display: block;
|
231 |
-
padding: 20px;
|
232 |
-
border: 0;
|
233 |
-
box-sizing: border-box;
|
234 |
-
}
|
235 |
-
|
236 |
-
.postbox .inside tr.semi_pro_option td:last-child:before,
|
237 |
-
.postbox .inside tr.pro_option td:last-child:before {
|
238 |
-
content: "PRO";
|
239 |
-
float: right;
|
240 |
-
color: #DE4B42;
|
241 |
-
font-weight: bold;
|
242 |
-
font-size: 9px;
|
243 |
-
margin-top: 6px;
|
244 |
-
border-left: 1px solid #DE4B42;
|
245 |
-
padding-left: 8px;
|
246 |
-
}
|
247 |
-
|
248 |
-
.postbox .inside tr.semi_pro_option td:last-child:before {
|
249 |
-
content: "SEMI PRO";
|
250 |
-
color: #333;
|
251 |
-
border-color: #333;
|
252 |
-
}
|
253 |
-
|
254 |
-
#items_order_container td:last-child,
|
255 |
-
#header_bar_items_order_container td:last-child {
|
256 |
-
text-align: center;
|
257 |
-
}
|
258 |
-
|
259 |
-
.postbox_font_icons .inside
|
260 |
-
{
|
261 |
-
padding: 0;
|
262 |
-
margin-bottom: 0;
|
263 |
-
}
|
264 |
-
|
265 |
-
.postbox .inside .wp-color-picker {
|
266 |
-
cursor: crosshair;
|
267 |
-
}
|
268 |
-
|
269 |
-
#all_options_container,
|
270 |
-
#banner_area
|
271 |
-
{
|
272 |
-
vertical-align: top;
|
273 |
-
display: inline-block;
|
274 |
-
box-sizing: border-box;
|
275 |
-
}
|
276 |
-
|
277 |
-
#all_options_container {
|
278 |
-
width: 74%;
|
279 |
-
}
|
280 |
-
|
281 |
-
#banner_area
|
282 |
-
{
|
283 |
-
width: 24%;
|
284 |
-
margin-top: 1px;
|
285 |
-
margin-left: 2%;
|
286 |
-
}
|
287 |
-
|
288 |
-
#upgrade_banner {
|
289 |
-
padding: 25px 5%;
|
290 |
-
background: #DE4B42;
|
291 |
-
color: #fff;
|
292 |
-
border: 1px solid #D33C34;
|
293 |
-
border-radius: 2px;
|
294 |
-
text-align: center;
|
295 |
-
}
|
296 |
-
|
297 |
-
#upgrade_banner i {
|
298 |
-
margin-right: 5px;
|
299 |
-
}
|
300 |
-
|
301 |
-
#docs_banner {
|
302 |
-
background: #FAB719;
|
303 |
-
padding: 35px;
|
304 |
-
color: #333;
|
305 |
-
margin-top: 15px;
|
306 |
-
text-align: center;
|
307 |
-
}
|
308 |
-
|
309 |
-
#upgrade_banner,
|
310 |
-
#docs_banner {
|
311 |
-
font-size: 18px;
|
312 |
-
font-weight: bold;
|
313 |
-
line-height: 24px;
|
314 |
-
}
|
315 |
-
|
316 |
-
#upgrade_banner li {
|
317 |
-
list-style: none;
|
318 |
-
font-weight: bold;
|
319 |
-
font-size: 11px;
|
320 |
-
}
|
321 |
-
|
322 |
-
#docs_banner .button,
|
323 |
-
#upgrade_banner .button {
|
324 |
-
background: white;
|
325 |
-
padding: 0 25px;
|
326 |
-
height: 50px;
|
327 |
-
line-height: 50px;
|
328 |
-
font-weight: bold;
|
329 |
-
font-size: 13px;
|
330 |
-
color: #333;
|
331 |
-
display: block;
|
332 |
-
margin: auto;
|
333 |
-
width: auto;
|
334 |
-
text-align: center;
|
335 |
-
}
|
336 |
-
|
337 |
-
#docs_banner .button {
|
338 |
-
margin-top: 15px;
|
339 |
-
}
|
340 |
-
|
341 |
-
#options_list_container .tab_container:first-child {
|
342 |
-
display: block;
|
343 |
-
}
|
344 |
-
|
345 |
-
.tab
|
346 |
-
{
|
347 |
-
display: inline-block;
|
348 |
-
padding: 5px;
|
349 |
-
text-align: center;
|
350 |
-
border: 1px solid #CCC;
|
351 |
-
border-radius: 2px;
|
352 |
-
cursor: pointer;
|
353 |
-
background: white;
|
354 |
-
margin: 0 5px 0 0 !important;
|
355 |
-
}
|
356 |
-
|
357 |
-
.tab.active_tab {
|
358 |
-
background: #00A0D2;
|
359 |
-
color: white;
|
360 |
-
border-color: #298CBA;
|
361 |
-
}
|
362 |
-
|
363 |
-
.option_holder
|
364 |
-
{
|
365 |
-
display: inline-block;
|
366 |
-
width: 30%;
|
367 |
-
vertical-align: middle;
|
368 |
-
position: relative;
|
369 |
-
text-align: center;
|
370 |
-
margin-right: 2%;
|
371 |
-
padding: 5px 2% 25px 2%;
|
372 |
-
margin-top: 15px;
|
373 |
-
border: 1px dashed #DADADA;
|
374 |
-
border-radius: 5px;
|
375 |
-
transition: 0.4s all;
|
376 |
-
box-sizing: border-box;
|
377 |
-
}
|
378 |
-
|
379 |
-
.option_holder:hover
|
380 |
-
{
|
381 |
-
background: #F7F2F2;
|
382 |
-
}
|
383 |
-
|
384 |
-
.option_holder h4
|
385 |
-
{
|
386 |
-
margin-bottom: 0;
|
387 |
-
}
|
388 |
-
|
389 |
-
.option_holder h5
|
390 |
-
{
|
391 |
-
margin: 5px 0;
|
392 |
-
font-weight: normal;
|
393 |
-
}
|
394 |
-
|
395 |
-
.option_holder.pro_option
|
396 |
-
{
|
397 |
-
border-color: #ED655E;
|
398 |
-
}
|
399 |
-
|
400 |
-
.option_holder.semi_pro_option {
|
401 |
-
border-color: #DADADA;
|
402 |
-
}
|
403 |
-
|
404 |
-
.options_container
|
405 |
-
{
|
406 |
-
background: white;
|
407 |
-
border: 1px solid #CCC;
|
408 |
-
border-radius: 0 2px 2px 2px;
|
409 |
-
padding: 0 15px 15px 15px;
|
410 |
-
text-align: center;
|
411 |
-
}
|
412 |
-
|
413 |
-
.options_container input,
|
414 |
-
.options_container textarea,
|
415 |
-
.options_container select
|
416 |
-
{
|
417 |
-
width: 90%;
|
418 |
-
border: 1px solid #CCC;
|
419 |
-
border-radius: 2px;
|
420 |
-
padding: 5px;
|
421 |
-
background: white;
|
422 |
-
}
|
423 |
-
|
424 |
-
/* On-Off Buttons */
|
425 |
-
|
426 |
-
.onoffswitch {
|
427 |
-
position: relative; width: 74px;
|
428 |
-
-webkit-user-select:none;
|
429 |
-
-moz-user-select:none;
|
430 |
-
-ms-user-select: none;
|
431 |
-
}
|
432 |
-
|
433 |
-
.onoffswitch-checkbox {
|
434 |
-
display: none;
|
435 |
-
}
|
436 |
-
|
437 |
-
.onoffswitch-label {
|
438 |
-
display: block;
|
439 |
-
overflow: hidden;
|
440 |
-
cursor: pointer;
|
441 |
-
border: 2px solid transparent;
|
442 |
-
text-align: left;
|
443 |
-
}
|
444 |
-
|
445 |
-
.onoffswitch-inner {
|
446 |
-
display: block;
|
447 |
-
width: 200%;
|
448 |
-
margin-left: -100%;
|
449 |
-
transition: margin 0.3s ease-in 0s;
|
450 |
-
}
|
451 |
-
|
452 |
-
.onoffswitch-inner:before,
|
453 |
-
.onoffswitch-inner:after {
|
454 |
-
display: block;
|
455 |
-
float: left;
|
456 |
-
width: 50%;
|
457 |
-
height: 23px;
|
458 |
-
padding: 0;
|
459 |
-
line-height: 23px;
|
460 |
-
font-size: 14px;
|
461 |
-
color: white;
|
462 |
-
font-family: Trebuchet, Arial, sans-serif;
|
463 |
-
font-weight: bold;
|
464 |
-
box-sizing: border-box;
|
465 |
-
}
|
466 |
-
|
467 |
-
.onoffswitch-inner:before {
|
468 |
-
content: "ON";
|
469 |
-
padding-left: 10px;
|
470 |
-
background-color: transparent;
|
471 |
-
color: green;
|
472 |
-
}
|
473 |
-
|
474 |
-
.onoffswitch-inner:after {
|
475 |
-
content: "OFF";
|
476 |
-
padding-right: 10px;
|
477 |
-
background-color: transparent;
|
478 |
-
color: #de4b42;
|
479 |
-
text-align: right;
|
480 |
-
}
|
481 |
-
|
482 |
-
.onoffswitch-switch {
|
483 |
-
display: block;
|
484 |
-
width: 13px;
|
485 |
-
margin: 5px;
|
486 |
-
background: #FFFFFF;
|
487 |
-
position: absolute;
|
488 |
-
top: 0;
|
489 |
-
bottom: 0;
|
490 |
-
right: 47px;
|
491 |
-
border: 2px solid #999999;
|
492 |
-
border-radius: 12px;
|
493 |
-
transition: all 0.3s ease-in 0s;
|
494 |
-
}
|
495 |
-
|
496 |
-
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
|
497 |
-
margin-left: 0;
|
498 |
-
}
|
499 |
-
|
500 |
-
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
|
501 |
-
right: 0px;
|
502 |
-
}
|
503 |
-
|
504 |
-
input[type="checkbox"]
|
505 |
-
{
|
506 |
-
display: none;
|
507 |
-
}
|
508 |
-
|
509 |
-
.key-container {
|
510 |
-
margin-bottom: 15px;
|
511 |
-
}
|
512 |
-
|
513 |
-
.key-container .key-title {
|
514 |
-
font-weight: bold;
|
515 |
-
display: inline-block;
|
516 |
-
margin-right: 10px;
|
517 |
-
}
|
518 |
-
|
519 |
-
.key-container .key {
|
520 |
-
display: inline-block;
|
521 |
-
font-size: 9px;
|
522 |
-
border: 1px solid #DADADA;
|
523 |
-
border-radius: 2px;
|
524 |
-
padding: 5px 15px 5px 5px;
|
525 |
-
background: white;
|
526 |
-
}
|
527 |
-
|
528 |
-
.key-container .key span {
|
529 |
-
border-right: 1px solid #de4b42;
|
530 |
-
display: inline-block;
|
531 |
-
padding-right: 5px;
|
532 |
-
margin-right: 10px;
|
533 |
-
color: #de4b42;
|
534 |
-
font-size: 9px;
|
535 |
-
font-weight: bold;
|
536 |
-
}
|
537 |
-
|
538 |
-
.key-container .key.key-semi-pro span {
|
539 |
-
color: #333;
|
540 |
-
border-color: #333;
|
541 |
-
}
|
542 |
-
|
543 |
-
.key-container .key.key-pro {
|
544 |
-
margin-right: 15px;
|
545 |
-
}
|
546 |
-
|
547 |
-
.key-container a {
|
548 |
-
text-decoration: none;
|
549 |
-
color: #333;
|
550 |
-
}
|
551 |
-
|
552 |
-
/* End On-Off Buttons */
|
553 |
-
|
554 |
-
/* Nice Select Button Styling */
|
555 |
-
.select-style {
|
556 |
-
border: 1px solid #ccc;
|
557 |
-
border-radius: 3px;
|
558 |
-
cursor: pointer;
|
559 |
-
overflow: hidden;
|
560 |
-
background: #fafafa url("data:image/png;base64,R0lGODlhDwAUAIABAAAAAP///yH5BAEAAAEALAAAAAAPABQAAAIXjI+py+0Po5wH2HsXzmw//lHiSJZmUAAAOw==")no-repeat 95% 50%;
|
561 |
-
}
|
562 |
-
|
563 |
-
.select-style select {
|
564 |
-
width: 110%;
|
565 |
-
border: none;
|
566 |
-
cursor: pointer;
|
567 |
-
box-shadow: none;
|
568 |
-
background: transparent;
|
569 |
-
background-image: none;
|
570 |
-
-webkit-appearance: none;
|
571 |
-
max-width: 115%;
|
572 |
-
padding: 0 10px;
|
573 |
-
}
|
574 |
-
|
575 |
-
.select-style select:focus {
|
576 |
-
outline: none;
|
577 |
-
}
|
578 |
-
|
579 |
-
/* End Select Button Styling */
|
580 |
-
|
581 |
-
/* Text Box Styling */
|
582 |
-
|
583 |
-
input[type="text"].text,
|
584 |
-
input[type="text"].image
|
585 |
-
{
|
586 |
-
padding: 10px 5%;
|
587 |
-
border: 1px solid #c9c9c9;
|
588 |
-
border-bottom: solid 2px #c9c9c9;
|
589 |
-
transition: border 0.3s;
|
590 |
-
}
|
591 |
-
|
592 |
-
input[type="text"].text:focus,
|
593 |
-
input[type="text"].text.focus,
|
594 |
-
input[type="text"].image:focus,
|
595 |
-
input[type="text"].image.focus,
|
596 |
-
{
|
597 |
-
border-bottom: solid 2px #969696;
|
598 |
-
}
|
599 |
-
|
600 |
-
input[type="button"].image_button
|
601 |
-
{
|
602 |
-
width: 15%;
|
603 |
-
height: 42px;
|
604 |
-
}
|
605 |
-
|
606 |
-
input[type="text"].image,
|
607 |
-
input[type="button"].image_button
|
608 |
-
{
|
609 |
-
display: inline-block;
|
610 |
-
}
|
611 |
-
|
612 |
-
/* End Text Box Styling */
|
613 |
-
#custom_css,
|
614 |
-
#menu_font_icons_container,
|
615 |
-
#custom_css_container
|
616 |
-
{
|
617 |
-
width: 90%;
|
618 |
-
}
|
619 |
-
|
620 |
-
.font-icon-container
|
621 |
-
{
|
622 |
-
width: 100%;
|
623 |
-
display: table;
|
624 |
-
}
|
625 |
-
|
626 |
-
#custom_css {
|
627 |
-
height: 300px;
|
628 |
-
}
|
629 |
-
|
630 |
-
.font-icon-row
|
631 |
-
{
|
632 |
-
display: table-row;
|
633 |
-
}
|
634 |
-
|
635 |
-
.font-icon-cell-id,
|
636 |
-
.font-icon-cell-icon
|
637 |
-
{
|
638 |
-
display: inline-block;
|
639 |
-
text-align: left;
|
640 |
-
}
|
641 |
-
|
642 |
-
.font-icon-cell-id {
|
643 |
-
width: 10%;
|
644 |
-
}
|
645 |
-
|
646 |
-
.font-icon-cell-icon {
|
647 |
-
width: 64%;
|
648 |
-
}
|
649 |
-
|
650 |
-
.font-icon-cell-id input,
|
651 |
-
.font-icon-cell-icon input
|
652 |
-
{
|
653 |
-
width: 100%;
|
654 |
-
}
|
655 |
-
|
656 |
-
.draggable {
|
657 |
-
border: 1px solid #DADADA;
|
658 |
-
border-radius: 2px;
|
659 |
-
background: #EFEFEF;
|
660 |
-
padding: 10px 0;
|
661 |
-
margin: 0;
|
662 |
-
cursor: move;
|
663 |
-
font-weight: bold;
|
664 |
-
padding-left: 35px;
|
665 |
-
box-sizing: border-box;
|
666 |
-
}
|
667 |
-
|
668 |
-
.draggable input {
|
669 |
-
display: none;
|
670 |
-
}
|
671 |
-
|
672 |
-
#header_bar_items_order_container .draggable {
|
673 |
-
display: inline-block;
|
674 |
-
width: 19%;
|
675 |
-
}
|
676 |
-
|
677 |
-
.upgrade-notes {
|
678 |
-
background: #DE4B42;
|
679 |
-
padding: 15px 2%;
|
680 |
-
width: 96%;
|
681 |
-
position: relative;
|
682 |
-
margin: 15px 0;
|
683 |
-
color: white;
|
684 |
-
}
|
685 |
-
|
686 |
-
.upgrade-notes a {
|
687 |
-
color: white;
|
688 |
-
text-decoration: underline;
|
689 |
-
}
|
690 |
-
|
691 |
-
.upgrade-notes-title {
|
692 |
-
font-size: 16px;
|
693 |
-
margin-bottom: 10px;
|
694 |
-
font-weight: bold;
|
695 |
-
}
|
696 |
-
|
697 |
-
.upgrade-notes-close {
|
698 |
-
position: absolute;
|
699 |
-
top: 0;
|
700 |
-
right: 2%;
|
701 |
-
font-size: 18px;
|
702 |
-
padding: 15px;
|
703 |
-
font-weight: bold;
|
704 |
-
cursor: pointer;
|
705 |
-
}
|
706 |
-
|
707 |
-
.has-sub-options .select-style {
|
708 |
-
width: 15%;
|
709 |
-
display: inline-block;
|
710 |
-
vertical-align: top;
|
711 |
-
}
|
712 |
-
|
713 |
-
.postbox .inside .has-sub-options input.text {
|
714 |
-
width: 57%;
|
715 |
-
}
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
@media (max-width: 1200px) {
|
720 |
-
.preview,
|
721 |
-
#delete-action {
|
722 |
-
float: none;
|
723 |
-
width: 100%;
|
724 |
-
clear: both;
|
725 |
-
text-align: center;
|
726 |
-
}
|
727 |
-
}
|
728 |
-
|
729 |
-
@media (max-width: 800px) {
|
730 |
-
.tab {
|
731 |
-
margin-bottom: 10px !important;
|
732 |
-
width: 18%;
|
733 |
-
margin-right: 1% !important;
|
734 |
-
}
|
735 |
-
#banner_area,
|
736 |
-
#all_options_container {
|
737 |
-
width: 100%;
|
738 |
-
}
|
739 |
-
.tabs_container {
|
740 |
-
text-align: center;
|
741 |
-
}
|
742 |
-
.postbox .inside table tr td,
|
743 |
-
.postbox .inside table tr td:last-child,
|
744 |
-
.postbox .inside table tr td:first-child {
|
745 |
-
width: 100%;
|
746 |
-
display: block;
|
747 |
-
text-align: center;
|
748 |
-
padding: 10px 0;
|
749 |
-
}
|
750 |
-
#banner_area {
|
751 |
-
margin: 15px 0;
|
752 |
-
}
|
753 |
-
#menu-sortable,
|
754 |
-
.onoffswitch,
|
755 |
-
.select-style {
|
756 |
-
margin: auto;
|
757 |
-
}
|
758 |
-
#menu-sortable, #items_order_container td:last-child {
|
759 |
-
width: 90%;
|
760 |
-
margin: auto;
|
761 |
-
}
|
762 |
-
#normal-sortables .button.submit {
|
763 |
-
margin: auto;
|
764 |
-
display: block;
|
765 |
-
float: none;
|
766 |
-
}
|
767 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/public/js/admin/main.js
DELETED
@@ -1,54 +0,0 @@
|
|
1 |
-
jQuery(function($) {
|
2 |
-
|
3 |
-
$('.wp-color-picker').wpColorPicker();
|
4 |
-
|
5 |
-
var custom_uploader;
|
6 |
-
|
7 |
-
$('.image_button').click(function (e) {
|
8 |
-
e.preventDefault();
|
9 |
-
window.imgFor = $(this).attr('for');
|
10 |
-
//If the uploader object has already been created, reopen the dialog
|
11 |
-
if (custom_uploader) {
|
12 |
-
custom_uploader.open();
|
13 |
-
return;
|
14 |
-
}
|
15 |
-
//Extend the wp.media object
|
16 |
-
custom_uploader = wp.media.frames.file_frame = wp.media({
|
17 |
-
title: 'Choose Image',
|
18 |
-
button: {
|
19 |
-
text: 'Choose Image',
|
20 |
-
id: 'test'
|
21 |
-
},
|
22 |
-
multiple: false
|
23 |
-
});
|
24 |
-
|
25 |
-
//When a file is selected, grab the URL and set it as the text field's value
|
26 |
-
custom_uploader.on('select', function () {
|
27 |
-
attachment = custom_uploader.state().get('selection').first().toJSON();
|
28 |
-
$('#' + window.imgFor).val(attachment.url);
|
29 |
-
});
|
30 |
-
|
31 |
-
//Open the uploader dialog
|
32 |
-
custom_uploader.open();
|
33 |
-
});
|
34 |
-
|
35 |
-
$(document).on('click', '.tab', function() {
|
36 |
-
tab_name = $(this).attr('id').replace('tab_', '');
|
37 |
-
container_name = '#tab_container_' + tab_name;
|
38 |
-
$('#responsive_menu_current_page').val(tab_name);
|
39 |
-
$('.tab_container').css('display', 'none');
|
40 |
-
$(container_name).css('display', 'block');
|
41 |
-
$('.tab').removeClass('active_tab');
|
42 |
-
$(this).addClass('active_tab');
|
43 |
-
});
|
44 |
-
|
45 |
-
$(document).on('click', '#responsive_menu_preview', function(e) {
|
46 |
-
e.preventDefault();
|
47 |
-
$('#responsive_menu_form').attr('action', '/?responsive-menu-preview=true');
|
48 |
-
$('#responsive_menu_form').attr('target', '_blank');
|
49 |
-
$('#responsive_menu_form').submit();
|
50 |
-
$('#responsive_menu_form').attr('action', '');
|
51 |
-
$('#responsive_menu_form').attr('target', '');
|
52 |
-
});
|
53 |
-
|
54 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/public/scss/hamburgers/_base.scss
DELETED
@@ -1,69 +0,0 @@
|
|
1 |
-
// Hamburger
|
2 |
-
// ==================================================
|
3 |
-
button#responsive-menu-button {
|
4 |
-
padding: $hamburger-padding-y $hamburger-padding-x;
|
5 |
-
display: inline-block;
|
6 |
-
cursor: pointer;
|
7 |
-
|
8 |
-
transition-property: opacity, filter;
|
9 |
-
transition-duration: $hamburger-hover-transition-duration;
|
10 |
-
transition-timing-function: $hamburger-hover-transition-timing-function;
|
11 |
-
|
12 |
-
// Normalize (<button>)
|
13 |
-
font: inherit;
|
14 |
-
color: inherit;
|
15 |
-
text-transform: none;
|
16 |
-
background-color: transparent;
|
17 |
-
border: 0;
|
18 |
-
margin: 0;
|
19 |
-
overflow: visible;
|
20 |
-
|
21 |
-
&:hover {
|
22 |
-
@if $hamburger-hover-use-filter == true {
|
23 |
-
filter: $hamburger-hover-filter;
|
24 |
-
}
|
25 |
-
@else {
|
26 |
-
opacity: $hamburger-hover-opacity;
|
27 |
-
}
|
28 |
-
}
|
29 |
-
}
|
30 |
-
|
31 |
-
.responsive-menu-box {
|
32 |
-
width: $hamburger-layer-width;
|
33 |
-
height: $hamburger-layer-height * 3 + $hamburger-layer-spacing * 2;
|
34 |
-
display: inline-block;
|
35 |
-
position: relative;
|
36 |
-
}
|
37 |
-
|
38 |
-
.responsive-menu-inner {
|
39 |
-
display: block;
|
40 |
-
top: 50%;
|
41 |
-
margin-top: $hamburger-layer-height / -2;
|
42 |
-
|
43 |
-
&,
|
44 |
-
&::before,
|
45 |
-
&::after {
|
46 |
-
width: $hamburger-layer-width;
|
47 |
-
height: $hamburger-layer-height;
|
48 |
-
background-color: $hamburger-layer-color;
|
49 |
-
border-radius: $hamburger-layer-border-radius;
|
50 |
-
position: absolute;
|
51 |
-
transition-property: transform;
|
52 |
-
transition-duration: 0.15s;
|
53 |
-
transition-timing-function: ease;
|
54 |
-
}
|
55 |
-
|
56 |
-
&::before,
|
57 |
-
&::after {
|
58 |
-
content: "";
|
59 |
-
display: block;
|
60 |
-
}
|
61 |
-
|
62 |
-
&::before {
|
63 |
-
top: ($hamburger-layer-spacing + $hamburger-layer-height) * -1;
|
64 |
-
}
|
65 |
-
|
66 |
-
&::after {
|
67 |
-
bottom: ($hamburger-layer-spacing + $hamburger-layer-height) * -1;
|
68 |
-
}
|
69 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/public/scss/hamburgers/hamburgers.scss
DELETED
@@ -1,57 +0,0 @@
|
|
1 |
-
/*!
|
2 |
-
* Hamburgers
|
3 |
-
* @description Tasty CSS-animated hamburgers
|
4 |
-
* @author Jonathan Suh @jonsuh
|
5 |
-
* @site https://jonsuh.com/hamburgers
|
6 |
-
* @link https://github.com/jonsuh/hamburgers
|
7 |
-
*/
|
8 |
-
|
9 |
-
// Settings
|
10 |
-
// ==================================================
|
11 |
-
$hamburger-padding-x : 0 !default;
|
12 |
-
$hamburger-padding-y : 0 !default;
|
13 |
-
$hamburger-layer-width : 40px !default;
|
14 |
-
$hamburger-layer-height : 4px !default;
|
15 |
-
$hamburger-layer-spacing : 6px !default;
|
16 |
-
$hamburger-layer-color : #000 !default;
|
17 |
-
$hamburger-layer-border-radius : 4px !default;
|
18 |
-
$hamburger-hover-opacity : 0.7 !default;
|
19 |
-
$hamburger-hover-transition-duration : 0.15s !default;
|
20 |
-
$hamburger-hover-transition-timing-function: linear !default;
|
21 |
-
|
22 |
-
// To use CSS filters as the hover effect instead of opacity,
|
23 |
-
// set $hamburger-hover-use-filter as true and
|
24 |
-
// change the value of $hamburger-hover-filter accordingly.
|
25 |
-
$hamburger-hover-use-filter: false !default;
|
26 |
-
$hamburger-hover-filter : opacity(50%) !default;
|
27 |
-
|
28 |
-
// Types (Remove or comment out what you don’t need)
|
29 |
-
// ==================================================
|
30 |
-
$hamburger-types: (
|
31 |
-
boring,
|
32 |
-
none
|
33 |
-
) !default;
|
34 |
-
|
35 |
-
// Base Hamburger (We need this)
|
36 |
-
// ==================================================
|
37 |
-
@import "base";
|
38 |
-
|
39 |
-
// Hamburger types
|
40 |
-
// ==================================================
|
41 |
-
@import "types/boring";
|
42 |
-
|
43 |
-
// ==================================================
|
44 |
-
// Cooking up additional types:
|
45 |
-
//
|
46 |
-
// The Sass for each hamburger type should be nested
|
47 |
-
// inside an @if directive to check whether or not
|
48 |
-
// it exists in $hamburger-types so only the CSS for
|
49 |
-
// included types are generated.
|
50 |
-
//
|
51 |
-
// e.g. hamburgers/types/_new-type.scss
|
52 |
-
//
|
53 |
-
// @if index($hamburger-types, new-type) {
|
54 |
-
// .responsive-menu-new-type {
|
55 |
-
// ...
|
56 |
-
// }
|
57 |
-
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/public/scss/hamburgers/types/_boring.scss
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
@if index($hamburger-types, boring) {
|
2 |
-
/*
|
3 |
-
* Boring
|
4 |
-
*/
|
5 |
-
.responsive-menu-boring {
|
6 |
-
.responsive-menu-inner {
|
7 |
-
&,
|
8 |
-
&::before,
|
9 |
-
&::after {
|
10 |
-
transition-property: none;
|
11 |
-
}
|
12 |
-
}
|
13 |
-
|
14 |
-
&.is-active {
|
15 |
-
.responsive-menu-inner {
|
16 |
-
transform: rotate(45deg);
|
17 |
-
|
18 |
-
&::before {
|
19 |
-
top: 0;
|
20 |
-
opacity: 0;
|
21 |
-
}
|
22 |
-
|
23 |
-
&::after {
|
24 |
-
bottom: 0;
|
25 |
-
transform: rotate(-90deg);
|
26 |
-
}
|
27 |
-
}
|
28 |
-
}
|
29 |
-
}
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/views/admin/main.phtml
DELETED
@@ -1,102 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use ResponsiveMenu\Formatters\Tabs;
|
4 |
-
use ResponsiveMenu\Formatters\Text;
|
5 |
-
|
6 |
-
// This is horrible!
|
7 |
-
include dirname(dirname(dirname(__FILE__))) . '/config/admin_ordering.php';
|
8 |
-
|
9 |
-
$current_page = get_option('responsive_menu_current_page', 'initial_setup');
|
10 |
-
$tabs = new ResponsiveMenu\ViewModels\Components\Admin\Tabs($order_mapping, $current_page);
|
11 |
-
$boxes = new ResponsiveMenu\ViewModels\Components\Admin\Boxes($order_mapping, $l['options'], $current_page);
|
12 |
-
|
13 |
-
?>
|
14 |
-
<div class="wrap">
|
15 |
-
<div id="poststuff">
|
16 |
-
<div id="postbox-container" class="postbox-container responsive-menu-postbox-container">
|
17 |
-
<?php if(isset($l['flash']['success'])): ?>
|
18 |
-
<div class="updated notice notice-success is-dismissible" id="message">
|
19 |
-
<p><?php _e($l['flash']['success'], 'responsive-menu'); ?></p>
|
20 |
-
<button class="notice-dismiss" type="button">
|
21 |
-
<span class="screen-reader-text">
|
22 |
-
<?php _e('Dismiss this notice', 'responsive-menu') ?>.
|
23 |
-
</span>
|
24 |
-
</button>
|
25 |
-
</div> <!-- updated -->
|
26 |
-
<?php endif; ?>
|
27 |
-
<?php if(isset($l['flash']['errors'])): ?>
|
28 |
-
<div class="notice notice-error is-dismissible" id="message">
|
29 |
-
<ul>
|
30 |
-
<?php foreach($l['flash']['errors'] as $error): ?>
|
31 |
-
<li><?php _e($error, 'responsive-menu'); ?></li>
|
32 |
-
<?php endforeach; ?>
|
33 |
-
</ul>
|
34 |
-
<button class="notice-dismiss" type="button">
|
35 |
-
<span class="screen-reader-text">
|
36 |
-
<?php _e('Dismiss this notice', 'responsive-menu') ?>.
|
37 |
-
</span>
|
38 |
-
</button>
|
39 |
-
</div>
|
40 |
-
<?php endif; ?>
|
41 |
-
|
42 |
-
<div class="tabs_container">
|
43 |
-
<?php echo $tabs->render(); ?>
|
44 |
-
</div>
|
45 |
-
|
46 |
-
<div class="key-container">
|
47 |
-
<a href="https://responsive.menu/why-go-pro/?utm_source=free-plugin&utm_medium=keys&utm_campaign=free-plugin-keys" target="_blank">
|
48 |
-
<div class="key key-pro"><span><?php _e('PRO', 'responsive-menu'); ?></span><?php _e('Only available in Pro version', 'responsive-menu'); ?></div>
|
49 |
-
<div class="key key-semi-pro"><span><?php _e('SEMI PRO', 'responsive-menu'); ?></span><?php _e('Fully unlocked in Pro version', 'responsive-menu'); ?></div>
|
50 |
-
</a>
|
51 |
-
</div>
|
52 |
-
|
53 |
-
<div id="all_options_container">
|
54 |
-
<div class="meta-box-sortables ui-sortable" id="normal-sortables">
|
55 |
-
<form action="" method="post" enctype="multipart/form-data" id="responsive_menu_form">
|
56 |
-
<input type="submit" class="button submit" name="responsive_menu_submit" value="<?php _e('Update Options', 'responsive-menu'); ?>" style="display: none;" />
|
57 |
-
<input type="hidden" id="responsive_menu_current_page" name="menu[responsive_menu_current_page]" value="<?php echo $current_page; ?>" />
|
58 |
-
<div id="options_list_container">
|
59 |
-
<?php echo $boxes->render(); ?>
|
60 |
-
</div>
|
61 |
-
<input type="submit" id="responsive_menu_submit" class="button submit" name="responsive_menu_submit" value="<?php _e('Update Options', 'responsive-menu') ?>" />
|
62 |
-
</form>
|
63 |
-
</div> <!-- #normal-sortables -->
|
64 |
-
</div><!--#all_options_container
|
65 |
-
--><div id="banner_area">
|
66 |
-
|
67 |
-
<div class="postbox " id="submitdiv">
|
68 |
-
<h2 class="hndle ui-sortable-handle"><span>Preview</span></h2>
|
69 |
-
<div class="inside">
|
70 |
-
<div id="submitpost" class="submitbox">
|
71 |
-
<div id="minor-publishing-actions">
|
72 |
-
<div id="delete-action">
|
73 |
-
<a href="https://responsive.menu/why-go-pro/?utm_source=free-plugin&utm_medium=preview&utm_campaign=free-plugin-preview" target="_blank" class="submitdelete deletion"><?php _e('Upgrade Now', 'responsive-menu'); ?></a>
|
74 |
-
</div>
|
75 |
-
<input type="submit" class="button preview" id="responsive_menu_preview" name="responsive_menu_preview" value="<?php _e('Preview Changes', 'responsive-menu'); ?>" />
|
76 |
-
<br /><br />
|
77 |
-
</div>
|
78 |
-
</div>
|
79 |
-
</div>
|
80 |
-
</div>
|
81 |
-
|
82 |
-
<div id="upgrade_banner">
|
83 |
-
<div id="upgrade_banner_title"><?php _e('Upgrade today to unlock the following features:', 'responsive-menu'); ?></div>
|
84 |
-
<ul>
|
85 |
-
<li><i class="fa fa-check"></i><?php _e('Font Awesome Icon Support', 'responsive-menu'); ?></li>
|
86 |
-
<li><i class="fa fa-check"></i><?php _e('Opacity Option for all Colours', 'responsive-menu'); ?></li>
|
87 |
-
<li><i class="fa fa-check"></i><?php _e('15+ Button Animations', 'responsive-menu'); ?></li>
|
88 |
-
<li><i class="fa fa-check"></i><?php _e('Main Desktop Menu Styling', 'responsive-menu'); ?></li>
|
89 |
-
<li><i class="fa fa-check"></i><?php _e('Add and configure a Header Bar', 'responsive-menu'); ?></li>
|
90 |
-
<li><i class="fa fa-check"></i><?php _e('Preview Changes', 'responsive-menu'); ?></li>
|
91 |
-
<li><?php _e('And much more', 'responsive-menu'); ?></li>
|
92 |
-
</ul>
|
93 |
-
<a target="_blank" href="https://responsive.menu/why-go-pro/?utm_source=free-plugin&utm_medium=banner&utm_campaign=free-plugin-banner" class="button"><?php _e('Upgrade Now', 'responsive-menu'); ?></a>
|
94 |
-
</div>
|
95 |
-
<div id="docs_banner">
|
96 |
-
<?php _e('Confused? Check out our documentation', 'responsive-menu'); ?>
|
97 |
-
<a target="_blank" href="https://responsive.menu/docs" class="button"><?php _e('View Docs', 'responsive-menu'); ?></a>
|
98 |
-
</div>
|
99 |
-
</div> <!-- #banner_area -->
|
100 |
-
</div> <!-- #postbox-container -->
|
101 |
-
</div> <!-- #poststuff -->
|
102 |
-
</div> <!-- #wrap -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/views/button.phtml
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<?php echo $l['button'];
|
|
src/views/menu.phtml
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
<div id="responsive-menu-container"
|
2 |
-
class="
|
3 |
-
<?php echo $l['options']['animation_type']; ?>-<?php echo $l['options']['menu_appear_from']; ?>
|
4 |
-
">
|
5 |
-
<div id="responsive-menu-wrapper">
|
6 |
-
<?php echo $l['menu']; ?>
|
7 |
-
</div>
|
8 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/views/preview.phtml
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<div id="responsive-menu-preview" style="
|
2 |
-
position: fixed;
|
3 |
-
top: 0;
|
4 |
-
left: 0;
|
5 |
-
right: 0;
|
6 |
-
z-index: 200000;
|
7 |
-
background: rgba(222, 75, 64, 0.89);
|
8 |
-
height: 50px;
|
9 |
-
line-height: 50px;
|
10 |
-
padding: 0 5%;
|
11 |
-
font-size: 14px;
|
12 |
-
color: white;
|
13 |
-
text-align: center;
|
14 |
-
font-family: Arial;
|
15 |
-
font-weight: bold;
|
16 |
-
"><?php _e(sprintf('Preview is only available with the Pro version - click %shere%s to upgrade today.', '<a style="text-decoration: underline; color: white;" href="https://responsive.menu/why-go-pro/?utm_source=free-plugin&utm_medium=preview&utm_campaign=free-plugin-preview" target="_blank">', '</a>'), 'responsive-menu'); ?></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Collections/OptionsCollectionTest.php
CHANGED
@@ -1,138 +1,134 @@
|
|
1 |
<?php
|
2 |
|
3 |
use PHPUnit\Framework\TestCase;
|
|
|
4 |
|
5 |
class OptionsCollectionTest extends TestCase {
|
6 |
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
unset($this->collection['b']);
|
135 |
-
$this->assertArrayNotHasKey('b', $this->collection);
|
136 |
-
}
|
137 |
-
|
138 |
-
}
|
1 |
<?php
|
2 |
|
3 |
use PHPUnit\Framework\TestCase;
|
4 |
+
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
|
6 |
class OptionsCollectionTest extends TestCase {
|
7 |
|
8 |
+
private $options = [
|
9 |
+
'foo' => 'bar',
|
10 |
+
'baz' => 'moo'
|
11 |
+
];
|
12 |
+
|
13 |
+
public function testCreationFromConstructor() {
|
14 |
+
$collection = new OptionsCollection($this->options);
|
15 |
+
$this->assertCount(2, $collection);
|
16 |
+
}
|
17 |
+
|
18 |
+
public function testAddingOptions() {
|
19 |
+
$collection = new OptionsCollection($this->options);
|
20 |
+
$this->assertCount(2, $collection);
|
21 |
+
|
22 |
+
$collection->add(['moon' => 'rise']);
|
23 |
+
$this->assertCount(3, $collection);
|
24 |
+
}
|
25 |
+
|
26 |
+
public function testAccessViaArray() {
|
27 |
+
$collection = new OptionsCollection($this->options);
|
28 |
+
$this->assertEquals('bar', $collection['foo']);
|
29 |
+
$this->assertEquals('moo', $collection['baz']);
|
30 |
+
}
|
31 |
+
|
32 |
+
public function testRemoveViaArray() {
|
33 |
+
$collection = new OptionsCollection($this->options);
|
34 |
+
$this->assertCount(2, $collection);
|
35 |
+
|
36 |
+
unset($collection['foo']);
|
37 |
+
|
38 |
+
$this->assertCount(1, $collection);
|
39 |
+
$this->assertNull($collection['foo']);
|
40 |
+
}
|
41 |
+
|
42 |
+
public function testSetViaArray() {
|
43 |
+
$collection = new OptionsCollection($this->options);
|
44 |
+
$this->assertCount(2, $collection);
|
45 |
+
|
46 |
+
$collection['moon'] = 'rise';
|
47 |
+
|
48 |
+
$this->assertCount(3, $collection);
|
49 |
+
$this->assertEquals('rise', $collection['moon']);
|
50 |
+
}
|
51 |
+
|
52 |
+
public function testReturnArrayWhenAsked() {
|
53 |
+
$collection = new OptionsCollection($this->options);
|
54 |
+
$this->assertInternalType('array', $collection->toArray());
|
55 |
+
$this->assertEquals($this->options, $collection->toArray());
|
56 |
+
}
|
57 |
+
|
58 |
+
public function testStringIsAlwaysReturnedFromConstructor() {
|
59 |
+
$array = ['array' => ['moon' => 'rise']];
|
60 |
+
$collection = new OptionsCollection($array);
|
61 |
+
|
62 |
+
$this->assertEquals(json_encode($array['array']), $collection['array']);
|
63 |
+
}
|
64 |
+
|
65 |
+
public function testStringIsAlwaysReturned() {
|
66 |
+
$collection = new OptionsCollection($this->options);
|
67 |
+
$array = ['array' => ['moon' => 'rise']];
|
68 |
+
$collection->add($array);
|
69 |
+
|
70 |
+
$this->assertEquals(json_encode($array['array']), $collection['array']);
|
71 |
+
$this->assertEquals('bar', $collection['foo']);
|
72 |
+
}
|
73 |
+
|
74 |
+
public function testCorrectActiveArrowIsReturned() {
|
75 |
+
$collection = new OptionsCollection($this->options);
|
76 |
+
$collection->add(['active_arrow_image' => '']);
|
77 |
+
$collection->add(['active_arrow_image_alt' => '']);
|
78 |
+
$collection->add(['active_arrow_shape' => 'foo']);
|
79 |
+
|
80 |
+
$this->assertEquals('foo', $collection->getActiveArrow());
|
81 |
+
|
82 |
+
$collection->add(['active_arrow_image' => 'bar']);
|
83 |
+
$collection->add(['active_arrow_image_alt' => 'baz']);
|
84 |
+
$this->assertEquals('<img alt="baz" src="bar" />', $collection->getActiveArrow());
|
85 |
+
}
|
86 |
+
|
87 |
+
public function testCorrectInActiveArrowIsReturned() {
|
88 |
+
$collection = new OptionsCollection($this->options);
|
89 |
+
$collection->add(['inactive_arrow_image' => '']);
|
90 |
+
$collection->add(['inactive_arrow_image_alt' => '']);
|
91 |
+
$collection->add(['inactive_arrow_shape' => 'foo']);
|
92 |
+
|
93 |
+
$this->assertEquals('foo', $collection->getInActiveArrow());
|
94 |
+
|
95 |
+
$collection->add(['inactive_arrow_image' => 'bar']);
|
96 |
+
$collection->add(['inactive_arrow_image_alt' => 'baz']);
|
97 |
+
$this->assertEquals('<img alt="baz" src="bar" />', $collection->getInActiveArrow());
|
98 |
+
}
|
99 |
+
|
100 |
+
public function testCorrectTitleImageReturned() {
|
101 |
+
$collection = new OptionsCollection($this->options);
|
102 |
+
$collection->add(['menu_title_image' => '']);
|
103 |
+
|
104 |
+
$this->assertNull($collection->getTitleImage());
|
105 |
+
|
106 |
+
$collection->add(['menu_title_image' => 'bar']);
|
107 |
+
$collection->add(['menu_title_image_alt' => 'baz']);
|
108 |
+
$this->assertEquals('<img alt="baz" src="bar" />', $collection->getTitleImage());
|
109 |
+
}
|
110 |
+
|
111 |
+
public function testCorrectButtonIconReturned() {
|
112 |
+
$collection = new OptionsCollection($this->options);
|
113 |
+
$collection->add(['button_image' => '']);
|
114 |
+
|
115 |
+
$this->assertEquals('<span class="responsive-menu-inner"></span>', $collection->getButtonIcon());
|
116 |
+
|
117 |
+
$collection->add(['button_image' => 'foo']);
|
118 |
+
$collection->add(['button_image_alt' => 'bar']);
|
119 |
+
$this->assertEquals('<img alt="bar" src="foo" class="responsive-menu-button-icon responsive-menu-button-icon-active" />', $collection->getButtonIcon());
|
120 |
+
}
|
121 |
+
|
122 |
+
public function testCorrectActiveButtonIconReturned() {
|
123 |
+
$collection = new OptionsCollection($this->options);
|
124 |
+
$collection->add(['button_image' => '']);
|
125 |
+
|
126 |
+
$this->assertNull($collection->getButtonIconActive());
|
127 |
+
|
128 |
+
$collection->add(['button_image' => 'foo']);
|
129 |
+
$collection->add(['button_image_when_clicked' => 'bar']);
|
130 |
+
$collection->add(['button_image_alt_when_clicked' => 'baz']);
|
131 |
+
$this->assertEquals('<img alt="baz" src="bar" class="responsive-menu-button-icon responsive-menu-button-icon-inactive" />', $collection->getButtonIconActive());
|
132 |
+
}
|
133 |
+
|
134 |
+
}
|
|
|
|
|
|
|
|
|
|
tests/app/Container/ContainerTest.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use PHPUnit\Framework\TestCase;
|
4 |
+
use ResponsiveMenu\Container\Container;
|
5 |
+
|
6 |
+
class ContainerTest extends TestCase {
|
7 |
+
|
8 |
+
public function testCreatedObjectIsReturn() {
|
9 |
+
$container = new Container;
|
10 |
+
$container['std'] = function($c) {
|
11 |
+
return new \StdClass;
|
12 |
+
};
|
13 |
+
$this->assertInstanceOf('StdClass', $container['std']);
|
14 |
+
}
|
15 |
+
|
16 |
+
public function testCreatedObjectIsReturnedWithDependencies() {
|
17 |
+
$container = new Container;
|
18 |
+
$container['std'] = function($c) {
|
19 |
+
return new \StdClass;
|
20 |
+
};
|
21 |
+
$container['std_two'] = function($c) {
|
22 |
+
return new \StdClass($c['std']);
|
23 |
+
};
|
24 |
+
$this->assertInstanceOf('StdClass', $container['std']);
|
25 |
+
$this->assertInstanceOf('StdClass', $container['std_two']);
|
26 |
+
}
|
27 |
+
|
28 |
+
public function testVariableIsReturned() {
|
29 |
+
$container = new Container;
|
30 |
+
$container['var'] = 5;
|
31 |
+
$this->assertEquals(5, $container['var']);
|
32 |
+
}
|
33 |
+
|
34 |
+
public function testVariableIsset() {
|
35 |
+
$container = new Container;
|
36 |
+
$container['var'] = 5;
|
37 |
+
$this->assertTrue(isset($container['var']));
|
38 |
+
$this->assertFalse(isset($container['not_set']));
|
39 |
+
}
|
40 |
+
|
41 |
+
public function testVariableKeys() {
|
42 |
+
$container = new Container;
|
43 |
+
$container['var'] = 5;
|
44 |
+
$container['var_two'] = 6;
|
45 |
+
$this->assertEquals(['var', 'var_two'], $container->keys());
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @expectedException \InvalidArgumentException
|
50 |
+
*/
|
51 |
+
public function testExceptionThrownIfDoesntExist() {
|
52 |
+
$container = new Container;
|
53 |
+
$container['doesnt_exist'];
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @expectedException \InvalidArgumentException
|
58 |
+
*/
|
59 |
+
public function testExceptionThrownIfDoesntExistAfterUnsetting() {
|
60 |
+
$container = new Container;
|
61 |
+
$container['to_delete'] = 5;
|
62 |
+
unset($container['to_delete']);
|
63 |
+
$container['to_delete'];
|
64 |
+
}
|
65 |
+
|
66 |
+
}
|
tests/app/Controllers/AdminControllerTest.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use PHPUnit\Framework\TestCase;
|
4 |
+
use ResponsiveMenu\Controllers\AdminController;
|
5 |
+
|
6 |
+
class AdminControllerTest extends TestCase {
|
7 |
+
|
8 |
+
private $view_mock;
|
9 |
+
private $manager_mock;
|
10 |
+
|
11 |
+
public function setUp() {
|
12 |
+
$this->view_mock = $this->createMock('ResponsiveMenu\View\View');
|
13 |
+
$this->manager_mock = $this->createMock('ResponsiveMenu\Management\OptionManager');
|
14 |
+
}
|
15 |
+
|
16 |
+
public function testAllMethod() {
|
17 |
+
$controller = new AdminController($this->manager_mock, $this->view_mock);
|
18 |
+
$controller->index('foo', 'bar');
|
19 |
+
}
|
20 |
+
|
21 |
+
}
|
tests/app/Controllers/AdminTest.php
DELETED
@@ -1,57 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
-
use ResponsiveMenu\Models\Option;
|
6 |
-
|
7 |
-
class AdminTest extends TestCase {
|
8 |
-
|
9 |
-
static public function setUpBeforeClass() {
|
10 |
-
function __($a, $b) {
|
11 |
-
return $a;
|
12 |
-
}
|
13 |
-
if(!function_exists('update_option')):
|
14 |
-
function update_option($a, $b) {
|
15 |
-
return $a . ' ' . $b;
|
16 |
-
}
|
17 |
-
endif;
|
18 |
-
}
|
19 |
-
|
20 |
-
public function setUp() {
|
21 |
-
$this->view = $this->createMock('ResponsiveMenu\View\AdminView');
|
22 |
-
$this->service = $this->createMock('ResponsiveMenu\Services\OptionService');
|
23 |
-
$this->view->method('render')->willReturn(true);
|
24 |
-
$this->view->method('display')->will($this->returnArgument(0));
|
25 |
-
$this->service->method('combineOptions')->willReturn([]);
|
26 |
-
$collection = new OptionsCollection;
|
27 |
-
$collection->add(new Option('a', 1));
|
28 |
-
$this->service->method('all')->willReturn($collection);
|
29 |
-
$this->controller = new ResponsiveMenu\Controllers\Admin($this->service, $this->view);
|
30 |
-
|
31 |
-
}
|
32 |
-
|
33 |
-
public function testUpdate() {
|
34 |
-
$this->assertTrue($this->controller->update([],['responsive_menu_current_page' => true]));
|
35 |
-
}
|
36 |
-
|
37 |
-
public function testReset() {
|
38 |
-
$this->assertTrue($this->controller->reset([]));
|
39 |
-
}
|
40 |
-
|
41 |
-
public function testIndex() {
|
42 |
-
$this->assertTrue($this->controller->index([]));
|
43 |
-
}
|
44 |
-
|
45 |
-
public function testExport() {
|
46 |
-
$this->assertNull($this->controller->export());
|
47 |
-
}
|
48 |
-
|
49 |
-
public function testImportNoFile() {
|
50 |
-
$this->assertTrue($this->controller->import(['a' => 1], null));
|
51 |
-
}
|
52 |
-
|
53 |
-
public function testImport() {
|
54 |
-
$this->assertTrue($this->controller->import(['a' => 1], ['b' => 2]));
|
55 |
-
}
|
56 |
-
|
57 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Controllers/FrontTest.php
DELETED
@@ -1,37 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
-
use ResponsiveMenu\Models\Option;
|
6 |
-
|
7 |
-
class FrontTest extends TestCase {
|
8 |
-
|
9 |
-
public function setUp() {
|
10 |
-
$this->view = $this->createMock('ResponsiveMenu\View\FrontView');
|
11 |
-
$this->service = $this->createMock('ResponsiveMenu\Services\OptionService');
|
12 |
-
$this->menu = $this->createMock('ResponsiveMenu\ViewModels\Menu');
|
13 |
-
$this->button = $this->createMock('ResponsiveMenu\ViewModels\Button');
|
14 |
-
$this->collection = new OptionsCollection;
|
15 |
-
|
16 |
-
$this->view->method('render')->willReturn('rendered');
|
17 |
-
$this->controller = new ResponsiveMenu\Controllers\Front($this->service, $this->view, $this->menu, $this->button);
|
18 |
-
|
19 |
-
}
|
20 |
-
|
21 |
-
public function testPreview() {
|
22 |
-
$this->assertEquals('rendered', $this->controller->preview());
|
23 |
-
}
|
24 |
-
|
25 |
-
public function testIndexShortcodeIsNotCalled() {
|
26 |
-
$this->collection->add(new Option('shortcode', 'off'));
|
27 |
-
$this->service->method('all')->willReturn($this->collection);
|
28 |
-
$this->assertEquals('rendered', $this->controller->index());
|
29 |
-
}
|
30 |
-
|
31 |
-
public function testIndexShortcodeIsCalled() {
|
32 |
-
$this->service->method('all')->willReturn($this->collection);
|
33 |
-
$this->view->method('addShortcode')->willReturn('shortcode added');
|
34 |
-
$this->assertEquals('shortcode added', $this->controller->index());
|
35 |
-
}
|
36 |
-
|
37 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Database/MigrationTest.php
CHANGED
@@ -1,114 +1,82 @@
|
|
1 |
<?php
|
2 |
|
3 |
use PHPUnit\Framework\TestCase;
|
4 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
5 |
use ResponsiveMenu\Database\Migration;
|
6 |
-
use ResponsiveMenu\
|
|
|
7 |
|
8 |
class MigrationTest extends TestCase {
|
9 |
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
$this->old_version = '3.0.7';
|
16 |
-
$this->old_options = ['default_one' => 4, 'default_two' => 'old string', 'default_three' => 4.5, 'RM' => 'old RM value', 'RMDepth' => 'old RMDepth value'];
|
17 |
-
|
18 |
-
$this->base_migration = new Migration($this->database, $this->service, $this->defaults, $this->current_version, $this->old_version, $this->old_options);
|
19 |
-
|
20 |
-
$this->options_collection = new OptionsCollection;
|
21 |
-
$this->options_collection->add(new Option('default_one', 5));
|
22 |
-
$this->options_collection->add(new Option('default_two', 'string'));
|
23 |
-
$this->options_collection->add(new Option('default_three', 7.5));
|
24 |
-
|
25 |
-
/*
|
26 |
-
* Mock the repository all() function to return controlled options collection
|
27 |
-
*/
|
28 |
-
$service_options = new OptionsCollection;
|
29 |
-
$service_options->add(new Option('default_one', 5));
|
30 |
-
$service_options->add(new Option('default_two', 'new option'));
|
31 |
-
$service_options->add(new Option('to_delete', 'delete me!'));
|
32 |
-
$service_options->add(new Option('to_delete_also', 'delete me too!'));
|
33 |
-
$this->service->method('all')->willReturn($service_options);
|
34 |
-
|
35 |
-
}
|
36 |
-
|
37 |
-
public function testVersionCompareNeedsUpdate() {
|
38 |
-
$this->assertTrue($this->base_migration->needsUpdate());
|
39 |
-
}
|
40 |
-
|
41 |
-
public function testVersionCompareDoesntNeedUpdate() {
|
42 |
-
$migration = new Migration($this->database, $this->service, $this->defaults, $this->current_version, '3.0.9', $this->old_options);
|
43 |
-
$this->assertFalse($migration->needsUpdate());
|
44 |
-
}
|
45 |
-
|
46 |
-
public function testVersionCompareNeedUpdateWithDoubleEndPoint() {
|
47 |
-
$migration = new Migration($this->database, $this->service, $this->defaults, '3.0.10', $this->old_version, $this->old_options);
|
48 |
-
$this->assertTrue($migration->needsUpdate());
|
49 |
-
}
|
50 |
-
|
51 |
-
public function testVersionCompareDoesntNeedUpdateWithDoubleEndPoint() {
|
52 |
-
$migration = new Migration($this->database, $this->service, $this->defaults, '3.0.10', '3.1.0', $this->old_options);
|
53 |
-
$this->assertFalse($migration->needsUpdate());
|
54 |
-
}
|
55 |
-
|
56 |
-
public function testVersionCompareDoesNeedUpdateWithTenComparedToOne() {
|
57 |
-
$migration = new Migration($this->database, $this->service, $this->defaults, '3.0.10', '3.0.1', $this->old_options);
|
58 |
-
$this->assertTrue($migration->needsUpdate());
|
59 |
-
}
|
60 |
-
|
61 |
-
public function testVersionCompareDoesntNeedUpdateWithOneComparedToTen() {
|
62 |
-
$migration = new Migration($this->database, $this->service, $this->defaults, '3.0.1', '3.0.10', $this->old_options);
|
63 |
-
$this->assertFalse($migration->needsUpdate());
|
64 |
-
}
|
65 |
-
|
66 |
-
public function testVersionCompareDoesntNeedUpdateWithDoubleEndPointWithVersionHigher() {
|
67 |
-
$migration = new Migration($this->database, $this->service, $this->defaults, '3.0.10', '3.2.0', $this->old_options);
|
68 |
-
$this->assertFalse($migration->needsUpdate());
|
69 |
-
}
|
70 |
-
|
71 |
-
public function testVersionCompareDoesNeedUpdateWithDoubleEndPointWithVersionHigher() {
|
72 |
-
$migration = new Migration($this->database, $this->service, $this->defaults, '3.2.0', '3.0.10', $this->old_options);
|
73 |
-
$this->assertTrue($migration->needsUpdate());
|
74 |
-
}
|
75 |
-
|
76 |
-
public function testNewOptionsReturnedAreCorrect() {
|
77 |
-
$this->assertSame(['default_four' => 'new'], $this->base_migration->getNewOptions($this->options_collection));
|
78 |
-
}
|
79 |
-
|
80 |
-
public function testIsVersion3CheckReturnsFalse() {
|
81 |
-
$migration = new Migration($this->database, $this->service, $this->defaults, $this->current_version, '2.8.0', $this->old_options);
|
82 |
-
$this->assertFalse($migration->isVersion3());
|
83 |
-
}
|
84 |
-
|
85 |
-
public function testIsVersion3CheckReturnsTrue() {
|
86 |
-
$this->assertTrue($this->base_migration->isVersion3());
|
87 |
-
}
|
88 |
-
|
89 |
-
public function testDeletableOptions() {
|
90 |
-
$this->assertSame(['to_delete' => 'to_delete', 'to_delete_also' => 'to_delete_also'], $this->base_migration->getOptionsToDelete());
|
91 |
-
}
|
92 |
-
|
93 |
-
public function testOptionsToMigrate() {
|
94 |
-
$this->assertSame(['menu_to_use' => 'old RM value', 'menu_depth' => 'old RMDepth value'], $this->base_migration->getMigratedOptions());
|
95 |
-
}
|
96 |
-
|
97 |
-
public function testSetup() {
|
98 |
-
$this->database->method('createTable')->willReturn(true);
|
99 |
-
$migration = new Migration($this->database, $this->service, $this->defaults, '3.0.10', '2.8.9', $this->old_options);
|
100 |
-
$this->assertEquals(null, $migration->setUp());
|
101 |
-
}
|
102 |
-
|
103 |
-
public function testSynchronise() {
|
104 |
-
$this->assertEquals(null, $this->base_migration->synchronise());
|
105 |
-
}
|
106 |
|
107 |
-
public function
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
}
|
113 |
-
|
114 |
}
|
1 |
<?php
|
2 |
|
3 |
use PHPUnit\Framework\TestCase;
|
|
|
4 |
use ResponsiveMenu\Database\Migration;
|
5 |
+
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
+
use ResponsiveMenu\Management\OptionManager;
|
7 |
|
8 |
class MigrationTest extends TestCase {
|
9 |
|
10 |
+
private $manager;
|
11 |
+
private $defaults = [
|
12 |
+
'foo' => 'bar',
|
13 |
+
'baz' => 'qux'
|
14 |
+
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
|
16 |
+
public function setUp() {
|
17 |
+
$db = $this->createMock('ResponsiveMenu\Database\Database');
|
18 |
+
$db->method('all')->willReturn(['moon' => 'rise']);
|
19 |
+
$this->manager = new OptionManager($db, ['foo' => 'bar', 'river' => 'run']);
|
20 |
+
}
|
21 |
+
|
22 |
+
public function tableVersions() {
|
23 |
+
return [
|
24 |
+
|
25 |
+
// These don't require a table
|
26 |
+
['3.0.1', false],
|
27 |
+
['3.1.2', false],
|
28 |
+
['4.5.1', false],
|
29 |
+
['3.0.0', false],
|
30 |
+
|
31 |
+
// These do require a table
|
32 |
+
['2.0.0', true],
|
33 |
+
['2.0.1', true],
|
34 |
+
['2.8.9', true],
|
35 |
+
['1.2.0', true],
|
36 |
+
['2.9.5', true],
|
37 |
+
|
38 |
+
];
|
39 |
+
}
|
40 |
+
/**
|
41 |
+
* @dataProvider tableVersions
|
42 |
+
*/
|
43 |
+
public function testNeedsTable($version, $expected) {
|
44 |
+
$migration = new Migration($this->manager, $version, '3.0.1', $this->defaults);
|
45 |
+
$this->assertEquals($expected, $migration->needsTable());
|
46 |
+
}
|
47 |
+
|
48 |
+
public function updateVersions() {
|
49 |
+
return [
|
50 |
+
['3.0.1', '3.1.0', true],
|
51 |
+
['2.8.9', '3.0.0', true],
|
52 |
+
['1.6.4', '4.1.0', true],
|
53 |
+
['3.1.1', '4.5.3', true],
|
54 |
+
['3.0.1', '3.0.2', true],
|
55 |
+
['3.1.1', '3.1.2', true],
|
56 |
+
|
57 |
+
['3.3.1', '3.1.2', false],
|
58 |
+
['2.8.1', '1.3.2', false],
|
59 |
+
['1.4.1', '1.1.2', false],
|
60 |
+
['4.1.2', '3.1.2', false]
|
61 |
+
];
|
62 |
+
}
|
63 |
+
/**
|
64 |
+
* @dataProvider updateVersions
|
65 |
+
*/
|
66 |
+
public function testNeedsUpdate($old_version, $new_version, $expected) {
|
67 |
+
$migration = new Migration($this->manager, $old_version, $new_version, $this->defaults);
|
68 |
+
$this->assertEquals($expected, $migration->needsUpdate());
|
69 |
+
}
|
70 |
+
|
71 |
+
public function testAddingNewOptions() {
|
72 |
+
$migration = new Migration($this->manager, '3.0.0', '3.0.0', $this->defaults);
|
73 |
+
$collection = new OptionsCollection(['foo' => 'bar', 'river' => 'run', 'baz' => 'qux']);
|
74 |
+
$this->assertEquals($collection, $migration->addNewOptions());
|
75 |
+
}
|
76 |
+
|
77 |
+
public function testRemoveOldOptions() {
|
78 |
+
$migration = new Migration($this->manager, '3.0.0', '3.0.0', $this->defaults);
|
79 |
+
$collection = new OptionsCollection(['foo' => 'bar', 'river' => 'run']);
|
80 |
+
$this->assertEquals($collection, $migration->tidyUpOptions());
|
81 |
}
|
|
|
82 |
}
|
tests/app/Database/WpDatabaseTest.php
DELETED
@@ -1,55 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
use ResponsiveMenu\Database\WpDatabase;
|
5 |
-
|
6 |
-
class WpDatabaseTest extends TestCase {
|
7 |
-
|
8 |
-
public function setUp() {
|
9 |
-
$this->wpdb = $this->getMockBuilder('wpdb')
|
10 |
-
->setMethods(['update', 'delete', 'get_results', 'insert', 'select'])
|
11 |
-
->getMock();
|
12 |
-
$this->wpdb->prefix = 'prefix';
|
13 |
-
$this->db = new WpDatabase($this->wpdb);
|
14 |
-
|
15 |
-
if(!function_exists('current_time')):
|
16 |
-
function current_time($type) {
|
17 |
-
return '0000';
|
18 |
-
}
|
19 |
-
endif;
|
20 |
-
}
|
21 |
-
|
22 |
-
public function testUpdate() {
|
23 |
-
$this->wpdb->method('update')->will($this->returnArgument(0));
|
24 |
-
$this->assertEquals('prefixupdate_arg', $this->db->update('update_arg', [], []));
|
25 |
-
}
|
26 |
-
|
27 |
-
public function testDelete() {
|
28 |
-
$this->wpdb->method('delete')->will($this->returnArgument(0));
|
29 |
-
$this->assertEquals('prefixdelete_arg', $this->db->delete('delete_arg', 'b'));
|
30 |
-
}
|
31 |
-
|
32 |
-
public function testGetResults() {
|
33 |
-
$this->wpdb->method('get_results')->will($this->returnArgument(0));
|
34 |
-
$this->assertEquals('SELECT * FROM prefixget_results_arg', $this->db->all('get_results_arg'));
|
35 |
-
}
|
36 |
-
|
37 |
-
public function testInsertResults() {
|
38 |
-
$this->wpdb->method('insert')->will($this->returnArgument(0));
|
39 |
-
$this->assertEquals('prefixinsert_arg', $this->db->insert('insert_arg', []));
|
40 |
-
}
|
41 |
-
|
42 |
-
public function testSelectResults() {
|
43 |
-
$this->wpdb->method('get_results')->will($this->returnArgument(0));
|
44 |
-
$this->assertEquals('SELECT * FROM prefixselect_arg WHERE a = \'b\';', $this->db->select('select_arg', 'a', 'b'));
|
45 |
-
}
|
46 |
-
|
47 |
-
public function testMySqlTime() {
|
48 |
-
$this->assertEquals('0000', $this->db->mySqlTime());
|
49 |
-
}
|
50 |
-
|
51 |
-
public function testUpdateOption() {
|
52 |
-
$this->assertEquals('a b', $this->db->updateOption('a', 'b'));
|
53 |
-
}
|
54 |
-
|
55 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Factories/CssFactoryTest.php
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
use ResponsiveMenu\Factories\CssFactory;
|
5 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
-
use ResponsiveMenu\Models\Option;
|
7 |
-
|
8 |
-
class CssFactoryTest extends TestCase {
|
9 |
-
|
10 |
-
public function setUp() {
|
11 |
-
$this->base_mapper = $this->createMock('ResponsiveMenu\Mappers\ScssBaseMapper');
|
12 |
-
$this->button_mapper = $this->createMock('ResponsiveMenu\Mappers\ScssButtonMapper');
|
13 |
-
$this->menu_mapper = $this->createMock('ResponsiveMenu\Mappers\ScssMenuMapper');
|
14 |
-
$this->minifier = $this->createMock('ResponsiveMenu\Formatters\Minify');
|
15 |
-
|
16 |
-
$this->base_mapper->method('map')->willReturn('a');
|
17 |
-
$this->button_mapper->method('map')->willReturn('b');
|
18 |
-
$this->menu_mapper->method('map')->willReturn('c');
|
19 |
-
$this->minifier->method('minify')->willReturn('d');
|
20 |
-
$this->factory = new CssFactory($this->minifier, $this->base_mapper, $this->button_mapper, $this->menu_mapper);
|
21 |
-
}
|
22 |
-
|
23 |
-
public function testMinified() {
|
24 |
-
$collection = new OptionsCollection;
|
25 |
-
$collection->add(new Option('minify_scripts', 'on'));
|
26 |
-
$this->assertequals('d', $this->factory->build($collection));
|
27 |
-
}
|
28 |
-
|
29 |
-
public function testNotMinified() {
|
30 |
-
$collection = new OptionsCollection;
|
31 |
-
$collection->add(new Option('minify_scripts', 'off'));
|
32 |
-
$this->assertequals('abc', $this->factory->build($collection));
|
33 |
-
}
|
34 |
-
|
35 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Factories/JsFactoryTest.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
use ResponsiveMenu\Factories\JsFactory;
|
5 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
-
use ResponsiveMenu\Models\Option;
|
7 |
-
|
8 |
-
class JsFactoryTest extends TestCase {
|
9 |
-
|
10 |
-
public function setUp() {
|
11 |
-
$this->mapper = $this->createMock('ResponsiveMenu\Mappers\JsMapper');
|
12 |
-
$this->minifier = $this->createMock('ResponsiveMenu\Formatters\Minify');
|
13 |
-
$this->mapper->method('map')->willReturn('a');
|
14 |
-
$this->minifier->method('minify')->willReturn('b');
|
15 |
-
$this->factory = new JsFactory($this->mapper, $this->minifier);
|
16 |
-
}
|
17 |
-
|
18 |
-
public function testMinified() {
|
19 |
-
$collection = new OptionsCollection;
|
20 |
-
$collection->add(new Option('minify_scripts', 'on'));
|
21 |
-
$this->assertequals('b', $this->factory->build($collection));
|
22 |
-
}
|
23 |
-
|
24 |
-
public function testNotMinified() {
|
25 |
-
$collection = new OptionsCollection;
|
26 |
-
$collection->add(new Option('minify_scripts', 'off'));
|
27 |
-
$this->assertequals('a', $this->factory->build($collection));
|
28 |
-
}
|
29 |
-
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Factories/OptionFactoryTest.php
DELETED
@@ -1,61 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class OptionFactoryTest extends TestCase {
|
6 |
-
|
7 |
-
public static function setUpBeforeClass() {
|
8 |
-
if(!function_exists('stripslashes_deep')):
|
9 |
-
function stripslashes_deep($a) {
|
10 |
-
return $a;
|
11 |
-
}
|
12 |
-
endif;
|
13 |
-
}
|
14 |
-
|
15 |
-
public function setUp() {
|
16 |
-
$defaults = ['a' => 1, 'b' => 2, 'c' => 3];
|
17 |
-
$helpers = ['a' => ['filter' => 'ResponsiveMenu\Filters\HtmlFilter'], 'c' => ['filter' => 'ResponsiveMenu\Filters\JsonFilter']];
|
18 |
-
$this->factory = new ResponsiveMenu\Factories\OptionFactory($defaults, $helpers);
|
19 |
-
}
|
20 |
-
|
21 |
-
public function testSetFilterIsReturned() {
|
22 |
-
$option = $this->factory->build('a', 4);
|
23 |
-
$this->assertInstanceOf('ResponsiveMenu\Filters\HtmlFilter', $option->getFilter());
|
24 |
-
}
|
25 |
-
|
26 |
-
public function testDefaultFilterIsReturned() {
|
27 |
-
$option = $this->factory->build('b', 4);
|
28 |
-
$this->assertInstanceOf('ResponsiveMenu\Filters\TextFilter', $option->getFilter());
|
29 |
-
}
|
30 |
-
|
31 |
-
public function testOptionIsReturned() {
|
32 |
-
$option = $this->factory->build('b', 4);
|
33 |
-
$this->assertInstanceOf('ResponsiveMenu\Models\Option', $option);
|
34 |
-
}
|
35 |
-
|
36 |
-
public function testDefaultIsReturnedIfValueIsNull() {
|
37 |
-
$option = $this->factory->build('b', null);
|
38 |
-
$this->assertEquals(2, $option->getValue());
|
39 |
-
}
|
40 |
-
|
41 |
-
public function testZeroIsReturnedAndNotDefault() {
|
42 |
-
$option = $this->factory->build('b', 0);
|
43 |
-
$this->assertEquals(0, $option->getValue());
|
44 |
-
}
|
45 |
-
|
46 |
-
public function testUpdatedValueIsReturned() {
|
47 |
-
$option = $this->factory->build('a', 'updated');
|
48 |
-
$this->assertEquals('updated', $option->getValue());
|
49 |
-
}
|
50 |
-
|
51 |
-
public function testDecodingArrayData() {
|
52 |
-
$option = $this->factory->build('a', ['a' => 1, 'b' => ['a' => 1, 'b' => 2]]);
|
53 |
-
$this->assertEquals(['a' => 1, 'b' => ['a' => 1, 'b' => 2]], $option->getValue());
|
54 |
-
}
|
55 |
-
|
56 |
-
public function testDecodedOfJsonDataToArray() {
|
57 |
-
$option = $this->factory->build('c', '{"a":"1","b":"2"}');
|
58 |
-
$this->assertEquals('{"a":"1","b":"2"}', $option->getValue());
|
59 |
-
}
|
60 |
-
|
61 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Filesystem/FileCreatorTest.php
DELETED
@@ -1,25 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class FileCreatorTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->creator = new ResponsiveMenu\Filesystem\FileCreator;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testCreate() {
|
12 |
-
$this->assertTrue($this->creator->create(dirname(__FILE__), 'test.txt','a'));
|
13 |
-
$this->assertEquals('a', file_get_contents(dirname(__FILE__) . '/test.txt'));
|
14 |
-
}
|
15 |
-
|
16 |
-
public function testFailToCreate() {
|
17 |
-
$this->assertFalse($this->creator->create('', 'test.txt','a'));
|
18 |
-
}
|
19 |
-
|
20 |
-
public function tearDown() {
|
21 |
-
if(file_exists(dirname(__FILE__). '/test.txt'))
|
22 |
-
unlink(dirname(__FILE__). '/test.txt');
|
23 |
-
}
|
24 |
-
|
25 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Filesystem/FolderCreatorTest.php
DELETED
@@ -1,21 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class FolderCreatorTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->creator = new ResponsiveMenu\Filesystem\FolderCreator;
|
9 |
-
$this->dir = dirname(__FILE__) . '/tmp';
|
10 |
-
}
|
11 |
-
|
12 |
-
public function testCreate() {
|
13 |
-
$this->creator->create($this->dir);
|
14 |
-
$this->assertTrue($this->creator->exists($this->dir));
|
15 |
-
}
|
16 |
-
|
17 |
-
public function tearDown() {
|
18 |
-
rmdir($this->dir);
|
19 |
-
}
|
20 |
-
|
21 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Filesystem/ScriptsBuilderTest.php
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class ScriptsBuilderTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->files = $this->createMock('ResponsiveMenu\Filesystem\FileCreator');
|
9 |
-
$this->folders = $this->createMock('ResponsiveMenu\Filesystem\FolderCreator');
|
10 |
-
$this->css = $this->createMock('ResponsiveMenu\Factories\CssFactory');
|
11 |
-
$this->js = $this->createMock('ResponsiveMenu\Factories\JsFactory');
|
12 |
-
$this->collection = $this->createMock('ResponsiveMenu\Collections\OptionsCollection');
|
13 |
-
$this->id = 2;
|
14 |
-
|
15 |
-
$this->builder = new ResponsiveMenu\Filesystem\ScriptsBuilder($this->css, $this->js, $this->files, $this->folders, $this->id);
|
16 |
-
|
17 |
-
}
|
18 |
-
|
19 |
-
public function testBuild() {
|
20 |
-
$this->assertEquals(null, $this->builder->build($this->collection));
|
21 |
-
}
|
22 |
-
|
23 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Filters/HtmlFilterTest.php
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class HtmlFilterTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->filter = new ResponsiveMenu\Filters\HtmlFilter;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testFiltered() {
|
12 |
-
$this->assertEquals('a', $this->filter->filter('a'));
|
13 |
-
}
|
14 |
-
|
15 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Filters/JsonFilterTest.php
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class JsonFilterTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->filter = new ResponsiveMenu\Filters\JsonFilter;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testFilteredWithString() {
|
12 |
-
$this->assertEquals('{"a":1,"b":2}', $this->filter->filter('{"a":1,"b":2}'));
|
13 |
-
}
|
14 |
-
|
15 |
-
public function testFilteredWithArray() {
|
16 |
-
$this->assertEquals('{"a":1,"b":2}', $this->filter->filter(['a' => 1, 'b' => 2]));
|
17 |
-
}
|
18 |
-
|
19 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Filters/TextFilterTest.php
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class TextFilterTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->filter = new ResponsiveMenu\Filters\TextFilter;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testFilteredWithString() {
|
12 |
-
$this->assertEquals('a', $this->filter->filter('a'));
|
13 |
-
}
|
14 |
-
|
15 |
-
public function testFilteredWithHtml() {
|
16 |
-
$this->assertEquals('a', $this->filter->filter('<span class="test">a</span>'));
|
17 |
-
}
|
18 |
-
|
19 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/CheckboxTest.php
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class CheckboxTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\Checkbox;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', 1));
|
13 |
-
$this->assertEquals("<div class='onoffswitch'>
|
14 |
-
<input type='checkbox' class='checkbox onoffswitch-checkbox' id='a' name='menu[a]' value='on' />
|
15 |
-
<label class='onoffswitch-label' for='a'>
|
16 |
-
<span class='onoffswitch-inner'></span>
|
17 |
-
<span class='onoffswitch-switch'></span>
|
18 |
-
</label>
|
19 |
-
</div>", $output);
|
20 |
-
}
|
21 |
-
|
22 |
-
public function testRenderingTurnedOn() {
|
23 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', 'on'));
|
24 |
-
$this->assertEquals("<div class='onoffswitch'>
|
25 |
-
<input type='checkbox' class='checkbox onoffswitch-checkbox' id='a' checked='checked' name='menu[a]' value='on' />
|
26 |
-
<label class='onoffswitch-label' for='a'>
|
27 |
-
<span class='onoffswitch-inner'></span>
|
28 |
-
<span class='onoffswitch-switch'></span>
|
29 |
-
</label>
|
30 |
-
</div>", $output);
|
31 |
-
}
|
32 |
-
|
33 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/ColourTest.php
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class ColourTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\Colour;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', 1));
|
13 |
-
$this->assertEquals("<input type='text' class='colour wp-color-picker' id='a' name='menu[a]' value='1' />", $output);
|
14 |
-
}
|
15 |
-
|
16 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/ExportTest.php
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class ExportTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\Export;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$output = $this->form_component->render();
|
13 |
-
$this->assertEquals('<input type="submit" class="button submit" name="responsive_menu_export" value="Export Options" />', $output);
|
14 |
-
}
|
15 |
-
|
16 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/FontIconTest.php
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class FontIconPageListTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\FontIconPageList;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', '{"id":["1", "2"],"icon":["a", "b"]}'));
|
13 |
-
$this->assertContains("class='a_icon'", $output);
|
14 |
-
$this->assertContains("value='2'", $output);
|
15 |
-
$this->assertContains("value='b'", $output);
|
16 |
-
}
|
17 |
-
|
18 |
-
public function testRenderingWhenEmpty() {
|
19 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', 'b'));
|
20 |
-
$this->assertContains("class='a_icon'", $output);
|
21 |
-
}
|
22 |
-
|
23 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/HeaderBarOrderingTest.php
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class HeaderBarOrderingTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\HeaderBarOrdering;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', '{"search": "on", "title": "off"}'));
|
13 |
-
$this->assertContains('order-option-switch order-option-switch-on', $output);
|
14 |
-
$this->assertContains('value="off" name="menu[a][title]"', $output);
|
15 |
-
$this->assertContains('value="on" name="menu[a][search]"', $output);
|
16 |
-
}
|
17 |
-
|
18 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/ImageTest.php
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class ImageTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\Image;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', 1));
|
13 |
-
$this->assertEquals("<input type='text' class='image' id='a' name='menu[a]' value='1' />"
|
14 |
-
. "<button type='button' class='button image_button' for='a' /><i class='fa fa-upload'></i></button>", $output);
|
15 |
-
}
|
16 |
-
|
17 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/ImportTest.php
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class ImportTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\Import;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$output = $this->form_component->render();
|
13 |
-
$this->assertEquals('<input type="file" name="responsive_menu_import_file" /><input type="submit" class="button submit" name="responsive_menu_import" value="Import Options" />', $output);
|
14 |
-
}
|
15 |
-
|
16 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/MenuOrderingTest.php
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class MenuOrderingTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\MenuOrdering;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', '{"search": "on", "title": "off"}'));
|
13 |
-
$this->assertContains('menu-order-option-switch menu-order-option-switch-on', $output);
|
14 |
-
$this->assertContains('value="off" name="menu[a][title]"', $output);
|
15 |
-
$this->assertContains('value="on" name="menu[a][search]"', $output);
|
16 |
-
}
|
17 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/ResetTest.php
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class ResetTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\Reset;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$output = $this->form_component->render();
|
13 |
-
$this->assertEquals('<input type="submit" class="button submit" name="responsive_menu_reset" value="Reset Options" />', $output);
|
14 |
-
}
|
15 |
-
|
16 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/SelectTest.php
DELETED
@@ -1,47 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class SelectTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\Select;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$options = [['value' => 1, 'display' => 'a'],['value' => 2, 'display' => 'b']];
|
13 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', 4), $options);
|
14 |
-
|
15 |
-
$expected = "<div class='select-style'><select class='select' name='menu[a]' id='a'>";
|
16 |
-
$expected .= "<option value='1'>a</option>";
|
17 |
-
$expected .= "<option value='2'>b</option>";
|
18 |
-
$expected .= "</select></div>";
|
19 |
-
|
20 |
-
$this->assertEquals($expected, $output);
|
21 |
-
}
|
22 |
-
|
23 |
-
public function testRenderingWithSelected() {
|
24 |
-
$options = [['value' => 1, 'display' => 'a'],['value' => 2, 'display' => 'b']];
|
25 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', 2), $options);
|
26 |
-
|
27 |
-
$expected = "<div class='select-style'><select class='select' name='menu[a]' id='a'>";
|
28 |
-
$expected .= "<option value='1'>a</option>";
|
29 |
-
$expected .= "<option value='2' selected='selected'>b</option>";
|
30 |
-
$expected .= "</select></div>";
|
31 |
-
|
32 |
-
$this->assertEquals($expected, $output);
|
33 |
-
}
|
34 |
-
|
35 |
-
public function testRenderingWithDisabled() {
|
36 |
-
$options = [['value' => 1, 'display' => 'a', 'disabled' => true],['value' => 2, 'display' => 'b']];
|
37 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', 2), $options);
|
38 |
-
|
39 |
-
$expected = "<div class='select-style'><select class='select' name='menu[a]' id='a'>";
|
40 |
-
$expected .= "<option value='1' disabled='disabled'>a [PRO]</option>";
|
41 |
-
$expected .= "<option value='2' selected='selected'>b</option>";
|
42 |
-
$expected .= "</select></div>";
|
43 |
-
|
44 |
-
$this->assertEquals($expected, $output);
|
45 |
-
}
|
46 |
-
|
47 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/TextAreaTest.php
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class TextAreaTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\TextArea;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', 1));
|
13 |
-
$this->assertEquals("<textarea class='textarea' id='a' name='menu[a]'>1</textarea>", $output);
|
14 |
-
}
|
15 |
-
|
16 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Form/TextTest.php
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class TextTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->form_component = new ResponsiveMenu\Form\Text;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testRendering() {
|
12 |
-
$output = $this->form_component->render(new ResponsiveMenu\Models\Option('a', 1));
|
13 |
-
$this->assertEquals("<input type='text' class='text' id='a' name='menu[a]' value='1' />", $output);
|
14 |
-
}
|
15 |
-
|
16 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Formatters/MinifierTest.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use PHPUnit\Framework\TestCase;
|
4 |
+
use ResponsiveMenu\Formatters\Minifier;
|
5 |
+
|
6 |
+
class MinifierTest extends TestCase {
|
7 |
+
|
8 |
+
public function testSimpleCSSWhitespaceRemovalTest() {
|
9 |
+
$minifier = new Minifier;
|
10 |
+
$this->assertEquals('.class{}', $minifier->minify('.class { }'));
|
11 |
+
}
|
12 |
+
|
13 |
+
public function testSimpleCSSCommentRemovalTest() {
|
14 |
+
$minifier = new Minifier;
|
15 |
+
$this->assertEquals('.class{}', $minifier->minify('.class{} /*comment */'));
|
16 |
+
}
|
17 |
+
|
18 |
+
public function testSimpleCSSTabRemovalTest() {
|
19 |
+
$minifier = new Minifier;
|
20 |
+
$this->assertEquals('.class{}', $minifier->minify('.class{ }'));
|
21 |
+
}
|
22 |
+
|
23 |
+
public function testSimpleCSSWhitespaceAfterRemovalTest() {
|
24 |
+
$minifier = new Minifier;
|
25 |
+
$this->assertEquals('.class{}', $minifier->minify('.class{} '));
|
26 |
+
}
|
27 |
+
|
28 |
+
}
|
tests/app/Formatters/MinifyTest.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class MinifyTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->minify = new ResponsiveMenu\Formatters\Minify;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testSimpleCSSWhitespaceRemovalTest() {
|
12 |
-
$this->assertEquals('.class{}', $this->minify->minify('.class { }'));
|
13 |
-
}
|
14 |
-
|
15 |
-
public function testSimpleCSSCommentRemovalTest() {
|
16 |
-
$this->assertEquals('.class{}', $this->minify->minify('.class{} /*comment */'));
|
17 |
-
}
|
18 |
-
|
19 |
-
public function testSimpleCSSTabRemovalTest() {
|
20 |
-
$this->assertEquals('.class{}', $this->minify->minify('.class{ }'));
|
21 |
-
}
|
22 |
-
|
23 |
-
public function testSimpleCSSWhitespaceAfterRemovalTest() {
|
24 |
-
$this->assertEquals('.class{}', $this->minify->minify('.class{} '));
|
25 |
-
}
|
26 |
-
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Management/OptionManagerTest.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use PHPUnit\Framework\TestCase;
|
4 |
+
use ResponsiveMenu\Management\OptionManager;
|
5 |
+
use ResponsiveMenu\Collections\OptionsCollection;
|
6 |
+
|
7 |
+
class OptionManagerTest extends TestCase {
|
8 |
+
|
9 |
+
private $db;
|
10 |
+
private $default_options = [
|
11 |
+
'foo' => 'bar',
|
12 |
+
'baz' => 'qux'
|
13 |
+
];
|
14 |
+
|
15 |
+
public function setUp() {
|
16 |
+
$this->db = $this->createMock('ResponsiveMenu\Database\Database');
|
17 |
+
}
|
18 |
+
|
19 |
+
public function testUpdateOptionsReturnsCorrectly() {
|
20 |
+
$manager = new OptionManager($this->db, $this->default_options);
|
21 |
+
$to_update = ['foo' => 'new', 'moon' => 'rise'];
|
22 |
+
|
23 |
+
$updated = $manager->updateOptions($to_update);
|
24 |
+
|
25 |
+
$this->assertInstanceOf('ResponsiveMenu\Collections\OptionsCollection', $updated);
|
26 |
+
|
27 |
+
$expected = new OptionsCollection([
|
28 |
+
'foo' => 'new',
|
29 |
+
'baz' => 'qux',
|
30 |
+
'moon' => 'rise'
|
31 |
+
]);
|
32 |
+
|
33 |
+
$this->assertEquals($expected, $updated);
|
34 |
+
}
|
35 |
+
|
36 |
+
public function testCreateOptionsReturnsCorrectly() {
|
37 |
+
$manager = new OptionManager($this->db, $this->default_options);
|
38 |
+
$to_create = ['moon' => 'rise'];
|
39 |
+
|
40 |
+
$updated = $manager->createOptions($to_create);
|
41 |
+
|
42 |
+
$this->assertInstanceOf('ResponsiveMenu\Collections\OptionsCollection', $updated);
|
43 |
+
|
44 |
+
$expected = new OptionsCollection([
|
45 |
+
'foo' => 'bar',
|
46 |
+
'baz' => 'qux',
|
47 |
+
'moon' => 'rise'
|
48 |
+
]);
|
49 |
+
|
50 |
+
$this->assertEquals($expected, $updated);
|
51 |
+
}
|
52 |
+
|
53 |
+
public function testRemoveOptionsReturnsCorrectly() {
|
54 |
+
$manager = new OptionManager($this->db, $this->default_options);
|
55 |
+
$to_remove = ['foo' => 'new', 'moon' => 'rise'];
|
56 |
+
|
57 |
+
$updated = $manager->removeOptions($to_remove);
|
58 |
+
|
59 |
+
$this->assertInstanceOf('ResponsiveMenu\Collections\OptionsCollection', $updated);
|
60 |
+
|
61 |
+
$expected = new OptionsCollection([
|
62 |
+
'baz' => 'qux'
|
63 |
+
]);
|
64 |
+
|
65 |
+
$this->assertEquals($expected, $updated);
|
66 |
+
}
|
67 |
+
|
68 |
+
public function testBuildFromArrayReturnsCorrectly() {
|
69 |
+
$manager = new OptionManager($this->db, $this->default_options);
|
70 |
+
$to_remove = ['foo' => 'new', 'moon' => 'rise'];
|
71 |
+
|
72 |
+
$updated = $manager->buildFromArray($to_remove);
|
73 |
+
|
74 |
+
$this->assertInstanceOf('ResponsiveMenu\Collections\OptionsCollection', $updated);
|
75 |
+
|
76 |
+
$expected = new OptionsCollection([
|
77 |
+
'foo' => 'new',
|
78 |
+
'baz' => 'qux',
|
79 |
+
'moon' => 'rise'
|
80 |
+
]);
|
81 |
+
|
82 |
+
$this->assertEquals($expected, $updated);
|
83 |
+
}
|
84 |
+
|
85 |
+
}
|
tests/app/Mappers/JsMapperTest.php
DELETED
@@ -1,59 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class JsMapperTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->collection = new ResponsiveMenu\Collections\OptionsCollection;
|
9 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('animation_speed', 5));
|
10 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_click_trigger', 'a'));
|
11 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('active_arrow_image', 'a'));
|
12 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('active_arrow_image_alt', 'n'));
|
13 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('inactive_arrow_image', 'b'));
|
14 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('inactive_arrow_image_alt', 'm'));
|
15 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('breakpoint', 'c'));
|
16 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_click_trigger', 'd'));
|
17 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('animation_type', 'e'));
|
18 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_appear_from', 'f'));
|
19 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('page_wrapper', 'g'));
|
20 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('accordion_animation', 'h'));
|
21 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_close_on_body_click', 'i'));
|
22 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_close_on_link_click', 'j'));
|
23 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_item_click_to_trigger_submenu', 'k'));
|
24 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_push_with_animation', 'l'));
|
25 |
-
|
26 |
-
$this->mapper = new ResponsiveMenu\Mappers\JsMapper;
|
27 |
-
}
|
28 |
-
|
29 |
-
public function testOutput() {
|
30 |
-
$mapped = $this->mapper->map($this->collection);
|
31 |
-
$this->assertContains('animationSpeed: 5000', $mapped);
|
32 |
-
$this->assertContains("trigger: 'd'", $mapped);
|
33 |
-
$this->assertContains('breakpoint: c', $mapped);
|
34 |
-
$this->assertContains("pushButton: 'l'", $mapped);
|
35 |
-
$this->assertContains("animationType: 'e'", $mapped);
|
36 |
-
$this->assertContains("animationSide: 'f'", $mapped);
|
37 |
-
$this->assertContains("pageWrapper: 'g'", $mapped);
|
38 |
-
$this->assertContains("accordion: 'h'", $mapped);
|
39 |
-
$this->assertContains("closeOnBodyClick: 'i'", $mapped);
|
40 |
-
$this->assertContains("closeOnLinkClick: 'j'", $mapped);
|
41 |
-
$this->assertContains("itemTriggerSubMenu: 'k'", $mapped);
|
42 |
-
$this->assertContains('alt="m"', $mapped);
|
43 |
-
$this->assertContains('alt="n"', $mapped);
|
44 |
-
}
|
45 |
-
|
46 |
-
public function testDefaultAnimationSpeed() {
|
47 |
-
$collection = new ResponsiveMenu\Collections\OptionsCollection;
|
48 |
-
$collection->add(new ResponsiveMenu\Models\Option('active_arrow_image', 'a'));
|
49 |
-
$collection->add(new ResponsiveMenu\Models\Option('active_arrow_image_alt', 'c'));
|
50 |
-
$collection->add(new ResponsiveMenu\Models\Option('inactive_arrow_image', 'b'));
|
51 |
-
$collection->add(new ResponsiveMenu\Models\Option('inactive_arrow_image_alt', 'd'));
|
52 |
-
$mapper = new ResponsiveMenu\Mappers\JsMapper;
|
53 |
-
$mapped = $this->mapper->map($collection);
|
54 |
-
$this->assertContains('animationSpeed: 500', $mapped);
|
55 |
-
$this->assertContains('alt="c"', $mapped);
|
56 |
-
$this->assertContains('alt="d"', $mapped);
|
57 |
-
}
|
58 |
-
|
59 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Mappers/ScssBaseMapperTest.php
DELETED
@@ -1,32 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class ScssBaseMapperTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->collection = new ResponsiveMenu\Collections\OptionsCollection;
|
9 |
-
$this->scss = new scssc_free;
|
10 |
-
$this->mapper = new ResponsiveMenu\Mappers\ScssBaseMapper($this->scss);
|
11 |
-
}
|
12 |
-
|
13 |
-
public function testThis() {
|
14 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('breakpoint', 6000));
|
15 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_text_alignment', 'right'));
|
16 |
-
$mapped = $this->mapper->map($this->collection);
|
17 |
-
$mapped = $this->mapper->map($this->collection);
|
18 |
-
$this->assertContains('max-width: 6000px)', $mapped);
|
19 |
-
$this->assertContains('padding-right: 10%', $mapped);
|
20 |
-
$this->assertContains('padding-right: 15%', $mapped);
|
21 |
-
}
|
22 |
-
|
23 |
-
public function testThat() {
|
24 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('breakpoint', 3000));
|
25 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_text_alignment', 'left'));
|
26 |
-
$mapped = $this->mapper->map($this->collection);
|
27 |
-
$this->assertContains('max-width: 3000px)', $mapped);
|
28 |
-
$this->assertContains('padding-left: 10%', $mapped);
|
29 |
-
$this->assertContains('padding-left: 15%', $mapped);
|
30 |
-
}
|
31 |
-
|
32 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Mappers/ScssButtonMapperTest.php
DELETED
@@ -1,42 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class ScssButtonMapperTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->collection = new ResponsiveMenu\Collections\OptionsCollection;
|
9 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('breakpoint', 444));
|
10 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_line_height', 555));
|
11 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_line_margin', 50));
|
12 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_line_colour', '#fff'));
|
13 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_line_width', 50));
|
14 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_width', 777));
|
15 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_height', 888));
|
16 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_click_animation', 50));
|
17 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_transparent_background', 'on'));
|
18 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_background_colour', '#fff'));
|
19 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_background_colour_hover', '#fff'));
|
20 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_position_type', 'left'));
|
21 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_top', 50));
|
22 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_left_or_right', 'left'));
|
23 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_distance_from_side', 5));
|
24 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_line_colour', '#fff'));
|
25 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_text_colour', '#fff'));
|
26 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_font_size', 5));
|
27 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('button_title_line_height', 5));
|
28 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('animation_speed', 5));
|
29 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('transition_speed', 5));
|
30 |
-
$this->scss = new scssc_free;
|
31 |
-
$this->mapper = new ResponsiveMenu\Mappers\ScssButtonMapper($this->scss);
|
32 |
-
}
|
33 |
-
|
34 |
-
public function testOutput() {
|
35 |
-
$mapped = $this->mapper->map($this->collection);
|
36 |
-
$this->assertContains('height: 555px;', $mapped);
|
37 |
-
$this->assertContains('height: 888px;', $mapped);
|
38 |
-
$this->assertContains('width: 777px;', $mapped);
|
39 |
-
$this->assertContains('max-width: 444px', $mapped);
|
40 |
-
}
|
41 |
-
|
42 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Mappers/ScssMenuMapperTest.php
DELETED
@@ -1,83 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class ScssMenuMapperTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->collection = new ResponsiveMenu\Collections\OptionsCollection;
|
9 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('breakpoint', 111));
|
10 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_close_on_body_click', 'on'));
|
11 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('page_wrapper', '#wrapper'));
|
12 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('animation_speed', 222));
|
13 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_width', 333));
|
14 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_width_unit', 'px'));
|
15 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_appear_from', 'left'));
|
16 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_background_colour', '#ffffff'));
|
17 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_text_alignment', 'right'));
|
18 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_additional_content_colour', '#ffffff'));
|
19 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_search_box_background_colour', '#ffffff'));
|
20 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_search_box_border_colour', '#ffffff'));
|
21 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_search_box_text_colour', '#ffffff'));
|
22 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_search_box_placholder_colour', '#ffffff'));
|
23 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_maximum_width', 444));
|
24 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_maximum_width_unit', 'px'));
|
25 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_minimum_width', 555));
|
26 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_minimum_width_unit', 'px'));
|
27 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_font', 'Arial'));
|
28 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('transition_speed', 777));
|
29 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_title_background_colour', '#ffffff'));
|
30 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_title_colour', '#ffffff'));
|
31 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_title_font_size', 888));
|
32 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_title_font_size_unit', 'px'));
|
33 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_title_hover_colour', '#ffffff'));
|
34 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_title_background_hover_colour', '#ffffff'));
|
35 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_font_size', 999));
|
36 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_font_size_unit', 'px'));
|
37 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_links_height', 1000));
|
38 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_links_height_unit', 'px'));
|
39 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_item_border_colour', '#ffffff'));
|
40 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_link_colour', '#ffffff'));
|
41 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_item_background_colour', '#ffffff'));
|
42 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_link_hover_colour', '#ffffff'));
|
43 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_item_background_hover_colour', '#ffffff'));
|
44 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_item_border_colour_hover', '#ffffff'));
|
45 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_shape_hover_colour', '#ffffff'));
|
46 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_border_hover_colour', '#ffffff'));
|
47 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_background_hover_colour', '#ffffff'));
|
48 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('arrow_position', 'left'));
|
49 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('submenu_arrow_height', 2000));
|
50 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('submenu_arrow_height_unit', 'px'));
|
51 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('submenu_arrow_width', 3000));
|
52 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('submenu_arrow_width_unit', 'px'));
|
53 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_shape_colour', '#ffffff'));
|
54 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_border_colour', '#ffffff'));
|
55 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_background_colour', '#ffffff'));
|
56 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_current_item_background_colour', '#ffffff'));
|
57 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_current_link_colour', '#ffffff'));
|
58 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_current_item_border_colour', '#ffffff'));
|
59 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_current_item_background_hover_colour', '#ffffff'));
|
60 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_current_link_hover_colour', '#ffffff'));
|
61 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_current_item_border_hover_colour', '#ffffff'));
|
62 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_background_colour_active', '#ffffff'));
|
63 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_border_hover_colour_active', '#ffffff'));
|
64 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_border_colour_active', '#ffffff'));
|
65 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_shape_colour_active', '#ffffff'));
|
66 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_shape_hover_colour_active', '#ffffff'));
|
67 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_sub_arrow_background_hover_colour_active', '#ffffff'));
|
68 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_to_hide', '#tohide'));
|
69 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_border_width', 1));
|
70 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('menu_border_width_unit', 'px'));
|
71 |
-
$this->scss = new scssc_free;
|
72 |
-
$this->mapper = new ResponsiveMenu\Mappers\ScssMenuMapper($this->scss);
|
73 |
-
}
|
74 |
-
|
75 |
-
public function testThis() {
|
76 |
-
$mapped = $this->mapper->map($this->collection);
|
77 |
-
$this->assertContains('width: 333%;', $mapped);
|
78 |
-
$this->assertContains('max-width: 444px;', $mapped);
|
79 |
-
$this->assertContains('min-width: 555px;', $mapped);
|
80 |
-
|
81 |
-
}
|
82 |
-
|
83 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Models/OptionTest.php
DELETED
@@ -1,57 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class OptionTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->option = new ResponsiveMenu\Models\Option('a', 'b');
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testGetName() {
|
12 |
-
$this->assertEquals('a', $this->option->getName());
|
13 |
-
}
|
14 |
-
|
15 |
-
public function testGetValue() {
|
16 |
-
$this->assertEquals('b', $this->option->getValue());
|
17 |
-
}
|
18 |
-
|
19 |
-
public function testSetValue() {
|
20 |
-
$this->option->setValue('c');
|
21 |
-
$this->assertEquals('c', $this->option->getValue());
|
22 |
-
}
|
23 |
-
|
24 |
-
public function testToString() {
|
25 |
-
$this->assertEquals('b', $this->option);
|
26 |
-
}
|
27 |
-
|
28 |
-
public function testAddFilter() {
|
29 |
-
$filter = $this->createMock('ResponsiveMenu\Filters\TextFilter');
|
30 |
-
$filter->method('filter')->willReturn('d');
|
31 |
-
$this->option->setFilter($filter);
|
32 |
-
$this->assertEquals('b', $this->option->getValue());
|
33 |
-
$this->assertEquals('d', $this->option->getFiltered());
|
34 |
-
}
|
35 |
-
|
36 |
-
public function testAddAndGetFilter() {
|
37 |
-
$filter = $this->createMock('ResponsiveMenu\Filters\TextFilter');
|
38 |
-
$filter->method('filter')->willReturn('d');
|
39 |
-
$this->option->setFilter($filter);
|
40 |
-
$this->assertInstanceOf('ResponsiveMenu\Filters\TextFilter', $this->option->getFilter());
|
41 |
-
}
|
42 |
-
|
43 |
-
public function testFilteredJsonAsString() {
|
44 |
-
$option = new ResponsiveMenu\Models\Option('a', '{"a":"1","b":"2"}');
|
45 |
-
$filter = new ResponsiveMenu\Filters\JsonFilter;
|
46 |
-
$option->setFilter($filter);
|
47 |
-
$this->assertEquals('{"a":"1","b":"2"}', $option->getFiltered());
|
48 |
-
}
|
49 |
-
|
50 |
-
public function testFilteredJsonAsArray() {
|
51 |
-
$option = new ResponsiveMenu\Models\Option('a', ['a' => 1,'b' => 2]);
|
52 |
-
$filter = new ResponsiveMenu\Filters\JsonFilter;
|
53 |
-
$option->setFilter($filter);
|
54 |
-
$this->assertEquals('{"a":1,"b":2}', $option->getFiltered());
|
55 |
-
}
|
56 |
-
|
57 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Repositories/OptionRepositoryTest.php
DELETED
@@ -1,87 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class OptionRepositoryTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->db = $this->createMock('ResponsiveMenu\Database\WpDatabase');
|
9 |
-
$this->factory = $this->createMock('ResponsiveMenu\Factories\OptionFactory');
|
10 |
-
$this->defaults = ['a' => 1, 'b' => 2, 'c' => 3];
|
11 |
-
|
12 |
-
$this->repo = new ResponsiveMenu\Repositories\OptionRepository($this->db, $this->factory, $this->defaults);
|
13 |
-
}
|
14 |
-
|
15 |
-
public function testCollectionReturned() {
|
16 |
-
$obj_1 = new \StdClass;
|
17 |
-
$obj_1->name = 'a';
|
18 |
-
$obj_1->value = 1;
|
19 |
-
|
20 |
-
$obj_2 = new \StdClass;
|
21 |
-
$obj_2->name = 'b';
|
22 |
-
$obj_2->value = 2;
|
23 |
-
|
24 |
-
$this->db->method('all')->willReturn([$obj_1, $obj_2]);
|
25 |
-
|
26 |
-
$this->factory->method('build')->will($this->onConsecutiveCalls(
|
27 |
-
new ResponsiveMenu\Models\Option('a', 1),
|
28 |
-
new ResponsiveMenu\Models\Option('b', 2)
|
29 |
-
));
|
30 |
-
|
31 |
-
$this->assertInstanceOf('ResponsiveMenu\Collections\OptionsCollection', $this->repo->all());
|
32 |
-
}
|
33 |
-
|
34 |
-
public function testCollectionCountIsReturned() {
|
35 |
-
$obj_1 = new \StdClass;
|
36 |
-
$obj_1->name = 'a';
|
37 |
-
$obj_1->value = 1;
|
38 |
-
|
39 |
-
$obj_2 = new \StdClass;
|
40 |
-
$obj_2->name = 'b';
|
41 |
-
$obj_2->value = 2;
|
42 |
-
|
43 |
-
$this->db->method('all')->willReturn([$obj_1, $obj_2]);
|
44 |
-
|
45 |
-
$this->factory->method('build')->will($this->onConsecutiveCalls(
|
46 |
-
new ResponsiveMenu\Models\Option('a', 1),
|
47 |
-
new ResponsiveMenu\Models\Option('b', 2)
|
48 |
-
));
|
49 |
-
|
50 |
-
$this->assertEquals(2, count($this->repo->all()->all()));
|
51 |
-
}
|
52 |
-
|
53 |
-
public function testDbUpdateIsCalled() {
|
54 |
-
$option = $this->createMock('ResponsiveMenu\Models\Option');
|
55 |
-
$option->method('getFiltered')->willReturn(1);
|
56 |
-
$option->method('getName')->willReturn('a');
|
57 |
-
$this->db->method('update')->willReturn(true);
|
58 |
-
$this->assertTrue($this->repo->update($option));
|
59 |
-
}
|
60 |
-
|
61 |
-
public function testDbCreateIsCalled() {
|
62 |
-
$option = $this->createMock('ResponsiveMenu\Models\Option');
|
63 |
-
$option->method('getFiltered')->willReturn(1);
|
64 |
-
$option->method('getName')->willReturn('a');
|
65 |
-
$this->db->method('insert')->willReturn(true);
|
66 |
-
$this->db->method('mySqlTime')->willReturn('123');
|
67 |
-
$this->assertTrue($this->repo->create($option));
|
68 |
-
}
|
69 |
-
|
70 |
-
public function testDbRemoveIsCalled() {
|
71 |
-
$this->db->method('delete')->willReturn(true);
|
72 |
-
$this->assertTrue($this->repo->remove('a'));
|
73 |
-
}
|
74 |
-
|
75 |
-
public function testBuildFromArray() {
|
76 |
-
$opt_1 = new ResponsiveMenu\Models\Option('a', 4);
|
77 |
-
$opt_1->setFilter($this->createMock('ResponsiveMenu\Filters\TextFilter'));
|
78 |
-
|
79 |
-
$opt_2 = new ResponsiveMenu\Models\Option('d', 6);
|
80 |
-
$opt_2->setFilter($this->createMock('ResponsiveMenu\Filters\TextFilter'));
|
81 |
-
|
82 |
-
$this->factory->method('build')->will($this->onConsecutiveCalls($opt_1, $opt_2, $opt_1, $opt_2));
|
83 |
-
|
84 |
-
$this->assertInstanceOf('ResponsiveMenu\Collections\OptionsCollection', $this->repo->buildFromArray(['a' => 4, 'd' => 6]));
|
85 |
-
}
|
86 |
-
|
87 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Routing/ContainerTest.php
DELETED
@@ -1,66 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
use ResponsiveMenu\Routing\Container;
|
5 |
-
|
6 |
-
class ContainerTest extends TestCase {
|
7 |
-
|
8 |
-
public function testCreatedObjectIsReturn() {
|
9 |
-
$container = new Container;
|
10 |
-
$container['std'] = function($c) {
|
11 |
-
return new \StdClass;
|
12 |
-
};
|
13 |
-
$this->assertInstanceOf('StdClass', $container['std']);
|
14 |
-
}
|
15 |
-
|
16 |
-
public function testCreatedObjectIsReturnedWithDependencies() {
|
17 |
-
$container = new Container;
|
18 |
-
$container['std'] = function($c) {
|
19 |
-
return new \StdClass;
|
20 |
-
};
|
21 |
-
$container['std_two'] = function($c) {
|
22 |
-
return new \StdClass($c['std']);
|
23 |
-
};
|
24 |
-
$this->assertInstanceOf('StdClass', $container['std']);
|
25 |
-
$this->assertInstanceOf('StdClass', $container['std_two']);
|
26 |
-
}
|
27 |
-
|
28 |
-
public function testVariableIsReturned() {
|
29 |
-
$container = new Container;
|
30 |
-
$container['var'] = 5;
|
31 |
-
$this->assertEquals(5, $container['var']);
|
32 |
-
}
|
33 |
-
|
34 |
-
public function testVariableIsset() {
|
35 |
-
$container = new Container;
|
36 |
-
$container['var'] = 5;
|
37 |
-
$this->assertTrue(isset($container['var']));
|
38 |
-
$this->assertFalse(isset($container['not_set']));
|
39 |
-
}
|
40 |
-
|
41 |
-
public function testVariableKeys() {
|
42 |
-
$container = new Container;
|
43 |
-
$container['var'] = 5;
|
44 |
-
$container['var_two'] = 6;
|
45 |
-
$this->assertEquals(['var', 'var_two'], $container->keys());
|
46 |
-
}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* @expectedException \InvalidArgumentException
|
50 |
-
*/
|
51 |
-
public function testExceptionThrownIfDoesntExist() {
|
52 |
-
$container = new Container;
|
53 |
-
$container['doesnt_exist'];
|
54 |
-
}
|
55 |
-
|
56 |
-
/**
|
57 |
-
* @expectedException \InvalidArgumentException
|
58 |
-
*/
|
59 |
-
public function testExceptionThrownIfDoesntExistAfterUnsetting() {
|
60 |
-
$container = new Container;
|
61 |
-
$container['to_delete'] = 5;
|
62 |
-
unset($container['to_delete']);
|
63 |
-
$container['to_delete'];
|
64 |
-
}
|
65 |
-
|
66 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Services/OptionsServiceTest.php
DELETED
@@ -1,59 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
use ResponsiveMenu\Services\OptionService;
|
5 |
-
|
6 |
-
class OptionsServiceTest extends TestCase {
|
7 |
-
|
8 |
-
public function setUp() {
|
9 |
-
$this->repository = $this->createMock('ResponsiveMenu\Repositories\OptionRepository');
|
10 |
-
$this->factory = $this->createMock('ResponsiveMenu\Factories\OptionFactory');
|
11 |
-
$this->translator = $this->createMock('ResponsiveMenu\Translation\Translator');
|
12 |
-
$this->scripts_builder = $this->createMock('ResponsiveMenu\Filesystem\ScriptsBuilder');
|
13 |
-
|
14 |
-
$this->service = new OptionService($this->repository, $this->factory, $this->translator, $this->scripts_builder);
|
15 |
-
}
|
16 |
-
|
17 |
-
public function testCombiningBasicOptions() {
|
18 |
-
$this->assertSame(['one' => 1, 'two' => 'two'], $this->service->combineOptions(['one' => 1],['two' => 'two']));
|
19 |
-
}
|
20 |
-
|
21 |
-
public function testCombiningStringZeroOptions() {
|
22 |
-
$this->assertSame(['one' => '0'], $this->service->combineOptions(['one' => 'default'],['one' => '0']));
|
23 |
-
}
|
24 |
-
|
25 |
-
public function testCombiningIntegerZeroOptions() {
|
26 |
-
$this->assertSame(['one' => 0], $this->service->combineOptions(['one' => 'default'],['one' => 0]));
|
27 |
-
}
|
28 |
-
|
29 |
-
public function testOverwritingDefaultOptionValue() {
|
30 |
-
$this->assertSame(['one' => 'updated'], $this->service->combineOptions(['one' => 'default'],['one' => 'updated']));
|
31 |
-
}
|
32 |
-
|
33 |
-
public function testRepositoryReturn() {
|
34 |
-
$this->repository->method('all')->willReturn('a');
|
35 |
-
$this->assertEquals('a', $this->service->all());
|
36 |
-
}
|
37 |
-
|
38 |
-
public function testBuildPostArray() {
|
39 |
-
$this->repository->method('buildFromArray')->willReturn('a');
|
40 |
-
$this->assertEquals('a', $this->service->buildFromPostArray([]));
|
41 |
-
}
|
42 |
-
|
43 |
-
public function testUpdateOptions() {
|
44 |
-
$this->repository->method('all')->willReturn(new ResponsiveMenu\Collections\OptionsCollection);
|
45 |
-
$this->repository->method('update')->willReturn('a');
|
46 |
-
$this->factory->method('build')->willReturn(new ResponsiveMenu\Models\Option('a', 1));
|
47 |
-
$this->assertInstanceOf('ResponsiveMenu\Collections\OptionsCollection', $this->service->updateOptions(['a' => 1]));
|
48 |
-
}
|
49 |
-
|
50 |
-
public function testCreateOptions() {
|
51 |
-
$collection = new ResponsiveMenu\Collections\OptionsCollection;
|
52 |
-
$collection->add(new ResponsiveMenu\Models\Option('external_files', 'on'));
|
53 |
-
$this->repository->method('all')->willReturn($collection);
|
54 |
-
$this->repository->method('create')->willReturn('a');
|
55 |
-
$this->factory->method('build')->willReturn(new ResponsiveMenu\Models\Option('a', 1));
|
56 |
-
$this->assertInstanceOf('ResponsiveMenu\Collections\OptionsCollection', $this->service->createOptions(['a' => 1]));
|
57 |
-
}
|
58 |
-
|
59 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Translation/TranslatorTest.php
DELETED
@@ -1,50 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\Translation;
|
4 |
-
|
5 |
-
use PHPUnit\Framework\TestCase;
|
6 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
7 |
-
use ResponsiveMenu\Models\Option;
|
8 |
-
|
9 |
-
class TranslatorTest extends TestCase {
|
10 |
-
|
11 |
-
public static function setUpBeforeClass() {
|
12 |
-
function apply_filters($a, $b, $c, $d) {
|
13 |
-
return $b;
|
14 |
-
}
|
15 |
-
function get_home_url() {
|
16 |
-
return 'home';
|
17 |
-
}
|
18 |
-
function do_action($a, $b, $c, $d) {
|
19 |
-
return $d;
|
20 |
-
}
|
21 |
-
function pll__($a) {
|
22 |
-
return $a;
|
23 |
-
}
|
24 |
-
function do_shortcode($a) {
|
25 |
-
return $a;
|
26 |
-
}
|
27 |
-
}
|
28 |
-
public function setUp() {
|
29 |
-
$this->translator = new Translator;
|
30 |
-
}
|
31 |
-
|
32 |
-
public function testSearchUrl() {
|
33 |
-
$this->assertEquals('home', $this->translator->searchUrl());
|
34 |
-
}
|
35 |
-
|
36 |
-
public function testSaveTranslations() {
|
37 |
-
$collection = new OptionsCollection;
|
38 |
-
$collection->add(new Option('menu_additional_content', 'a'));
|
39 |
-
$this->assertNull($this->translator->saveTranslations($collection));
|
40 |
-
}
|
41 |
-
|
42 |
-
public function testTranslate() {
|
43 |
-
$this->assertEquals('a', $this->translator->translate(new Option('menu_additional_content', 'a')));
|
44 |
-
}
|
45 |
-
|
46 |
-
public function testAllowShortcode() {
|
47 |
-
$this->assertEquals('a', $this->translator->allowShortcode('a'));
|
48 |
-
}
|
49 |
-
|
50 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Validation/ValidatorTest.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use PHPUnit\Framework\TestCase;
|
4 |
+
use ResponsiveMenu\Validation\Validator;
|
5 |
+
|
6 |
+
class ValidatorTest extends TestCase {
|
7 |
+
|
8 |
+
public function testCorrectErrorsReturned() {
|
9 |
+
$options = [
|
10 |
+
'button_background_colour' => 'will fail',
|
11 |
+
'menu_link_colour' => '#ffffff'
|
12 |
+
];
|
13 |
+
$validator = new Validator();
|
14 |
+
$this->assertFalse($validator->validate($options));
|
15 |
+
$errors = $validator->getErrors();
|
16 |
+
|
17 |
+
$this->assertCount(1, $errors);
|
18 |
+
$this->assertArrayHasKey('button_background_colour', $errors);
|
19 |
+
|
20 |
+
// Tests the creation of URL inside error message
|
21 |
+
$this->assertContains('#responsive-menu-button-background-colour', $errors['button_background_colour'][0]);
|
22 |
+
|
23 |
+
// Test the conversion of ID to name inside error message
|
24 |
+
$this->assertContains('Button background colour', $errors['button_background_colour'][0]);
|
25 |
+
}
|
26 |
+
|
27 |
+
public function testNoErrorsThrown() {
|
28 |
+
$options = [
|
29 |
+
'button_background_colour' => '#DADADA',
|
30 |
+
'menu_link_colour' => '#ffffff'
|
31 |
+
];
|
32 |
+
$validator = new Validator();
|
33 |
+
$this->assertTrue($validator->validate($options));
|
34 |
+
$this->assertEmpty($validator->getErrors());
|
35 |
+
}
|
36 |
+
|
37 |
+
public function testCombinedValidators() {
|
38 |
+
$options = [
|
39 |
+
'breakpoint' => '-3.5abc',
|
40 |
+
'menu_link_colour' => '#ffffff'
|
41 |
+
];
|
42 |
+
$validator = new Validator();
|
43 |
+
$this->assertFalse($validator->validate($options));
|
44 |
+
$this->assertEquals(count($validator->getErrors()['breakpoint']), 2);
|
45 |
+
}
|
46 |
+
|
47 |
+
}
|
tests/app/Validation/Validators/ColourTest.php
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use PHPUnit\Framework\TestCase;
|
4 |
+
use ResponsiveMenu\Validation\Validators;
|
5 |
+
|
6 |
+
class ColourTest extends TestCase {
|
7 |
+
|
8 |
+
public function testColourList() {
|
9 |
+
return [
|
10 |
+
|
11 |
+
// These should fail
|
12 |
+
['foo', false],
|
13 |
+
['bar', false],
|
14 |
+
['red', false],
|
15 |
+
['#f', false],
|
16 |
+
['#f', false],
|
17 |
+
['#ff', false],
|
18 |
+
['##fff', false],
|
19 |
+
['rgba(54,54,54)', false],
|
20 |
+
|
21 |
+
// These should pass
|
22 |
+
['#fff', true],
|
23 |
+
['#ffffff', true],
|
24 |
+
['#333333', true],
|
25 |
+
['#7f7f7f', true],
|
26 |
+
['rgba(54,54,54,0.5)', true],
|
27 |
+
['rgba(54, 54, 54, 0.5)', true]
|
28 |
+
|
29 |
+
];
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @dataProvider testColourList
|
34 |
+
*/
|
35 |
+
public function testHexIsValidated($colour, $expected) {
|
36 |
+
$validator = new Validators\Colour($colour);
|
37 |
+
$this->assertEquals($expected, $validator->validate());
|
38 |
+
}
|
39 |
+
|
40 |
+
}
|
tests/app/Validation/Validators/NumericTest.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use PHPUnit\Framework\TestCase;
|
4 |
+
use ResponsiveMenu\Validation\Validators;
|
5 |
+
|
6 |
+
class NumericTest extends TestCase {
|
7 |
+
|
8 |
+
public function testNumberList() {
|
9 |
+
return [
|
10 |
+
|
11 |
+
// These should fail
|
12 |
+
['a', false],
|
13 |
+
['cd', false],
|
14 |
+
['0cd', false],
|
15 |
+
['cd0', false],
|
16 |
+
['cd0dc', false],
|
17 |
+
['', false],
|
18 |
+
|
19 |
+
// These should pass
|
20 |
+
['0', true],
|
21 |
+
['0.2', true],
|
22 |
+
['1', true],
|
23 |
+
['1.2', true],
|
24 |
+
['-1', true],
|
25 |
+
['-3.4', true],
|
26 |
+
['44', true],
|
27 |
+
[0, true],
|
28 |
+
[0.3, true],
|
29 |
+
[1, true],
|
30 |
+
[1.6, true],
|
31 |
+
[-1, true],
|
32 |
+
[-1.2, true],
|
33 |
+
[44, true],
|
34 |
+
[44.8, true]
|
35 |
+
|
36 |
+
];
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @dataProvider testNumberList
|
41 |
+
*/
|
42 |
+
public function testIntegerIsValidated($number, $expected) {
|
43 |
+
$validator = new Validators\Numeric($number);
|
44 |
+
$this->assertEquals($expected, $validator->validate());
|
45 |
+
}
|
46 |
+
|
47 |
+
}
|
tests/app/Validation/Validators/PositiveTest.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use PHPUnit\Framework\TestCase;
|
4 |
+
use ResponsiveMenu\Validation\Validators;
|
5 |
+
|
6 |
+
class PositiveTest extends TestCase {
|
7 |
+
|
8 |
+
public function testPositiveList() {
|
9 |
+
return [
|
10 |
+
|
11 |
+
// These should fail
|
12 |
+
['-3.5as', false],
|
13 |
+
['-2a', false],
|
14 |
+
['-1', false],
|
15 |
+
['-4', false],
|
16 |
+
[-3, false],
|
17 |
+
|
18 |
+
// These should pass
|
19 |
+
['', true],
|
20 |
+
['0', true],
|
21 |
+
['0.2', true],
|
22 |
+
['1', true],
|
23 |
+
['1.2', true],
|
24 |
+
['44', true],
|
25 |
+
[0, true],
|
26 |
+
[0.3, true],
|
27 |
+
[1, true],
|
28 |
+
[1.6, true],
|
29 |
+
|
30 |
+
];
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* @dataProvider testPositiveList
|
35 |
+
*/
|
36 |
+
public function testNumberIsValidated($number, $expected) {
|
37 |
+
$validator = new Validators\Positive($number);
|
38 |
+
$this->assertEquals($expected, $validator->validate());
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
tests/app/View/AdminViewTest.php
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\View;
|
4 |
-
use PHPUnit\Framework\Testcase;
|
5 |
-
|
6 |
-
class AdminViewTest extends TestCase {
|
7 |
-
|
8 |
-
public function setUp() {
|
9 |
-
function is_admin() {
|
10 |
-
return false;
|
11 |
-
}
|
12 |
-
}
|
13 |
-
|
14 |
-
public function testSetup() {
|
15 |
-
$admin_view = new AdminView;
|
16 |
-
$this->assertInstanceOf('ResponsiveMenu\View\AdminView', $admin_view);
|
17 |
-
}
|
18 |
-
|
19 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/View/FrontViewTest.php
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\View;
|
4 |
-
use PHPUnit\Framework\Testcase;
|
5 |
-
|
6 |
-
class FrontViewTest extends TestCase {
|
7 |
-
|
8 |
-
public function setUp() {
|
9 |
-
$this->js_factory = $this->createMock('ResponsiveMenu\Factories\JsFactory');
|
10 |
-
$this->css_factory = $this->createMock('ResponsiveMenu\Factories\CssFactory');
|
11 |
-
}
|
12 |
-
|
13 |
-
public function testSetup() {
|
14 |
-
$front_view = new FrontView($this->js_factory, $this->css_factory);
|
15 |
-
$this->assertInstanceOf('ResponsiveMenu\View\FrontView', $front_view);
|
16 |
-
}
|
17 |
-
|
18 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/ViewModels/ButtonTest.php
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class ButtonTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->collection = $this->createMock('ResponsiveMenu\Collections\OptionsCollection');
|
9 |
-
$this->component = $this->createMock('ResponsiveMenu\ViewModels\Components\Button\Button');
|
10 |
-
$this->component->method('render')->willReturn('a');
|
11 |
-
$this->button = new ResponsiveMenu\ViewModels\Button($this->component);
|
12 |
-
}
|
13 |
-
|
14 |
-
public function testOutput() {
|
15 |
-
$this->assertEquals('a', $this->button->getHtml($this->collection));
|
16 |
-
}
|
17 |
-
|
18 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/ViewModels/Components/Admin/BoxesTest.php
DELETED
@@ -1,50 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Admin;
|
4 |
-
|
5 |
-
use PHPUnit\Framework\TestCase;
|
6 |
-
use ResponsiveMenu\Models\Option;
|
7 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
8 |
-
|
9 |
-
class BoxesTest extends TestCase {
|
10 |
-
|
11 |
-
public function setUp() {
|
12 |
-
$this->collection = new OptionsCollection;
|
13 |
-
$this->collection->add(new Option('a_three', 'a value'));
|
14 |
-
$this->collection->add(new Option('b_three', 'b value'));
|
15 |
-
|
16 |
-
$this->component = new Boxes(
|
17 |
-
[
|
18 |
-
'a one' => [
|
19 |
-
'a two' => [
|
20 |
-
[
|
21 |
-
'type' => 'text',
|
22 |
-
'option' => 'a_three',
|
23 |
-
'title' => 'a three title',
|
24 |
-
'label' => 'a three label',
|
25 |
-
]
|
26 |
-
]
|
27 |
-
],
|
28 |
-
'b one' => [
|
29 |
-
'b two' => [
|
30 |
-
[
|
31 |
-
'type' => 'colour',
|
32 |
-
'option' => 'b_three',
|
33 |
-
'title' => 'b three title',
|
34 |
-
'label' => 'b three label',
|
35 |
-
]
|
36 |
-
]
|
37 |
-
]
|
38 |
-
], $this->collection, 'a_value');
|
39 |
-
}
|
40 |
-
|
41 |
-
public function testRender() {
|
42 |
-
|
43 |
-
$rendered = $this->component->render();
|
44 |
-
$this->assertContains('tab_container_a_one"', $rendered);
|
45 |
-
$this->assertContains('id="b_three_container"', $rendered);
|
46 |
-
$this->assertContains('<div class="label">a three title</div>', $rendered);
|
47 |
-
$this->assertContains('<div class="label">b three title</div>', $rendered);
|
48 |
-
}
|
49 |
-
|
50 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/ViewModels/Components/Admin/TabsTest.php
DELETED
@@ -1,24 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Admin;
|
4 |
-
|
5 |
-
use PHPUnit\Framework\TestCase;
|
6 |
-
use ResponsiveMenu\Models\Option;
|
7 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
8 |
-
|
9 |
-
class TabsTest extends TestCase {
|
10 |
-
|
11 |
-
public function setUp() {
|
12 |
-
$this->component = new Tabs(['a one' => '1', 'b two' => '2'], 'a_one');
|
13 |
-
}
|
14 |
-
|
15 |
-
public function testRender() {
|
16 |
-
$rendered = $this->component->render();
|
17 |
-
$this->assertContains('id="tab_a_one"', $rendered);
|
18 |
-
$this->assertContains('id="tab_b_two"', $rendered);
|
19 |
-
$this->assertContains('>a one<', $rendered);
|
20 |
-
$this->assertContains('>b two<', $rendered);
|
21 |
-
$this->assertContains('active_tab', $rendered);
|
22 |
-
}
|
23 |
-
|
24 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/ViewModels/Components/Button/ButtonTest.php
DELETED
@@ -1,36 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Button;
|
4 |
-
|
5 |
-
use PHPUnit\Framework\TestCase;
|
6 |
-
use ResponsiveMenu\Models\Option;
|
7 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
8 |
-
|
9 |
-
class ButtonTest extends TestCase {
|
10 |
-
|
11 |
-
public function setUp() {
|
12 |
-
$this->translator = $this->createMock('ResponsiveMenu\Translation\Translator');
|
13 |
-
$this->component = new Button($this->translator);
|
14 |
-
}
|
15 |
-
|
16 |
-
public function testRender() {
|
17 |
-
$collection = new OptionsCollection;
|
18 |
-
$collection->add(new Option('button_title', 'b'));
|
19 |
-
$collection->add(new Option('button_title_position', 'left'));
|
20 |
-
$collection->add(new Option('button_click_animation', 'd'));
|
21 |
-
$collection->add(new Option('button_image', 'e'));
|
22 |
-
$collection->add(new Option('button_image_alt', 'g'));
|
23 |
-
$collection->add(new Option('button_image_when_clicked', 'f'));
|
24 |
-
$collection->add(new Option('button_image_alt_when_clicked', 'h'));
|
25 |
-
|
26 |
-
$this->translator->method('translate')->willReturn('a');
|
27 |
-
|
28 |
-
$rendered = $this->component->render($collection);
|
29 |
-
$this->assertContains('responsive-menu-label-left', $rendered);
|
30 |
-
$this->assertContains('responsive-menu-accessible', $rendered);
|
31 |
-
$this->assertContains('responsive-menu-d', $rendered);
|
32 |
-
$this->assertContains('alt="g"', $rendered);
|
33 |
-
$this->assertContains('alt="h"', $rendered);
|
34 |
-
}
|
35 |
-
|
36 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/ViewModels/Components/ComponentFactoryTest.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class ComponentFactoryTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->factory = new ResponsiveMenu\ViewModels\Components\ComponentFactory;
|
9 |
-
}
|
10 |
-
|
11 |
-
public function testMapTitle() {
|
12 |
-
$this->assertInstanceOf('ResponsiveMenu\ViewModels\Components\Menu\Title', $this->factory->build('title'));
|
13 |
-
}
|
14 |
-
|
15 |
-
public function testMapMenu() {
|
16 |
-
$this->assertInstanceOf('ResponsiveMenu\ViewModels\Components\Menu\Menu', $this->factory->build('menu'));
|
17 |
-
}
|
18 |
-
|
19 |
-
public function testMapSearch() {
|
20 |
-
$this->assertInstanceOf('ResponsiveMenu\ViewModels\Components\Menu\Search', $this->factory->build('search'));
|
21 |
-
}
|
22 |
-
|
23 |
-
public function testMapAdditionalContent() {
|
24 |
-
$this->assertInstanceOf('ResponsiveMenu\ViewModels\Components\Menu\AdditionalContent', $this->factory->build('additional content'));
|
25 |
-
}
|
26 |
-
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/ViewModels/Components/Menu/AdditionalContentTest.php
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class AdditionalContentTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->translator = $this->createMock('ResponsiveMenu\Translation\Translator');
|
9 |
-
$this->component = new ResponsiveMenu\ViewModels\Components\Menu\AdditionalContent($this->translator);
|
10 |
-
}
|
11 |
-
|
12 |
-
public function testRender() {
|
13 |
-
$collection = new ResponsiveMenu\Collections\OptionsCollection;
|
14 |
-
$collection->add(new ResponsiveMenu\Models\Option('menu_additional_content', 'b'));
|
15 |
-
$this->translator->method('translate')->willReturn('b');
|
16 |
-
$this->translator->method('allowShortcode')->willReturn('b');
|
17 |
-
$this->assertEquals('<div id="responsive-menu-additional-content">b</div>', $this->component->render($collection));
|
18 |
-
}
|
19 |
-
|
20 |
-
public function testRenderEmpty() {
|
21 |
-
$collection = new ResponsiveMenu\Collections\OptionsCollection;
|
22 |
-
$collection->add(new ResponsiveMenu\Models\Option('menu_additional_content', ''));
|
23 |
-
$this->translator->method('translate')->willReturn('');
|
24 |
-
$this->translator->method('allowShortcode')->willReturn('');
|
25 |
-
$this->assertNull($this->component->render($collection));
|
26 |
-
}
|
27 |
-
|
28 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/ViewModels/Components/Menu/MenuTest.php
DELETED
@@ -1,36 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Menu;
|
4 |
-
use PHPUnit\Framework\TestCase;
|
5 |
-
use ResponsiveMenu\Models\Option;
|
6 |
-
|
7 |
-
class MenuTest extends TestCase {
|
8 |
-
|
9 |
-
public function setUp() {
|
10 |
-
|
11 |
-
function wp_nav_menu($args) {
|
12 |
-
return $args;
|
13 |
-
}
|
14 |
-
|
15 |
-
$this->translator = $this->createMock('ResponsiveMenu\Translation\Translator');
|
16 |
-
$this->component = new Menu($this->translator);
|
17 |
-
}
|
18 |
-
|
19 |
-
public function testRender() {
|
20 |
-
$collection = new \ResponsiveMenu\Collections\OptionsCollection;
|
21 |
-
$collection->add(new Option('menu_to_use', 'b'));
|
22 |
-
$collection->add(new Option('theme_location_menu', 'b'));
|
23 |
-
$collection->add(new Option('menu_depth', 'b'));
|
24 |
-
$collection->add(new Option('custom_walker', '\StdClass'));
|
25 |
-
$this->translator->method('translate')->willReturn('b');
|
26 |
-
$args = $this->component->render($collection);
|
27 |
-
$this->assertEquals('', $args['container']);
|
28 |
-
$this->assertEquals('responsive-menu', $args['menu_id']);
|
29 |
-
$this->assertNull($args['menu_class']);
|
30 |
-
$this->assertNull($args['menu']);
|
31 |
-
$this->assertEquals('b', $args['depth']);
|
32 |
-
$this->assertEquals('b', $args['theme_location']);
|
33 |
-
$this->assertFalse($args['echo']);
|
34 |
-
}
|
35 |
-
|
36 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/ViewModels/Components/Menu/SearchTest.php
DELETED
@@ -1,21 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Menu;
|
4 |
-
|
5 |
-
use PHPUnit\Framework\TestCase;
|
6 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
7 |
-
|
8 |
-
class SearchTest extends TestCase {
|
9 |
-
|
10 |
-
public function setUp() {
|
11 |
-
$this->translator = $this->createMock('ResponsiveMenu\Translation\Translator');
|
12 |
-
$this->component = new Search($this->translator);
|
13 |
-
}
|
14 |
-
|
15 |
-
public function testRender() {
|
16 |
-
$collection = new OptionsCollection;
|
17 |
-
$this->translator->method('searchUrl')->willReturn('a');
|
18 |
-
$this->assertContains('action="a" ', $this->component->render($collection));
|
19 |
-
}
|
20 |
-
|
21 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/ViewModels/Components/Menu/TitleTest.php
DELETED
@@ -1,32 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace ResponsiveMenu\ViewModels\Components\Menu;
|
4 |
-
|
5 |
-
use PHPUnit\Framework\TestCase;
|
6 |
-
use ResponsiveMenu\Models\Option;
|
7 |
-
use ResponsiveMenu\Collections\OptionsCollection;
|
8 |
-
|
9 |
-
class TitleTest extends TestCase {
|
10 |
-
|
11 |
-
public function setUp() {
|
12 |
-
$this->translator = $this->createMock('ResponsiveMenu\Translation\Translator');
|
13 |
-
$this->component = new Title($this->translator);
|
14 |
-
}
|
15 |
-
|
16 |
-
public function testRender() {
|
17 |
-
$collection = new OptionsCollection;
|
18 |
-
$collection->add(new Option('menu_title', 'a'));
|
19 |
-
$collection->add(new Option('menu_title_link', 'b'));
|
20 |
-
$collection->add(new Option('menu_title_link_location', 'c'));
|
21 |
-
$collection->add(new Option('menu_title_image', 'd'));
|
22 |
-
$collection->add(new Option('menu_title_image_alt', 'e'));
|
23 |
-
$this->translator->method('translate')->will($this->onConsecutiveCalls('a', 'b'));
|
24 |
-
$rendered = $this->component->render($collection);
|
25 |
-
$this->assertContains('target="c"', $rendered);
|
26 |
-
$this->assertContains('href="b"', $rendered);
|
27 |
-
$this->assertContains('alt="e"', $rendered);
|
28 |
-
$this->assertContains('src="d"', $rendered);
|
29 |
-
$this->assertContains('>a<', $rendered);
|
30 |
-
}
|
31 |
-
|
32 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/ViewModels/MenuTest.php
DELETED
@@ -1,32 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class MenuTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->collection = new ResponsiveMenu\Collections\OptionsCollection;
|
9 |
-
$this->factory = $this->createMock('ResponsiveMenu\ViewModels\Components\ComponentFactory');
|
10 |
-
$this->component = $this->createMock('ResponsiveMenu\ViewModels\Components\Menu\Title');
|
11 |
-
$this->component->method('render')->willReturn('a');
|
12 |
-
$this->factory->method('build')->willReturn($this->component);
|
13 |
-
|
14 |
-
$this->menu = new ResponsiveMenu\ViewModels\Menu($this->factory);
|
15 |
-
}
|
16 |
-
|
17 |
-
public function testOutput() {
|
18 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('items_order', '{"title" : "on", "search" : "off"}'));
|
19 |
-
$this->assertEquals('a', $this->menu->getHtml($this->collection));
|
20 |
-
}
|
21 |
-
|
22 |
-
public function testOutputWithTwoOptionsOn() {
|
23 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('items_order', '{"title" : "on", "search" : "on"}'));
|
24 |
-
$this->assertEquals('aa', $this->menu->getHtml($this->collection));
|
25 |
-
}
|
26 |
-
|
27 |
-
public function testOutputWithOptionsOff() {
|
28 |
-
$this->collection->add(new ResponsiveMenu\Models\Option('items_order', '{"title" : "off", "search" : "off"}'));
|
29 |
-
$this->assertEquals('', $this->menu->getHtml($this->collection));
|
30 |
-
}
|
31 |
-
|
32 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/app/Walkers/WpWalkerTest.php
DELETED
@@ -1,93 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use PHPUnit\Framework\TestCase;
|
4 |
-
|
5 |
-
class WpWalkerTest extends TestCase {
|
6 |
-
|
7 |
-
public function setUp() {
|
8 |
-
$this->getMockBuilder('\Walker_Nav_Menu')->getMock();
|
9 |
-
$this->collection = new ResponsiveMenu\Collections\OptionsCollection;
|
10 |
-
$this->walker = new ResponsiveMenu\Walkers\WpWalker($this->collection);
|
11 |
-
}
|
12 |
-
|
13 |
-
public function testEndEl() {
|
14 |
-
$output = 'output';
|
15 |
-
$this->walker->end_el($output, null);
|
16 |
-
$this->assertEquals('output</li>', $output);
|
17 |
-
}
|
18 |
-
|
19 |
-
public function testEndLvl() {
|
20 |
-
$output = 'output';
|
21 |
-
$this->walker->end_lvl($output, null);
|
22 |
-
$this->assertEquals('output</ul>', $output);
|
23 |
-
}
|
24 |
-
|
25 |
-
public function testStartLvlNoOptions() {
|
26 |
-
$output = 'output';
|
27 |
-
$this->walker->start_lvl($output, 1);
|
28 |
-
$this->assertEquals("output<ul class='responsive-menu-submenu responsive-menu-submenu-depth-2'>", $output);
|
29 |
-
}
|
30 |
-
|
31 |
-
public function testStartLvlWithExpandSubMenusOff() {
|
32 |
-
$this->collection['auto_expand_all_submenus'] = 'off';
|
33 |
-
$output = 'output';
|
34 |
-
$this->walker->start_lvl($output, 1);
|
35 |
-
$this->assertEquals("output<ul class='responsive-menu-submenu responsive-menu-submenu-depth-2'>", $output);
|
36 |
-
}
|
37 |
-
|
38 |
-
public function testStartLvlWithExpandSubMenusOn() {
|
39 |
-
$this->collection['auto_expand_all_submenus'] = 'on';
|
40 |
-
$output = 'output';
|
41 |
-
$this->walker->start_lvl($output, 2);
|
42 |
-
$this->assertEquals("output<ul class='responsive-menu-submenu responsive-menu-submenu-depth-3 responsive-menu-submenu-open'>", $output);
|
43 |
-
}
|
44 |
-
|
45 |
-
public function testStartLvlWithExpandCurrentSubMenusOff() {
|
46 |
-
$current_item = new \StdClass;
|
47 |
-
$current_item->current_item_ancestor = true;
|
48 |
-
$current_item->current_item_parent = true;
|
49 |
-
$this->walker->setCurrentItem($current_item);
|
50 |
-
|
51 |
-
$this->collection['auto_expand_current_submenus'] = 'off';
|
52 |
-
$output = 'output';
|
53 |
-
$this->walker->start_lvl($output, 4);
|
54 |
-
$this->assertEquals("output<ul class='responsive-menu-submenu responsive-menu-submenu-depth-5'>", $output);
|
55 |
-
}
|
56 |
-
|
57 |
-
public function testStartLvlWithExpandCurrentSubMenusOn() {
|
58 |
-
$current_item = new \StdClass;
|
59 |
-
$current_item->current_item_ancestor = true;
|
60 |
-
$current_item->current_item_parent = true;
|
61 |
-
$this->walker->setCurrentItem($current_item);
|
62 |
-
|
63 |
-
$this->collection['auto_expand_current_submenus'] = 'on';
|
64 |
-
$output = 'output';
|
65 |
-
$this->walker->start_lvl($output, 3);
|
66 |
-
$this->assertEquals("output<ul class='responsive-menu-submenu responsive-menu-submenu-depth-4 responsive-menu-submenu-open'>", $output);
|
67 |
-
}
|
68 |
-
|
69 |
-
public function testStartLvlWithExpandCurrentSubMenusOnCurrentItemFalse() {
|
70 |
-
$current_item = new \StdClass;
|
71 |
-
$current_item->current_item_ancestor = false;
|
72 |
-
$current_item->current_item_parent = false;
|
73 |
-
$this->walker->setCurrentItem($current_item);
|
74 |
-
|
75 |
-
$this->collection['auto_expand_current_submenus'] = 'on';
|
76 |
-
$output = 'output';
|
77 |
-
$this->walker->start_lvl($output, 3);
|
78 |
-
$this->assertEquals("output<ul class='responsive-menu-submenu responsive-menu-submenu-depth-4'>", $output);
|
79 |
-
}
|
80 |
-
|
81 |
-
public function testStartLvlWithExpandCurrentSubMenusOnCurrentItemFalseAndTrue() {
|
82 |
-
$current_item = new \StdClass;
|
83 |
-
$current_item->current_item_ancestor = false;
|
84 |
-
$current_item->current_item_parent = true;
|
85 |
-
$this->walker->setCurrentItem($current_item);
|
86 |
-
|
87 |
-
$this->collection['auto_expand_current_submenus'] = 'on';
|
88 |
-
$output = 'output';
|
89 |
-
$this->walker->start_lvl($output, 3);
|
90 |
-
$this->assertEquals("output<ul class='responsive-menu-submenu responsive-menu-submenu-depth-4 responsive-menu-submenu-open'>", $output);
|
91 |
-
}
|
92 |
-
|
93 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/ApiTest.php
DELETED
@@ -1,80 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
require_once dirname(dirname(dirname(__FILE__))) . '/src/app/Mappers/scss.inc.php';
|
4 |
-
|
5 |
-
class ApiTest extends PHPUnit_Framework_TestCase
|
6 |
-
{
|
7 |
-
public function setUp()
|
8 |
-
{
|
9 |
-
$this->scss = new scssc_free();
|
10 |
-
}
|
11 |
-
|
12 |
-
public function testUserFunction()
|
13 |
-
{
|
14 |
-
$this->scss->registerFunction("add-two", function ($args) {
|
15 |
-
list($a, $b) = $args;
|
16 |
-
return $a[1] + $b[1];
|
17 |
-
});
|
18 |
-
|
19 |
-
$this->assertEquals(
|
20 |
-
"result: 30;",
|
21 |
-
$this->compile("result: add-two(10, 20);")
|
22 |
-
);
|
23 |
-
}
|
24 |
-
|
25 |
-
public function testImportMissing()
|
26 |
-
{
|
27 |
-
$this->assertEquals(
|
28 |
-
'@import "missing";',
|
29 |
-
$this->compile('@import "missing";')
|
30 |
-
);
|
31 |
-
}
|
32 |
-
|
33 |
-
public function testImportCustomCallback()
|
34 |
-
{
|
35 |
-
$this->scss->addImportPath(function ($path) {
|
36 |
-
return __DIR__ . '/inputs/' . str_replace('.css', '.scss', $path);
|
37 |
-
});
|
38 |
-
|
39 |
-
$this->assertEquals(
|
40 |
-
trim(file_get_contents(__DIR__ . '/outputs/variables.css')),
|
41 |
-
$this->compile('@import "variables.css";')
|
42 |
-
);
|
43 |
-
}
|
44 |
-
|
45 |
-
/**
|
46 |
-
* @dataProvider provideSetVariables
|
47 |
-
*/
|
48 |
-
public function testSetVariables($expected, $scss, $variables)
|
49 |
-
{
|
50 |
-
$this->scss->setVariables($variables);
|
51 |
-
|
52 |
-
$this->assertEquals($expected, $this->compile($scss));
|
53 |
-
}
|
54 |
-
|
55 |
-
public function provideSetVariables()
|
56 |
-
{
|
57 |
-
return array(
|
58 |
-
array(
|
59 |
-
".magic {\n color: red;\n width: 760px; }",
|
60 |
-
'.magic { color: $color; width: $base - 200; }',
|
61 |
-
array(
|
62 |
-
'color' => 'red',
|
63 |
-
'base' => '960px',
|
64 |
-
),
|
65 |
-
),
|
66 |
-
array(
|
67 |
-
".logo {\n color: #808080; }",
|
68 |
-
'.logo { color: desaturate($primary, 100%); }',
|
69 |
-
array(
|
70 |
-
'primary' => '#ff0000',
|
71 |
-
),
|
72 |
-
),
|
73 |
-
);
|
74 |
-
}
|
75 |
-
|
76 |
-
public function compile($str)
|
77 |
-
{
|
78 |
-
return trim($this->scss->compile($str));
|
79 |
-
}
|
80 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/InputTest.php
DELETED
@@ -1,80 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
require_once dirname(dirname(dirname(__FILE__))) . '/src/app/Mappers/scss.inc.php';
|
4 |
-
|
5 |
-
function _dump($value) {
|
6 |
-
fwrite(STDOUT, print_r($value, true));
|
7 |
-
}
|
8 |
-
|
9 |
-
function _quote($str) {
|
10 |
-
return preg_quote($str, "/");
|
11 |
-
}
|
12 |
-
|
13 |
-
class InputTest extends PHPUnit_Framework_TestCase {
|
14 |
-
protected static $inputDir = "inputs";
|
15 |
-
protected static $outputDir = "outputs";
|
16 |
-
|
17 |
-
public function setUp() {
|
18 |
-
$this->scss = new scssc_free();
|
19 |
-
$this->scss->addImportPath(__DIR__ . "/" . self::$inputDir);
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* @dataProvider fileNameProvider
|
24 |
-
*/
|
25 |
-
public function testInputFile($inFname, $outFname) {
|
26 |
-
if (getenv("BUILD")) {
|
27 |
-
return $this->buildInput($inFname,$outFname);
|
28 |
-
}
|
29 |
-
|
30 |
-
if (!is_readable($outFname)) {
|
31 |
-
$this->fail("$outFname is missing, ".
|
32 |
-
"consider building tests with BUILD=true");
|
33 |
-
}
|
34 |
-
|
35 |
-
$input = file_get_contents($inFname);
|
36 |
-
$output = file_get_contents($outFname);
|
37 |
-
|
38 |
-
$this->assertEquals($output, $this->scss->compile($input));
|
39 |
-
}
|
40 |
-
|
41 |
-
public function fileNameProvider() {
|
42 |
-
return array_map(function($a) { return array($a, InputTest::outputNameFor($a)); },
|
43 |
-
self::findInputNames());
|
44 |
-
}
|
45 |
-
|
46 |
-
// only run when env is set
|
47 |
-
public function buildInput($inFname, $outFname) {
|
48 |
-
$css = $this->scss->compile(file_get_contents($inFname));
|
49 |
-
file_put_contents($outFname, $css);
|
50 |
-
}
|
51 |
-
|
52 |
-
static public function findInputNames($pattern="*") {
|
53 |
-
$files = glob(__DIR__ . "/" . self::$inputDir . "/" . $pattern);
|
54 |
-
$files = array_filter($files, "is_file");
|
55 |
-
if ($pattern = getenv("MATCH")) {
|
56 |
-
$files = array_filter($files, function($fname) use ($pattern) {
|
57 |
-
return preg_match("/$pattern/", $fname);
|
58 |
-
});
|
59 |
-
}
|
60 |
-
|
61 |
-
return $files;
|
62 |
-
}
|
63 |
-
|
64 |
-
static public function outputNameFor($input) {
|
65 |
-
$front = _quote(__DIR__ . "/");
|
66 |
-
$out = preg_replace("/^$front/", "", $input);
|
67 |
-
|
68 |
-
$in = _quote(self::$inputDir . "/");
|
69 |
-
$out = preg_replace("/$in/", self::$outputDir . "/", $out);
|
70 |
-
$out = preg_replace("/.scss$/", ".css", $out);
|
71 |
-
|
72 |
-
return __DIR__ . "/" . $out;
|
73 |
-
}
|
74 |
-
|
75 |
-
static public function buildTests($pattern) {
|
76 |
-
$files = self::findInputNames($pattern);
|
77 |
-
foreach ($files as $file) {
|
78 |
-
}
|
79 |
-
}
|
80 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/compare-scss.sh
DELETED
@@ -1,25 +0,0 @@
|
|
1 |
-
#!/bin/bash
|
2 |
-
|
3 |
-
diff_tool="$1"
|
4 |
-
|
5 |
-
for file in $(ls inputs/*.scss); do
|
6 |
-
out_file=$(echo $file | sed -e 's/inputs/outputs/' -e 's/\.scss$/\.css/')
|
7 |
-
sass=$(scss < $file 2> /dev/null)
|
8 |
-
if [ $? = "0" ]; then
|
9 |
-
# echo $file
|
10 |
-
# echo "$sass"
|
11 |
-
# echo
|
12 |
-
|
13 |
-
if [ "$(cat $out_file)" != "$sass" ]; then
|
14 |
-
echo "* [FAIL] $file"
|
15 |
-
if [ -n "$diff_tool" ]; then
|
16 |
-
$diff_tool $out_file <(echo "$sass") 2> /dev/null
|
17 |
-
fi
|
18 |
-
else
|
19 |
-
echo " [PASS] $file"
|
20 |
-
fi
|
21 |
-
else
|
22 |
-
echo " $file"
|
23 |
-
fi
|
24 |
-
done
|
25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/builtins.scss
DELETED
@@ -1,171 +0,0 @@
|
|
1 |
-
|
2 |
-
#color {
|
3 |
-
color: rgb(34,234,24);
|
4 |
-
|
5 |
-
red: red(rgb(34,234,24));
|
6 |
-
green: green(rgb(34,234,24));
|
7 |
-
blue: blue(rgb(34,234,24));
|
8 |
-
|
9 |
-
color: rgba(1,2,4, 0.5);
|
10 |
-
a1: alpha(rgb(1,2,4));
|
11 |
-
a2: alpha(rgba(1,2,4, 0.5));
|
12 |
-
|
13 |
-
mix: mix(rgb(1,2,3), rgb(3,4,5));
|
14 |
-
|
15 |
-
rgba: rgba($color: #a7c, $alpha: 0.4);
|
16 |
-
rgba: rgba(#a7c, 0.4);
|
17 |
-
}
|
18 |
-
|
19 |
-
#hsl {
|
20 |
-
color: hsl(100, 50, 55);
|
21 |
-
color: hsla(100, 50, 55, 0.5);
|
22 |
-
|
23 |
-
hue: hue(hsl(100, 50, 55));
|
24 |
-
sat: saturation(hsl(100, 50, 55));
|
25 |
-
lig: lightness(hsl(100, 50, 55));
|
26 |
-
}
|
27 |
-
|
28 |
-
#more-color {
|
29 |
-
$color: hsl(-80,44,33);
|
30 |
-
|
31 |
-
light: lighten($color, 10%);
|
32 |
-
dark: darken($color, 10%);
|
33 |
-
|
34 |
-
sat: saturate($color, 10%);
|
35 |
-
desat: desaturate($color, 10%);
|
36 |
-
|
37 |
-
gray: grayscale($color);
|
38 |
-
comp: complement($color);
|
39 |
-
inv: invert($color);
|
40 |
-
}
|
41 |
-
|
42 |
-
#more-more-color {
|
43 |
-
$color: rgba(1,2,3,0.5);
|
44 |
-
op: opacity($color);
|
45 |
-
|
46 |
-
opacify: opacify($color, 0.1);
|
47 |
-
opacify: fade-in($color, 0.1);
|
48 |
-
|
49 |
-
transparentize: transparentize($color, 0.1);
|
50 |
-
transparentize: fade-out($color, 0.1);
|
51 |
-
transparentize: transparentize(#348203, 0.1);
|
52 |
-
}
|
53 |
-
|
54 |
-
#more-more-more-color {
|
55 |
-
$color: rgba(10,10,10,0);
|
56 |
-
color: adjust-color($color, $blue: 69, $red: 55, $green: 100, $alpha: 0.4);
|
57 |
-
color: adjust-color($color, $hue: 170, $saturation: 100, $lightness: 50);
|
58 |
-
|
59 |
-
color: change-color($color, $blue: 69, $red: 55, $green: 100, $alpha: 0.4);
|
60 |
-
color: change-color($color, $hue: 170, $saturation: 100, $lightness: 50);
|
61 |
-
|
62 |
-
color: scale-color($color, $red: 55%);
|
63 |
-
color: scale-color($color, $red: -55%);
|
64 |
-
|
65 |
-
color: scale-color($color, $lightness: 55%);
|
66 |
-
color: scale-color($color, $lightness: -55%);
|
67 |
-
|
68 |
-
color: ie-hex-str($color);
|
69 |
-
color: ie-hex-str(#abc);
|
70 |
-
}
|
71 |
-
|
72 |
-
#string {
|
73 |
-
color: unquote("hello what is going on");
|
74 |
-
// color: quote(yeah you know it); // **
|
75 |
-
color: quote(yeah);
|
76 |
-
color: quote("I do?");
|
77 |
-
}
|
78 |
-
|
79 |
-
#number {
|
80 |
-
color: percentage(100/40);
|
81 |
-
color: round(3.4);
|
82 |
-
color: floor(3.4);
|
83 |
-
color: ceil(3.4);
|
84 |
-
|
85 |
-
top: floor(10.4px);
|
86 |
-
top: ceil(.4ex);
|
87 |
-
width: percentage(100px / 50px);
|
88 |
-
bottom: abs(-10px);
|
89 |
-
padding: min(5em, 3em, 4em) max(2px, 1in) min(1in, 96px) max(1in, 72pt);
|
90 |
-
}
|
91 |
-
|
92 |
-
#list {
|
93 |
-
len: length(hello world what);
|
94 |
-
len: length(thing);
|
95 |
-
|
96 |
-
n: nth(hello world what, 1);
|
97 |
-
// n: nth(hello world what, 100); // **
|
98 |
-
|
99 |
-
hello: join(one two three, hello, comma);
|
100 |
-
hello: join(one two three, hello world what is going, comma);
|
101 |
-
hello: append(one two three, hello, comma);
|
102 |
-
|
103 |
-
index: index(1px solid red, solid);
|
104 |
-
index: index(1px solid red, dashed);
|
105 |
-
index: index(1px solid red, #f00);
|
106 |
-
index: index(96px solid red, 1in);
|
107 |
-
index: index((1in 2) a b, 1in);
|
108 |
-
index: index((1in 2) a b, (96px 2));
|
109 |
-
index: index((1in 2) a b, (1in, 2));
|
110 |
-
index: index((1px solid red), solid);
|
111 |
-
index: index(1px 3px + 3px, 4+2px);
|
112 |
-
$var: oo;
|
113 |
-
index: index(foo bar, f#{$var});
|
114 |
-
|
115 |
-
$yes: one, two, three;
|
116 |
-
$no: great job;
|
117 |
-
world: join($yes, $no);
|
118 |
-
world: append($yes, $no);
|
119 |
-
|
120 |
-
cool: join($yes, $no, space);
|
121 |
-
cool: join($no, $yes);
|
122 |
-
|
123 |
-
zip: zip((1px, 2px), (solid dashed));
|
124 |
-
zip: zip(1px 2px 3px, solid dashed, red green blue);
|
125 |
-
}
|
126 |
-
|
127 |
-
#introspection {
|
128 |
-
t: type-of(100px);
|
129 |
-
t: type-of(asdf);
|
130 |
-
t: type-of("asdf");
|
131 |
-
t: type-of(true);
|
132 |
-
t: type-of(#fff);
|
133 |
-
t: type-of(blue);
|
134 |
-
t: type-of(one two three);
|
135 |
-
|
136 |
-
u: unit(12);
|
137 |
-
u: unit(12px);
|
138 |
-
u: unit(12em);
|
139 |
-
|
140 |
-
l: unitless(23);
|
141 |
-
l: unitless(23deg);
|
142 |
-
|
143 |
-
c: comparable(2px, 1px);
|
144 |
-
c: comparable(100px, 3em);
|
145 |
-
c: comparable(10cm, 3mm);
|
146 |
-
c: comparable(1, 4);
|
147 |
-
c: comparable(1ex, 4em);
|
148 |
-
c: comparable(2em, 5em);
|
149 |
-
}
|
150 |
-
|
151 |
-
#if {
|
152 |
-
color: if(true, yes, no);
|
153 |
-
color: if(false, yes, no);
|
154 |
-
color: if(false or true, yes, no);
|
155 |
-
color: if(10px, yes, no);
|
156 |
-
}
|
157 |
-
|
158 |
-
.transparent {
|
159 |
-
r: red(transparent);
|
160 |
-
g: green(transparent);
|
161 |
-
b: blue(transparent);
|
162 |
-
a: alpha(transparent);
|
163 |
-
}
|
164 |
-
|
165 |
-
.alpha {
|
166 |
-
a: alpha(black);
|
167 |
-
a: alpha(#fff);
|
168 |
-
a: alpha(rgb(0, 0, 0));
|
169 |
-
a: alpha(rgba(0, 0, 0, 0.5));
|
170 |
-
a: alpha(currentColor);
|
171 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/comments.scss
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
|
2 |
-
// what is going on?
|
3 |
-
|
4 |
-
/** what the heck **/
|
5 |
-
|
6 |
-
/**
|
7 |
-
|
8 |
-
Here is a block comment
|
9 |
-
|
10 |
-
**/
|
11 |
-
|
12 |
-
|
13 |
-
// this is a comment
|
14 |
-
|
15 |
-
// trailing backslash \
|
16 |
-
/*hello*/div /*yeah*/ { //surew
|
17 |
-
border: 1px solid red; // world
|
18 |
-
/* another property */
|
19 |
-
color: url('http://mage-page.com');
|
20 |
-
string: "hello /* this is not a comment */";
|
21 |
-
world: "// neither is this";
|
22 |
-
string: 'hello /* this is not a comment */' /*what if this is a comment */;
|
23 |
-
world: '// neither is this' // hell world;
|
24 |
-
;
|
25 |
-
what-ever: 100px;
|
26 |
-
background: url(/*this is not a comment?*/); // uhh what happens here
|
27 |
-
}
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/compass_extract.scss
DELETED
@@ -1,248 +0,0 @@
|
|
1 |
-
// Extracted from compass/typography/vertical_rhythm.scss
|
2 |
-
|
3 |
-
|
4 |
-
// The base font size.
|
5 |
-
$base-font-size: 16px !default;
|
6 |
-
|
7 |
-
// The base line height determines the basic unit of vertical rhythm.
|
8 |
-
$base-line-height: 24px !default;
|
9 |
-
|
10 |
-
// Set the default border style for rhythm borders.
|
11 |
-
$default-rhythm-border-style: solid !default;
|
12 |
-
|
13 |
-
// The default font size in all browsers.
|
14 |
-
$browser-default-font-size: 16px;
|
15 |
-
|
16 |
-
// Set to false if you want to use absolute pixels in sizing your typography.
|
17 |
-
$relative-font-sizing: true !default;
|
18 |
-
|
19 |
-
// Allows the `adjust-font-size-to` mixin and the `lines-for-font-size` function
|
20 |
-
// to round the line height to the nearest half line height instead of the
|
21 |
-
// nearest integral line height to avoid large spacing between lines.
|
22 |
-
$round-to-nearest-half-line: false !default;
|
23 |
-
|
24 |
-
// Ensure there is at least this many pixels
|
25 |
-
// of vertical padding above and below the text.
|
26 |
-
$min-line-padding: 2px !default;
|
27 |
-
|
28 |
-
// $base-font-size but in your output unit of choice.
|
29 |
-
// Defaults to 1em when `$relative-font-sizing` is true.
|
30 |
-
$font-unit: if($relative-font-sizing, 1em, $base-font-size) !default;
|
31 |
-
|
32 |
-
// The basic unit of font rhythm.
|
33 |
-
$base-rhythm-unit: $base-line-height / $base-font-size * $font-unit;
|
34 |
-
|
35 |
-
// The leader is the amount of whitespace in a line.
|
36 |
-
// It might be useful in your calculations.
|
37 |
-
$base-leader: ($base-line-height - $base-font-size) * $font-unit / $base-font-size;
|
38 |
-
|
39 |
-
// The half-leader is the amount of whitespace above and below a line.
|
40 |
-
// It might be useful in your calculations.
|
41 |
-
$base-half-leader: $base-leader / 2;
|
42 |
-
|
43 |
-
// True if a number has a relative unit.
|
44 |
-
@function relative-unit($number) {
|
45 |
-
@return unit($number) == "%" or unit($number) == "em" or unit($number) == "rem"
|
46 |
-
}
|
47 |
-
|
48 |
-
// True if a number has an absolute unit.
|
49 |
-
@function absolute-unit($number) {
|
50 |
-
@return not (relative-unit($number) or unitless($number));
|
51 |
-
}
|
52 |
-
|
53 |
-
@if $relative-font-sizing and not relative-unit($font-unit) {
|
54 |
-
@warn "$relative-font-sizing is true but $font-unit is set to #{$font-unit} which is not a relative unit.";
|
55 |
-
}
|
56 |
-
|
57 |
-
// Establishes a font baseline for the given font-size.
|
58 |
-
@mixin establish-baseline($font-size: $base-font-size) {
|
59 |
-
// IE 6 refuses to resize fonts set in pixels and it weirdly resizes fonts
|
60 |
-
// whose root is set in ems. So we set the root font size in percentages of
|
61 |
-
// the default font size.
|
62 |
-
* html {
|
63 |
-
font-size: 100% * ($font-size / $browser-default-font-size);
|
64 |
-
}
|
65 |
-
html {
|
66 |
-
font-size: $font-size;
|
67 |
-
@include adjust-leading-to(1, if($relative-font-sizing, $font-size, $base-font-size));
|
68 |
-
}
|
69 |
-
}
|
70 |
-
|
71 |
-
// Resets the line-height to 1 vertical rhythm unit.
|
72 |
-
// Does not work on elements whose font-size is different from $base-font-size.
|
73 |
-
//
|
74 |
-
// @deprecated This mixin will be removed in the next release.
|
75 |
-
// Please use the `adjust-leading-to` mixin instead.
|
76 |
-
@mixin reset-baseline {
|
77 |
-
@include adjust-leading-to(1, if($relative-font-sizing, $base-font-size, $base-font-size));
|
78 |
-
}
|
79 |
-
|
80 |
-
// Show a background image that can be used to debug your alignments.
|
81 |
-
// Include the $img argument if you would rather use your own image than the
|
82 |
-
// Compass default gradient image.
|
83 |
-
@mixin debug-vertical-alignment($img: false) {
|
84 |
-
@if $img {
|
85 |
-
background: image-url($img);
|
86 |
-
} @else {
|
87 |
-
@include baseline-grid-background($base-rhythm-unit);
|
88 |
-
}
|
89 |
-
}
|
90 |
-
|
91 |
-
// Adjust a block to have a different font size and line height to maintain the
|
92 |
-
// rhythm. $lines specifies how many multiples of the baseline rhythm each line
|
93 |
-
// of this font should use up. It does not have to be an integer, but it
|
94 |
-
// defaults to the smallest integer that is large enough to fit the font.
|
95 |
-
// Use $from-size to adjust from a font-size other than the base font-size.
|
96 |
-
@mixin adjust-font-size-to($to-size, $lines: lines-for-font-size($to-size), $from-size: $base-font-size) {
|
97 |
-
@if not $relative-font-sizing and $from-size != $base-font-size {
|
98 |
-
@warn "$relative-font-sizing is false but a relative font size was passed to adjust-font-size-to";
|
99 |
-
}
|
100 |
-
font-size: $font-unit * $to-size / $from-size;
|
101 |
-
@include adjust-leading-to($lines, if($relative-font-sizing, $to-size, $base-font-size));
|
102 |
-
}
|
103 |
-
|
104 |
-
// Adjust a block to have different line height to maintain the rhythm.
|
105 |
-
// $lines specifies how many multiples of the baseline rhythm each line of this
|
106 |
-
// font should use up. It does not have to be an integer, but it defaults to the
|
107 |
-
// smallest integer that is large enough to fit the font.
|
108 |
-
@mixin adjust-leading-to($lines, $font-size: $base-font-size) {
|
109 |
-
line-height: rhythm($lines, $font-size);
|
110 |
-
}
|
111 |
-
|
112 |
-
// Calculate rhythm units.
|
113 |
-
@function rhythm(
|
114 |
-
$lines: 1,
|
115 |
-
$font-size: $base-font-size,
|
116 |
-
$offset: 0
|
117 |
-
) {
|
118 |
-
@if not $relative-font-sizing and $font-size != $base-font-size {
|
119 |
-
@warn "$relative-font-sizing is false but a relative font size was passed to the rhythm function";
|
120 |
-
}
|
121 |
-
$rhythm: $font-unit * ($lines * $base-line-height - $offset) / $font-size;
|
122 |
-
// Round the pixels down to nearest integer.
|
123 |
-
@if unit($rhythm) == px {
|
124 |
-
$rhythm: floor($rhythm);
|
125 |
-
}
|
126 |
-
@return $rhythm;
|
127 |
-
}
|
128 |
-
|
129 |
-
// Calculate the minimum multiple of rhythm units needed to contain the font-size.
|
130 |
-
@function lines-for-font-size($font-size) {
|
131 |
-
$lines: if($round-to-nearest-half-line,
|
132 |
-
ceil(2 * $font-size / $base-line-height) / 2,
|
133 |
-
ceil($font-size / $base-line-height));
|
134 |
-
@if $lines * $base-line-height - $font-size < $min-line-padding * 2 {
|
135 |
-
$lines: $lines + if($round-to-nearest-half-line, 0.5, 1);
|
136 |
-
}
|
137 |
-
@return $lines;
|
138 |
-
}
|
139 |
-
|
140 |
-
// Apply leading whitespace. The $property can be margin or padding.
|
141 |
-
@mixin leader($lines: 1, $font-size: $base-font-size, $property: margin) {
|
142 |
-
#{$property}-top: rhythm($lines, $font-size);
|
143 |
-
}
|
144 |
-
|
145 |
-
// Apply leading whitespace as padding.
|
146 |
-
@mixin padding-leader($lines: 1, $font-size: $base-font-size) {
|
147 |
-
padding-top: rhythm($lines, $font-size);
|
148 |
-
}
|
149 |
-
|
150 |
-
// Apply leading whitespace as margin.
|
151 |
-
@mixin margin-leader($lines: 1, $font-size: $base-font-size) {
|
152 |
-
margin-top: rhythm($lines, $font-size);
|
153 |
-
}
|
154 |
-
|
155 |
-
// Apply trailing whitespace. The $property can be margin or padding.
|
156 |
-
@mixin trailer($lines: 1, $font-size: $base-font-size, $property: margin) {
|
157 |
-
#{$property}-bottom: rhythm($lines, $font-size);
|
158 |
-
}
|
159 |
-
|
160 |
-
// Apply trailing whitespace as padding.
|
161 |
-
@mixin padding-trailer($lines: 1, $font-size: $base-font-size) {
|
162 |
-
padding-bottom: rhythm($lines, $font-size);
|
163 |
-
}
|
164 |
-
|
165 |
-
// Apply trailing whitespace as margin.
|
166 |
-
@mixin margin-trailer($lines: 1, $font-size: $base-font-size) {
|
167 |
-
margin-bottom: rhythm($lines, $font-size);
|
168 |
-
}
|
169 |
-
|
170 |
-
// Shorthand mixin to apply whitespace for top and bottom margins and padding.
|
171 |
-
@mixin rhythm($leader: 0, $padding-leader: 0, $padding-trailer: 0, $trailer: 0, $font-size: $base-font-size) {
|
172 |
-
@include leader($leader, $font-size);
|
173 |
-
@include padding-leader($padding-leader, $font-size);
|
174 |
-
@include padding-trailer($padding-trailer, $font-size);
|
175 |
-
@include trailer($trailer, $font-size);
|
176 |
-
}
|
177 |
-
|
178 |
-
// Apply a border and whitespace to any side without destroying the vertical
|
179 |
-
// rhythm. The whitespace must be greater than the width of the border.
|
180 |
-
@mixin apply-side-rhythm-border($side, $width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {
|
181 |
-
@if not $relative-font-sizing and $font-size != $base-font-size {
|
182 |
-
@warn "$relative-font-sizing is false but a relative font size was passed to apply-side-rhythm-border";
|
183 |
-
}
|
184 |
-
border-#{$side}: {
|
185 |
-
style: $border-style;
|
186 |
-
width: $font-unit * $width / $font-size;
|
187 |
-
};
|
188 |
-
padding-#{$side}: rhythm($lines, $font-size, $offset: $width);
|
189 |
-
}
|
190 |
-
|
191 |
-
// Apply borders and whitespace equally to all sides.
|
192 |
-
@mixin rhythm-borders($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {
|
193 |
-
@if not $relative-font-sizing and $font-size != $base-font-size {
|
194 |
-
@warn "$relative-font-sizing is false but a relative font size was passed to rhythm-borders";
|
195 |
-
}
|
196 |
-
border: {
|
197 |
-
style: $border-style;
|
198 |
-
width: $font-unit * $width / $font-size;
|
199 |
-
};
|
200 |
-
padding: rhythm($lines, $font-size, $offset: $width);
|
201 |
-
}
|
202 |
-
|
203 |
-
// Apply a leading border.
|
204 |
-
@mixin leading-border($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {
|
205 |
-
@include apply-side-rhythm-border(top, $width, $lines, $font-size, $border-style);
|
206 |
-
}
|
207 |
-
|
208 |
-
// Apply a trailing border.
|
209 |
-
@mixin trailing-border($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {
|
210 |
-
@include apply-side-rhythm-border(bottom, $width, $lines, $font-size, $border-style);
|
211 |
-
}
|
212 |
-
|
213 |
-
// Apply both leading and trailing borders.
|
214 |
-
@mixin horizontal-borders($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {
|
215 |
-
@include leading-border($width, $lines, $font-size, $border-style);
|
216 |
-
@include trailing-border($width, $lines, $font-size, $border-style);
|
217 |
-
}
|
218 |
-
|
219 |
-
// Alias for `horizontal-borders` mixin.
|
220 |
-
@mixin h-borders($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {
|
221 |
-
@include horizontal-borders($width, $lines, $font-size, $border-style);
|
222 |
-
}
|
223 |
-
|
224 |
-
#test-0 {
|
225 |
-
unit: relative-unit(10px);
|
226 |
-
unit: relative-unit(50%);
|
227 |
-
rhythm: rhythm();
|
228 |
-
size: lines-for-font-size(15px);
|
229 |
-
size: lines-for-font-size(16px);
|
230 |
-
size: lines-for-font-size(17px);
|
231 |
-
size: lines-for-font-size(27px);
|
232 |
-
size: lines-for-font-size(37px);
|
233 |
-
}
|
234 |
-
|
235 |
-
|
236 |
-
#test-1 {
|
237 |
-
@include rhythm(5, 6, 7);
|
238 |
-
}
|
239 |
-
|
240 |
-
#test-2 {
|
241 |
-
@include rhythm-borders;
|
242 |
-
}
|
243 |
-
|
244 |
-
#test-3 {
|
245 |
-
@include horizontal-borders;
|
246 |
-
}
|
247 |
-
|
248 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/content.scss
DELETED
@@ -1,61 +0,0 @@
|
|
1 |
-
|
2 |
-
@mixin apply-to-ie6-only {
|
3 |
-
* html {
|
4 |
-
@content;
|
5 |
-
}
|
6 |
-
}
|
7 |
-
@include apply-to-ie6-only {
|
8 |
-
#logo {
|
9 |
-
background-image: url(/logo.gif);
|
10 |
-
}
|
11 |
-
}
|
12 |
-
|
13 |
-
|
14 |
-
$color: white;
|
15 |
-
@mixin colors($color: blue) {
|
16 |
-
background-color: $color;
|
17 |
-
@content;
|
18 |
-
border-color: $color;
|
19 |
-
}
|
20 |
-
.colors {
|
21 |
-
@include colors { color: $color; }
|
22 |
-
}
|
23 |
-
|
24 |
-
|
25 |
-
@mixin iphone {
|
26 |
-
@media only screen and (max-width: 480px) {
|
27 |
-
@content;
|
28 |
-
}
|
29 |
-
}
|
30 |
-
|
31 |
-
@include iphone {
|
32 |
-
body { color: red }
|
33 |
-
}
|
34 |
-
|
35 |
-
|
36 |
-
#sidebar {
|
37 |
-
$sidebar-width: 300px;
|
38 |
-
width: $sidebar-width;
|
39 |
-
@include iphone {
|
40 |
-
width: $sidebar-width / 3;
|
41 |
-
}
|
42 |
-
}
|
43 |
-
|
44 |
-
|
45 |
-
@mixin respond-to($width) {
|
46 |
-
@media only screen and (min-width: $width) { @content; }
|
47 |
-
}
|
48 |
-
|
49 |
-
@include respond-to(40em) {
|
50 |
-
@for $i from 1 through 2 {
|
51 |
-
.grid-#{$i} { width: 100%; }
|
52 |
-
}
|
53 |
-
}
|
54 |
-
|
55 |
-
@include respond-to(40em) {
|
56 |
-
$i: 1;
|
57 |
-
@while $i <= 2 {
|
58 |
-
.grid-#{$i} { width: 100%; }
|
59 |
-
$i: $i + 1;
|
60 |
-
}
|
61 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/content_with_function.scss
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
$test-var: true;
|
2 |
-
|
3 |
-
@mixin mixin-using-content() {
|
4 |
-
@content;
|
5 |
-
}
|
6 |
-
|
7 |
-
@function test-function($value) {
|
8 |
-
@return $value;
|
9 |
-
}
|
10 |
-
|
11 |
-
@include mixin-using-content {
|
12 |
-
@if $test-var {
|
13 |
-
body {
|
14 |
-
padding: test-function(1 px);
|
15 |
-
}
|
16 |
-
}
|
17 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/default_args.scss
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
@mixin cool($color: blue) {
|
4 |
-
margin: 100px;
|
5 |
-
}
|
6 |
-
|
7 |
-
@function what($height: red) {
|
8 |
-
@return $height;
|
9 |
-
}
|
10 |
-
|
11 |
-
div {
|
12 |
-
height: what();
|
13 |
-
@include cool;
|
14 |
-
}
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/directives.scss
DELETED
@@ -1,108 +0,0 @@
|
|
1 |
-
|
2 |
-
@charset "hello-world";
|
3 |
-
|
4 |
-
@page :left {
|
5 |
-
div {
|
6 |
-
color: red;
|
7 |
-
}
|
8 |
-
}
|
9 |
-
|
10 |
-
@page test {
|
11 |
-
@media yes {
|
12 |
-
div {
|
13 |
-
color: red;
|
14 |
-
}
|
15 |
-
|
16 |
-
@media no {
|
17 |
-
pre {
|
18 |
-
color: blue;
|
19 |
-
}
|
20 |
-
}
|
21 |
-
}
|
22 |
-
}
|
23 |
-
|
24 |
-
@media something {
|
25 |
-
@page {
|
26 |
-
@media else {
|
27 |
-
div {
|
28 |
-
height: 200px;
|
29 |
-
}
|
30 |
-
}
|
31 |
-
}
|
32 |
-
}
|
33 |
-
|
34 |
-
|
35 |
-
div {
|
36 |
-
color: red;
|
37 |
-
@page yeah {
|
38 |
-
pre {
|
39 |
-
height: 20px;
|
40 |
-
}
|
41 |
-
}
|
42 |
-
}
|
43 |
-
|
44 |
-
@font-face {
|
45 |
-
color: red;
|
46 |
-
height: 20px;
|
47 |
-
}
|
48 |
-
|
49 |
-
|
50 |
-
@keyframes 'bounce' {
|
51 |
-
from {
|
52 |
-
top: 100px;
|
53 |
-
animation-timing-function: ease-out;
|
54 |
-
}
|
55 |
-
|
56 |
-
25% {
|
57 |
-
top: 50px;
|
58 |
-
animation-timing-function: ease-in;
|
59 |
-
}
|
60 |
-
|
61 |
-
50% {
|
62 |
-
top: 100px;
|
63 |
-
animation-timing-function: ease-out;
|
64 |
-
}
|
65 |
-
|
66 |
-
75% {
|
67 |
-
top: 75px;
|
68 |
-
animation-timing-function: ease-in;
|
69 |
-
}
|
70 |
-
|
71 |
-
to {
|
72 |
-
top: 100px;
|
73 |
-
}
|
74 |
-
}
|
75 |
-
|
76 |
-
@-webkit-keyframes flowouttoleft {
|
77 |
-
0% { -webkit-transform: translateX(0) scale(1); }
|
78 |
-
60%, 70% { -webkit-transform: translateX(0) scale(.7); }
|
79 |
-
100% { -webkit-transform: translateX(-100%) scale(.7); }
|
80 |
-
}
|
81 |
-
|
82 |
-
div {
|
83 |
-
animation-name: 'diagonal-slide';
|
84 |
-
animation-duration: 5s;
|
85 |
-
animation-iteration-count: 10;
|
86 |
-
}
|
87 |
-
|
88 |
-
@keyframes 'diagonal-slide' {
|
89 |
-
|
90 |
-
from {
|
91 |
-
left: 0;
|
92 |
-
top: 0;
|
93 |
-
}
|
94 |
-
|
95 |
-
to {
|
96 |
-
left: 100px;
|
97 |
-
top: 100px;
|
98 |
-
}
|
99 |
-
|
100 |
-
}
|
101 |
-
|
102 |
-
@document url(http://www.w3.org/),
|
103 |
-
url-prefix(http://www.w3.org/Style/),
|
104 |
-
domain(mozilla.org),
|
105 |
-
regexp("https:.*")
|
106 |
-
{
|
107 |
-
body { color: purple; background: yellow; }
|
108 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/extends.scss
DELETED
@@ -1,184 +0,0 @@
|
|
1 |
-
|
2 |
-
error, other {
|
3 |
-
border: 1px #f00;
|
4 |
-
background-color: #fdd;
|
5 |
-
}
|
6 |
-
|
7 |
-
pre, span {
|
8 |
-
seriousError {
|
9 |
-
@extend error;
|
10 |
-
font-size: 20px;
|
11 |
-
}
|
12 |
-
}
|
13 |
-
|
14 |
-
hello {
|
15 |
-
@extend other;
|
16 |
-
color: green;
|
17 |
-
div {
|
18 |
-
margin: 10px;
|
19 |
-
}
|
20 |
-
}
|
21 |
-
|
22 |
-
.cool {
|
23 |
-
color: red;
|
24 |
-
}
|
25 |
-
|
26 |
-
.blue {
|
27 |
-
color: purple;
|
28 |
-
}
|
29 |
-
|
30 |
-
.me {
|
31 |
-
@extend .cool, .blue;
|
32 |
-
}
|
33 |
-
|
34 |
-
.hoverlink { @extend a:hover }
|
35 |
-
a:hover { text-decoration: underline }
|
36 |
-
|
37 |
-
|
38 |
-
// partial matching and selector merging:
|
39 |
-
|
40 |
-
div.hello.world.hmm {
|
41 |
-
color: blue;
|
42 |
-
}
|
43 |
-
|
44 |
-
pre, code {
|
45 |
-
.okay.span {
|
46 |
-
@extend .hello;
|
47 |
-
}
|
48 |
-
}
|
49 |
-
|
50 |
-
// multiple matches per selector
|
51 |
-
.xxxxx .xxxxx .xxxxx {
|
52 |
-
color: green;
|
53 |
-
}
|
54 |
-
|
55 |
-
code {
|
56 |
-
@extend .xxxxx;
|
57 |
-
color: red;
|
58 |
-
}
|
59 |
-
|
60 |
-
|
61 |
-
// chained
|
62 |
-
|
63 |
-
.alpha {
|
64 |
-
color: red;
|
65 |
-
}
|
66 |
-
|
67 |
-
.beta {
|
68 |
-
@extend .alpha;
|
69 |
-
color: white;
|
70 |
-
}
|
71 |
-
|
72 |
-
.gama {
|
73 |
-
@extend .beta;
|
74 |
-
color: blue;
|
75 |
-
}
|
76 |
-
|
77 |
-
// merging selector sequences
|
78 |
-
|
79 |
-
#admin .tabbar a {font-weight: bold}
|
80 |
-
#demo .overview .fakelink {@extend a}
|
81 |
-
|
82 |
-
a1 b1 c1 d1 { color: red; }
|
83 |
-
x1 y1 z1 w1 { @extend a1; }
|
84 |
-
|
85 |
-
a2 b2 c2 d2 { color: red; }
|
86 |
-
x2 y2 z2 w2 { @extend b2; }
|
87 |
-
|
88 |
-
|
89 |
-
a3 b3 c3 d3 { color: red; }
|
90 |
-
x3 y3 z3 w3 { @extend c3; }
|
91 |
-
|
92 |
-
|
93 |
-
a4 b4 c4 d4 { color: red; }
|
94 |
-
x4 y4 z4 w4 { @extend d4; }
|
95 |
-
|
96 |
-
// removing common prefix
|
97 |
-
|
98 |
-
#butt .yeah .okay { font-weight: bold }
|
99 |
-
#butt .umm .sure { @extend .okay }
|
100 |
-
|
101 |
-
a9 b9 s9 t9 v9 { color: red; }
|
102 |
-
|
103 |
-
a9 b9 x9 y9 z9 {
|
104 |
-
@extend v9;
|
105 |
-
}
|
106 |
-
|
107 |
-
// extends & media
|
108 |
-
|
109 |
-
@media print {
|
110 |
-
horse {
|
111 |
-
color: blue;
|
112 |
-
}
|
113 |
-
}
|
114 |
-
|
115 |
-
man {
|
116 |
-
color: red;
|
117 |
-
@extend horse;
|
118 |
-
}
|
119 |
-
|
120 |
-
|
121 |
-
// result == match
|
122 |
-
|
123 |
-
wassup {
|
124 |
-
color: blue;
|
125 |
-
@extend wassup;
|
126 |
-
}
|
127 |
-
|
128 |
-
.foo {
|
129 |
-
.wassup {
|
130 |
-
@extend .wassup;
|
131 |
-
color: blue;
|
132 |
-
}
|
133 |
-
}
|
134 |
-
|
135 |
-
// multi-extend
|
136 |
-
|
137 |
-
#something {
|
138 |
-
color: red;
|
139 |
-
}
|
140 |
-
|
141 |
-
.x {
|
142 |
-
@extend #something;
|
143 |
-
}
|
144 |
-
|
145 |
-
.y {
|
146 |
-
@extend #something;
|
147 |
-
}
|
148 |
-
|
149 |
-
// twitter-sass-bootstrap infinite loop
|
150 |
-
|
151 |
-
.nav-tabs {
|
152 |
-
&.nav-justified {
|
153 |
-
@extend .nav-justified;
|
154 |
-
}
|
155 |
-
}
|
156 |
-
.nav-justified {
|
157 |
-
text-align: justify;
|
158 |
-
}
|
159 |
-
|
160 |
-
// multi-extend with nesting
|
161 |
-
|
162 |
-
.btn:hover,
|
163 |
-
.btn:active,
|
164 |
-
.btn.active,
|
165 |
-
.btn.disabled,
|
166 |
-
.btn[disabled] {
|
167 |
-
color: red;
|
168 |
-
}
|
169 |
-
.edit .actions {
|
170 |
-
button {
|
171 |
-
float: right;
|
172 |
-
@extend .btn;
|
173 |
-
}
|
174 |
-
}
|
175 |
-
.edit {
|
176 |
-
.new {
|
177 |
-
.actions {
|
178 |
-
padding: 0;
|
179 |
-
}
|
180 |
-
.actions button {
|
181 |
-
@extend .btn;
|
182 |
-
}
|
183 |
-
}
|
184 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/filter_effects.scss
DELETED
@@ -1,48 +0,0 @@
|
|
1 |
-
#number {
|
2 |
-
-webkit-filter: grayscale(1)
|
3 |
-
sepia(0.5)
|
4 |
-
saturate(0.1)
|
5 |
-
invert(1)
|
6 |
-
opacity(0.5)
|
7 |
-
brightness(0.5)
|
8 |
-
contrast(0.5);
|
9 |
-
}
|
10 |
-
|
11 |
-
#percentage {
|
12 |
-
-webkit-filter: grayscale(100%)
|
13 |
-
sepia(50%)
|
14 |
-
saturate(10%)
|
15 |
-
invert(100%)
|
16 |
-
opacity(50%)
|
17 |
-
brightness(50%)
|
18 |
-
contrast(50%);
|
19 |
-
}
|
20 |
-
|
21 |
-
#misc {
|
22 |
-
-webkit-filter: hue-rotate(90deg)
|
23 |
-
blur(10px)
|
24 |
-
drop-shadow(10px -16px 30px purple);
|
25 |
-
}
|
26 |
-
|
27 |
-
@mixin opacity($opacity, $style: 0) {
|
28 |
-
@if ($opacity < 1) {
|
29 |
-
opacity: $opacity;
|
30 |
-
filter: alpha(opacity=$opacity * 100, style=$style);
|
31 |
-
} @else {
|
32 |
-
opacity: $opacity / 100;
|
33 |
-
filter: alpha(opacity=$opacity);
|
34 |
-
}
|
35 |
-
}
|
36 |
-
|
37 |
-
#decimal {
|
38 |
-
@include opacity(.5, 1);
|
39 |
-
}
|
40 |
-
|
41 |
-
#percent {
|
42 |
-
@include opacity(50);
|
43 |
-
}
|
44 |
-
|
45 |
-
.row {
|
46 |
-
background-color: darken(#2ba6cb, 40%);
|
47 |
-
color: darken(#2ba6cb, 10%);
|
48 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/functions.scss
DELETED
@@ -1,81 +0,0 @@
|
|
1 |
-
|
2 |
-
@function hello($x) {
|
3 |
-
@return $x + 4;
|
4 |
-
}
|
5 |
-
|
6 |
-
@function add($a, $b) {
|
7 |
-
@return $a + $b;
|
8 |
-
}
|
9 |
-
|
10 |
-
div {
|
11 |
-
color: hello(10px);
|
12 |
-
sum: add(11, 12);
|
13 |
-
}
|
14 |
-
|
15 |
-
// make sure values are being reduced before being passed up to previous scope
|
16 |
-
|
17 |
-
@function one($a, $b) {
|
18 |
-
@return $a $b;
|
19 |
-
}
|
20 |
-
|
21 |
-
@function two($a, $b) {
|
22 |
-
@return $a#{$a} $b;
|
23 |
-
}
|
24 |
-
|
25 |
-
@function three($a, $b: default) {
|
26 |
-
@return "hello #{$a} and #{$b}"
|
27 |
-
}
|
28 |
-
|
29 |
-
@function all($a...) {
|
30 |
-
@return "hello #{$a}"
|
31 |
-
}
|
32 |
-
|
33 |
-
div {
|
34 |
-
hello: one(10, 55);
|
35 |
-
hello: two(10, 55);
|
36 |
-
hello: three(10, 55);
|
37 |
-
}
|
38 |
-
|
39 |
-
|
40 |
-
@function hello_world() {
|
41 |
-
@return 1000;
|
42 |
-
}
|
43 |
-
|
44 |
-
del {
|
45 |
-
color: hello-world();
|
46 |
-
}
|
47 |
-
|
48 |
-
div {
|
49 |
-
$args: foo bar;
|
50 |
-
hello: three($args...);
|
51 |
-
hello: three(bar...);
|
52 |
-
hello: all(Alice, Bob, Tom);
|
53 |
-
}
|
54 |
-
|
55 |
-
@function stringConcatCompassStyle($start,$last)
|
56 |
-
{
|
57 |
-
// Compass still uses it like this
|
58 |
-
@return #{$start}-#{$last};
|
59 |
-
}
|
60 |
-
|
61 |
-
.foo
|
62 |
-
{
|
63 |
-
test2: stringConcatCompassStyle(-moz,art);
|
64 |
-
}
|
65 |
-
|
66 |
-
@mixin content_test {
|
67 |
-
span {
|
68 |
-
$color: green;
|
69 |
-
@content;
|
70 |
-
}
|
71 |
-
}
|
72 |
-
|
73 |
-
@function func_test($c) {
|
74 |
-
@return $c + 1;
|
75 |
-
}
|
76 |
-
|
77 |
-
div {
|
78 |
-
@include content_test {
|
79 |
-
height: func_test(2px);
|
80 |
-
}
|
81 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/ie7.scss
DELETED
@@ -1,12 +0,0 @@
|
|
1 |
-
// http://jes.st/2013/ie7s-css-breaking-content-counter-bug/
|
2 |
-
#foo:before {
|
3 |
-
content: counter(item, ".") ": ";
|
4 |
-
}
|
5 |
-
|
6 |
-
#bar:before {
|
7 |
-
content: counter(item,".");
|
8 |
-
}
|
9 |
-
|
10 |
-
#fu:before {
|
11 |
-
content: counter(item);
|
12 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/if.scss
DELETED
@@ -1,76 +0,0 @@
|
|
1 |
-
|
2 |
-
@function conds($val) {
|
3 |
-
@if $val {
|
4 |
-
@return "red";
|
5 |
-
}
|
6 |
-
|
7 |
-
@return "blue";
|
8 |
-
}
|
9 |
-
|
10 |
-
div {
|
11 |
-
@if something {
|
12 |
-
color: blue;
|
13 |
-
}
|
14 |
-
}
|
15 |
-
|
16 |
-
pre {
|
17 |
-
val-1: conds(true);
|
18 |
-
val-2: conds(false);
|
19 |
-
val-3: conds(null);
|
20 |
-
val-4: conds(1);
|
21 |
-
val-5: conds(0);
|
22 |
-
}
|
23 |
-
|
24 |
-
|
25 |
-
span {
|
26 |
-
@if false {
|
27 |
-
color: red;
|
28 |
-
} @else {
|
29 |
-
color: blue;
|
30 |
-
}
|
31 |
-
|
32 |
-
@if true {
|
33 |
-
height: 10px;
|
34 |
-
} @else {
|
35 |
-
color: 20px;
|
36 |
-
}
|
37 |
-
|
38 |
-
@if false {
|
39 |
-
height: 10px;
|
40 |
-
} @elseif false {
|
41 |
-
color: 20px;
|
42 |
-
} @else {
|
43 |
-
width: 20px;
|
44 |
-
}
|
45 |
-
}
|
46 |
-
|
47 |
-
div {
|
48 |
-
@if false {
|
49 |
-
color: red;
|
50 |
-
} @else if false {
|
51 |
-
color: green;
|
52 |
-
} @else {
|
53 |
-
color: blue;
|
54 |
-
}
|
55 |
-
|
56 |
-
@if false {
|
57 |
-
border-color: red;
|
58 |
-
} @else if true {
|
59 |
-
border-color: green;
|
60 |
-
} @else {
|
61 |
-
border-color: blue;
|
62 |
-
}
|
63 |
-
|
64 |
-
}
|
65 |
-
|
66 |
-
// doesn't work in scss, thing loses scope
|
67 |
-
del {
|
68 |
-
@if false {
|
69 |
-
$thing: yes;
|
70 |
-
} @else {
|
71 |
-
$thing: no;
|
72 |
-
}
|
73 |
-
|
74 |
-
thing: $thing;
|
75 |
-
}
|
76 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/if_on_null.scss
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
@function testfunc($pseudo: null) {
|
2 |
-
$output: if($pseudo, "green", "red");
|
3 |
-
@return $output;
|
4 |
-
}
|
5 |
-
|
6 |
-
body {
|
7 |
-
background-color: testfunc();
|
8 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/import.scss
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
|
2 |
-
@import "foo.css";
|
3 |
-
@import "foo" screen;
|
4 |
-
@import "http://foo.com/bar";
|
5 |
-
@import url(foo);
|
6 |
-
|
7 |
-
@import "imports/simple";
|
8 |
-
|
9 |
-
pre {
|
10 |
-
color: red;
|
11 |
-
@import "imports/simple.scss";
|
12 |
-
}
|
13 |
-
|
14 |
-
code {
|
15 |
-
@import "imports/simple", "imports/simple";
|
16 |
-
}
|
17 |
-
|
18 |
-
@import "imports/partial";
|
19 |
-
|
20 |
-
body {
|
21 |
-
color: $variable;
|
22 |
-
@include partial-mixin();
|
23 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/imports/_partial.scss
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
|
2 |
-
#partial {
|
3 |
-
color: blue;
|
4 |
-
}
|
5 |
-
|
6 |
-
$variable: #7C2;
|
7 |
-
|
8 |
-
@mixin partial-mixin() {
|
9 |
-
background: gray;
|
10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/imports/simple.scss
DELETED
@@ -1,4 +0,0 @@
|
|
1 |
-
div {
|
2 |
-
height: 200px;
|
3 |
-
color: red;
|
4 |
-
}
|
|
|
|
|
|
|
|
tests/scssc/inputs/interpolation.scss
DELETED
@@ -1,86 +0,0 @@
|
|
1 |
-
|
2 |
-
div {
|
3 |
-
color: red#{white} blue;
|
4 |
-
color: red #{white} blue;
|
5 |
-
color: red #{white}blue;
|
6 |
-
color: red#{white}blue;
|
7 |
-
color: #{umm}#{yeah}#{what};
|
8 |
-
color: #{stacked};
|
9 |
-
|
10 |
-
font-size: 10px/#{something};
|
11 |
-
font-size: 10px / #{something};
|
12 |
-
|
13 |
-
test: "what#{"world"}wrong";
|
14 |
-
test: "what#{'world'}wrong";
|
15 |
-
test: "what#{world}wrong";
|
16 |
-
test: "what"#{world}"wrong";
|
17 |
-
|
18 |
-
hi: "what is #{4 + 12} end"
|
19 |
-
}
|
20 |
-
|
21 |
-
|
22 |
-
// interpolation in selectors
|
23 |
-
|
24 |
-
pre {
|
25 |
-
$var: cool;
|
26 |
-
|
27 |
-
#{var} {
|
28 |
-
color: red;
|
29 |
-
}
|
30 |
-
|
31 |
-
#{var} dad {
|
32 |
-
color: red;
|
33 |
-
}
|
34 |
-
|
35 |
-
bed#{var}dad {
|
36 |
-
color: red;
|
37 |
-
}
|
38 |
-
}
|
39 |
-
|
40 |
-
cool {
|
41 |
-
@for $x from 1 through 5 {
|
42 |
-
.thing-#{$x} {
|
43 |
-
color: red;
|
44 |
-
}
|
45 |
-
}
|
46 |
-
}
|
47 |
-
|
48 |
-
a#{b}c#{d}e {
|
49 |
-
color: red;
|
50 |
-
}
|
51 |
-
|
52 |
-
##{hello}, .#{world}{
|
53 |
-
color: red;
|
54 |
-
}
|
55 |
-
|
56 |
-
#abc#{hello}yeah, .cool#{world}yes{
|
57 |
-
color: red;
|
58 |
-
}
|
59 |
-
|
60 |
-
$scope: 2;
|
61 |
-
|
62 |
-
div.element:nth-child(#{$scope}n)
|
63 |
-
{
|
64 |
-
display: none;
|
65 |
-
}
|
66 |
-
|
67 |
-
// property interpolation
|
68 |
-
|
69 |
-
div {
|
70 |
-
$var: hello;
|
71 |
-
#{$var}: world;
|
72 |
-
cool#{$var}:world;
|
73 |
-
#{$var}one:world;
|
74 |
-
two#{$var}one:world;
|
75 |
-
|
76 |
-
one#{a + b}two: cool;
|
77 |
-
|
78 |
-
#{hello}: {
|
79 |
-
#{world}: red;
|
80 |
-
#{mold}: white;
|
81 |
-
#{$var}: blue;
|
82 |
-
}
|
83 |
-
|
84 |
-
}
|
85 |
-
|
86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/keyword_args.scss
DELETED
@@ -1,24 +0,0 @@
|
|
1 |
-
|
2 |
-
// mixins
|
3 |
-
|
4 |
-
@mixin hello($a: one, $b:two, $c:three, $d: four) {
|
5 |
-
out: $a $b $c $d;
|
6 |
-
}
|
7 |
-
|
8 |
-
pre {
|
9 |
-
@include hello(alpha, $d: palace, $b: fort);
|
10 |
-
}
|
11 |
-
|
12 |
-
|
13 |
-
// functions
|
14 |
-
|
15 |
-
@function cool($a, $b) {
|
16 |
-
@return $a - $b;
|
17 |
-
}
|
18 |
-
|
19 |
-
div {
|
20 |
-
hello: cool($b: 5, $a: 10);
|
21 |
-
world: cool(5, 10);
|
22 |
-
}
|
23 |
-
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/list.scss
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
$list: (black);
|
2 |
-
$list: join($list, white, comma);
|
3 |
-
|
4 |
-
div {
|
5 |
-
padding: join(10px 20px, 30px 40px);
|
6 |
-
margin: join((0, 10px), (10px, 10px), space);
|
7 |
-
background: linear-gradient($list);
|
8 |
-
}
|
9 |
-
|
10 |
-
$list: ();
|
11 |
-
$list: join($list, (red, blue), comma);
|
12 |
-
|
13 |
-
p {
|
14 |
-
background: linear-gradient($list);
|
15 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/looping.scss
DELETED
@@ -1,51 +0,0 @@
|
|
1 |
-
|
2 |
-
div {
|
3 |
-
@each $var in what is this {
|
4 |
-
color: $var;
|
5 |
-
}
|
6 |
-
|
7 |
-
@each $var in what, is, this {
|
8 |
-
font: $var;
|
9 |
-
}
|
10 |
-
|
11 |
-
$list: what is this;
|
12 |
-
@each $var in $list {
|
13 |
-
background: $var;
|
14 |
-
}
|
15 |
-
|
16 |
-
$list: what, is, this;
|
17 |
-
@each $var in $list {
|
18 |
-
border: $var;
|
19 |
-
}
|
20 |
-
}
|
21 |
-
|
22 |
-
|
23 |
-
span {
|
24 |
-
$i: 0;
|
25 |
-
@while $i <= 10 {
|
26 |
-
color: $i;
|
27 |
-
$i: $i + 1;
|
28 |
-
}
|
29 |
-
}
|
30 |
-
|
31 |
-
pre {
|
32 |
-
@for $x from 1 to 5 {
|
33 |
-
color: $x;
|
34 |
-
}
|
35 |
-
|
36 |
-
@for $x from 1 through 5 {
|
37 |
-
height: $x;
|
38 |
-
}
|
39 |
-
|
40 |
-
$y: 10;
|
41 |
-
@for $x from $y through 3 {
|
42 |
-
cool: $x;
|
43 |
-
}
|
44 |
-
|
45 |
-
}
|
46 |
-
|
47 |
-
$j: null;
|
48 |
-
@while $j {
|
49 |
-
.item { width: 2em; }
|
50 |
-
$j: false;
|
51 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/media.scss
DELETED
@@ -1,208 +0,0 @@
|
|
1 |
-
|
2 |
-
// media syntax
|
3 |
-
@media {
|
4 |
-
div { color: blue; }
|
5 |
-
}
|
6 |
-
@media what {
|
7 |
-
div { color: blue; }
|
8 |
-
}
|
9 |
-
|
10 |
-
@media (cool) {
|
11 |
-
div { color: blue; }
|
12 |
-
}
|
13 |
-
@media (cool: blue) {
|
14 |
-
div { color: blue; }
|
15 |
-
}
|
16 |
-
|
17 |
-
@media hello and (world) and (butt: man) {
|
18 |
-
div { color: blue; }
|
19 |
-
}
|
20 |
-
|
21 |
-
$navbarCollapseWidth: 940px;
|
22 |
-
|
23 |
-
@media (max-width: $navbarCollapseWidth) {
|
24 |
-
color: red;
|
25 |
-
}
|
26 |
-
|
27 |
-
// media bubbling
|
28 |
-
@media not hello and (world) {
|
29 |
-
color: blue;
|
30 |
-
pre {
|
31 |
-
color: blue;
|
32 |
-
}
|
33 |
-
|
34 |
-
@media butt {
|
35 |
-
color: red;
|
36 |
-
div {
|
37 |
-
color: red;
|
38 |
-
}
|
39 |
-
}
|
40 |
-
}
|
41 |
-
|
42 |
-
@media a, b {
|
43 |
-
@media c {
|
44 |
-
color: blue;
|
45 |
-
}
|
46 |
-
}
|
47 |
-
|
48 |
-
@media a{
|
49 |
-
@media b, c {
|
50 |
-
color: blue;
|
51 |
-
}
|
52 |
-
}
|
53 |
-
|
54 |
-
@media a, b{
|
55 |
-
@media c, d {
|
56 |
-
color: blue;
|
57 |
-
}
|
58 |
-
}
|
59 |
-
|
60 |
-
$media: cree;
|
61 |
-
$feature: -webkit-min-device-pixel-ratio;
|
62 |
-
$value: 1.5;
|
63 |
-
|
64 |
-
div {
|
65 |
-
color: blue;
|
66 |
-
@media s#{$media}n and ($feature: $value) {
|
67 |
-
.sidebar {
|
68 |
-
width: 500px;
|
69 |
-
}
|
70 |
-
}
|
71 |
-
}
|
72 |
-
|
73 |
-
// @media + @mixin
|
74 |
-
@mixin color {
|
75 |
-
color: red;
|
76 |
-
.success {
|
77 |
-
color: green;
|
78 |
-
}
|
79 |
-
}
|
80 |
-
|
81 |
-
div {
|
82 |
-
position: absolute;
|
83 |
-
$y: 2em;
|
84 |
-
@media screen {
|
85 |
-
top: 0;
|
86 |
-
$x: 5px;
|
87 |
-
p {
|
88 |
-
margin: $x;
|
89 |
-
}
|
90 |
-
bottom: 6em + $y;
|
91 |
-
@include color;
|
92 |
-
}
|
93 |
-
}
|
94 |
-
|
95 |
-
.button {
|
96 |
-
width: 300px;
|
97 |
-
height: 100px;
|
98 |
-
background: #eee;
|
99 |
-
|
100 |
-
:hover {
|
101 |
-
background: #aaa;
|
102 |
-
}
|
103 |
-
|
104 |
-
@media only screen and (max-width : 300px){
|
105 |
-
width: 100px;
|
106 |
-
height: 100px;
|
107 |
-
}
|
108 |
-
}
|
109 |
-
|
110 |
-
code {
|
111 |
-
position: absolute;
|
112 |
-
@media screen {
|
113 |
-
pre {
|
114 |
-
height: 20px;
|
115 |
-
}
|
116 |
-
height: 10px;
|
117 |
-
}
|
118 |
-
}
|
119 |
-
|
120 |
-
dt {
|
121 |
-
@media screen {
|
122 |
-
@media (color: blue) {
|
123 |
-
height: 10px;
|
124 |
-
}
|
125 |
-
}
|
126 |
-
}
|
127 |
-
|
128 |
-
// nesting media queries
|
129 |
-
@media screen {
|
130 |
-
.screen {
|
131 |
-
width: 12px;
|
132 |
-
}
|
133 |
-
@media only screen {
|
134 |
-
.only-screen {
|
135 |
-
height: 11px;
|
136 |
-
}
|
137 |
-
}
|
138 |
-
}
|
139 |
-
|
140 |
-
@media only screen {
|
141 |
-
.only-screen {
|
142 |
-
width: 14px;
|
143 |
-
}
|
144 |
-
@media only screen {
|
145 |
-
.only-screen {
|
146 |
-
height: 16px;
|
147 |
-
}
|
148 |
-
}
|
149 |
-
}
|
150 |
-
|
151 |
-
@media not screen {
|
152 |
-
@media screen {
|
153 |
-
.invalid {
|
154 |
-
height: 12px;
|
155 |
-
}
|
156 |
-
}
|
157 |
-
}
|
158 |
-
|
159 |
-
@media not screen {
|
160 |
-
@media print {
|
161 |
-
.only-print {
|
162 |
-
height: 12px;
|
163 |
-
}
|
164 |
-
}
|
165 |
-
}
|
166 |
-
|
167 |
-
@media screen {
|
168 |
-
@media not print {
|
169 |
-
.only-print {
|
170 |
-
height: 12px;
|
171 |
-
}
|
172 |
-
}
|
173 |
-
}
|
174 |
-
|
175 |
-
@media not screen {
|
176 |
-
@media not print {
|
177 |
-
.invalid {
|
178 |
-
height: 12px;
|
179 |
-
}
|
180 |
-
}
|
181 |
-
}
|
182 |
-
|
183 |
-
@media not screen {
|
184 |
-
@media not screen {
|
185 |
-
.not-screen {
|
186 |
-
height: 15px;
|
187 |
-
}
|
188 |
-
}
|
189 |
-
}
|
190 |
-
|
191 |
-
@media only screen {
|
192 |
-
@media print {
|
193 |
-
.invalid {
|
194 |
-
height: 15px;
|
195 |
-
}
|
196 |
-
}
|
197 |
-
}
|
198 |
-
|
199 |
-
@media only screen {
|
200 |
-
@media screen and (color: blue) {
|
201 |
-
@media screen and (width: 13) {
|
202 |
-
.only-screen {
|
203 |
-
height: 15px;
|
204 |
-
}
|
205 |
-
}
|
206 |
-
}
|
207 |
-
}
|
208 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/mixins.scss
DELETED
@@ -1,158 +0,0 @@
|
|
1 |
-
|
2 |
-
@mixin something {
|
3 |
-
color: red;
|
4 |
-
pre {
|
5 |
-
height: 200px;
|
6 |
-
}
|
7 |
-
}
|
8 |
-
|
9 |
-
div {
|
10 |
-
color: blue;
|
11 |
-
@include something;
|
12 |
-
}
|
13 |
-
|
14 |
-
@mixin something($color) {
|
15 |
-
color: $color;
|
16 |
-
|
17 |
-
div {
|
18 |
-
height: 20px;
|
19 |
-
}
|
20 |
-
}
|
21 |
-
|
22 |
-
@mixin cool($a, $b, $c) {
|
23 |
-
height: $a + $b + $c;
|
24 |
-
}
|
25 |
-
|
26 |
-
span {
|
27 |
-
@include something(blue);
|
28 |
-
}
|
29 |
-
|
30 |
-
html {
|
31 |
-
@include cool(10px, 12px, 21px);
|
32 |
-
}
|
33 |
-
|
34 |
-
|
35 |
-
@mixin hello_world {
|
36 |
-
height: 20px;
|
37 |
-
}
|
38 |
-
|
39 |
-
del {
|
40 |
-
@include hello-world;
|
41 |
-
}
|
42 |
-
|
43 |
-
|
44 |
-
// variable shadowing
|
45 |
-
|
46 |
-
|
47 |
-
$color: white;
|
48 |
-
@mixin colors($color: blue) {
|
49 |
-
color: $color;
|
50 |
-
}
|
51 |
-
|
52 |
-
div {
|
53 |
-
color: $color;
|
54 |
-
@include colors();
|
55 |
-
color: $color;
|
56 |
-
}
|
57 |
-
|
58 |
-
@mixin linear-gradient($from, $to, $pos: left top) {
|
59 |
-
background-image: linear-gradient($pos, $from, $to);
|
60 |
-
}
|
61 |
-
|
62 |
-
div {
|
63 |
-
@include linear-gradient(red, green);
|
64 |
-
}
|
65 |
-
|
66 |
-
@mixin box-shadow($shadows...) {
|
67 |
-
-moz-box-shadow: $shadows;
|
68 |
-
-webkit-box-shadow: $shadows;
|
69 |
-
box-shadow: $shadows;
|
70 |
-
}
|
71 |
-
|
72 |
-
div {
|
73 |
-
@include box-shadow(10px 10px 5px #888);
|
74 |
-
@include box-shadow(inset 10px 10px #888, -10px -10px #f4f4f4);
|
75 |
-
}
|
76 |
-
|
77 |
-
@mixin nested {
|
78 |
-
@include something(red);
|
79 |
-
}
|
80 |
-
|
81 |
-
div {
|
82 |
-
p {
|
83 |
-
.class {
|
84 |
-
@include nested;
|
85 |
-
}
|
86 |
-
|
87 |
-
@include nested;
|
88 |
-
|
89 |
-
.top {
|
90 |
-
top: 0;
|
91 |
-
|
92 |
-
div {
|
93 |
-
color: red;
|
94 |
-
}
|
95 |
-
}
|
96 |
-
|
97 |
-
color: blue;
|
98 |
-
}
|
99 |
-
}
|
100 |
-
|
101 |
-
// mixin content (http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#mixin-content)
|
102 |
-
@mixin content-simple {
|
103 |
-
div.mixin-content-simple {
|
104 |
-
@content;
|
105 |
-
}
|
106 |
-
}
|
107 |
-
|
108 |
-
@mixin content-with-arg ( $background ) {
|
109 |
-
div.mixin-content-with-arg {
|
110 |
-
background: $background;
|
111 |
-
@content;
|
112 |
-
}
|
113 |
-
}
|
114 |
-
|
115 |
-
@include content-simple {
|
116 |
-
color: red;
|
117 |
-
}
|
118 |
-
|
119 |
-
@include content-with-arg($background: blue) {
|
120 |
-
color: red;
|
121 |
-
}
|
122 |
-
|
123 |
-
@include content-with-arg($background: purple) {
|
124 |
-
@include hello_world;
|
125 |
-
}
|
126 |
-
|
127 |
-
@include content-simple {
|
128 |
-
@include cool(10px, 12px, 21px);
|
129 |
-
}
|
130 |
-
|
131 |
-
@include content-simple {
|
132 |
-
@include something(orange);
|
133 |
-
}
|
134 |
-
|
135 |
-
@include content-with-arg($background: purple) {
|
136 |
-
@include cool(10px, 12px, 21px);
|
137 |
-
}
|
138 |
-
|
139 |
-
@include content-with-arg($background: purple) {
|
140 |
-
@include something(orange);
|
141 |
-
}
|
142 |
-
|
143 |
-
@mixin wallpaper($image, $top: 0, $right: 0, $bottom: 0, $left: 0) {
|
144 |
-
background: $image;
|
145 |
-
position: absolute;
|
146 |
-
top: $top;
|
147 |
-
right: $right;
|
148 |
-
bottom: $bottom;
|
149 |
-
left: $left;
|
150 |
-
}
|
151 |
-
|
152 |
-
@mixin logo($offsets...) {
|
153 |
-
@include wallpaper(url(/images/logo.png), $offsets...);
|
154 |
-
}
|
155 |
-
|
156 |
-
#please-wait {
|
157 |
-
@include logo(1em, $left: 4em, $bottom: 3em);
|
158 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/nesting.scss
DELETED
@@ -1,45 +0,0 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
body {
|
4 |
-
color: red;
|
5 |
-
}
|
6 |
-
|
7 |
-
|
8 |
-
div {
|
9 |
-
color: red;
|
10 |
-
height: yes;
|
11 |
-
|
12 |
-
pre {
|
13 |
-
color: blue;
|
14 |
-
}
|
15 |
-
}
|
16 |
-
|
17 |
-
|
18 |
-
div: blue;
|
19 |
-
|
20 |
-
|
21 |
-
div {
|
22 |
-
font: 10px hello world {
|
23 |
-
size: 10px;
|
24 |
-
color: blue;
|
25 |
-
}
|
26 |
-
|
27 |
-
border: {
|
28 |
-
left: 1px solid blue;
|
29 |
-
right: 2px dashed green;
|
30 |
-
}
|
31 |
-
}
|
32 |
-
|
33 |
-
|
34 |
-
#nested-nesting {
|
35 |
-
bar: baz;
|
36 |
-
bang: {
|
37 |
-
bop: bar;
|
38 |
-
bip: 1px;
|
39 |
-
blat: {
|
40 |
-
baf: bort
|
41 |
-
}
|
42 |
-
}
|
43 |
-
}
|
44 |
-
|
45 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/null.scss
DELETED
@@ -1,41 +0,0 @@
|
|
1 |
-
$list: null;
|
2 |
-
.div {
|
3 |
-
one: null;
|
4 |
-
one: null world;
|
5 |
-
one: NULL world;
|
6 |
-
one: a null, b;
|
7 |
-
two: a $list $list, $list, b;
|
8 |
-
three: $list;
|
9 |
-
}
|
10 |
-
|
11 |
-
$value: null;
|
12 |
-
p:before {
|
13 |
-
content: "I ate #{$value} pies!";
|
14 |
-
}
|
15 |
-
|
16 |
-
@mixin Rounded($radius1, $direction: null, $radius2: false) {
|
17 |
-
$corner: null;
|
18 |
-
@if $direction == TL { $corner: top-left-; }
|
19 |
-
@if $direction == TR { $corner: top-right-; }
|
20 |
-
@if $direction == BL { $corner: bottom-left-; }
|
21 |
-
@if $direction == BR { $corner: bottom-right-; }
|
22 |
-
@if $radius2 {
|
23 |
-
-webkit-border-#{$corner}radius: $radius1 $radius2;
|
24 |
-
border-#{$corner}radius: $radius1 $radius2;
|
25 |
-
} @else {
|
26 |
-
-webkit-border-#{$corner}radius: $radius1;
|
27 |
-
border-#{$corner}radius: $radius1;
|
28 |
-
}
|
29 |
-
}
|
30 |
-
|
31 |
-
.foo {
|
32 |
-
@include Rounded(10);
|
33 |
-
}
|
34 |
-
|
35 |
-
.fu {
|
36 |
-
@include Rounded(20, null);
|
37 |
-
}
|
38 |
-
|
39 |
-
.bar {
|
40 |
-
@include Rounded(30, TL);
|
41 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/operators.scss
DELETED
@@ -1,143 +0,0 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
body {
|
4 |
-
color: 1 + 2 + 5;
|
5 |
-
color: 1 + 2 * 5 + 5;
|
6 |
-
height: 10px/10px;
|
7 |
-
color: 10px/2 + 1;
|
8 |
-
color: (10px/2);
|
9 |
-
bottom: (4/2px);
|
10 |
-
top: 1em * (1 * 24px - 0) / 16px;
|
11 |
-
left: 1 - 2cm;
|
12 |
-
top: (2cm/12px);
|
13 |
-
}
|
14 |
-
|
15 |
-
div {
|
16 |
-
color: 4 == 3;
|
17 |
-
color: hello == hello;
|
18 |
-
|
19 |
-
color: 4 > 3;
|
20 |
-
color: 4 < 3;
|
21 |
-
color: what > 3;
|
22 |
-
}
|
23 |
-
|
24 |
-
|
25 |
-
#units {
|
26 |
-
test: 1in + 4cm;
|
27 |
-
test: 12mm + 1;
|
28 |
-
test: 1 + 3em;
|
29 |
-
test: 1mm + 1cm;
|
30 |
-
test: 1cm + 1mm;
|
31 |
-
}
|
32 |
-
|
33 |
-
#modulo {
|
34 |
-
test: 3 % 2;
|
35 |
-
test: 4cm % 3;
|
36 |
-
}
|
37 |
-
|
38 |
-
#colors {
|
39 |
-
color: red + rgb(1,2,3);
|
40 |
-
color: red - rgb(1,2,3);
|
41 |
-
color: rgba(1,2,3, 0.5) * rgba(3,4,5, 0.5);
|
42 |
-
color: rgba(10,15,20, 0.5) / rgba(2,2,2, 0.5);
|
43 |
-
|
44 |
-
color: rgba(1,2,3, 0.5) * 2;
|
45 |
-
color: rgba(1,2,3, 0.5) / 2;
|
46 |
-
color: rgba(1,2,3, 0.5) + 2;
|
47 |
-
color: rgba(1,2,3, 0.5) - 2;
|
48 |
-
|
49 |
-
color: blue + 34;
|
50 |
-
|
51 |
-
color: #fff == #000;
|
52 |
-
color: #fff == #fff;
|
53 |
-
|
54 |
-
color: #fff != #000;
|
55 |
-
color: #fff != #fff;
|
56 |
-
}
|
57 |
-
|
58 |
-
|
59 |
-
#preserve {
|
60 |
-
hello: what -going;
|
61 |
-
hello: what - going;
|
62 |
-
}
|
63 |
-
|
64 |
-
#strings {
|
65 |
-
hello: what -going;
|
66 |
-
|
67 |
-
hello: what +going;
|
68 |
-
hello: what+going;
|
69 |
-
hello: what+ going;
|
70 |
-
hello: what + going;
|
71 |
-
|
72 |
-
hello: "what" + going;
|
73 |
-
hello: going + "what";
|
74 |
-
hello: "what" + "what";
|
75 |
-
}
|
76 |
-
|
77 |
-
#negation {
|
78 |
-
$num: 100;
|
79 |
-
a: -$num + 40;
|
80 |
-
b: 10 -$num;
|
81 |
-
b: 10 - $num;
|
82 |
-
}
|
83 |
-
|
84 |
-
#bools-fail {
|
85 |
-
and: false and two;
|
86 |
-
and: one and two;
|
87 |
-
and: one and false;
|
88 |
-
|
89 |
-
or: false or two;
|
90 |
-
or: one or two;
|
91 |
-
or: one or false;
|
92 |
-
}
|
93 |
-
|
94 |
-
#bools {
|
95 |
-
and: (false and two);
|
96 |
-
and: (one and two);
|
97 |
-
and: (one and false);
|
98 |
-
|
99 |
-
or: (false or two);
|
100 |
-
or: (one or two);
|
101 |
-
or: (one or false);
|
102 |
-
}
|
103 |
-
|
104 |
-
|
105 |
-
#nots-fail {
|
106 |
-
not: not true + 2;
|
107 |
-
not: not false;
|
108 |
-
not: not 0;
|
109 |
-
not: not 1;
|
110 |
-
not: not "";
|
111 |
-
not: not hello;
|
112 |
-
}
|
113 |
-
|
114 |
-
#nots {
|
115 |
-
not: (not true) + 2;
|
116 |
-
not: (not false);
|
117 |
-
not: (not 0);
|
118 |
-
not: (not 1);
|
119 |
-
not: (not "");
|
120 |
-
not: (not hello);
|
121 |
-
}
|
122 |
-
|
123 |
-
#string-test {
|
124 |
-
str: hi == "hi";
|
125 |
-
str: hi == "no";
|
126 |
-
str: 'yes' == 'yes';
|
127 |
-
|
128 |
-
$var1: "hello";
|
129 |
-
$var2: hello;
|
130 |
-
|
131 |
-
str: "#{$var1}" == '#{$var2}';
|
132 |
-
|
133 |
-
str: xhello#{$var1}x == "x#{$var2}hellox"; // xhellohellofalse
|
134 |
-
|
135 |
-
str: unit(10px) == px;
|
136 |
-
}
|
137 |
-
|
138 |
-
|
139 |
-
#special {
|
140 |
-
cancel-unit: (10px / 10px);
|
141 |
-
}
|
142 |
-
|
143 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/placeholder_selector.scss
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
#context a%extreme span {
|
2 |
-
color: blue;
|
3 |
-
font-weight: bold;
|
4 |
-
font-size: 2em;
|
5 |
-
}
|
6 |
-
|
7 |
-
.notice, .error { @extend %extreme; }
|
8 |
-
|
9 |
-
.hidden %placeholder {
|
10 |
-
margin: 0;
|
11 |
-
}
|
12 |
-
|
13 |
-
p {
|
14 |
-
@extend #context;
|
15 |
-
padding: 2em;
|
16 |
-
}
|
17 |
-
|
18 |
-
div { @extend .hidden; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/scss_css.scss
DELETED
@@ -1,986 +0,0 @@
|
|
1 |
-
[foo~=bar] {
|
2 |
-
a: b; }
|
3 |
-
|
4 |
-
|
5 |
-
[foo^=bar] {
|
6 |
-
a: b; }
|
7 |
-
|
8 |
-
|
9 |
-
[foo$=bar] {
|
10 |
-
a: b; }
|
11 |
-
|
12 |
-
|
13 |
-
[foo*=bar] {
|
14 |
-
a: b; }
|
15 |
-
|
16 |
-
|
17 |
-
[foo|=en] {
|
18 |
-
a: b; }
|
19 |
-
|
20 |
-
|
21 |
-
foo {
|
22 |
-
a: 2;
|
23 |
-
b: 2.3em;
|
24 |
-
c: 50%;
|
25 |
-
d: "fraz bran";
|
26 |
-
e: flanny-blanny-blan;
|
27 |
-
f: url(http://sass-lang.com);
|
28 |
-
// g: U+ffa?;
|
29 |
-
h: #aabbcc; }
|
30 |
-
|
31 |
-
|
32 |
-
selector {
|
33 |
-
property: value;
|
34 |
-
property2: value; }
|
35 |
-
|
36 |
-
|
37 |
-
sel{p:v}
|
38 |
-
|
39 |
-
.foo {
|
40 |
-
/* Foo
|
41 |
-
Bar
|
42 |
-
Baz */
|
43 |
-
a: b; }
|
44 |
-
|
45 |
-
|
46 |
-
.foo {
|
47 |
-
/* Foo
|
48 |
-
Bar
|
49 |
-
Baz */
|
50 |
-
a: b; }
|
51 |
-
|
52 |
-
|
53 |
-
.foo {/* Foo
|
54 |
-
Bar */
|
55 |
-
a: b; }
|
56 |
-
|
57 |
-
|
58 |
-
.foo {/* Foo
|
59 |
-
Bar
|
60 |
-
Baz */
|
61 |
-
a: b; }
|
62 |
-
|
63 |
-
|
64 |
-
@foo {
|
65 |
-
rule {
|
66 |
-
a: b; }
|
67 |
-
|
68 |
-
a: b; }
|
69 |
-
|
70 |
-
|
71 |
-
@foo {a:b};
|
72 |
-
@bar {a:b};
|
73 |
-
|
74 |
-
|
75 |
-
@foo "bar"
|
76 |
-
|
77 |
-
foo {
|
78 |
-
a: 12px calc(100%/3 - 2*1em - 2*1px);
|
79 |
-
b: 12px -moz-calc(100%/3 - 2*1em - 2*1px);
|
80 |
-
b: 12px -webkit-calc(100%/3 - 2*1em - 2*1px);
|
81 |
-
b: 12px -foobar-calc(100%/3 - 2*1em - 2*1px); }
|
82 |
-
|
83 |
-
|
84 |
-
foo {bar: baz}
|
85 |
-
<!--
|
86 |
-
bar {bar: baz}
|
87 |
-
-->
|
88 |
-
baz {bar: baz}
|
89 |
-
|
90 |
-
|
91 |
-
/*
|
92 |
-
* foo
|
93 |
-
*/
|
94 |
-
bar {baz: bang}
|
95 |
-
|
96 |
-
|
97 |
-
E, F {
|
98 |
-
a: b; }
|
99 |
-
|
100 |
-
|
101 |
-
E F, G H {
|
102 |
-
a: b; }
|
103 |
-
|
104 |
-
|
105 |
-
E > F, G > H {
|
106 |
-
a: b; }
|
107 |
-
|
108 |
-
|
109 |
-
/* This is a CSS comment. */
|
110 |
-
.one {color: green;} /* Another comment */
|
111 |
-
/* The following should not be used:
|
112 |
-
.two {color: red;} */
|
113 |
-
.three {color: green; /* color: red; */}
|
114 |
-
/**
|
115 |
-
.four {color: red;} */
|
116 |
-
.five {color: green;}
|
117 |
-
/**/
|
118 |
-
.six {color: green;}
|
119 |
-
/*********/
|
120 |
-
.seven {color: green;}
|
121 |
-
/* a comment **/
|
122 |
-
.eight {color: green;}
|
123 |
-
|
124 |
-
|
125 |
-
foo {
|
126 |
-
a: \foo bar;
|
127 |
-
b: foo\ bar;
|
128 |
-
c: \2022 \0020;
|
129 |
-
d: foo\\bar;
|
130 |
-
e: foo\"\'bar; }
|
131 |
-
|
132 |
-
|
133 |
-
foo {
|
134 |
-
a: "\foo bar";
|
135 |
-
b: "foo\ bar";
|
136 |
-
c: "\2022 \0020";
|
137 |
-
d: "foo\\bar";
|
138 |
-
e: "foo\"'bar"; }
|
139 |
-
|
140 |
-
|
141 |
-
foo {
|
142 |
-
_name: val;
|
143 |
-
*name: val;
|
144 |
-
:name: val;
|
145 |
-
.name: val;
|
146 |
-
#name: val;
|
147 |
-
name/**/: val;
|
148 |
-
name/*\**/: val;
|
149 |
-
name: val; }
|
150 |
-
|
151 |
-
|
152 |
-
@foo "bar" ;
|
153 |
-
|
154 |
-
foo {
|
155 |
-
a: -moz-element(#foo);
|
156 |
-
b: -webkit-element(#foo);
|
157 |
-
b: -foobar-element(#foo); }
|
158 |
-
|
159 |
-
|
160 |
-
@foo {}
|
161 |
-
|
162 |
-
@foo {
|
163 |
-
}
|
164 |
-
|
165 |
-
|
166 |
-
@foo;
|
167 |
-
|
168 |
-
foo {;;;;
|
169 |
-
bar: baz;;;;
|
170 |
-
;;}
|
171 |
-
|
172 |
-
|
173 |
-
#foo .bar {}
|
174 |
-
|
175 |
-
#foo .bar {
|
176 |
-
}
|
177 |
-
|
178 |
-
|
179 |
-
0% {
|
180 |
-
a: b; }
|
181 |
-
|
182 |
-
|
183 |
-
60% {
|
184 |
-
a: b; }
|
185 |
-
|
186 |
-
|
187 |
-
100% {
|
188 |
-
a: b; }
|
189 |
-
|
190 |
-
|
191 |
-
12px {
|
192 |
-
a: b; }
|
193 |
-
|
194 |
-
|
195 |
-
"foo" {
|
196 |
-
a: b; }
|
197 |
-
|
198 |
-
|
199 |
-
foo {
|
200 |
-
a: 12px expression(1 + (3 / Foo.bar("baz" + "bang") + function() {return 12;}) % 12); }
|
201 |
-
|
202 |
-
|
203 |
-
:foo("bar") {
|
204 |
-
a: b; }
|
205 |
-
|
206 |
-
|
207 |
-
:foo(bar) {
|
208 |
-
a: b; }
|
209 |
-
|
210 |
-
|
211 |
-
:foo(12px) {
|
212 |
-
a: b; }
|
213 |
-
|
214 |
-
|
215 |
-
:foo(+) {
|
216 |
-
a: b; }
|
217 |
-
|
218 |
-
|
219 |
-
:foo(-) {
|
220 |
-
a: b; }
|
221 |
-
|
222 |
-
|
223 |
-
:foo(+"bar") {
|
224 |
-
a: b; }
|
225 |
-
|
226 |
-
|
227 |
-
:foo(-++--baz-"bar"12px) {
|
228 |
-
a: b; }
|
229 |
-
|
230 |
-
|
231 |
-
foo {
|
232 |
-
a: foo-bar(12);
|
233 |
-
b: -foo-bar-baz(13, 14 15); }
|
234 |
-
|
235 |
-
|
236 |
-
@import "foo.css";
|
237 |
-
|
238 |
-
@import 'foo.css';
|
239 |
-
|
240 |
-
@import url("foo.css");
|
241 |
-
|
242 |
-
@import url('foo.css');
|
243 |
-
|
244 |
-
@import url(foo.css);
|
245 |
-
|
246 |
-
@import "foo.css" screen;
|
247 |
-
|
248 |
-
@import "foo.css" screen, print;
|
249 |
-
|
250 |
-
@import "foo.css" screen, print and (foo: 0);
|
251 |
-
|
252 |
-
@import "foo.css" screen, only print, screen and (foo: 0);
|
253 |
-
|
254 |
-
foo {
|
255 |
-
a: foo !important;
|
256 |
-
b: foo bar !important;
|
257 |
-
b: foo, bar !important; }
|
258 |
-
|
259 |
-
|
260 |
-
foo {
|
261 |
-
a: -moz-bar-baz;
|
262 |
-
b: foo -o-bar-baz; }
|
263 |
-
|
264 |
-
|
265 |
-
foo {a: /* b; c: */ d}
|
266 |
-
|
267 |
-
|
268 |
-
foo {a /*: b; c */: d}
|
269 |
-
|
270 |
-
|
271 |
-
/* Foo
|
272 |
-
* Bar */
|
273 |
-
|
274 |
-
|
275 |
-
.foo {
|
276 |
-
/* Foo
|
277 |
-
* Bar */ }
|
278 |
-
|
279 |
-
|
280 |
-
[foo] {
|
281 |
-
a: b; }
|
282 |
-
|
283 |
-
|
284 |
-
[foo="bar"] {
|
285 |
-
a: b; }
|
286 |
-
|
287 |
-
|
288 |
-
[foo~="bar"] {
|
289 |
-
a: b; }
|
290 |
-
|
291 |
-
|
292 |
-
[foo^="bar"] {
|
293 |
-
a: b; }
|
294 |
-
|
295 |
-
|
296 |
-
[foo$="bar"] {
|
297 |
-
a: b; }
|
298 |
-
|
299 |
-
|
300 |
-
[foo*="bar"] {
|
301 |
-
a: b; }
|
302 |
-
|
303 |
-
|
304 |
-
[foo|="en"] {
|
305 |
-
a: b; }
|
306 |
-
|
307 |
-
|
308 |
-
:root {
|
309 |
-
a: b; }
|
310 |
-
|
311 |
-
|
312 |
-
:nth-child(n) {
|
313 |
-
a: b; }
|
314 |
-
|
315 |
-
|
316 |
-
:nth-last-child(n) {
|
317 |
-
a: b; }
|
318 |
-
|
319 |
-
|
320 |
-
:nth-of-type(n) {
|
321 |
-
a: b; }
|
322 |
-
|
323 |
-
|
324 |
-
:nth-last-of-type(n) {
|
325 |
-
a: b; }
|
326 |
-
|
327 |
-
|
328 |
-
:first-child {
|
329 |
-
a: b; }
|
330 |
-
|
331 |
-
|
332 |
-
:last-child {
|
333 |
-
a: b; }
|
334 |
-
|
335 |
-
|
336 |
-
:first-of-type {
|
337 |
-
a: b; }
|
338 |
-
|
339 |
-
|
340 |
-
:last-of-type {
|
341 |
-
a: b; }
|
342 |
-
|
343 |
-
|
344 |
-
:only-child {
|
345 |
-
a: b; }
|
346 |
-
|
347 |
-
|
348 |
-
:only-of-type {
|
349 |
-
a: b; }
|
350 |
-
|
351 |
-
|
352 |
-
:empty {
|
353 |
-
a: b; }
|
354 |
-
|
355 |
-
|
356 |
-
:link {
|
357 |
-
a: b; }
|
358 |
-
|
359 |
-
|
360 |
-
:visited {
|
361 |
-
a: b; }
|
362 |
-
|
363 |
-
|
364 |
-
:active {
|
365 |
-
a: b; }
|
366 |
-
|
367 |
-
|
368 |
-
:hover {
|
369 |
-
a: b; }
|
370 |
-
|
371 |
-
|
372 |
-
:focus {
|
373 |
-
a: b; }
|
374 |
-
|
375 |
-
|
376 |
-
:target {
|
377 |
-
a: b; }
|
378 |
-
|
379 |
-
|
380 |
-
:lang(fr) {
|
381 |
-
a: b; }
|
382 |
-
|
383 |
-
|
384 |
-
:enabled {
|
385 |
-
a: b; }
|
386 |
-
|
387 |
-
|
388 |
-
:disabled {
|
389 |
-
a: b; }
|
390 |
-
|
391 |
-
|
392 |
-
:checked {
|
393 |
-
a: b; }
|
394 |
-
|
395 |
-
|
396 |
-
::first-line {
|
397 |
-
a: b; }
|
398 |
-
|
399 |
-
|
400 |
-
::first-letter {
|
401 |
-
a: b; }
|
402 |
-
|
403 |
-
|
404 |
-
::before {
|
405 |
-
a: b; }
|
406 |
-
|
407 |
-
|
408 |
-
::after {
|
409 |
-
a: b; }
|
410 |
-
|
411 |
-
|
412 |
-
.warning {
|
413 |
-
a: b; }
|
414 |
-
|
415 |
-
|
416 |
-
#myid {
|
417 |
-
a: b; }
|
418 |
-
|
419 |
-
|
420 |
-
:not(s) {
|
421 |
-
a: b; }
|
422 |
-
|
423 |
-
|
424 |
-
@media all {
|
425 |
-
rule1 {
|
426 |
-
prop: val; }
|
427 |
-
|
428 |
-
rule2 {
|
429 |
-
prop: val; } }
|
430 |
-
|
431 |
-
|
432 |
-
@media screen, print {
|
433 |
-
rule1 {
|
434 |
-
prop: val; }
|
435 |
-
|
436 |
-
rule2 {
|
437 |
-
prop: val; } }
|
438 |
-
|
439 |
-
|
440 |
-
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
441 |
-
a: b; }
|
442 |
-
|
443 |
-
|
444 |
-
@media only screen, print and (foo: 0px) and (bar: flam(12px solid)) {
|
445 |
-
a: b; }
|
446 |
-
|
447 |
-
|
448 |
-
:-moz-any(h1, h2, h3) {
|
449 |
-
a: b; }
|
450 |
-
|
451 |
-
|
452 |
-
:-moz-any(.foo) {
|
453 |
-
a: b; }
|
454 |
-
|
455 |
-
|
456 |
-
:-moz-any(foo bar, .baz > .bang) {
|
457 |
-
a: b; }
|
458 |
-
|
459 |
-
|
460 |
-
@-moz-document url(http://www.w3.org/),
|
461 |
-
url-prefix(http://www.w3.org/Style/),
|
462 |
-
domain(mozilla.org),
|
463 |
-
regexp("^https:.*") {
|
464 |
-
.foo {a: b}
|
465 |
-
}
|
466 |
-
|
467 |
-
|
468 |
-
foo {
|
469 |
-
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#c0ff3300, endColorstr=#ff000000);
|
470 |
-
filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#c0ff3300, endColorstr=#ff000000); }
|
471 |
-
|
472 |
-
|
473 |
-
foo {
|
474 |
-
filter: alpha(opacity=20);
|
475 |
-
filter: alpha(opacity=20, enabled=true);
|
476 |
-
filter: blaznicate(foo=bar, baz=bang bip, bart=#fa4600); }
|
477 |
-
|
478 |
-
|
479 |
-
@foo bar {
|
480 |
-
a: b; }
|
481 |
-
|
482 |
-
@bar baz {
|
483 |
-
c: d; }
|
484 |
-
|
485 |
-
|
486 |
-
@foo bar;
|
487 |
-
@bar baz;
|
488 |
-
|
489 |
-
|
490 |
-
/* Foo
|
491 |
-
* Bar */
|
492 |
-
/* Baz
|
493 |
-
* Bang */
|
494 |
-
|
495 |
-
|
496 |
-
.foo {
|
497 |
-
/* Foo
|
498 |
-
* Bar */
|
499 |
-
/* Baz
|
500 |
-
* Bang */ }
|
501 |
-
|
502 |
-
|
503 |
-
.foo {
|
504 |
-
/* Foo Bar *//* Baz Bang */ }
|
505 |
-
|
506 |
-
|
507 |
-
@namespace "http://www.w3.org/Profiles/xhtml1-strict";
|
508 |
-
|
509 |
-
@namespace url(http://www.w3.org/Profiles/xhtml1-strict);
|
510 |
-
|
511 |
-
@namespace html url("http://www.w3.org/Profiles/xhtml1-strict");
|
512 |
-
|
513 |
-
[foo|bar=baz] {
|
514 |
-
a: b; }
|
515 |
-
|
516 |
-
|
517 |
-
[*|bar=baz] {
|
518 |
-
a: b; }
|
519 |
-
|
520 |
-
|
521 |
-
[foo|bar|=baz] {
|
522 |
-
a: b; }
|
523 |
-
|
524 |
-
|
525 |
-
foo|E {
|
526 |
-
a: b; }
|
527 |
-
|
528 |
-
|
529 |
-
*|E {
|
530 |
-
a: b; }
|
531 |
-
|
532 |
-
|
533 |
-
foo|* {
|
534 |
-
a: b; }
|
535 |
-
|
536 |
-
|
537 |
-
*|* {
|
538 |
-
a: b; }
|
539 |
-
|
540 |
-
|
541 |
-
:not(foo|bar) {
|
542 |
-
a: b; }
|
543 |
-
|
544 |
-
|
545 |
-
:not(*|bar) {
|
546 |
-
a: b; }
|
547 |
-
|
548 |
-
|
549 |
-
:not(foo|*) {
|
550 |
-
a: b; }
|
551 |
-
|
552 |
-
|
553 |
-
:not(*|*) {
|
554 |
-
a: b; }
|
555 |
-
|
556 |
-
|
557 |
-
:not(#blah) {
|
558 |
-
a: b; }
|
559 |
-
|
560 |
-
|
561 |
-
:not(.blah) {
|
562 |
-
a: b; }
|
563 |
-
|
564 |
-
|
565 |
-
:not([foo]) {
|
566 |
-
a: b; }
|
567 |
-
|
568 |
-
|
569 |
-
:not([foo^="bar"]) {
|
570 |
-
a: b; }
|
571 |
-
|
572 |
-
|
573 |
-
:not([baz|foo~="bar"]) {
|
574 |
-
a: b; }
|
575 |
-
|
576 |
-
|
577 |
-
:not(:hover) {
|
578 |
-
a: b; }
|
579 |
-
|
580 |
-
|
581 |
-
:not(:nth-child(2n + 3)) {
|
582 |
-
a: b; }
|
583 |
-
|
584 |
-
|
585 |
-
:not(:not(#foo)) {
|
586 |
-
a: b; }
|
587 |
-
|
588 |
-
|
589 |
-
:not(a#foo.bar) {
|
590 |
-
a: b; }
|
591 |
-
|
592 |
-
|
593 |
-
:not(#foo .bar > baz) {
|
594 |
-
a: b; }
|
595 |
-
|
596 |
-
|
597 |
-
:not(h1, h2, h3) {
|
598 |
-
a: b; }
|
599 |
-
|
600 |
-
|
601 |
-
@mixin foo {
|
602 |
-
a: b; }
|
603 |
-
|
604 |
-
|
605 |
-
foo {
|
606 |
-
a: "bang #{1 + " bar "} bip"; }
|
607 |
-
|
608 |
-
|
609 |
-
:nth-child(-n) {
|
610 |
-
a: b; }
|
611 |
-
|
612 |
-
|
613 |
-
:nth-child(+n) {
|
614 |
-
a: b; }
|
615 |
-
|
616 |
-
|
617 |
-
:nth-child(even) {
|
618 |
-
a: b; }
|
619 |
-
|
620 |
-
|
621 |
-
:nth-child(odd) {
|
622 |
-
a: b; }
|
623 |
-
|
624 |
-
|
625 |
-
:nth-child(50) {
|
626 |
-
a: b; }
|
627 |
-
|
628 |
-
|
629 |
-
:nth-child(-50) {
|
630 |
-
a: b; }
|
631 |
-
|
632 |
-
|
633 |
-
:nth-child(+50) {
|
634 |
-
a: b; }
|
635 |
-
|
636 |
-
|
637 |
-
:nth-child(2n+3) {
|
638 |
-
a: b; }
|
639 |
-
|
640 |
-
|
641 |
-
:nth-child(2n-3) {
|
642 |
-
a: b; }
|
643 |
-
|
644 |
-
|
645 |
-
:nth-child(+2n-3) {
|
646 |
-
a: b; }
|
647 |
-
|
648 |
-
|
649 |
-
:nth-child(-2n+3) {
|
650 |
-
a: b; }
|
651 |
-
|
652 |
-
|
653 |
-
:nth-child(-2n+ 3) {
|
654 |
-
a: b; }
|
655 |
-
|
656 |
-
|
657 |
-
:nth-child( 2n + 3 ) {
|
658 |
-
a: b; }
|
659 |
-
|
660 |
-
|
661 |
-
foo {
|
662 |
-
a: foo bar baz;
|
663 |
-
b: foo, #aabbcc, -12;
|
664 |
-
c: 1px/2px/-3px;
|
665 |
-
d: foo bar, baz/bang; }
|
666 |
-
|
667 |
-
|
668 |
-
@page {
|
669 |
-
prop1: val;
|
670 |
-
prop2: val; }
|
671 |
-
|
672 |
-
|
673 |
-
@page flap {
|
674 |
-
prop1: val;
|
675 |
-
prop2: val; }
|
676 |
-
|
677 |
-
|
678 |
-
@page :first {
|
679 |
-
prop1: val;
|
680 |
-
prop2: val; }
|
681 |
-
|
682 |
-
|
683 |
-
@page flap:first {
|
684 |
-
prop1: val;
|
685 |
-
prop2: val; }
|
686 |
-
|
687 |
-
|
688 |
-
.foo {
|
689 |
-
/* Foo */
|
690 |
-
a: b; }
|
691 |
-
|
692 |
-
|
693 |
-
.foo {
|
694 |
-
/* Foo
|
695 |
-
* Bar */a: b; }
|
696 |
-
|
697 |
-
|
698 |
-
/* Foo */
|
699 |
-
.foo {
|
700 |
-
a: b; }
|
701 |
-
|
702 |
-
|
703 |
-
/* Foo
|
704 |
-
* Bar */.foo {
|
705 |
-
a: b; }
|
706 |
-
|
707 |
-
|
708 |
-
.foo /* .a #foo */ #bar:baz(/* bang )*/ bip) {
|
709 |
-
a: b; }
|
710 |
-
|
711 |
-
|
712 |
-
> E {
|
713 |
-
a: b; }
|
714 |
-
|
715 |
-
|
716 |
-
+ E {
|
717 |
-
a: b; }
|
718 |
-
|
719 |
-
|
720 |
-
~ E {
|
721 |
-
a: b; }
|
722 |
-
|
723 |
-
|
724 |
-
> > E {
|
725 |
-
a: b; }
|
726 |
-
|
727 |
-
|
728 |
-
>> E {
|
729 |
-
a: b; }
|
730 |
-
|
731 |
-
|
732 |
-
E* {
|
733 |
-
a: b; }
|
734 |
-
|
735 |
-
|
736 |
-
E*.foo {
|
737 |
-
a: b; }
|
738 |
-
|
739 |
-
|
740 |
-
E*:hover {
|
741 |
-
a: b; }
|
742 |
-
|
743 |
-
|
744 |
-
E,
|
745 |
-
F {
|
746 |
-
a: b; }
|
747 |
-
|
748 |
-
|
749 |
-
E
|
750 |
-
F {
|
751 |
-
a: b; }
|
752 |
-
|
753 |
-
|
754 |
-
E, F
|
755 |
-
G, H {
|
756 |
-
a: b; }
|
757 |
-
|
758 |
-
|
759 |
-
body {
|
760 |
-
/*
|
761 |
-
//comment here
|
762 |
-
*/
|
763 |
-
}
|
764 |
-
|
765 |
-
|
766 |
-
E>F { a: b;}
|
767 |
-
|
768 |
-
E~F { a: b;}
|
769 |
-
|
770 |
-
E+F { a: b;}
|
771 |
-
|
772 |
-
* {
|
773 |
-
a: b; }
|
774 |
-
|
775 |
-
|
776 |
-
E {
|
777 |
-
a: b; }
|
778 |
-
|
779 |
-
|
780 |
-
E[foo] {
|
781 |
-
a: b; }
|
782 |
-
|
783 |
-
|
784 |
-
E[foo="bar"] {
|
785 |
-
a: b; }
|
786 |
-
|
787 |
-
|
788 |
-
E[foo~="bar"] {
|
789 |
-
a: b; }
|
790 |
-
|
791 |
-
|
792 |
-
E[foo^="bar"] {
|
793 |
-
a: b; }
|
794 |
-
|
795 |
-
|
796 |
-
E[foo$="bar"] {
|
797 |
-
a: b; }
|
798 |
-
|
799 |
-
|
800 |
-
E[foo*="bar"] {
|
801 |
-
a: b; }
|
802 |
-
|
803 |
-
|
804 |
-
E[foo|="en"] {
|
805 |
-
a: b; }
|
806 |
-
|
807 |
-
|
808 |
-
E:root {
|
809 |
-
a: b; }
|
810 |
-
|
811 |
-
|
812 |
-
E:nth-child(n) {
|
813 |
-
a: b; }
|
814 |
-
|
815 |
-
|
816 |
-
E:nth-last-child(n) {
|
817 |
-
a: b; }
|
818 |
-
|
819 |
-
|
820 |
-
E:nth-of-type(n) {
|
821 |
-
a: b; }
|
822 |
-
|
823 |
-
|
824 |
-
E:nth-last-of-type(n) {
|
825 |
-
a: b; }
|
826 |
-
|
827 |
-
|
828 |
-
E:first-child {
|
829 |
-
a: b; }
|
830 |
-
|
831 |
-
|
832 |
-
E:last-child {
|
833 |
-
a: b; }
|
834 |
-
|
835 |
-
|
836 |
-
E:first-of-type {
|
837 |
-
a: b; }
|
838 |
-
|
839 |
-
|
840 |
-
E:last-of-type {
|
841 |
-
a: b; }
|
842 |
-
|
843 |
-
|
844 |
-
E:only-child {
|
845 |
-
a: b; }
|
846 |
-
|
847 |
-
|
848 |
-
E:only-of-type {
|
849 |
-
a: b; }
|
850 |
-
|
851 |
-
|
852 |
-
E:empty {
|
853 |
-
a: b; }
|
854 |
-
|
855 |
-
|
856 |
-
E:link {
|
857 |
-
a: b; }
|
858 |
-
|
859 |
-
|
860 |
-
E:visited {
|
861 |
-
a: b; }
|
862 |
-
|
863 |
-
|
864 |
-
E:active {
|
865 |
-
a: b; }
|
866 |
-
|
867 |
-
|
868 |
-
E:hover {
|
869 |
-
a: b; }
|
870 |
-
|
871 |
-
|
872 |
-
E:focus {
|
873 |
-
a: b; }
|
874 |
-
|
875 |
-
|
876 |
-
E:target {
|
877 |
-
a: b; }
|
878 |
-
|
879 |
-
|
880 |
-
E:lang(fr) {
|
881 |
-
a: b; }
|
882 |
-
|
883 |
-
|
884 |
-
E:enabled {
|
885 |
-
a: b; }
|
886 |
-
|
887 |
-
|
888 |
-
E:disabled {
|
889 |
-
a: b; }
|
890 |
-
|
891 |
-
|
892 |
-
E:checked {
|
893 |
-
a: b; }
|
894 |
-
|
895 |
-
|
896 |
-
E::first-line {
|
897 |
-
a: b; }
|
898 |
-
|
899 |
-
|
900 |
-
E::first-letter {
|
901 |
-
a: b; }
|
902 |
-
|
903 |
-
|
904 |
-
E::before {
|
905 |
-
a: b; }
|
906 |
-
|
907 |
-
|
908 |
-
E::after {
|
909 |
-
a: b; }
|
910 |
-
|
911 |
-
|
912 |
-
E.warning {
|
913 |
-
a: b; }
|
914 |
-
|
915 |
-
|
916 |
-
E#myid {
|
917 |
-
a: b; }
|
918 |
-
|
919 |
-
|
920 |
-
E:not(s) {
|
921 |
-
a: b; }
|
922 |
-
|
923 |
-
|
924 |
-
E F {
|
925 |
-
a: b; }
|
926 |
-
|
927 |
-
|
928 |
-
E > F {
|
929 |
-
a: b; }
|
930 |
-
|
931 |
-
|
932 |
-
E + F {
|
933 |
-
a: b; }
|
934 |
-
|
935 |
-
|
936 |
-
E ~ F {
|
937 |
-
a: b; }
|
938 |
-
|
939 |
-
|
940 |
-
@supports (a: b) and (c: d) or (not (d: e)) and ((not (f: g)) or (not ((h: i) and (j: k)))) {
|
941 |
-
.foo {
|
942 |
-
a: b;
|
943 |
-
}
|
944 |
-
}
|
945 |
-
|
946 |
-
|
947 |
-
@-prefix-supports (a: b) and (c: d) or (not (d: e)) and ((not (f: g)) or (not ((h: i) and (j: k)))) {
|
948 |
-
.foo {
|
949 |
-
a: b;
|
950 |
-
}
|
951 |
-
}
|
952 |
-
|
953 |
-
|
954 |
-
foo {
|
955 |
-
foo: bar;
|
956 |
-
#baz: bang;
|
957 |
-
#bip: bop; }
|
958 |
-
|
959 |
-
|
960 |
-
foo {
|
961 |
-
a: -2;
|
962 |
-
b: -2.3em;
|
963 |
-
c: -50%;
|
964 |
-
d: -foo(bar baz); }
|
965 |
-
|
966 |
-
|
967 |
-
foo {
|
968 |
-
a: -0.5em;
|
969 |
-
b: +0.5em;
|
970 |
-
c: -foo(12px);
|
971 |
-
d: +foo(12px);
|
972 |
-
}
|
973 |
-
|
974 |
-
|
975 |
-
@charset "UTF-8";
|
976 |
-
|
977 |
-
foo {
|
978 |
-
-moz-foo-bar: blat;
|
979 |
-
-o-flat-blang: wibble; }
|
980 |
-
|
981 |
-
|
982 |
-
foo {
|
983 |
-
a: foo();
|
984 |
-
b: bar baz-bang() bip; }
|
985 |
-
|
986 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/selectors.scss
DELETED
@@ -1,187 +0,0 @@
|
|
1 |
-
* { color: blue; }
|
2 |
-
E { color: blue; }
|
3 |
-
|
4 |
-
E:not(:link) { color: blue; }
|
5 |
-
E:not(:link):not(:visited) { color: blue; }
|
6 |
-
E:not(:link, :visited) { color: blue; }
|
7 |
-
E:matches(:hover, :focus) { color: blue; }
|
8 |
-
|
9 |
-
E.warning { color: blue; }
|
10 |
-
E#id { color: blue; }
|
11 |
-
E[foo] { color: blue; }
|
12 |
-
E[foo="barbar"] { color: blue; }
|
13 |
-
E[foo="barbar" i] { color: blue; }
|
14 |
-
E[foo~="hello#$@%@$#^"] { color: blue; }
|
15 |
-
E[foo^="color: green;"] { color: blue; }
|
16 |
-
E[foo$="239023"] { color: blue; }
|
17 |
-
E[foo*="29302"] { color: blue; }
|
18 |
-
E[foo|="239032"] { color: blue; }
|
19 |
-
|
20 |
-
[foo] { color: blue; }
|
21 |
-
[foo] .helloWorld { color: blue; }
|
22 |
-
[foo].helloWorld { color: blue; }
|
23 |
-
[foo="barbar"] { color: blue; }
|
24 |
-
[foo~="hello#$@%@$#^"] { color: blue; }
|
25 |
-
[foo^="color: green;"] { color: blue; }
|
26 |
-
[foo$="239023"] { color: blue; }
|
27 |
-
[foo*="29302"] { color: blue; }
|
28 |
-
[foo|="239032"] { color: blue; }
|
29 |
-
|
30 |
-
E:dir(ltr) { color: blue; }
|
31 |
-
E:lang(en) { color: blue; }
|
32 |
-
E:lang(en, fr) { color: blue; }
|
33 |
-
|
34 |
-
E:any-link { color: blue; }
|
35 |
-
E:link { color: blue; }
|
36 |
-
E:visited { color: blue; }
|
37 |
-
E:local-link { color: blue; }
|
38 |
-
E:local-link(0) { color: red; }
|
39 |
-
E:local-link(1) { color: white; }
|
40 |
-
E:local-link(2) { color: red; }
|
41 |
-
E:target { color: blue; }
|
42 |
-
E:scope { color: blue; }
|
43 |
-
|
44 |
-
E:current { color: blue; }
|
45 |
-
E:current(:link) { color: blue; }
|
46 |
-
E:past { color: blue; }
|
47 |
-
E:future { color: blue; }
|
48 |
-
|
49 |
-
E:active { color: blue; }
|
50 |
-
E:hover { color: blue; }
|
51 |
-
E:focus { color: blue; }
|
52 |
-
E:enabled { color: blue; }
|
53 |
-
E:disabled { color: blue; }
|
54 |
-
E:indeterminate { color: blue; }
|
55 |
-
E:default { color: blue; }
|
56 |
-
E:in-range { color: blue; }
|
57 |
-
E:out-of-range { color: blue; }
|
58 |
-
E:required { color: blue; }
|
59 |
-
E:optional { color: blue; }
|
60 |
-
E:read-only { color: blue; }
|
61 |
-
E:read-write { color: blue; }
|
62 |
-
|
63 |
-
E:root { color: blue; }
|
64 |
-
E:empty { color: blue; }
|
65 |
-
E:first-child { color: blue; }
|
66 |
-
E:nth-child(odd) { color: blue; }
|
67 |
-
E:nth-child(2n+1) { color: blue; }
|
68 |
-
E:nth-child(5) { color: blue; }
|
69 |
-
E:last-child { color: blue; }
|
70 |
-
E:nth-last-child(-n+2) { color: blue; }
|
71 |
-
E:only-child { color: blue; }
|
72 |
-
E:first-of-type { color: blue; }
|
73 |
-
E:nth-of-type(2n) { color: blue; }
|
74 |
-
E:last-of-type { color: blue; }
|
75 |
-
E:nth-last-of-type(n) { color: blue; }
|
76 |
-
E:only-of-type { color: blue; }
|
77 |
-
E:nth-match(odd) { color: blue; }
|
78 |
-
E:nth-last-match(odd) { color: blue; }
|
79 |
-
|
80 |
-
E:column(n) { color: blue; }
|
81 |
-
E:nth-column(n) { color: blue; }
|
82 |
-
E:nth-last-column(n) { color: blue; }
|
83 |
-
|
84 |
-
E F { color: blue; }
|
85 |
-
E > F { color: blue; }
|
86 |
-
E + F { color: blue; }
|
87 |
-
E ~ F { color: blue; }
|
88 |
-
E /foo/ F { color: blue; }
|
89 |
-
E! > F { color: blue; }
|
90 |
-
|
91 |
-
// namespaces
|
92 |
-
[foo|att=val] { color: blue }
|
93 |
-
[*|att] { color: yellow }
|
94 |
-
[|att] { color: green }
|
95 |
-
[att] { color: green }
|
96 |
-
|
97 |
-
// CSS2.1
|
98 |
-
E::first-line { color: blue; }
|
99 |
-
E::first-letter { color: blue; }
|
100 |
-
E::before { color: blue; }
|
101 |
-
E::after { color: blue; }
|
102 |
-
|
103 |
-
// CSS3 UI (at risk)
|
104 |
-
E::choices { color: blue; }
|
105 |
-
E::value { color: blue; }
|
106 |
-
E::repeat-index { color: blue; }
|
107 |
-
E::repeat-item { color: blue; }
|
108 |
-
|
109 |
-
E:first { color: blue; }
|
110 |
-
E:first-line { color: blue; }
|
111 |
-
E:first-letter { color: blue; }
|
112 |
-
E:before{ color: blue; }
|
113 |
-
E:after { color: blue; }
|
114 |
-
E:checked { color: blue; }
|
115 |
-
E:invalid { color: blue; }
|
116 |
-
E:valid { color: blue; }
|
117 |
-
E:left { color: blue; }
|
118 |
-
E:right { color: blue; }
|
119 |
-
|
120 |
-
// -moz experimental
|
121 |
-
E:any(ol) { color: blue; }
|
122 |
-
E::selection { color: blue; }
|
123 |
-
|
124 |
-
// one of these is nested property,
|
125 |
-
// the other is a css block.
|
126 |
-
div {
|
127 |
-
font:something {
|
128 |
-
size: 30em;
|
129 |
-
}
|
130 |
-
|
131 |
-
font: something {
|
132 |
-
size: 30em;
|
133 |
-
}
|
134 |
-
|
135 |
-
}
|
136 |
-
|
137 |
-
// self selector
|
138 |
-
|
139 |
-
.something {
|
140 |
-
&.world {
|
141 |
-
color: blue;
|
142 |
-
}
|
143 |
-
|
144 |
-
& .mold {
|
145 |
-
height: 200px;
|
146 |
-
}
|
147 |
-
|
148 |
-
.dog & {
|
149 |
-
color: blue;
|
150 |
-
}
|
151 |
-
}
|
152 |
-
|
153 |
-
.simple {
|
154 |
-
.dad & .wolf {
|
155 |
-
color: blue;
|
156 |
-
}
|
157 |
-
|
158 |
-
.rad&.bad {
|
159 |
-
color: blue;
|
160 |
-
}
|
161 |
-
|
162 |
-
}
|
163 |
-
|
164 |
-
div {
|
165 |
-
.something & .what {
|
166 |
-
&.world {
|
167 |
-
color: blue;
|
168 |
-
}
|
169 |
-
}
|
170 |
-
}
|
171 |
-
|
172 |
-
div {
|
173 |
-
&.foo & {
|
174 |
-
color: blue;
|
175 |
-
}
|
176 |
-
}
|
177 |
-
|
178 |
-
.main, div {
|
179 |
-
.message div {
|
180 |
-
.title {
|
181 |
-
.nice-fonts & {
|
182 |
-
font-size: 24px;
|
183 |
-
}
|
184 |
-
}
|
185 |
-
}
|
186 |
-
}
|
187 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/values.scss
DELETED
@@ -1,43 +0,0 @@
|
|
1 |
-
|
2 |
-
#values {
|
3 |
-
color: #eee;
|
4 |
-
color: #eeeeee;
|
5 |
-
height: 20px;
|
6 |
-
width: 80%;
|
7 |
-
color: "hello world";
|
8 |
-
height: url("http://google.com");
|
9 |
-
dads: url(http://leafo.net);
|
10 |
-
padding: 10px 10px 10px 10px, 3px 3px 3px;
|
11 |
-
textblock: "This is a \
|
12 |
-
multiline block \
|
13 |
-
#not { color: #eee;}";
|
14 |
-
margin: 4,3,1;
|
15 |
-
content: "This is a \
|
16 |
-
multiline string.";
|
17 |
-
border-radius: -1px -1px -1px black;
|
18 |
-
}
|
19 |
-
|
20 |
-
#subtraction {
|
21 |
-
lit: 10 -11;
|
22 |
-
lit: 10 - 11;
|
23 |
-
lit: 10- 11;
|
24 |
-
lit: 10-11;
|
25 |
-
|
26 |
-
$num: 100;
|
27 |
-
var: 10 -$num;
|
28 |
-
var: 10 - $num;
|
29 |
-
var: 10- $num;
|
30 |
-
var: 10-$num;
|
31 |
-
}
|
32 |
-
|
33 |
-
|
34 |
-
#special {
|
35 |
-
a: 12px expression(1 + (3 / Foo.bar("baz" + "bang") + function() {return 12;}) % 12);
|
36 |
-
}
|
37 |
-
|
38 |
-
#unary {
|
39 |
-
b: +0.5em;
|
40 |
-
c: -foo(12px);
|
41 |
-
d: +foo(12px);
|
42 |
-
}
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/inputs/variables.scss
DELETED
@@ -1,56 +0,0 @@
|
|
1 |
-
|
2 |
-
$color: red, two, three;
|
3 |
-
|
4 |
-
div {
|
5 |
-
height: $color;
|
6 |
-
}
|
7 |
-
|
8 |
-
$a: 1000;
|
9 |
-
|
10 |
-
div {
|
11 |
-
$a: 2000 !default;
|
12 |
-
num: $a;
|
13 |
-
}
|
14 |
-
|
15 |
-
div {
|
16 |
-
$b: 2000 !default;
|
17 |
-
num: $b;
|
18 |
-
}
|
19 |
-
|
20 |
-
$cool_color: null;
|
21 |
-
$cool_color: blue !default;
|
22 |
-
|
23 |
-
pre {
|
24 |
-
color: $cool_color;
|
25 |
-
}
|
26 |
-
|
27 |
-
$something_man: 100px;
|
28 |
-
cool: $something_man;
|
29 |
-
|
30 |
-
|
31 |
-
del {
|
32 |
-
$something: blue;
|
33 |
-
|
34 |
-
div {
|
35 |
-
$something: red;
|
36 |
-
pre {
|
37 |
-
color: $something;
|
38 |
-
}
|
39 |
-
}
|
40 |
-
|
41 |
-
color: $something;
|
42 |
-
}
|
43 |
-
|
44 |
-
$font-family-simple: Arial !default;
|
45 |
-
$font-family-spaces: Helvetica Neue !default;
|
46 |
-
$font-family-quotes: "Helvetica Neue" !default;
|
47 |
-
$font-family-commas: Helvetica, Arial, sans-serif !default;
|
48 |
-
$font-family-sans: "Helvetica Neue", Helvetica, Arial, sans-serif !default;
|
49 |
-
|
50 |
-
body {
|
51 |
-
font-family: $font-family-simple;
|
52 |
-
font-family: $font-family-spaces;
|
53 |
-
font-family: $font-family-quotes;
|
54 |
-
font-family: $font-family-commas;
|
55 |
-
font-family: $font-family-sans;
|
56 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/builtins.css
DELETED
@@ -1,126 +0,0 @@
|
|
1 |
-
#color {
|
2 |
-
color: #22ea18;
|
3 |
-
red: 34;
|
4 |
-
green: 234;
|
5 |
-
blue: 24;
|
6 |
-
color: rgba(1, 2, 4, 0.5);
|
7 |
-
a1: 1;
|
8 |
-
a2: 0.5;
|
9 |
-
mix: #020304;
|
10 |
-
rgba: rgba(170, 119, 204, 0.4);
|
11 |
-
rgba: rgba(170, 119, 204, 0.4); }
|
12 |
-
|
13 |
-
#hsl {
|
14 |
-
color: #79c653;
|
15 |
-
color: rgba(121, 198, 83, 0.5);
|
16 |
-
hue: 100deg;
|
17 |
-
sat: 50%;
|
18 |
-
lig: 55%; }
|
19 |
-
|
20 |
-
#more-color {
|
21 |
-
light: #7e3d9e;
|
22 |
-
dark: #432154;
|
23 |
-
sat: #632782;
|
24 |
-
desat: #5e3871;
|
25 |
-
gray: #545454;
|
26 |
-
comp: #48792f;
|
27 |
-
inv: #9fd086; }
|
28 |
-
|
29 |
-
#more-more-color {
|
30 |
-
op: 0.5;
|
31 |
-
opacify: rgba(1, 2, 3, 0.6);
|
32 |
-
opacify: rgba(1, 2, 3, 0.6);
|
33 |
-
transparentize: rgba(1, 2, 3, 0.4);
|
34 |
-
transparentize: rgba(1, 2, 3, 0.4);
|
35 |
-
transparentize: rgba(52, 130, 3, 0.9); }
|
36 |
-
|
37 |
-
#more-more-more-color {
|
38 |
-
color: rgba(65, 110, 79, 0.4);
|
39 |
-
color: rgba(20, 255, 216, 0);
|
40 |
-
color: rgba(55, 100, 69, 0.4);
|
41 |
-
color: rgba(0, 255, 213, 0);
|
42 |
-
color: rgba(145, 10, 10, 0);
|
43 |
-
color: rgba(5, 10, 10, 0);
|
44 |
-
color: rgba(145, 145, 145, 0);
|
45 |
-
color: rgba(5, 5, 5, 0);
|
46 |
-
color: #000A0A0A;
|
47 |
-
color: #FFAABBCC; }
|
48 |
-
|
49 |
-
#string {
|
50 |
-
color: hello what is going on;
|
51 |
-
color: "yeah";
|
52 |
-
color: "I do?"; }
|
53 |
-
|
54 |
-
#number {
|
55 |
-
color: 250%;
|
56 |
-
color: 3;
|
57 |
-
color: 3;
|
58 |
-
color: 4;
|
59 |
-
top: 10px;
|
60 |
-
top: 1ex;
|
61 |
-
width: 200%;
|
62 |
-
bottom: 10px;
|
63 |
-
padding: 3em 1in 96px 72pt; }
|
64 |
-
|
65 |
-
#list {
|
66 |
-
len: 3;
|
67 |
-
len: 1;
|
68 |
-
n: hello;
|
69 |
-
hello: one, two, three, hello;
|
70 |
-
hello: one, two, three, hello, world, what, is, going;
|
71 |
-
hello: one, two, three, hello;
|
72 |
-
index: 2;
|
73 |
-
index: false;
|
74 |
-
index: 3;
|
75 |
-
index: 1;
|
76 |
-
index: false;
|
77 |
-
index: 1;
|
78 |
-
index: false;
|
79 |
-
index: 2;
|
80 |
-
index: 2;
|
81 |
-
index: 1;
|
82 |
-
world: one, two, three, great, job;
|
83 |
-
world: one, two, three, great job;
|
84 |
-
cool: one two three great job;
|
85 |
-
cool: great job one two three;
|
86 |
-
zip: 1px solid, 2px dashed;
|
87 |
-
zip: 1px solid red, 2px dashed green; }
|
88 |
-
|
89 |
-
#introspection {
|
90 |
-
t: number;
|
91 |
-
t: string;
|
92 |
-
t: string;
|
93 |
-
t: bool;
|
94 |
-
t: color;
|
95 |
-
t: color;
|
96 |
-
t: list;
|
97 |
-
u: "";
|
98 |
-
u: "px";
|
99 |
-
u: "em";
|
100 |
-
l: true;
|
101 |
-
l: false;
|
102 |
-
c: true;
|
103 |
-
c: false;
|
104 |
-
c: true;
|
105 |
-
c: true;
|
106 |
-
c: false;
|
107 |
-
c: true; }
|
108 |
-
|
109 |
-
#if {
|
110 |
-
color: yes;
|
111 |
-
color: no;
|
112 |
-
color: yes;
|
113 |
-
color: yes; }
|
114 |
-
|
115 |
-
.transparent {
|
116 |
-
r: 0;
|
117 |
-
g: 0;
|
118 |
-
b: 0;
|
119 |
-
a: 0; }
|
120 |
-
|
121 |
-
.alpha {
|
122 |
-
a: 1;
|
123 |
-
a: 1;
|
124 |
-
a: 1;
|
125 |
-
a: 0.5;
|
126 |
-
a: alpha(currentColor); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/comments.css
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
/** what the heck **/
|
2 |
-
/**
|
3 |
-
|
4 |
-
Here is a block comment
|
5 |
-
|
6 |
-
**/
|
7 |
-
/*hello*/
|
8 |
-
div {
|
9 |
-
/* another property */
|
10 |
-
border: 1px solid red;
|
11 |
-
color: url('http://mage-page.com');
|
12 |
-
string: "hello /* this is not a comment */";
|
13 |
-
world: "// neither is this";
|
14 |
-
/*what if this is a comment */
|
15 |
-
string: 'hello /* this is not a comment */';
|
16 |
-
world: '// neither is this';
|
17 |
-
what-ever: 100px;
|
18 |
-
/*this is not a comment?*/
|
19 |
-
background: url(); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/compass_extract.css
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
#test-0 {
|
2 |
-
unit: false;
|
3 |
-
unit: true;
|
4 |
-
rhythm: 1.5em;
|
5 |
-
size: 1;
|
6 |
-
size: 1;
|
7 |
-
size: 1;
|
8 |
-
size: 2;
|
9 |
-
size: 2; }
|
10 |
-
|
11 |
-
#test-1 {
|
12 |
-
margin-top: 7.5em;
|
13 |
-
padding-top: 9em;
|
14 |
-
padding-bottom: 10.5em;
|
15 |
-
margin-bottom: 0em; }
|
16 |
-
|
17 |
-
#test-2 {
|
18 |
-
border-style: solid;
|
19 |
-
border-width: 0.0625em;
|
20 |
-
padding: 1.4375em; }
|
21 |
-
|
22 |
-
#test-3 {
|
23 |
-
border-top-style: solid;
|
24 |
-
border-top-width: 0.0625em;
|
25 |
-
padding-top: 1.4375em;
|
26 |
-
border-bottom-style: solid;
|
27 |
-
border-bottom-width: 0.0625em;
|
28 |
-
padding-bottom: 1.4375em; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/content.css
DELETED
@@ -1,29 +0,0 @@
|
|
1 |
-
* html #logo {
|
2 |
-
background-image: url(/logo.gif); }
|
3 |
-
|
4 |
-
.colors {
|
5 |
-
background-color: blue;
|
6 |
-
color: white;
|
7 |
-
border-color: blue; }
|
8 |
-
|
9 |
-
@media only screen and (max-width: 480px) {
|
10 |
-
body {
|
11 |
-
color: red; } }
|
12 |
-
|
13 |
-
#sidebar {
|
14 |
-
width: 300px; }
|
15 |
-
@media only screen and (max-width: 480px) {
|
16 |
-
#sidebar {
|
17 |
-
width: 100px; } }
|
18 |
-
|
19 |
-
@media only screen and (min-width: 40em) {
|
20 |
-
.grid-1 {
|
21 |
-
width: 100%; }
|
22 |
-
.grid-2 {
|
23 |
-
width: 100%; } }
|
24 |
-
|
25 |
-
@media only screen and (min-width: 40em) {
|
26 |
-
.grid-1 {
|
27 |
-
width: 100%; }
|
28 |
-
.grid-2 {
|
29 |
-
width: 100%; } }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/content_with_function.css
DELETED
@@ -1,2 +0,0 @@
|
|
1 |
-
body {
|
2 |
-
padding: 1 px; }
|
|
|
|
tests/scssc/outputs/default_args.css
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
div {
|
2 |
-
height: red;
|
3 |
-
margin: 100px; }
|
|
|
|
|
|
tests/scssc/outputs/directives.css
DELETED
@@ -1,77 +0,0 @@
|
|
1 |
-
@charset "hello-world";
|
2 |
-
@page :left {
|
3 |
-
div {
|
4 |
-
color: red; } }
|
5 |
-
|
6 |
-
@page test {
|
7 |
-
@media yes {
|
8 |
-
div {
|
9 |
-
color: red; } } }
|
10 |
-
|
11 |
-
@media something {
|
12 |
-
@page {
|
13 |
-
@media else {
|
14 |
-
div {
|
15 |
-
height: 200px; } } } }
|
16 |
-
|
17 |
-
div {
|
18 |
-
color: red; }
|
19 |
-
@page yeah {
|
20 |
-
div pre {
|
21 |
-
height: 20px; } }
|
22 |
-
|
23 |
-
@font-face {
|
24 |
-
color: red;
|
25 |
-
height: 20px; }
|
26 |
-
|
27 |
-
@keyframes 'bounce' {
|
28 |
-
from {
|
29 |
-
top: 100px;
|
30 |
-
animation-timing-function: ease-out; }
|
31 |
-
|
32 |
-
25% {
|
33 |
-
top: 50px;
|
34 |
-
animation-timing-function: ease-in; }
|
35 |
-
|
36 |
-
50% {
|
37 |
-
top: 100px;
|
38 |
-
animation-timing-function: ease-out; }
|
39 |
-
|
40 |
-
75% {
|
41 |
-
top: 75px;
|
42 |
-
animation-timing-function: ease-in; }
|
43 |
-
|
44 |
-
to {
|
45 |
-
top: 100px; } }
|
46 |
-
|
47 |
-
@-webkit-keyframes flowouttoleft {
|
48 |
-
0% {
|
49 |
-
-webkit-transform: translateX(0) scale(1); }
|
50 |
-
|
51 |
-
60%, 70% {
|
52 |
-
-webkit-transform: translateX(0) scale(0.7); }
|
53 |
-
|
54 |
-
100% {
|
55 |
-
-webkit-transform: translateX(-100%) scale(0.7); } }
|
56 |
-
|
57 |
-
div {
|
58 |
-
animation-name: 'diagonal-slide';
|
59 |
-
animation-duration: 5s;
|
60 |
-
animation-iteration-count: 10; }
|
61 |
-
|
62 |
-
@keyframes 'diagonal-slide' {
|
63 |
-
from {
|
64 |
-
left: 0;
|
65 |
-
top: 0; }
|
66 |
-
|
67 |
-
to {
|
68 |
-
left: 100px;
|
69 |
-
top: 100px; } }
|
70 |
-
|
71 |
-
@document url(http://www.w3.org/),
|
72 |
-
url-prefix(http://www.w3.org/Style/),
|
73 |
-
domain(mozilla.org),
|
74 |
-
regexp("https:.*") {
|
75 |
-
body {
|
76 |
-
color: purple;
|
77 |
-
background: yellow; } }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/extends.css
DELETED
@@ -1,87 +0,0 @@
|
|
1 |
-
error, pre seriousError, span seriousError, other, hello {
|
2 |
-
border: 1px #f00;
|
3 |
-
background-color: #fdd; }
|
4 |
-
|
5 |
-
pre seriousError, span seriousError {
|
6 |
-
font-size: 20px; }
|
7 |
-
|
8 |
-
hello {
|
9 |
-
color: green; }
|
10 |
-
hello div {
|
11 |
-
margin: 10px; }
|
12 |
-
|
13 |
-
.cool, .me {
|
14 |
-
color: red; }
|
15 |
-
|
16 |
-
.blue, .me {
|
17 |
-
color: purple; }
|
18 |
-
|
19 |
-
a:hover, .hoverlink, #demo .overview .fakelink:hover {
|
20 |
-
text-decoration: underline; }
|
21 |
-
|
22 |
-
div.hello.world.hmm, pre div.okay.span.world.hmm, pre #butt .umm div.sure.span.world.hmm, #butt .umm pre div.sure.span.world.hmm, code div.okay.span.world.hmm, code #butt .umm div.sure.span.world.hmm, #butt .umm code div.sure.span.world.hmm {
|
23 |
-
color: blue; }
|
24 |
-
|
25 |
-
.xxxxx .xxxxx .xxxxx, code .xxxxx .xxxxx, code code .xxxxx, code code code, code .xxxxx code, .xxxxx code .xxxxx, .xxxxx code code, .xxxxx .xxxxx code {
|
26 |
-
color: green; }
|
27 |
-
|
28 |
-
code {
|
29 |
-
color: red; }
|
30 |
-
|
31 |
-
.alpha, .beta, .gama {
|
32 |
-
color: red; }
|
33 |
-
|
34 |
-
.beta, .gama {
|
35 |
-
color: white; }
|
36 |
-
|
37 |
-
.gama {
|
38 |
-
color: blue; }
|
39 |
-
|
40 |
-
#admin .tabbar a, #admin .tabbar #demo .overview .fakelink, #demo .overview #admin .tabbar .fakelink {
|
41 |
-
font-weight: bold; }
|
42 |
-
|
43 |
-
a1 b1 c1 d1, x1 y1 z1 w1 b1 c1 d1 {
|
44 |
-
color: red; }
|
45 |
-
|
46 |
-
a2 b2 c2 d2, a2 x2 y2 z2 w2 c2 d2, x2 y2 z2 a2 w2 c2 d2 {
|
47 |
-
color: red; }
|
48 |
-
|
49 |
-
a3 b3 c3 d3, a3 b3 x3 y3 z3 w3 d3, x3 y3 z3 a3 b3 w3 d3 {
|
50 |
-
color: red; }
|
51 |
-
|
52 |
-
a4 b4 c4 d4, a4 b4 c4 x4 y4 z4 w4, x4 y4 z4 a4 b4 c4 w4 {
|
53 |
-
color: red; }
|
54 |
-
|
55 |
-
#butt .yeah .okay, #butt .yeah .umm .sure, #butt .umm .yeah .sure {
|
56 |
-
font-weight: bold; }
|
57 |
-
|
58 |
-
a9 b9 s9 t9 v9, a9 b9 s9 t9 x9 y9 z9, a9 b9 x9 y9 s9 t9 z9 {
|
59 |
-
color: red; }
|
60 |
-
|
61 |
-
@media print {
|
62 |
-
horse, man {
|
63 |
-
color: blue; } }
|
64 |
-
|
65 |
-
man {
|
66 |
-
color: red; }
|
67 |
-
|
68 |
-
wassup {
|
69 |
-
color: blue; }
|
70 |
-
|
71 |
-
.foo .wassup {
|
72 |
-
color: blue; }
|
73 |
-
|
74 |
-
#something, .x, .y {
|
75 |
-
color: red; }
|
76 |
-
|
77 |
-
.nav-justified, .nav-tabs.nav-justified {
|
78 |
-
text-align: justify; }
|
79 |
-
|
80 |
-
.btn:hover, .edit .actions button:hover, .edit .new .actions button:hover, .btn:active, .edit .actions button:active, .edit .new .actions button:active, .btn.active, .edit .actions button.active, .edit .new .actions button.active, .btn.disabled, .edit .actions button.disabled, .edit .new .actions button.disabled, .btn[disabled], .edit .actions button[disabled], .edit .new .actions button[disabled] {
|
81 |
-
color: red; }
|
82 |
-
|
83 |
-
.edit .actions button {
|
84 |
-
float: right; }
|
85 |
-
|
86 |
-
.edit .new .actions {
|
87 |
-
padding: 0; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/filter_effects.css
DELETED
@@ -1,20 +0,0 @@
|
|
1 |
-
#number {
|
2 |
-
-webkit-filter: grayscale(1) sepia(0.5) saturate(0.1) invert(1) opacity(0.5) brightness(0.5) contrast(0.5); }
|
3 |
-
|
4 |
-
#percentage {
|
5 |
-
-webkit-filter: grayscale(100%) sepia(50%) saturate(10%) invert(100%) opacity(50%) brightness(50%) contrast(50%); }
|
6 |
-
|
7 |
-
#misc {
|
8 |
-
-webkit-filter: hue-rotate(90deg) blur(10px) drop-shadow(10px -16px 30px purple); }
|
9 |
-
|
10 |
-
#decimal {
|
11 |
-
opacity: 0.5;
|
12 |
-
filter: alpha(opacity=50, style=1); }
|
13 |
-
|
14 |
-
#percent {
|
15 |
-
opacity: 0.5;
|
16 |
-
filter: alpha(opacity=50); }
|
17 |
-
|
18 |
-
.row {
|
19 |
-
background-color: #071c23;
|
20 |
-
color: #2284a1; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/functions.css
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
div {
|
2 |
-
color: 14px;
|
3 |
-
sum: 23; }
|
4 |
-
|
5 |
-
div {
|
6 |
-
hello: 10 55;
|
7 |
-
hello: 1010 55;
|
8 |
-
hello: "hello 10 and 55"; }
|
9 |
-
|
10 |
-
del {
|
11 |
-
color: 1000; }
|
12 |
-
|
13 |
-
div {
|
14 |
-
hello: "hello foo and bar";
|
15 |
-
hello: "hello bar and default";
|
16 |
-
hello: "hello Alice, Bob, Tom"; }
|
17 |
-
|
18 |
-
.foo {
|
19 |
-
test2: -moz-art; }
|
20 |
-
|
21 |
-
div span {
|
22 |
-
height: 3px; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/ie7.css
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
#foo:before {
|
2 |
-
content: counter(item,".") ": "; }
|
3 |
-
|
4 |
-
#bar:before {
|
5 |
-
content: counter(item,"."); }
|
6 |
-
|
7 |
-
#fu:before {
|
8 |
-
content: counter(item); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/if.css
DELETED
@@ -1,21 +0,0 @@
|
|
1 |
-
div {
|
2 |
-
color: blue; }
|
3 |
-
|
4 |
-
pre {
|
5 |
-
val-1: "red";
|
6 |
-
val-2: "blue";
|
7 |
-
val-3: "blue";
|
8 |
-
val-4: "red";
|
9 |
-
val-5: "red"; }
|
10 |
-
|
11 |
-
span {
|
12 |
-
color: blue;
|
13 |
-
height: 10px;
|
14 |
-
width: 20px; }
|
15 |
-
|
16 |
-
div {
|
17 |
-
color: blue;
|
18 |
-
border-color: green; }
|
19 |
-
|
20 |
-
del {
|
21 |
-
thing: no; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/if_on_null.css
DELETED
@@ -1,2 +0,0 @@
|
|
1 |
-
body {
|
2 |
-
background-color: "red"; }
|
|
|
|
tests/scssc/outputs/import.css
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
@import "foo.css";
|
2 |
-
@import "foo" screen;
|
3 |
-
@import "http://foo.com/bar";
|
4 |
-
@import url(foo);
|
5 |
-
div {
|
6 |
-
height: 200px;
|
7 |
-
color: red; }
|
8 |
-
|
9 |
-
pre {
|
10 |
-
color: red; }
|
11 |
-
pre div {
|
12 |
-
height: 200px;
|
13 |
-
color: red; }
|
14 |
-
|
15 |
-
code div {
|
16 |
-
height: 200px;
|
17 |
-
color: red; }
|
18 |
-
code div {
|
19 |
-
height: 200px;
|
20 |
-
color: red; }
|
21 |
-
|
22 |
-
#partial {
|
23 |
-
color: blue; }
|
24 |
-
|
25 |
-
body {
|
26 |
-
color: #7c2;
|
27 |
-
background: gray; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/interpolation.css
DELETED
@@ -1,54 +0,0 @@
|
|
1 |
-
div {
|
2 |
-
color: redwhite blue;
|
3 |
-
color: red white blue;
|
4 |
-
color: red whiteblue;
|
5 |
-
color: redwhiteblue;
|
6 |
-
color: ummyeahwhat;
|
7 |
-
color: stacked;
|
8 |
-
font-size: 10px/something;
|
9 |
-
font-size: 10px / something;
|
10 |
-
test: "whatworldwrong";
|
11 |
-
test: "whatworldwrong";
|
12 |
-
test: "whatworldwrong";
|
13 |
-
test: "what"world"wrong";
|
14 |
-
hi: "what is 16 end"; }
|
15 |
-
|
16 |
-
pre var {
|
17 |
-
color: red; }
|
18 |
-
pre var dad {
|
19 |
-
color: red; }
|
20 |
-
pre bedvardad {
|
21 |
-
color: red; }
|
22 |
-
|
23 |
-
cool .thing-1 {
|
24 |
-
color: red; }
|
25 |
-
cool .thing-2 {
|
26 |
-
color: red; }
|
27 |
-
cool .thing-3 {
|
28 |
-
color: red; }
|
29 |
-
cool .thing-4 {
|
30 |
-
color: red; }
|
31 |
-
cool .thing-5 {
|
32 |
-
color: red; }
|
33 |
-
|
34 |
-
abcde {
|
35 |
-
color: red; }
|
36 |
-
|
37 |
-
#hello, .world {
|
38 |
-
color: red; }
|
39 |
-
|
40 |
-
#abchelloyeah, .coolworldyes {
|
41 |
-
color: red; }
|
42 |
-
|
43 |
-
div.element:nth-child(2n) {
|
44 |
-
display: none; }
|
45 |
-
|
46 |
-
div {
|
47 |
-
hello: world;
|
48 |
-
coolhello: world;
|
49 |
-
helloone: world;
|
50 |
-
twohelloone: world;
|
51 |
-
oneabtwo: cool;
|
52 |
-
hello-world: red;
|
53 |
-
hello-mold: white;
|
54 |
-
hello-hello: blue; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/keyword_args.css
DELETED
@@ -1,6 +0,0 @@
|
|
1 |
-
pre {
|
2 |
-
out: alpha fort three palace; }
|
3 |
-
|
4 |
-
div {
|
5 |
-
hello: 5;
|
6 |
-
world: -5; }
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/list.css
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
div {
|
2 |
-
padding: 10px 20px 30px 40px;
|
3 |
-
margin: 0 10px 10px 10px;
|
4 |
-
background: linear-gradient(black, white); }
|
5 |
-
|
6 |
-
p {
|
7 |
-
background: linear-gradient(red, blue); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/looping.css
DELETED
@@ -1,45 +0,0 @@
|
|
1 |
-
div {
|
2 |
-
color: what;
|
3 |
-
color: is;
|
4 |
-
color: this;
|
5 |
-
font: what;
|
6 |
-
font: is;
|
7 |
-
font: this;
|
8 |
-
background: what;
|
9 |
-
background: is;
|
10 |
-
background: this;
|
11 |
-
border: what;
|
12 |
-
border: is;
|
13 |
-
border: this; }
|
14 |
-
|
15 |
-
span {
|
16 |
-
color: 0;
|
17 |
-
color: 1;
|
18 |
-
color: 2;
|
19 |
-
color: 3;
|
20 |
-
color: 4;
|
21 |
-
color: 5;
|
22 |
-
color: 6;
|
23 |
-
color: 7;
|
24 |
-
color: 8;
|
25 |
-
color: 9;
|
26 |
-
color: 10; }
|
27 |
-
|
28 |
-
pre {
|
29 |
-
color: 1;
|
30 |
-
color: 2;
|
31 |
-
color: 3;
|
32 |
-
color: 4;
|
33 |
-
height: 1;
|
34 |
-
height: 2;
|
35 |
-
height: 3;
|
36 |
-
height: 4;
|
37 |
-
height: 5;
|
38 |
-
cool: 10;
|
39 |
-
cool: 9;
|
40 |
-
cool: 8;
|
41 |
-
cool: 7;
|
42 |
-
cool: 6;
|
43 |
-
cool: 5;
|
44 |
-
cool: 4;
|
45 |
-
cool: 3; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/media.css
DELETED
@@ -1,103 +0,0 @@
|
|
1 |
-
@media {
|
2 |
-
div {
|
3 |
-
color: blue; } }
|
4 |
-
|
5 |
-
@media what {
|
6 |
-
div {
|
7 |
-
color: blue; } }
|
8 |
-
|
9 |
-
@media (cool) {
|
10 |
-
div {
|
11 |
-
color: blue; } }
|
12 |
-
|
13 |
-
@media (cool: blue) {
|
14 |
-
div {
|
15 |
-
color: blue; } }
|
16 |
-
|
17 |
-
@media hello and (world) and (butt: man) {
|
18 |
-
div {
|
19 |
-
color: blue; } }
|
20 |
-
|
21 |
-
@media (max-width: 940px) {
|
22 |
-
color: red; }
|
23 |
-
|
24 |
-
@media not hello and (world) {
|
25 |
-
color: blue;
|
26 |
-
pre {
|
27 |
-
color: blue; } }
|
28 |
-
@media butt and (world) {
|
29 |
-
color: red;
|
30 |
-
div {
|
31 |
-
color: red; } }
|
32 |
-
|
33 |
-
div {
|
34 |
-
color: blue; }
|
35 |
-
@media screen and (-webkit-min-device-pixel-ratio: 1.5) {
|
36 |
-
div .sidebar {
|
37 |
-
width: 500px; } }
|
38 |
-
|
39 |
-
div {
|
40 |
-
position: absolute; }
|
41 |
-
@media screen {
|
42 |
-
div {
|
43 |
-
top: 0;
|
44 |
-
bottom: 8em;
|
45 |
-
color: red; }
|
46 |
-
div p {
|
47 |
-
margin: 5px; }
|
48 |
-
|
49 |
-
div .success {
|
50 |
-
color: green; } }
|
51 |
-
|
52 |
-
.button {
|
53 |
-
width: 300px;
|
54 |
-
height: 100px;
|
55 |
-
background: #eee; }
|
56 |
-
.button :hover {
|
57 |
-
background: #aaa; }
|
58 |
-
@media only screen and (max-width: 300px) {
|
59 |
-
.button {
|
60 |
-
width: 100px;
|
61 |
-
height: 100px; } }
|
62 |
-
|
63 |
-
code {
|
64 |
-
position: absolute; }
|
65 |
-
@media screen {
|
66 |
-
code {
|
67 |
-
height: 10px; }
|
68 |
-
code pre {
|
69 |
-
height: 20px; } }
|
70 |
-
|
71 |
-
@media screen and (color: blue) {
|
72 |
-
dt {
|
73 |
-
height: 10px; } }
|
74 |
-
|
75 |
-
@media screen {
|
76 |
-
.screen {
|
77 |
-
width: 12px; } }
|
78 |
-
@media only screen {
|
79 |
-
.only-screen {
|
80 |
-
height: 11px; } }
|
81 |
-
|
82 |
-
@media only screen {
|
83 |
-
.only-screen {
|
84 |
-
width: 14px; } }
|
85 |
-
@media only screen {
|
86 |
-
.only-screen {
|
87 |
-
height: 16px; } }
|
88 |
-
|
89 |
-
@media print {
|
90 |
-
.only-print {
|
91 |
-
height: 12px; } }
|
92 |
-
|
93 |
-
@media screen {
|
94 |
-
.only-print {
|
95 |
-
height: 12px; } }
|
96 |
-
|
97 |
-
@media not screen {
|
98 |
-
.not-screen {
|
99 |
-
height: 15px; } }
|
100 |
-
|
101 |
-
@media only screen and (color: blue) and (width: 13) {
|
102 |
-
.only-screen {
|
103 |
-
height: 15px; } }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/mixins.css
DELETED
@@ -1,83 +0,0 @@
|
|
1 |
-
div {
|
2 |
-
color: blue;
|
3 |
-
color: red; }
|
4 |
-
div pre {
|
5 |
-
height: 200px; }
|
6 |
-
|
7 |
-
span {
|
8 |
-
color: blue; }
|
9 |
-
span div {
|
10 |
-
height: 20px; }
|
11 |
-
|
12 |
-
html {
|
13 |
-
height: 43px; }
|
14 |
-
|
15 |
-
del {
|
16 |
-
height: 20px; }
|
17 |
-
|
18 |
-
div {
|
19 |
-
color: white;
|
20 |
-
color: blue;
|
21 |
-
color: white; }
|
22 |
-
|
23 |
-
div {
|
24 |
-
background-image: linear-gradient(left top, red, green); }
|
25 |
-
|
26 |
-
div {
|
27 |
-
-moz-box-shadow: 10px 10px 5px #888;
|
28 |
-
-webkit-box-shadow: 10px 10px 5px #888;
|
29 |
-
box-shadow: 10px 10px 5px #888;
|
30 |
-
-moz-box-shadow: inset 10px 10px #888, -10px -10px #f4f4f4;
|
31 |
-
-webkit-box-shadow: inset 10px 10px #888, -10px -10px #f4f4f4;
|
32 |
-
box-shadow: inset 10px 10px #888, -10px -10px #f4f4f4; }
|
33 |
-
|
34 |
-
div p {
|
35 |
-
color: red;
|
36 |
-
color: blue; }
|
37 |
-
div p .class {
|
38 |
-
color: red; }
|
39 |
-
div p .class div {
|
40 |
-
height: 20px; }
|
41 |
-
div p div {
|
42 |
-
height: 20px; }
|
43 |
-
div p .top {
|
44 |
-
top: 0; }
|
45 |
-
div p .top div {
|
46 |
-
color: red; }
|
47 |
-
|
48 |
-
div.mixin-content-simple {
|
49 |
-
color: red; }
|
50 |
-
|
51 |
-
div.mixin-content-with-arg {
|
52 |
-
background: blue;
|
53 |
-
color: red; }
|
54 |
-
|
55 |
-
div.mixin-content-with-arg {
|
56 |
-
background: purple;
|
57 |
-
height: 20px; }
|
58 |
-
|
59 |
-
div.mixin-content-simple {
|
60 |
-
height: 43px; }
|
61 |
-
|
62 |
-
div.mixin-content-simple {
|
63 |
-
color: orange; }
|
64 |
-
div.mixin-content-simple div {
|
65 |
-
height: 20px; }
|
66 |
-
|
67 |
-
div.mixin-content-with-arg {
|
68 |
-
background: purple;
|
69 |
-
height: 43px; }
|
70 |
-
|
71 |
-
div.mixin-content-with-arg {
|
72 |
-
background: purple;
|
73 |
-
color: orange; }
|
74 |
-
div.mixin-content-with-arg div {
|
75 |
-
height: 20px; }
|
76 |
-
|
77 |
-
#please-wait {
|
78 |
-
background: url(/images/logo.png);
|
79 |
-
position: absolute;
|
80 |
-
top: 1em;
|
81 |
-
right: 0;
|
82 |
-
bottom: 3em;
|
83 |
-
left: 4em; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/nesting.css
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
div: blue;
|
2 |
-
body {
|
3 |
-
color: red; }
|
4 |
-
|
5 |
-
div {
|
6 |
-
color: red;
|
7 |
-
height: yes; }
|
8 |
-
div pre {
|
9 |
-
color: blue; }
|
10 |
-
|
11 |
-
div {
|
12 |
-
font: 10px hello world;
|
13 |
-
font-size: 10px;
|
14 |
-
font-color: blue;
|
15 |
-
border-left: 1px solid blue;
|
16 |
-
border-right: 2px dashed green; }
|
17 |
-
|
18 |
-
#nested-nesting {
|
19 |
-
bar: baz;
|
20 |
-
bang-bop: bar;
|
21 |
-
bang-bip: 1px;
|
22 |
-
bang-blat-baf: bort; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/null.css
DELETED
@@ -1,21 +0,0 @@
|
|
1 |
-
.div {
|
2 |
-
one: null;
|
3 |
-
one: world;
|
4 |
-
one: NULL world;
|
5 |
-
one: a, b;
|
6 |
-
two: a, b; }
|
7 |
-
|
8 |
-
p:before {
|
9 |
-
content: "I ate pies!"; }
|
10 |
-
|
11 |
-
.foo {
|
12 |
-
-webkit-border-radius: 10;
|
13 |
-
border-radius: 10; }
|
14 |
-
|
15 |
-
.fu {
|
16 |
-
-webkit-border-radius: 20;
|
17 |
-
border-radius: 20; }
|
18 |
-
|
19 |
-
.bar {
|
20 |
-
-webkit-border-top-left-radius: 30;
|
21 |
-
border-top-left-radius: 30; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/operators.css
DELETED
@@ -1,105 +0,0 @@
|
|
1 |
-
body {
|
2 |
-
color: 8;
|
3 |
-
color: 16;
|
4 |
-
height: 10px/10px;
|
5 |
-
color: 6px;
|
6 |
-
color: 5px;
|
7 |
-
bottom: 2px;
|
8 |
-
top: 1.5em;
|
9 |
-
left: -1cm;
|
10 |
-
top: 6.29921; }
|
11 |
-
|
12 |
-
div {
|
13 |
-
color: false;
|
14 |
-
color: true;
|
15 |
-
color: true;
|
16 |
-
color: false;
|
17 |
-
color: what > 3; }
|
18 |
-
|
19 |
-
#units {
|
20 |
-
test: 2.5748in;
|
21 |
-
test: 13mm;
|
22 |
-
test: 4em;
|
23 |
-
test: 11mm;
|
24 |
-
test: 1.1cm; }
|
25 |
-
|
26 |
-
#modulo {
|
27 |
-
test: 1;
|
28 |
-
test: 1cm; }
|
29 |
-
|
30 |
-
#colors {
|
31 |
-
color: #ff0203;
|
32 |
-
color: #fe0000;
|
33 |
-
color: rgba(3, 8, 15, 0.5);
|
34 |
-
color: rgba(5, 8, 10, 0.5);
|
35 |
-
color: rgba(2, 4, 6, 0.5);
|
36 |
-
color: rgba(1, 1, 2, 0.5);
|
37 |
-
color: rgba(3, 4, 5, 0.5);
|
38 |
-
color: rgba(0, 0, 1, 0.5);
|
39 |
-
color: #22f;
|
40 |
-
color: false;
|
41 |
-
color: true;
|
42 |
-
color: true;
|
43 |
-
color: false; }
|
44 |
-
|
45 |
-
#preserve {
|
46 |
-
hello: what -going;
|
47 |
-
hello: what - going; }
|
48 |
-
|
49 |
-
#strings {
|
50 |
-
hello: what -going;
|
51 |
-
hello: whatgoing;
|
52 |
-
hello: whatgoing;
|
53 |
-
hello: whatgoing;
|
54 |
-
hello: whatgoing;
|
55 |
-
hello: "whatgoing";
|
56 |
-
hello: goingwhat;
|
57 |
-
hello: "whatwhat"; }
|
58 |
-
|
59 |
-
#negation {
|
60 |
-
a: -60;
|
61 |
-
b: 10 -100;
|
62 |
-
b: -90; }
|
63 |
-
|
64 |
-
#bools-fail {
|
65 |
-
and: false and two;
|
66 |
-
and: one and two;
|
67 |
-
and: one and false;
|
68 |
-
or: false or two;
|
69 |
-
or: one or two;
|
70 |
-
or: one or false; }
|
71 |
-
|
72 |
-
#bools {
|
73 |
-
and: false;
|
74 |
-
and: two;
|
75 |
-
and: false;
|
76 |
-
or: two;
|
77 |
-
or: one;
|
78 |
-
or: one; }
|
79 |
-
|
80 |
-
#nots-fail {
|
81 |
-
not: false2;
|
82 |
-
not: not false;
|
83 |
-
not: not 0;
|
84 |
-
not: not 1;
|
85 |
-
not: not "";
|
86 |
-
not: not hello; }
|
87 |
-
|
88 |
-
#nots {
|
89 |
-
not: false2;
|
90 |
-
not: true;
|
91 |
-
not: false;
|
92 |
-
not: false;
|
93 |
-
not: false;
|
94 |
-
not: false; }
|
95 |
-
|
96 |
-
#string-test {
|
97 |
-
str: true;
|
98 |
-
str: false;
|
99 |
-
str: true;
|
100 |
-
str: true;
|
101 |
-
str: xhellohellofalse;
|
102 |
-
str: true; }
|
103 |
-
|
104 |
-
#special {
|
105 |
-
cancel-unit: 1; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/placeholder_selector.css
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
p a.notice span, p a.error span, #context a.notice span, #context a.error span {
|
2 |
-
color: blue;
|
3 |
-
font-weight: bold;
|
4 |
-
font-size: 2em; }
|
5 |
-
|
6 |
-
p {
|
7 |
-
padding: 2em; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/scss_css.css
DELETED
@@ -1,741 +0,0 @@
|
|
1 |
-
@import "foo.css";
|
2 |
-
@import 'foo.css';
|
3 |
-
@import url("foo.css");
|
4 |
-
@import url('foo.css');
|
5 |
-
@import url(foo.css);
|
6 |
-
@import "foo.css" screen;
|
7 |
-
@import "foo.css" screen, print;
|
8 |
-
/* Foo
|
9 |
-
* Bar */
|
10 |
-
/* Baz
|
11 |
-
* Bang */
|
12 |
-
@charset "UTF-8";
|
13 |
-
[foo~=bar] {
|
14 |
-
a: b; }
|
15 |
-
|
16 |
-
[foo^=bar] {
|
17 |
-
a: b; }
|
18 |
-
|
19 |
-
[foo$=bar] {
|
20 |
-
a: b; }
|
21 |
-
|
22 |
-
[foo*=bar] {
|
23 |
-
a: b; }
|
24 |
-
|
25 |
-
[foo|=en] {
|
26 |
-
a: b; }
|
27 |
-
|
28 |
-
foo {
|
29 |
-
a: 2;
|
30 |
-
b: 2.3em;
|
31 |
-
c: 50%;
|
32 |
-
d: "fraz bran";
|
33 |
-
e: flanny-blanny-blan;
|
34 |
-
f: url(http://sass-lang.com);
|
35 |
-
h: #abc; }
|
36 |
-
|
37 |
-
selector {
|
38 |
-
property: value;
|
39 |
-
property2: value; }
|
40 |
-
|
41 |
-
sel {
|
42 |
-
p: v; }
|
43 |
-
|
44 |
-
.foo {
|
45 |
-
a: b; }
|
46 |
-
|
47 |
-
.foo {
|
48 |
-
a: b; }
|
49 |
-
|
50 |
-
.foo {
|
51 |
-
a: b; }
|
52 |
-
|
53 |
-
.foo {
|
54 |
-
a: b; }
|
55 |
-
|
56 |
-
@foo {
|
57 |
-
a: b;
|
58 |
-
rule {
|
59 |
-
a: b; } }
|
60 |
-
|
61 |
-
@foo {
|
62 |
-
a: b; }
|
63 |
-
|
64 |
-
@bar {
|
65 |
-
a: b; }
|
66 |
-
|
67 |
-
@foo "bar"
|
68 |
-
|
69 |
-
foo {
|
70 |
-
a: 12px calc(100%/3 - 2*1em - 2*1px);
|
71 |
-
b: 12px -moz-calc(100%/3 - 2*1em - 2*1px);
|
72 |
-
b: 12px -webkit-calc(100%/3 - 2*1em - 2*1px);
|
73 |
-
b: 12px -foobar-calc(100%/3 - 2*1em - 2*1px); }
|
74 |
-
|
75 |
-
foo {
|
76 |
-
bar: baz; }
|
77 |
-
|
78 |
-
bar {
|
79 |
-
bar: baz; }
|
80 |
-
|
81 |
-
baz {
|
82 |
-
bar: baz;
|
83 |
-
/*
|
84 |
-
* foo
|
85 |
-
*/ }
|
86 |
-
|
87 |
-
bar {
|
88 |
-
baz: bang; }
|
89 |
-
|
90 |
-
E, F {
|
91 |
-
a: b; }
|
92 |
-
|
93 |
-
E F, G H {
|
94 |
-
a: b; }
|
95 |
-
|
96 |
-
E > F, G > H {
|
97 |
-
a: b;
|
98 |
-
/* This is a CSS comment. */ }
|
99 |
-
|
100 |
-
.one {
|
101 |
-
color: green;
|
102 |
-
/* Another comment */
|
103 |
-
/* The following should not be used:
|
104 |
-
.two {color: red;} */ }
|
105 |
-
|
106 |
-
.three {
|
107 |
-
/* color: red; */
|
108 |
-
color: green;
|
109 |
-
/**
|
110 |
-
.four {color: red;} */ }
|
111 |
-
|
112 |
-
.five {
|
113 |
-
color: green;
|
114 |
-
/**/ }
|
115 |
-
|
116 |
-
.six {
|
117 |
-
color: green;
|
118 |
-
/*********/ }
|
119 |
-
|
120 |
-
.seven {
|
121 |
-
color: green;
|
122 |
-
/* a comment **/ }
|
123 |
-
|
124 |
-
.eight {
|
125 |
-
color: green; }
|
126 |
-
|
127 |
-
foo {
|
128 |
-
a: \foo bar;
|
129 |
-
b: foo\ bar;
|
130 |
-
c: \2022 \0020;
|
131 |
-
d: foo\\bar;
|
132 |
-
e: foo\"\'bar; }
|
133 |
-
|
134 |
-
foo {
|
135 |
-
a: "\foo bar";
|
136 |
-
b: "foo\ bar";
|
137 |
-
c: "\2022 \0020";
|
138 |
-
d: "foo\\bar";
|
139 |
-
e: "foo\"'bar"; }
|
140 |
-
|
141 |
-
foo {
|
142 |
-
_name: val;
|
143 |
-
*name: val;
|
144 |
-
:name: val;
|
145 |
-
.name: val;
|
146 |
-
#name: val;
|
147 |
-
name/**/: val;
|
148 |
-
name/*\**/: val;
|
149 |
-
name: val; }
|
150 |
-
|
151 |
-
@foo "bar" ;
|
152 |
-
|
153 |
-
foo {
|
154 |
-
a: -moz-element(#foo);
|
155 |
-
b: -webkit-element(#foo);
|
156 |
-
b: -foobar-element(#foo); }
|
157 |
-
|
158 |
-
@foo ;
|
159 |
-
|
160 |
-
foo {
|
161 |
-
bar: baz; }
|
162 |
-
|
163 |
-
0% {
|
164 |
-
a: b; }
|
165 |
-
|
166 |
-
60% {
|
167 |
-
a: b; }
|
168 |
-
|
169 |
-
100% {
|
170 |
-
a: b; }
|
171 |
-
|
172 |
-
12px {
|
173 |
-
a: b; }
|
174 |
-
|
175 |
-
"foo" {
|
176 |
-
a: b; }
|
177 |
-
|
178 |
-
foo {
|
179 |
-
a: 12px expression(1 + (3 / Foo.bar("baz" + "bang") + function() {return 12;}) % 12); }
|
180 |
-
|
181 |
-
:foo("bar") {
|
182 |
-
a: b; }
|
183 |
-
|
184 |
-
:foo(bar) {
|
185 |
-
a: b; }
|
186 |
-
|
187 |
-
:foo(12px) {
|
188 |
-
a: b; }
|
189 |
-
|
190 |
-
:foo(+) {
|
191 |
-
a: b; }
|
192 |
-
|
193 |
-
:foo(-) {
|
194 |
-
a: b; }
|
195 |
-
|
196 |
-
:foo(+"bar") {
|
197 |
-
a: b; }
|
198 |
-
|
199 |
-
:foo(-++--baz-"bar"12px) {
|
200 |
-
a: b; }
|
201 |
-
|
202 |
-
foo {
|
203 |
-
a: foo-bar(12);
|
204 |
-
b: -foo-bar-baz(13, 14 15); }
|
205 |
-
|
206 |
-
@import "foo.css" screen, print and (foo: 0);
|
207 |
-
|
208 |
-
@import "foo.css" screen, only print, screen and (foo: 0);
|
209 |
-
|
210 |
-
foo {
|
211 |
-
a: foo !important;
|
212 |
-
b: foo bar !important;
|
213 |
-
b: foo, bar !important; }
|
214 |
-
|
215 |
-
foo {
|
216 |
-
a: -moz-bar-baz;
|
217 |
-
b: foo -o-bar-baz; }
|
218 |
-
|
219 |
-
foo {
|
220 |
-
/* b; c: */
|
221 |
-
a: d; }
|
222 |
-
|
223 |
-
foo {
|
224 |
-
/*: b; c */
|
225 |
-
a : d;
|
226 |
-
/* Foo
|
227 |
-
* Bar */ }
|
228 |
-
|
229 |
-
[foo] {
|
230 |
-
a: b; }
|
231 |
-
|
232 |
-
[foo="bar"] {
|
233 |
-
a: b; }
|
234 |
-
|
235 |
-
[foo~="bar"] {
|
236 |
-
a: b; }
|
237 |
-
|
238 |
-
[foo^="bar"] {
|
239 |
-
a: b; }
|
240 |
-
|
241 |
-
[foo$="bar"] {
|
242 |
-
a: b; }
|
243 |
-
|
244 |
-
[foo*="bar"] {
|
245 |
-
a: b; }
|
246 |
-
|
247 |
-
[foo|="en"] {
|
248 |
-
a: b; }
|
249 |
-
|
250 |
-
:root {
|
251 |
-
a: b; }
|
252 |
-
|
253 |
-
:nth-child(n) {
|
254 |
-
a: b; }
|
255 |
-
|
256 |
-
:nth-last-child(n) {
|
257 |
-
a: b; }
|
258 |
-
|
259 |
-
:nth-of-type(n) {
|
260 |
-
a: b; }
|
261 |
-
|
262 |
-
:nth-last-of-type(n) {
|
263 |
-
a: b; }
|
264 |
-
|
265 |
-
:first-child {
|
266 |
-
a: b; }
|
267 |
-
|
268 |
-
:last-child {
|
269 |
-
a: b; }
|
270 |
-
|
271 |
-
:first-of-type {
|
272 |
-
a: b; }
|
273 |
-
|
274 |
-
:last-of-type {
|
275 |
-
a: b; }
|
276 |
-
|
277 |
-
:only-child {
|
278 |
-
a: b; }
|
279 |
-
|
280 |
-
:only-of-type {
|
281 |
-
a: b; }
|
282 |
-
|
283 |
-
:empty {
|
284 |
-
a: b; }
|
285 |
-
|
286 |
-
:link {
|
287 |
-
a: b; }
|
288 |
-
|
289 |
-
:visited {
|
290 |
-
a: b; }
|
291 |
-
|
292 |
-
:active {
|
293 |
-
a: b; }
|
294 |
-
|
295 |
-
:hover {
|
296 |
-
a: b; }
|
297 |
-
|
298 |
-
:focus {
|
299 |
-
a: b; }
|
300 |
-
|
301 |
-
:target {
|
302 |
-
a: b; }
|
303 |
-
|
304 |
-
:lang(fr) {
|
305 |
-
a: b; }
|
306 |
-
|
307 |
-
:enabled {
|
308 |
-
a: b; }
|
309 |
-
|
310 |
-
:disabled {
|
311 |
-
a: b; }
|
312 |
-
|
313 |
-
:checked {
|
314 |
-
a: b; }
|
315 |
-
|
316 |
-
::first-line {
|
317 |
-
a: b; }
|
318 |
-
|
319 |
-
::first-letter {
|
320 |
-
a: b; }
|
321 |
-
|
322 |
-
::before {
|
323 |
-
a: b; }
|
324 |
-
|
325 |
-
::after {
|
326 |
-
a: b; }
|
327 |
-
|
328 |
-
.warning {
|
329 |
-
a: b; }
|
330 |
-
|
331 |
-
#myid {
|
332 |
-
a: b; }
|
333 |
-
|
334 |
-
:not(s) {
|
335 |
-
a: b; }
|
336 |
-
|
337 |
-
@media all {
|
338 |
-
rule1 {
|
339 |
-
prop: val; }
|
340 |
-
|
341 |
-
rule2 {
|
342 |
-
prop: val; } }
|
343 |
-
|
344 |
-
@media screen, print {
|
345 |
-
rule1 {
|
346 |
-
prop: val; }
|
347 |
-
|
348 |
-
rule2 {
|
349 |
-
prop: val; } }
|
350 |
-
|
351 |
-
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
352 |
-
a: b; }
|
353 |
-
|
354 |
-
@media only screen, print and (foo: 0px) and (bar: flam(12px solid)) {
|
355 |
-
a: b; }
|
356 |
-
|
357 |
-
:-moz-any(h1, h2, h3) {
|
358 |
-
a: b; }
|
359 |
-
|
360 |
-
:-moz-any(.foo) {
|
361 |
-
a: b; }
|
362 |
-
|
363 |
-
:-moz-any(foo bar, .baz > .bang) {
|
364 |
-
a: b; }
|
365 |
-
|
366 |
-
@-moz-document url(http://www.w3.org/),
|
367 |
-
url-prefix(http://www.w3.org/Style/),
|
368 |
-
domain(mozilla.org),
|
369 |
-
regexp("^https:.*") {
|
370 |
-
.foo {
|
371 |
-
a: b; } }
|
372 |
-
|
373 |
-
foo {
|
374 |
-
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#c0ff3300, endColorstr=#ff000000);
|
375 |
-
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#c0ff3300, endColorstr=#ff000000); }
|
376 |
-
|
377 |
-
foo {
|
378 |
-
filter: alpha(opacity=20);
|
379 |
-
filter: alpha(opacity=20, enabled=true);
|
380 |
-
filter: blaznicate(foo=bar, baz=bang bip, bart=#fa4600); }
|
381 |
-
|
382 |
-
@foo bar {
|
383 |
-
a: b; }
|
384 |
-
|
385 |
-
@bar baz {
|
386 |
-
c: d; }
|
387 |
-
|
388 |
-
@namespace "http://www.w3.org/Profiles/xhtml1-strict";
|
389 |
-
|
390 |
-
@namespace url(http://www.w3.org/Profiles/xhtml1-strict);
|
391 |
-
|
392 |
-
@namespace html url("http://www.w3.org/Profiles/xhtml1-strict");
|
393 |
-
|
394 |
-
[foo|bar=baz] {
|
395 |
-
a: b; }
|
396 |
-
|
397 |
-
[*|bar=baz] {
|
398 |
-
a: b; }
|
399 |
-
|
400 |
-
[foo|bar|=baz] {
|
401 |
-
a: b; }
|
402 |
-
|
403 |
-
foo|E {
|
404 |
-
a: b; }
|
405 |
-
|
406 |
-
*|E {
|
407 |
-
a: b; }
|
408 |
-
|
409 |
-
foo|* {
|
410 |
-
a: b; }
|
411 |
-
|
412 |
-
*|* {
|
413 |
-
a: b; }
|
414 |
-
|
415 |
-
:not(foo|bar) {
|
416 |
-
a: b; }
|
417 |
-
|
418 |
-
:not(*|bar) {
|
419 |
-
a: b; }
|
420 |
-
|
421 |
-
:not(foo|*) {
|
422 |
-
a: b; }
|
423 |
-
|
424 |
-
:not(*|*) {
|
425 |
-
a: b; }
|
426 |
-
|
427 |
-
:not(#blah) {
|
428 |
-
a: b; }
|
429 |
-
|
430 |
-
:not(.blah) {
|
431 |
-
a: b; }
|
432 |
-
|
433 |
-
:not([foo]) {
|
434 |
-
a: b; }
|
435 |
-
|
436 |
-
:not([foo^="bar"]) {
|
437 |
-
a: b; }
|
438 |
-
|
439 |
-
:not([baz|foo~="bar"]) {
|
440 |
-
a: b; }
|
441 |
-
|
442 |
-
:not(:hover) {
|
443 |
-
a: b; }
|
444 |
-
|
445 |
-
:not(:nth-child(2n + 3)) {
|
446 |
-
a: b; }
|
447 |
-
|
448 |
-
:not(:not(#foo)) {
|
449 |
-
a: b; }
|
450 |
-
|
451 |
-
:not(a#foo.bar) {
|
452 |
-
a: b; }
|
453 |
-
|
454 |
-
:not(#foo .bar > baz) {
|
455 |
-
a: b; }
|
456 |
-
|
457 |
-
:not(h1, h2, h3) {
|
458 |
-
a: b; }
|
459 |
-
|
460 |
-
foo {
|
461 |
-
a: "bang 1 bar bip"; }
|
462 |
-
|
463 |
-
:nth-child(-n) {
|
464 |
-
a: b; }
|
465 |
-
|
466 |
-
:nth-child(+n) {
|
467 |
-
a: b; }
|
468 |
-
|
469 |
-
:nth-child(even) {
|
470 |
-
a: b; }
|
471 |
-
|
472 |
-
:nth-child(odd) {
|
473 |
-
a: b; }
|
474 |
-
|
475 |
-
:nth-child(50) {
|
476 |
-
a: b; }
|
477 |
-
|
478 |
-
:nth-child(-50) {
|
479 |
-
a: b; }
|
480 |
-
|
481 |
-
:nth-child(+50) {
|
482 |
-
a: b; }
|
483 |
-
|
484 |
-
:nth-child(2n+3) {
|
485 |
-
a: b; }
|
486 |
-
|
487 |
-
:nth-child(2n-3) {
|
488 |
-
a: b; }
|
489 |
-
|
490 |
-
:nth-child(+2n-3) {
|
491 |
-
a: b; }
|
492 |
-
|
493 |
-
:nth-child(-2n+3) {
|
494 |
-
a: b; }
|
495 |
-
|
496 |
-
:nth-child(-2n+ 3) {
|
497 |
-
a: b; }
|
498 |
-
|
499 |
-
:nth-child( 2n + 3) {
|
500 |
-
a: b; }
|
501 |
-
|
502 |
-
foo {
|
503 |
-
a: foo bar baz;
|
504 |
-
b: foo, #abc, -12;
|
505 |
-
c: 1px/2px/-3px;
|
506 |
-
d: foo bar, baz/bang; }
|
507 |
-
|
508 |
-
@page {
|
509 |
-
prop1: val;
|
510 |
-
prop2: val; }
|
511 |
-
|
512 |
-
@page flap {
|
513 |
-
prop1: val;
|
514 |
-
prop2: val; }
|
515 |
-
|
516 |
-
@page :first {
|
517 |
-
prop1: val;
|
518 |
-
prop2: val; }
|
519 |
-
|
520 |
-
@page flap:first {
|
521 |
-
prop1: val;
|
522 |
-
prop2: val; }
|
523 |
-
|
524 |
-
.foo {
|
525 |
-
a: b; }
|
526 |
-
|
527 |
-
.foo {
|
528 |
-
a: b;
|
529 |
-
/* Foo */ }
|
530 |
-
|
531 |
-
.foo {
|
532 |
-
a: b;
|
533 |
-
/* Foo
|
534 |
-
* Bar */ }
|
535 |
-
|
536 |
-
.foo {
|
537 |
-
a: b; }
|
538 |
-
|
539 |
-
.foo #bar:baz(/* bang )*/ bip) {
|
540 |
-
a: b; }
|
541 |
-
|
542 |
-
> E {
|
543 |
-
a: b; }
|
544 |
-
|
545 |
-
+ E {
|
546 |
-
a: b; }
|
547 |
-
|
548 |
-
~ E {
|
549 |
-
a: b; }
|
550 |
-
|
551 |
-
> > E {
|
552 |
-
a: b; }
|
553 |
-
|
554 |
-
>> E {
|
555 |
-
a: b; }
|
556 |
-
|
557 |
-
E* {
|
558 |
-
a: b; }
|
559 |
-
|
560 |
-
E*.foo {
|
561 |
-
a: b; }
|
562 |
-
|
563 |
-
E*:hover {
|
564 |
-
a: b; }
|
565 |
-
|
566 |
-
E, F {
|
567 |
-
a: b; }
|
568 |
-
|
569 |
-
E F {
|
570 |
-
a: b; }
|
571 |
-
|
572 |
-
E, F G, H {
|
573 |
-
a: b; }
|
574 |
-
|
575 |
-
E > F {
|
576 |
-
a: b; }
|
577 |
-
|
578 |
-
E ~ F {
|
579 |
-
a: b; }
|
580 |
-
|
581 |
-
E + F {
|
582 |
-
a: b; }
|
583 |
-
|
584 |
-
* {
|
585 |
-
a: b; }
|
586 |
-
|
587 |
-
E {
|
588 |
-
a: b; }
|
589 |
-
|
590 |
-
E[foo] {
|
591 |
-
a: b; }
|
592 |
-
|
593 |
-
E[foo="bar"] {
|
594 |
-
a: b; }
|
595 |
-
|
596 |
-
E[foo~="bar"] {
|
597 |
-
a: b; }
|
598 |
-
|
599 |
-
E[foo^="bar"] {
|
600 |
-
a: b; }
|
601 |
-
|
602 |
-
E[foo$="bar"] {
|
603 |
-
a: b; }
|
604 |
-
|
605 |
-
E[foo*="bar"] {
|
606 |
-
a: b; }
|
607 |
-
|
608 |
-
E[foo|="en"] {
|
609 |
-
a: b; }
|
610 |
-
|
611 |
-
E:root {
|
612 |
-
a: b; }
|
613 |
-
|
614 |
-
E:nth-child(n) {
|
615 |
-
a: b; }
|
616 |
-
|
617 |
-
E:nth-last-child(n) {
|
618 |
-
a: b; }
|
619 |
-
|
620 |
-
E:nth-of-type(n) {
|
621 |
-
a: b; }
|
622 |
-
|
623 |
-
E:nth-last-of-type(n) {
|
624 |
-
a: b; }
|
625 |
-
|
626 |
-
E:first-child {
|
627 |
-
a: b; }
|
628 |
-
|
629 |
-
E:last-child {
|
630 |
-
a: b; }
|
631 |
-
|
632 |
-
E:first-of-type {
|
633 |
-
a: b; }
|
634 |
-
|
635 |
-
E:last-of-type {
|
636 |
-
a: b; }
|
637 |
-
|
638 |
-
E:only-child {
|
639 |
-
a: b; }
|
640 |
-
|
641 |
-
E:only-of-type {
|
642 |
-
a: b; }
|
643 |
-
|
644 |
-
E:empty {
|
645 |
-
a: b; }
|
646 |
-
|
647 |
-
E:link {
|
648 |
-
a: b; }
|
649 |
-
|
650 |
-
E:visited {
|
651 |
-
a: b; }
|
652 |
-
|
653 |
-
E:active {
|
654 |
-
a: b; }
|
655 |
-
|
656 |
-
E:hover {
|
657 |
-
a: b; }
|
658 |
-
|
659 |
-
E:focus {
|
660 |
-
a: b; }
|
661 |
-
|
662 |
-
E:target {
|
663 |
-
a: b; }
|
664 |
-
|
665 |
-
E:lang(fr) {
|
666 |
-
a: b; }
|
667 |
-
|
668 |
-
E:enabled {
|
669 |
-
a: b; }
|
670 |
-
|
671 |
-
E:disabled {
|
672 |
-
a: b; }
|
673 |
-
|
674 |
-
E:checked {
|
675 |
-
a: b; }
|
676 |
-
|
677 |
-
E::first-line {
|
678 |
-
a: b; }
|
679 |
-
|
680 |
-
E::first-letter {
|
681 |
-
a: b; }
|
682 |
-
|
683 |
-
E::before {
|
684 |
-
a: b; }
|
685 |
-
|
686 |
-
E::after {
|
687 |
-
a: b; }
|
688 |
-
|
689 |
-
E.warning {
|
690 |
-
a: b; }
|
691 |
-
|
692 |
-
E#myid {
|
693 |
-
a: b; }
|
694 |
-
|
695 |
-
E:not(s) {
|
696 |
-
a: b; }
|
697 |
-
|
698 |
-
E F {
|
699 |
-
a: b; }
|
700 |
-
|
701 |
-
E > F {
|
702 |
-
a: b; }
|
703 |
-
|
704 |
-
E + F {
|
705 |
-
a: b; }
|
706 |
-
|
707 |
-
E ~ F {
|
708 |
-
a: b; }
|
709 |
-
|
710 |
-
@supports (a: b) and (c: d) or (not (d: e)) and ((not (f: g)) or (not ((h: i) and (j: k)))) {
|
711 |
-
.foo {
|
712 |
-
a: b; } }
|
713 |
-
|
714 |
-
@-prefix-supports (a: b) and (c: d) or (not (d: e)) and ((not (f: g)) or (not ((h: i) and (j: k)))) {
|
715 |
-
.foo {
|
716 |
-
a: b; } }
|
717 |
-
|
718 |
-
foo {
|
719 |
-
foo: bar;
|
720 |
-
#baz: bang;
|
721 |
-
#bip: bop; }
|
722 |
-
|
723 |
-
foo {
|
724 |
-
a: -2;
|
725 |
-
b: -2.3em;
|
726 |
-
c: -50%;
|
727 |
-
d: -foo(bar baz); }
|
728 |
-
|
729 |
-
foo {
|
730 |
-
a: -0.5em;
|
731 |
-
b: 0.5em;
|
732 |
-
c: -foo(12px);
|
733 |
-
d: +foo(12px); }
|
734 |
-
|
735 |
-
foo {
|
736 |
-
-moz-foo-bar: blat;
|
737 |
-
-o-flat-blang: wibble; }
|
738 |
-
|
739 |
-
foo {
|
740 |
-
a: foo();
|
741 |
-
b: bar baz-bang() bip; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/scssc/outputs/selectors.css
DELETED
@@ -1,335 +0,0 @@
|
|
1 |
-
* {
|
2 |
-
color: blue; }
|
3 |
-
|
4 |
-
E {
|
5 |
-
color: blue; }
|
6 |
-
|
7 |
-
E:not(:link) {
|
8 |
-
color: blue; }
|
9 |
-
|
10 |
-
E:not(:link):not(:visited) {
|
11 |
-
color: blue; }
|
12 |
-
|
13 |
-
E:not(:link, :visited) {
|
14 |
-
color: blue; }
|
15 |
-
|
16 |
-
E:matches(:hover, :focus) {
|
17 |
-
color: blue; }
|
18 |
-
|
19 |
-
E.warning {
|
20 |
-
color: blue; }
|
21 |
-
|
22 |
-
E#id
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|