', {'class': this.settings.offCanvasWrapperClass});
231 |
232 | // Create the wrapper if it does not exist
233 | if (!this.settings.offCanvasWrapper.parent().hasClass(this.settings.offCanvasWrapperClass)) {
234 | this.settings.offCanvasWrapper.wrap(wrapper);
235 | }
236 |
237 | // Add CSS to the content wrapper
238 | this.settings.offCanvasWrapper.css({
239 | '-webkit-transform': 'translate3d(0, 0, 0)',
240 | '-moz-transform': 'translate3d(0, 0, 0)',
241 | '-ms-transform': 'translate3d(0, 0, 0)',
242 | '-o-transform': 'translate3d(0, 0, 0)',
243 | 'transform': 'translate3d(0, 0, 0)',
244 | '-webkit-backface-visibility': 'hidden',
245 | '-moz-backface-visibility': 'hidden',
246 | '-ms-backface-visibility': 'hidden',
247 | '-o-backface-visibility': 'hidden',
248 | 'backface-visibility': 'hidden'
249 | });
250 |
251 | // Enable animation
252 | if (animationSpeed > 0) {
253 | this.settings.offCanvasWrapper.css({
254 | '-webkit-transition': '-webkit-transform ' + animationSpeed + 'ms ease',
255 | '-moz-transition': '-moz-transform ' + animationSpeed + 'ms ease',
256 | '-o-transition': '-o-transform ' + animationSpeed + 'ms ease',
257 | 'transition': 'transform ' + animationSpeed + 'ms ease'
258 | });
259 | }
260 |
261 | switch (this.settings.position) {
262 | case 'left':
263 | this.settings.offCanvasWrapper.css('left', 0);
264 | break;
265 |
266 | case 'top':
267 | this.settings.offCanvasWrapper.css('top', 0);
268 | break;
269 |
270 | case 'bottom':
271 | this.settings.offCanvasWrapper.css('bottom', 0);
272 | break;
273 |
274 | case 'right':
275 | this.settings.offCanvasWrapper.css('right', 0);
276 | break;
277 | }
278 | },
279 |
280 | /**
281 | * Initialize the overlay
282 | */
283 | initOverlay: function () {
284 | var self = this;
285 | var cssClass = this.settings.overlayCssClass;
286 |
287 | // Mark the background as active
288 | if (this.settings.overlay) {
289 | cssClass = cssClass + ' ' + this.settings.overlayBackgroundCssClass;
290 | }
291 |
292 | this.overlay = $('
', {
293 | 'id': this.element.attr('id') + '-overlay',
294 | 'class': cssClass
295 | }).on('click', function() {
296 | self.hideMenu();
297 | }).hide().appendTo('body');
298 | },
299 |
300 | /**
301 | * Update the visibility of the elements depending
302 | * on the break point settings and the current window size
303 | */
304 | updateElementsVisibility: function () {
305 | if (window.matchMedia('(max-width: ' + this.settings.breakPoint + 'px)').matches) {
306 | this.showTrigger();
307 | } else {
308 | this.hideMenu();
309 | this.hideTrigger();
310 | }
311 | },
312 |
313 | /**
314 | * Show the trigger
315 | */
316 | showTrigger: function() {
317 | if (!this.settings.trigger) {
318 | return;
319 | }
320 |
321 | this.settings.trigger.show();
322 | },
323 |
324 | /**
325 | * Hide the trigger
326 | */
327 | hideTrigger: function() {
328 | if (!this.settings.trigger) {
329 | return;
330 | }
331 |
332 | this.settings.trigger.hide();
333 | },
334 |
335 | /**
336 | * Show the overlay
337 | */
338 | showOverlay: function() {
339 | if (!this.overlay) {
340 | return;
341 | }
342 |
343 | this.overlay.show();
344 | this.overlay.addClass(this.settings.overlayActiveCssClass);
345 | },
346 |
347 | /**
348 | * Hide the overlay
349 | */
350 | hideOverlay: function() {
351 | if (!this.overlay) {
352 | return;
353 | }
354 |
355 | this.overlay.hide();
356 | this.overlay.removeClass(this.settings.overlayActiveCssClass);
357 | },
358 |
359 | /**
360 | * Show the menu
361 | */
362 | showMenu: function () {
363 | this.element.trigger('showMobileMenu', [this]);
364 |
365 | switch (this.settings.position) {
366 | case 'left':
367 | this.element.css(this.getCssTranslateRules(0, 0, true));
368 |
369 | if (this.settings.offCanvas) {
370 | this.settings.offCanvasWrapper.css(this.getCssTranslateRules(this.settings.size + '%', 0, true));
371 | }
372 | break;
373 |
374 | case 'top':
375 | this.element.css(this.getCssTranslateRules(0, 0, true));
376 |
377 | if (this.settings.offCanvas) {
378 | this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0, ($(window).height() * (this.settings.size / 100)) + 'px', true));
379 | }
380 | break;
381 |
382 | case 'bottom':
383 | this.element.css(this.getCssTranslateRules(0, 0, true));
384 |
385 | if (this.settings.offCanvas) {
386 | this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0, (-1 * $(window).height() * (this.settings.size / 100)) + 'px', true));
387 | }
388 | break;
389 |
390 | case 'right':
391 | this.element.css(this.getCssTranslateRules(0, 0, true));
392 |
393 | if (this.settings.offCanvas) {
394 | this.settings.offCanvasWrapper.css(this.getCssTranslateRules((-1 * this.settings.size) + '%', 0, true));
395 | }
396 | break;
397 | }
398 |
399 | this.showOverlay();
400 | this.element.addClass(this.settings.menuActiveClass);
401 | $('html').addClass(this.settings.menuActiveHtmlClass);
402 |
403 | // Add class to trigger
404 | if (this.settings.trigger) {
405 | this.settings.trigger.addClass(this.settings.menuActiveClass);
406 | }
407 | },
408 |
409 | /**
410 | * Hide the menu
411 | */
412 | hideMenu: function () {
413 | this.element.trigger('hideMobileMenu', [this]);
414 |
415 | switch (this.settings.position) {
416 | case 'left':
417 | this.element.css(this.getCssTranslateRules('-100%', 0, true));
418 |
419 | if (this.settings.offCanvas) {
420 | this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0, 0, true));
421 | }
422 | break;
423 |
424 | case 'top':
425 | this.element.css(this.getCssTranslateRules(0, '-100%', true));
426 |
427 | if (this.settings.offCanvas) {
428 | this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0, 0, true));
429 | }
430 | break;
431 |
432 | case 'bottom':
433 | this.element.css(this.getCssTranslateRules(0, '100%', true));
434 |
435 | if (this.settings.offCanvas) {
436 | this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0, 0, true));
437 | }
438 | break;
439 |
440 | case 'right':
441 | this.element.css(this.getCssTranslateRules('100%', 0, true));
442 |
443 | if (this.settings.offCanvas) {
444 | this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0, 0, true));
445 | }
446 | break;
447 | }
448 |
449 | this.hideOverlay();
450 | this.element.removeClass(this.settings.menuActiveClass);
451 | $('html').removeClass(this.settings.menuActiveHtmlClass);
452 |
453 | // Remove the class from trigger
454 | if (this.settings.trigger) {
455 | this.settings.trigger.removeClass(this.settings.menuActiveClass);
456 | }
457 | },
458 |
459 | /**
460 | * Toggle the menu
461 | */
462 | toggleMenu: function () {
463 | if (this.isActive()) {
464 | this.hideMenu();
465 | } else {
466 | this.showMenu();
467 | }
468 | },
469 |
470 | /**
471 | * Return true if the menu is active
472 | *
473 | * @return {bool}
474 | */
475 | isActive: function () {
476 | return this.element.hasClass(this.settings.menuActiveClass);
477 | },
478 |
479 | /**
480 | * Get the CSS translate3d rules
481 | *
482 | * @param {int} x
483 | * @param {int} y
484 | * @param {bool} scale
485 | *
486 | * @return {object}
487 | */
488 | getCssTranslateRules: function (x, y, scale) {
489 | scale = scale ? ' scale3d(1, 1, 1)' : '';
490 |
491 | return {
492 | 'will-change': 'transform',
493 | '-webkit-transform': 'translate3d(' + x + ', ' + y + ', 0)' + scale,
494 | '-moz-transform': 'translate3d(' + x + ', ' + y + ', 0)' + scale,
495 | '-ms-transform': 'translate3d(' + x + ', ' + y + ', 0)' + scale,
496 | '-o-transform': 'translate3d(' + x + ', ' + y + ', 0)' + scale,
497 | 'transform': 'translate3d(' + x + ', ' + y + ', 0)' + scale
498 | };
499 | },
500 |
501 | /**
502 | * Get the animation speed
503 | *
504 | * @return {int}
505 | */
506 | getAnimationSpeed: function() {
507 | if (!this.settings.animation) {
508 | return 0;
509 | }
510 |
511 | return this.settings.animationSpeed;
512 | }
513 | });
514 |
515 | // A really lightweight plugin wrapper around the constructor,
516 | // preventing against multiple instantiations
517 | $.fn[pluginName] = function (options) {
518 | return this.each(function () {
519 | if (!$.data(this, 'plugin_' + pluginName)) {
520 | $.data(this, 'plugin_' + pluginName, new Plugin(this, options));
521 | }
522 | });
523 | };
524 | })(jQuery, window, document);
525 |
--------------------------------------------------------------------------------
/assets/js/mobile-menu.jquery.min.js:
--------------------------------------------------------------------------------
1 | !function(s,t,e,i){"use strict";function a(t,e){this.element=s(t),this.overlay=null,this.settings=s.extend({},r,e),this._defaults=r,this._name=n,this.init()}var n="mobileMenu",r={animation:!1,animationSpeed:500,breakPoint:0,disableNavigation:!1,keepInPlace:!1,menuActiveClass:"active",menuActiveHtmlClass:"mobile_menu_active",menuSubNavigationHideCssClass:"submenu_hide",menuSubNavigationShowCssClass:"submenu_show",offCanvas:!1,offCanvasWrapper:null,offCanvasWrapperClass:"mobile_menu_wrapper",overlay:!1,overlayActiveCssClass:"active",overlayBackgroundCssClass:"background",overlayCssClass:"mobile_menu_overlay",position:"left",parentTogglers:!1,closeOnLinkClick:!1,size:75,trigger:null};s.extend(a.prototype,{init:function(){var e=s("body");if(!e.hasClass("ie8")&&!e.hasClass("ie9")){null===this.settings.offCanvasWrapper&&(this.settings.offCanvasWrapper=s("#wrapper")),this.initMenu(),this.initTrigger(),this.initOverlay(),this.settings.offCanvas&&this.initOffCanvasWrapper();var i=this;s(t).on("resize",function(){i.updateElementsVisibility()}),this.updateElementsVisibility(),this.element.css("display","block")}},initMenu:function(){var t=this,e=(this.settings.size>100?100:this.settings.size)+"%",i=this.getAnimationSpeed();switch(!0!==this.settings.disableNavigation&&this.element.find(".level_1").each(function(){t.initMenuNavigation(s(this))}),this.element.find('[data-mobile-menu="close"]').on("click",function(s){s.preventDefault(),t.hideMenu()}),this.settings.closeOnLinkClick&&this.element.find("a").on("click",function(){t.hideMenu()}),this.element.addClass("position_"+this.settings.position),this.settings.keepInPlace||this.element.appendTo("body"),this.settings.position){case"left":this.element.css({left:0,top:0,width:e,height:"100vh"}),this.element.css(this.getCssTranslateRules("-100%",0));break;case"top":this.element.css({left:0,top:0,height:e,width:"100%"}),this.element.css(this.getCssTranslateRules(0,"-100%"));break;case"bottom":this.element.css({left:0,bottom:0,height:e,width:"100%"}),this.element.css(this.getCssTranslateRules(0,"100%"));break;case"right":this.element.css({right:0,top:0,width:e,height:"100vh"}),this.element.css(this.getCssTranslateRules("100%",0))}this.element.css({"-webkit-backface-visibility":"hidden","-moz-backface-visibility":"hidden","-ms-backface-visibility":"hidden","-o-backface-visibility":"hidden","backface-visibility":"hidden"}),i&&this.element.css({"-webkit-transition":"-webkit-transform "+i+"ms ease","-moz-transition":"-moz-transform "+i+"ms ease","-o-transition":"-o-transform "+i+"ms ease",transition:"transform "+i+"ms ease"})},initMenuNavigation:function(t){var e=this,i=t.children(".submenu");i.each(function(){var t=s(this),a=t.children("a, span, strong").eq(0);a.hasClass("active")||a.hasClass("trail")?t.addClass(e.settings.menuSubNavigationShowCssClass):t.addClass(e.settings.menuSubNavigationHideCssClass),a.on("click",function(t){var a=s(this).parent();a.hasClass(e.settings.menuSubNavigationShowCssClass)?e.settings.parentTogglers&&(t.preventDefault(),a.addClass(e.settings.menuSubNavigationHideCssClass).removeClass(e.settings.menuSubNavigationShowCssClass)):(t.preventDefault(),i.removeClass(e.settings.menuSubNavigationShowCssClass).addClass(e.settings.menuSubNavigationHideCssClass),a.removeClass(e.settings.menuSubNavigationHideCssClass).addClass(e.settings.menuSubNavigationShowCssClass))});var n=t.children("ul").eq(0);n&&e.initMenuNavigation(n)})},initTrigger:function(){if(this.settings.trigger){var s=this;this.settings.trigger.on("click",function(){s.toggleMenu()})}},initOffCanvasWrapper:function(){var t=this.getAnimationSpeed(),e=s("
",{class:this.settings.offCanvasWrapperClass});switch(this.settings.offCanvasWrapper.parent().hasClass(this.settings.offCanvasWrapperClass)||this.settings.offCanvasWrapper.wrap(e),this.settings.offCanvasWrapper.css({"-webkit-transform":"translate3d(0, 0, 0)","-moz-transform":"translate3d(0, 0, 0)","-ms-transform":"translate3d(0, 0, 0)","-o-transform":"translate3d(0, 0, 0)",transform:"translate3d(0, 0, 0)","-webkit-backface-visibility":"hidden","-moz-backface-visibility":"hidden","-ms-backface-visibility":"hidden","-o-backface-visibility":"hidden","backface-visibility":"hidden"}),t>0&&this.settings.offCanvasWrapper.css({"-webkit-transition":"-webkit-transform "+t+"ms ease","-moz-transition":"-moz-transform "+t+"ms ease","-o-transition":"-o-transform "+t+"ms ease",transition:"transform "+t+"ms ease"}),this.settings.position){case"left":this.settings.offCanvasWrapper.css("left",0);break;case"top":this.settings.offCanvasWrapper.css("top",0);break;case"bottom":this.settings.offCanvasWrapper.css("bottom",0);break;case"right":this.settings.offCanvasWrapper.css("right",0)}},initOverlay:function(){var t=this,e=this.settings.overlayCssClass;this.settings.overlay&&(e=e+" "+this.settings.overlayBackgroundCssClass),this.overlay=s("
",{id:this.element.attr("id")+"-overlay",class:e}).on("click",function(){t.hideMenu()}).hide().appendTo("body")},updateElementsVisibility:function(){t.matchMedia("(max-width: "+this.settings.breakPoint+"px)").matches?this.showTrigger():(this.hideMenu(),this.hideTrigger())},showTrigger:function(){this.settings.trigger&&this.settings.trigger.show()},hideTrigger:function(){this.settings.trigger&&this.settings.trigger.hide()},showOverlay:function(){this.overlay&&(this.overlay.show(),this.overlay.addClass(this.settings.overlayActiveCssClass))},hideOverlay:function(){this.overlay&&(this.overlay.hide(),this.overlay.removeClass(this.settings.overlayActiveCssClass))},showMenu:function(){switch(this.element.trigger("showMobileMenu",[this]),this.settings.position){case"left":this.element.css(this.getCssTranslateRules(0,0,!0)),this.settings.offCanvas&&this.settings.offCanvasWrapper.css(this.getCssTranslateRules(this.settings.size+"%",0,!0));break;case"top":this.element.css(this.getCssTranslateRules(0,0,!0)),this.settings.offCanvas&&this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0,s(t).height()*(this.settings.size/100)+"px",!0));break;case"bottom":this.element.css(this.getCssTranslateRules(0,0,!0)),this.settings.offCanvas&&this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0,-1*s(t).height()*(this.settings.size/100)+"px",!0));break;case"right":this.element.css(this.getCssTranslateRules(0,0,!0)),this.settings.offCanvas&&this.settings.offCanvasWrapper.css(this.getCssTranslateRules(-1*this.settings.size+"%",0,!0))}this.showOverlay(),this.element.addClass(this.settings.menuActiveClass),s("html").addClass(this.settings.menuActiveHtmlClass),this.settings.trigger&&this.settings.trigger.addClass(this.settings.menuActiveClass)},hideMenu:function(){switch(this.element.trigger("hideMobileMenu",[this]),this.settings.position){case"left":this.element.css(this.getCssTranslateRules("-100%",0,!0)),this.settings.offCanvas&&this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0,0,!0));break;case"top":this.element.css(this.getCssTranslateRules(0,"-100%",!0)),this.settings.offCanvas&&this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0,0,!0));break;case"bottom":this.element.css(this.getCssTranslateRules(0,"100%",!0)),this.settings.offCanvas&&this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0,0,!0));break;case"right":this.element.css(this.getCssTranslateRules("100%",0,!0)),this.settings.offCanvas&&this.settings.offCanvasWrapper.css(this.getCssTranslateRules(0,0,!0))}this.hideOverlay(),this.element.removeClass(this.settings.menuActiveClass),s("html").removeClass(this.settings.menuActiveHtmlClass),this.settings.trigger&&this.settings.trigger.removeClass(this.settings.menuActiveClass)},toggleMenu:function(){this.isActive()?this.hideMenu():this.showMenu()},isActive:function(){return this.element.hasClass(this.settings.menuActiveClass)},getCssTranslateRules:function(s,t,e){return e=e?" scale3d(1, 1, 1)":"",{"will-change":"transform","-webkit-transform":"translate3d("+s+", "+t+", 0)"+e,"-moz-transform":"translate3d("+s+", "+t+", 0)"+e,"-ms-transform":"translate3d("+s+", "+t+", 0)"+e,"-o-transform":"translate3d("+s+", "+t+", 0)"+e,transform:"translate3d("+s+", "+t+", 0)"+e}},getAnimationSpeed:function(){return this.settings.animation?this.settings.animationSpeed:0}}),s.fn[n]=function(t){return this.each(function(){s.data(this,"plugin_"+n)||s.data(this,"plugin_"+n,new a(this,t))})}}(jQuery,window,document);
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "codefog/contao-mobile_menu",
3 | "description": "mobile_menu extension for Contao Open Source CMS",
4 | "keywords": ["contao", "mobile", "menu", "navigation"],
5 | "type": "contao-module",
6 | "license": "LGPL-3.0+",
7 | "authors": [
8 | {
9 | "name": "Codefog",
10 | "homepage": "http://codefog.pl"
11 | }
12 | ],
13 | "require": {
14 | "php": "^7.4 || ^8.0",
15 | "contao/core-bundle": "^4.13 || ^5.0",
16 | "contao-community-alliance/composer-plugin": "~2.4 || ~3.0"
17 | },
18 | "autoload":{
19 | "psr-4": {
20 | "Codefog\\MobileMenu\\": "src"
21 | }
22 | },
23 | "extra": {
24 | "contao": {
25 | "sources": {
26 | "": "system/modules/mobile_menu"
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/config/autoload.ini:
--------------------------------------------------------------------------------
1 | ;;
2 | ; List modules which are required to be loaded beforehand
3 | ;;
4 | requires[] = "core"
5 |
6 | ;;
7 | ; Configure what you want the autoload creator to register
8 | ;;
9 | register_namespaces = false
10 | register_classes = false
11 | register_templates = false
12 |
--------------------------------------------------------------------------------
/config/autoload.php:
--------------------------------------------------------------------------------
1 |
10 | * @author Kamil Kuzminski
11 | * @license LGPL
12 | */
13 |
14 | /**
15 | * Register the namespace
16 | */
17 | ClassLoader::addNamespace('Codefog\MobileMenu');
18 |
19 | /**
20 | * Register the classes
21 | */
22 | ClassLoader::addClasses(array
23 | (
24 | 'Codefog\MobileMenu\MobileMenuModule' => 'system/modules/mobile_menu/src/MobileMenuModule.php'
25 | ));
26 |
27 | /**
28 | * Register the templates
29 | */
30 | TemplateLoader::addFiles(array
31 | (
32 | 'mod_mobile_menu' => 'system/modules/mobile_menu/templates/modules'
33 | ));
34 |
--------------------------------------------------------------------------------
/config/config.php:
--------------------------------------------------------------------------------
1 |
10 | * @author Kamil Kuzminski
11 | * @license LGPL
12 | */
13 |
14 | /**
15 | * Extension version
16 | */
17 | @define('MOBILE_MENU_VERSION', '2.6');
18 | @define('MOBILE_MENU_BUILD', '0');
19 |
20 | /**
21 | * Front end modules
22 | */
23 | $GLOBALS['FE_MOD']['navigation']['mobile_menu'] = 'Codefog\MobileMenu\MobileMenuModule';
24 |
--------------------------------------------------------------------------------
/dca/tl_module.php:
--------------------------------------------------------------------------------
1 |
10 | * @author Kamil Kuzminski
11 | * @license LGPL
12 | */
13 |
14 | /**
15 | * Add palettes to tl_module
16 | */
17 | $GLOBALS['TL_DCA']['tl_module']['palettes']['__selector__'][] = 'mobile_menu_animation';
18 | $GLOBALS['TL_DCA']['tl_module']['subpalettes']['mobile_menu_animation'] = 'mobile_menu_animationSpeed';
19 |
20 | $GLOBALS['TL_DCA']['tl_module']['palettes']['mobile_menu'] = '
21 | {title_legend},name,type;
22 | {config_legend},mobile_menu_trigger,mobile_menu_html;
23 | {mobile_menu_display_legend},mobile_menu_phones,mobile_menu_tablets,mobile_menu_breakpoint,mobile_menu_parentTogglers,mobile_menu_disableNavigation,mobile_menu_closeOnLinkClick,mobile_menu_keepInPlace;
24 | {mobile_menu_design_legend},mobile_menu_position,mobile_menu_size,mobile_menu_overlay,mobile_menu_offCanvas,mobile_menu_noShadow,mobile_menu_animation;
25 | {template_legend:hide},customTpl;
26 | {protected_legend:hide},protected;
27 | {expert_legend:hide},guests,cssID,space';
28 |
29 | /**
30 | * Add fields to tl_module
31 | */
32 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_phones'] = array
33 | (
34 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_phones'],
35 | 'exclude' => true,
36 | 'inputType' => 'checkbox',
37 | 'eval' => array('tl_class'=>'w50'),
38 | 'sql' => "char(1) NOT NULL default ''"
39 | );
40 |
41 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_tablets'] = array
42 | (
43 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_tablets'],
44 | 'exclude' => true,
45 | 'inputType' => 'checkbox',
46 | 'eval' => array('tl_class'=>'w50'),
47 | 'sql' => "char(1) NOT NULL default ''"
48 | );
49 |
50 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_breakpoint'] = array
51 | (
52 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_breakpoint'],
53 | 'exclude' => true,
54 | 'inputType' => 'text',
55 | 'eval' => array('rgxp'=>'digit', 'maxlength'=>4, 'tl_class'=>'clr'),
56 | 'sql' => "varchar(4) NOT NULL default ''"
57 | );
58 |
59 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_disableNavigation'] = array
60 | (
61 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_disableNavigation'],
62 | 'exclude' => true,
63 | 'inputType' => 'checkbox',
64 | 'eval' => array('tl_class'=>'w50 m12'),
65 | 'sql' => "char(1) NOT NULL default ''"
66 | );
67 |
68 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_parentTogglers'] = array
69 | (
70 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_parentTogglers'],
71 | 'exclude' => true,
72 | 'inputType' => 'checkbox',
73 | 'eval' => array('tl_class'=>'w50 m12'),
74 | 'sql' => "char(1) NOT NULL default ''"
75 | );
76 |
77 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_closeOnLinkClick'] = array
78 | (
79 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_closeOnLinkClick'],
80 | 'exclude' => true,
81 | 'inputType' => 'checkbox',
82 | 'eval' => array('tl_class'=>'w50'),
83 | 'sql' => "char(1) NOT NULL default ''"
84 | );
85 |
86 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_keepInPlace'] = array
87 | (
88 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_keepInPlace'],
89 | 'exclude' => true,
90 | 'inputType' => 'checkbox',
91 | 'eval' => array('tl_class'=>'w50'),
92 | 'sql' => "char(1) NOT NULL default ''"
93 | );
94 |
95 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_position'] = array
96 | (
97 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_position'],
98 | 'default' => 'left',
99 | 'exclude' => true,
100 | 'inputType' => 'select',
101 | 'options' => array('left', 'right', 'top', 'bottom'),
102 | 'reference' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_position'],
103 | 'eval' => array('tl_class'=>'w50'),
104 | 'sql' => "varchar(8) NOT NULL default ''"
105 | );
106 |
107 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_size'] = array
108 | (
109 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_size'],
110 | 'exclude' => true,
111 | 'inputType' => 'text',
112 | 'eval' => array('rgxp'=>'prcnt', 'tl_class'=>'w50'),
113 | 'sql' => "varchar(3) NOT NULL default ''"
114 | );
115 |
116 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_overlay'] = array
117 | (
118 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_overlay'],
119 | 'exclude' => true,
120 | 'inputType' => 'checkbox',
121 | 'eval' => array('tl_class'=>'w50'),
122 | 'sql' => "char(1) NOT NULL default ''"
123 | );
124 |
125 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_offCanvas'] = array
126 | (
127 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_offCanvas'],
128 | 'exclude' => true,
129 | 'inputType' => 'checkbox',
130 | 'eval' => array('tl_class'=>'w50'),
131 | 'sql' => "char(1) NOT NULL default ''"
132 | );
133 |
134 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_noShadow'] = array
135 | (
136 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_noShadow'],
137 | 'exclude' => true,
138 | 'inputType' => 'checkbox',
139 | 'eval' => array('tl_class'=>'w50'),
140 | 'sql' => "char(1) NOT NULL default ''"
141 | );
142 |
143 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_animation'] = array
144 | (
145 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_animation'],
146 | 'exclude' => true,
147 | 'inputType' => 'checkbox',
148 | 'eval' => array('submitOnChange'=>true, 'tl_class'=>'clr'),
149 | 'sql' => "char(1) NOT NULL default ''"
150 | );
151 |
152 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_animationSpeed'] = array
153 | (
154 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_animationSpeed'],
155 | 'default' => 500,
156 | 'exclude' => true,
157 | 'inputType' => 'text',
158 | 'eval' => array('rgxp'=>'digit', 'tl_class'=>'w50'),
159 | 'sql' => "smallint(5) unsigned NOT NULL default '0'"
160 | );
161 |
162 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_trigger'] = array
163 | (
164 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_trigger'],
165 | 'exclude' => true,
166 | 'inputType' => 'textarea',
167 | 'eval' => array('allowHtml'=>true, 'class'=>'monospace', 'rte'=>'ace|html', 'helpwizard'=>true, 'tl_class'=>'clr'),
168 | 'explanation' => 'insertTags',
169 | 'sql' => "text NULL"
170 | );
171 |
172 | $GLOBALS['TL_DCA']['tl_module']['fields']['mobile_menu_html'] = array
173 | (
174 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['mobile_menu_html'],
175 | 'exclude' => true,
176 | 'inputType' => 'textarea',
177 | 'eval' => array('allowHtml'=>true, 'class'=>'monospace', 'rte'=>'ace|html', 'helpwizard'=>true),
178 | 'explanation' => 'insertTags',
179 | 'sql' => "text NULL"
180 | );
181 |
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
1 | # Mobile Menu – Documentation
2 |
3 | ## Panel content
4 |
5 | Firstly, you need to plan what should be inside the mobile panel. Usually it is a good place for navigation
6 | and some additional content like contact details or even search box. Create then the necessary modules and write down
7 | their IDs - they are mandatory for the insert tag.
8 |
9 | ## Create a module
10 |
11 | Once the content for panel is ready, please create a new front end module of `Mobile menu` type. The first thing
12 | you need to configure is the visibility of the module on the mobile devices. Set whether the menu should be visible
13 | on the phones, tablets or both. You can also enter your own breakpoint in pixels. Please note that setting a custom
14 | breakpoint value will override the two other checkbox settings.
15 |
16 | The trigger content is the HTML code of the element which when clicked will open the panel. In the below example
17 | I used a simple label wrapped in `` tag.
18 |
19 | The menu content is the actual content of the panel. Here you should insert the navigation module using
20 | the `{{insert_module::ID}}` insert tag. Additionally, you can for example add contact information or any other
21 | elements you'd like to have.
22 |
23 | 
24 |
25 | ## Design settings
26 |
27 | Next, you should decide where the menu should be displayed. You can either choose left or right side, top or the bottom.
28 | Here you can also specify the width or height (depends on position type) dimension in percent (%). If you leave
29 | this field empty, the default value will be used which is 80%.
30 |
31 | Additionally, you can enable the overlay effect which will overlay the website content with a dark transparent layer
32 | when the menu is open. The off canvas effect will cause your website content to be visually pushed to the side,
33 | making space for mobile menu content.
34 |
35 | To make it even more attractive, it is possible to set the animation during opening and closing the menu. After enabling
36 | the animation, please enter the animation duration in milliseconds (1000ms = 1s). The default value is 500ms.
37 |
38 | > The mobile menu comes with a very minimal styling. It's not a bug, it's a feature - it is totally up to the user
39 | > what styles should be applied to it.
40 |
41 | ## Custom close buttons
42 |
43 | Since version 2.1 it is possible to have the custom close buttons within the menu content. Every element that performs
44 | close action should receive the following data attribute:
45 |
46 | ```html
47 | Close
48 | ```
49 |
50 | ## Events
51 |
52 | ### Show menu event
53 |
54 | The event is triggered when the menu is shown:
55 |
56 | ```js
57 | $('#mobile-menu-...').on('showMobileMenu', function (event, plugin) {
58 | // ...
59 | });
60 | ```
61 |
62 | ### Hide menu event
63 |
64 | The event is triggered when the menu is hidden:
65 |
66 | ```js
67 | $('#mobile-menu-...').on('hideMobileMenu', function (event, plugin) {
68 | // ...
69 | });
70 | ```
71 |
72 | ## Include the module in the layout
73 |
74 | Do not forget to include the module in the page layout! Depending on your configuration and style of developing
75 | the websites, you can either do that by adjust the page layout settings or using the `{{insert_module::ID}}` insert tag
76 | in some HTML front end module that is used to render page header.
77 |
--------------------------------------------------------------------------------
/docs/images/configuration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codefog/contao-mobile_menu/cfa7639d0295510ed943a70b7d9791cbc392bf99/docs/images/configuration.png
--------------------------------------------------------------------------------
/docs/images/preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codefog/contao-mobile_menu/cfa7639d0295510ed943a70b7d9791cbc392bf99/docs/images/preview.png
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const gulp = require('gulp');
4 | const uglify = require('gulp-uglify');
5 | const cleanCSS = require('gulp-clean-css');
6 | const rename = require('gulp-rename');
7 |
8 | gulp.task('scripts', function () {
9 | return gulp.src('assets/js/mobile-menu.jquery.js')
10 | .pipe(uglify())
11 | .pipe(rename(function(path) {
12 | path.extname = '.min' + path.extname;
13 | }))
14 | .pipe(gulp.dest('assets/js'));
15 | });
16 |
17 | gulp.task('styles', function () {
18 | return gulp.src('assets/css/mobile-menu.css')
19 | .pipe(cleanCSS({restructuring: false}))
20 | .pipe(rename(function(path) {
21 | path.extname = '.min' + path.extname;
22 | }))
23 | .pipe(gulp.dest('assets/css'));
24 | });
25 |
26 | gulp.task('default', ['scripts', 'styles']);
27 |
--------------------------------------------------------------------------------
/languages/de/modules.php:
--------------------------------------------------------------------------------
1 |
10 | * @author Kamil Kuzminski
11 | * @author Didier Federer
12 | * @license LGPL
13 | */
14 |
15 | /**
16 | * Front end modules
17 | */
18 | $GLOBALS['TL_LANG']['FMD']['mobile_menu'] = ['Mobile Menu', 'Fügt ein Mobile Menu auf der Seite ein.'];
19 |
--------------------------------------------------------------------------------
/languages/de/tl_module.php:
--------------------------------------------------------------------------------
1 |
10 | * @author Kamil Kuzminski
11 | * @author Didier Federer
12 | * @author Joachim Scholtysik
13 | * @license LGPL
14 | */
15 |
16 | /**
17 | * Fields
18 | */
19 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_phones'] = [
20 | 'Auf Smartphones anzeigen',
21 | 'Zeigt das Menü auf Smartphones an (Max. Breite: 767px).',
22 | ];
23 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_tablets'] = [
24 | 'Auf Tablets anzeigen',
25 | 'Zeigt das Menü auf Tablets an (Max. Breite: 991px).',
26 | ];
27 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_breakpoint'] = [
28 | 'Individueller Breakpoint (px)',
29 | 'Hier können Sie einen individuellen Breakpoint in Pixel eingeben, bei dem das Menü angezeigt werden soll. Dieser Wert überschreibt die oben vordefinierten Breakpoints für Smartphones und Tablets!',
30 | ];
31 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_disableNavigation'] = [
32 | 'Zusammenklappbare Navigation deaktivieren',
33 | 'Deaktiviert die Eigenschaft, die Navigation standardmäßig zusammenklappen zu können (nicht empfohlen).',
34 | ];
35 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_parentTogglers'] = [
36 | 'Eltern-Menüpunkte nur als Toggler verwenden',
37 | 'Bewirkt, dass die Menüpunkte mit Untermenüs nur als Toggler verwendet werden können. Damit ist es nicht möglich, eine Seite mit Untermenüs durch Klick auszuwählen.',
38 | ];
39 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_closeOnLinkClick'] = [
40 | 'Menü beim Klick auf einen Link schließen.',
41 | 'Schließt das Menü, wenn ein Link darin angeklickt wird. Das ist besonders hilfreich beim Scrollen in einer One-Page Navigation.',
42 | ];
43 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_position'] = [
44 | 'Position',
45 | 'Hier können Sie die Menüposition auswählen.',
46 | ];
47 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_size'] = [
48 | 'Individuelle Menügröße (%)',
49 | 'Hier können Sie die individuelle Menübreite oder -höhe in % eingeben.',
50 | ];
51 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_overlay'] = [
52 | 'Overlay aktivieren',
53 | 'Aktivieren des Overlays über den Inhalt, wenn das Menü aktiv ist.',
54 | ];
55 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_offCanvas'] = [
56 | 'Off Canvas Effekt',
57 | 'Den Off Canvas Effekt verwenden, wenn das Menü aktiv ist.',
58 | ];
59 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_noShadow'] = [
60 | 'Menüschatten deaktivieren',
61 | 'Deaktivieren des Menüschattens, wenn das Menü aktiv ist.',
62 | ];
63 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_animation'] = [
64 | 'Animation aktivieren',
65 | 'Aktvivieren der Animation für die Anzeige und das Verstecken des Menüs.',
66 | ];
67 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_animationSpeed'] = [
68 | 'Animationsgeschwindigkeit (ms)',
69 | 'Hier können Sie die Animationsgeschwindigkeit des Menüs eingeben (1000ms = 1 Sekunde).',
70 | ];
71 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_trigger'] = [
72 | 'Trigger Inhalt',
73 | 'Hier können Sie den HTML Inhalt des Triggers hinzufügen.',
74 | ];
75 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_html'] = [
76 | 'Menu Inhalt',
77 | 'Hier können Sie den HTML Inhalt des Menüs hinzufügen.',
78 | ];
79 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_keepInPlace'] = [
80 | 'Menü an der Position behalten',
81 | 'Bewege das Menü nicht ans Ende des <body> Elementes. Hinweis: Diese Einstellung ist für Nutzer, die das Standardverhalten des Menüs ändern möchten.'
82 | ];
83 |
84 | /**
85 | * Reference
86 | */
87 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_position']['left'] = 'Links';
88 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_position']['right'] = 'Rechts';
89 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_position']['top'] = 'Oben';
90 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_position']['bottom'] = 'Unten';
91 |
92 | /**
93 | * Legends
94 | */
95 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_display_legend'] = 'Anzeigeeinstellungen';
96 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_design_legend'] = 'Darstellungseinstellungen';
97 |
--------------------------------------------------------------------------------
/languages/en/modules.php:
--------------------------------------------------------------------------------
1 |
10 | * @author Kamil Kuzminski
11 | * @license LGPL
12 | */
13 |
14 | /**
15 | * Front end modules
16 | */
17 | $GLOBALS['TL_LANG']['FMD']['mobile_menu'] = ['Mobile menu', 'Adds a mobile menu to the page.'];
18 |
--------------------------------------------------------------------------------
/languages/en/tl_module.php:
--------------------------------------------------------------------------------
1 |
10 | * @author Kamil Kuzminski
11 | * @license LGPL
12 | */
13 |
14 | /**
15 | * Fields
16 | */
17 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_phones'] = [
18 | 'Display on phones',
19 | 'Display the menu on phone devices (767px screen width).'
20 | ];
21 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_tablets'] = [
22 | 'Display on tablets',
23 | 'Display the menu on tablet devices (991px screen width).'
24 | ];
25 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_breakpoint'] = [
26 | 'Custom breakpoint (px)',
27 | 'Here you can enter a custom breakpoint when the menu will be shown in pixels. This value will override the above predefined breakpoints for phones and tablets!'
28 | ];
29 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_disableNavigation'] = [
30 | 'Disable collapsible navigation',
31 | 'Disable the default collapsible navigation feature (not recommended).'
32 | ];
33 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_parentTogglers'] = [
34 | 'Make parent items work as togglers only',
35 | 'Force the items that have submenus to work as togglers only. It will not be possible to access the page with submenus by clicking on it.'
36 | ];
37 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_closeOnLinkClick'] = [
38 | 'Close menu on link click',
39 | 'Close the mobile menu if any link inside it is clicked. This is especially useful for one-page navigation scroll.'
40 | ];
41 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_keepInPlace'] = [
42 | 'Keep menu in place',
43 | 'Do not move the menu to the <body> element at the bottom. Note: this setting is dedicated for users who would like to change the menu default behavior.'
44 | ];
45 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_position'] = ['Position', 'Here you can choose the menu position.'];
46 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_size'] = [
47 | 'Custom menu size (%s)',
48 | 'Here you can enter the custom menu width or height in %.'
49 | ];
50 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_overlay'] = [
51 | 'Enable the overlay',
52 | 'Enable the overlay over the content when menu is active.'
53 | ];
54 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_offCanvas'] = [
55 | 'Off canvas effect',
56 | 'Use the off canvas effect when menu is active.'
57 | ];
58 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_noShadow'] = [
59 | 'Disable menu shadow',
60 | 'Disable the default menu shadow when it is active.'
61 | ];
62 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_animation'] = [
63 | 'Enable animation',
64 | 'Enable animation of showing and hiding the menu.'
65 | ];
66 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_animationSpeed'] = [
67 | 'Animation speed (ms)',
68 | 'Here you can enter the animation speed of the menu (1000ms = 1 second).'
69 | ];
70 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_trigger'] = [
71 | 'Trigger content',
72 | 'Here you can add the HTML content of the trigger.'
73 | ];
74 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_html'] = [
75 | 'Menu content',
76 | 'Here you can add the HTML content of the menu.'
77 | ];
78 |
79 | /**
80 | * Reference
81 | */
82 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_position']['left'] = 'Left side';
83 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_position']['right'] = 'Right side';
84 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_position']['top'] = 'On the top';
85 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_position']['bottom'] = 'On the bottom';
86 |
87 | /**
88 | * Legends
89 | */
90 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_display_legend'] = 'Display settings';
91 | $GLOBALS['TL_LANG']['tl_module']['mobile_menu_design_legend'] = 'Design settings';
92 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "gulp": "^3.9.1",
4 | "gulp-clean-css": "^3.9.0",
5 | "gulp-rename": "^1.2.2",
6 | "gulp-uglify": "^2.1.0"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/MobileMenuModule.php:
--------------------------------------------------------------------------------
1 |
10 | * @author Kamil Kuzminski
11 | * @license LGPL
12 | */
13 |
14 | namespace Codefog\MobileMenu;
15 |
16 | /**
17 | * Class MobileMenuModule
18 | *
19 | * Front end module "mobile menu".
20 | */
21 | class MobileMenuModule extends \Contao\Module
22 | {
23 |
24 | /**
25 | * Template
26 | * @var string
27 | */
28 | protected $strTemplate = 'mod_mobile_menu';
29 |
30 | /**
31 | * Display a wildcard in the back end
32 | * @return string
33 | */
34 | public function generate()
35 | {
36 | $request = \Contao\System::getContainer()->get('request_stack')->getCurrentRequest();
37 |
38 | if ($request && \Contao\System::getContainer()->get('contao.routing.scope_matcher')->isBackendRequest($request))
39 | {
40 | $objTemplate = new \Contao\BackendTemplate('be_wildcard');
41 |
42 | $objTemplate->wildcard = '### ' . mb_strtoupper($GLOBALS['TL_LANG']['FMD']['mobile_menu'][0]) . ' ###';
43 | $objTemplate->title = $this->headline;
44 | $objTemplate->id = $this->id;
45 | $objTemplate->link = $this->name;
46 | $objTemplate->href = \Contao\StringUtil::specialcharsUrl(\Contao\System::getContainer()->get('router')->generate('contao_backend', array('do'=>'themes', 'table'=>'tl_module', 'act'=>'edit', 'id'=>$this->id)));
47 |
48 |
49 | return $objTemplate->parse();
50 | }
51 |
52 | return parent::generate();
53 | }
54 |
55 | /**
56 | * Generate the module
57 | */
58 | protected function compile()
59 | {
60 | $this->Template->trigger = $this->mobile_menu_trigger;
61 | $this->Template->html = $this->mobile_menu_html;
62 | $this->Template->position = $this->mobile_menu_position;
63 | $this->Template->size = (int)$this->mobile_menu_size;
64 | $this->Template->overlay = $this->mobile_menu_overlay;
65 | $this->Template->offCanvas = $this->mobile_menu_offCanvas;
66 | $this->Template->animation = $this->mobile_menu_animation;
67 | $this->Template->animationSpeed = (int)$this->mobile_menu_animationSpeed;
68 | $this->Template->mediaQuery = $this->mobile_menu_mediaQuery;
69 | $this->Template->noShadow = $this->mobile_menu_noShadow;
70 | $this->Template->disableNavigation = $this->mobile_menu_disableNavigation;
71 | $this->Template->parentTogglers = $this->mobile_menu_parentTogglers;
72 | $this->Template->closeOnLinkClick = $this->mobile_menu_closeOnLinkClick;
73 | $this->Template->keepInPlace = $this->mobile_menu_keepInPlace;
74 |
75 | $breakPoint = 0;
76 |
77 | // Display on phones
78 | if ($this->mobile_menu_phones) {
79 | $breakPoint = 767;
80 | }
81 |
82 | // Display on tablets
83 | if ($this->mobile_menu_tablets) {
84 | $breakPoint = 991;
85 | }
86 |
87 | // Set a custom break point
88 | if ($this->mobile_menu_breakpoint) {
89 | $breakPoint = (int)$this->mobile_menu_breakpoint;
90 | }
91 |
92 | $this->Template->breakPoint = $breakPoint;
93 |
94 | $this->addMobileMenuAssets();
95 | }
96 |
97 | /**
98 | * Add the mobile menu assets
99 | */
100 | protected function addMobileMenuAssets()
101 | {
102 | $GLOBALS['TL_CSS']['mobileMenu'] = 'system/modules/mobile_menu/assets/css/mobile-menu.min.css||static';
103 | $GLOBALS['TL_JAVASCRIPT']['mobileMenu'] = 'system/modules/mobile_menu/assets/js/mobile-menu.jquery.min.js|static';
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/templates/modules/mod_mobile_menu.html5:
--------------------------------------------------------------------------------
1 |
2 | extend('block_unsearchable'); ?>
3 |
4 | block('content'); ?>
5 |
6 |
9 |
10 |
11 |
12 | = $this->html; ?>
13 |
14 |
15 |
16 |
36 |
37 | endblock(); ?>
38 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | align-text@^0.1.1, align-text@^0.1.3:
6 | version "0.1.4"
7 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
8 | dependencies:
9 | kind-of "^3.0.2"
10 | longest "^1.0.1"
11 | repeat-string "^1.5.2"
12 |
13 | ansi-regex@^2.0.0:
14 | version "2.1.1"
15 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
16 |
17 | ansi-styles@^2.2.1:
18 | version "2.2.1"
19 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
20 |
21 | archy@^1.0.0:
22 | version "1.0.0"
23 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
24 |
25 | arr-diff@^2.0.0:
26 | version "2.0.0"
27 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
28 | dependencies:
29 | arr-flatten "^1.0.1"
30 |
31 | arr-flatten@^1.0.1:
32 | version "1.1.0"
33 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
34 |
35 | array-differ@^1.0.0:
36 | version "1.0.0"
37 | resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
38 |
39 | array-each@^1.0.1:
40 | version "1.0.1"
41 | resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
42 |
43 | array-slice@^1.0.0:
44 | version "1.1.0"
45 | resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4"
46 |
47 | array-uniq@^1.0.2:
48 | version "1.0.3"
49 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
50 |
51 | array-unique@^0.2.1:
52 | version "0.2.1"
53 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
54 |
55 | balanced-match@^1.0.0:
56 | version "1.0.0"
57 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
58 |
59 | beeper@^1.0.0:
60 | version "1.1.1"
61 | resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809"
62 |
63 | brace-expansion@^1.0.0:
64 | version "1.1.8"
65 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
66 | dependencies:
67 | balanced-match "^1.0.0"
68 | concat-map "0.0.1"
69 |
70 | braces@^1.8.2:
71 | version "1.8.5"
72 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
73 | dependencies:
74 | expand-range "^1.8.1"
75 | preserve "^0.2.0"
76 | repeat-element "^1.1.2"
77 |
78 | camelcase@^1.0.2:
79 | version "1.2.1"
80 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
81 |
82 | center-align@^0.1.1:
83 | version "0.1.3"
84 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
85 | dependencies:
86 | align-text "^0.1.3"
87 | lazy-cache "^1.0.3"
88 |
89 | chalk@^1.0.0, chalk@^1.1.1:
90 | version "1.1.3"
91 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
92 | dependencies:
93 | ansi-styles "^2.2.1"
94 | escape-string-regexp "^1.0.2"
95 | has-ansi "^2.0.0"
96 | strip-ansi "^3.0.0"
97 | supports-color "^2.0.0"
98 |
99 | clean-css@4.1.9:
100 | version "4.1.9"
101 | resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301"
102 | dependencies:
103 | source-map "0.5.x"
104 |
105 | cliui@^2.1.0:
106 | version "2.1.0"
107 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
108 | dependencies:
109 | center-align "^0.1.1"
110 | right-align "^0.1.1"
111 | wordwrap "0.0.2"
112 |
113 | clone-stats@^0.0.1:
114 | version "0.0.1"
115 | resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
116 |
117 | clone@^0.2.0:
118 | version "0.2.0"
119 | resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"
120 |
121 | clone@^1.0.0, clone@^1.0.2:
122 | version "1.0.3"
123 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
124 |
125 | concat-map@0.0.1:
126 | version "0.0.1"
127 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
128 |
129 | core-util-is@~1.0.0:
130 | version "1.0.2"
131 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
132 |
133 | dateformat@^2.0.0:
134 | version "2.2.0"
135 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
136 |
137 | decamelize@^1.0.0:
138 | version "1.2.0"
139 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
140 |
141 | defaults@^1.0.0:
142 | version "1.0.3"
143 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
144 | dependencies:
145 | clone "^1.0.2"
146 |
147 | deprecated@^0.0.1:
148 | version "0.0.1"
149 | resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19"
150 |
151 | detect-file@^0.1.0:
152 | version "0.1.0"
153 | resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63"
154 | dependencies:
155 | fs-exists-sync "^0.1.0"
156 |
157 | duplexer2@0.0.2:
158 | version "0.0.2"
159 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
160 | dependencies:
161 | readable-stream "~1.1.9"
162 |
163 | end-of-stream@~0.1.5:
164 | version "0.1.5"
165 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf"
166 | dependencies:
167 | once "~1.3.0"
168 |
169 | escape-string-regexp@^1.0.2:
170 | version "1.0.5"
171 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
172 |
173 | expand-brackets@^0.1.4:
174 | version "0.1.5"
175 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
176 | dependencies:
177 | is-posix-bracket "^0.1.0"
178 |
179 | expand-range@^1.8.1:
180 | version "1.8.2"
181 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
182 | dependencies:
183 | fill-range "^2.1.0"
184 |
185 | expand-tilde@^1.2.2:
186 | version "1.2.2"
187 | resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449"
188 | dependencies:
189 | os-homedir "^1.0.1"
190 |
191 | expand-tilde@^2.0.2:
192 | version "2.0.2"
193 | resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
194 | dependencies:
195 | homedir-polyfill "^1.0.1"
196 |
197 | extend@^3.0.0:
198 | version "3.0.1"
199 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
200 |
201 | extglob@^0.3.1:
202 | version "0.3.2"
203 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
204 | dependencies:
205 | is-extglob "^1.0.0"
206 |
207 | fancy-log@^1.1.0:
208 | version "1.3.0"
209 | resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948"
210 | dependencies:
211 | chalk "^1.1.1"
212 | time-stamp "^1.0.0"
213 |
214 | filename-regex@^2.0.0:
215 | version "2.0.1"
216 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
217 |
218 | fill-range@^2.1.0:
219 | version "2.2.3"
220 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
221 | dependencies:
222 | is-number "^2.1.0"
223 | isobject "^2.0.0"
224 | randomatic "^1.1.3"
225 | repeat-element "^1.1.2"
226 | repeat-string "^1.5.2"
227 |
228 | find-index@^0.1.1:
229 | version "0.1.1"
230 | resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"
231 |
232 | findup-sync@^0.4.2:
233 | version "0.4.3"
234 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12"
235 | dependencies:
236 | detect-file "^0.1.0"
237 | is-glob "^2.0.1"
238 | micromatch "^2.3.7"
239 | resolve-dir "^0.1.0"
240 |
241 | fined@^1.0.1:
242 | version "1.1.0"
243 | resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476"
244 | dependencies:
245 | expand-tilde "^2.0.2"
246 | is-plain-object "^2.0.3"
247 | object.defaults "^1.1.0"
248 | object.pick "^1.2.0"
249 | parse-filepath "^1.0.1"
250 |
251 | first-chunk-stream@^1.0.0:
252 | version "1.0.0"
253 | resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"
254 |
255 | flagged-respawn@^0.3.2:
256 | version "0.3.2"
257 | resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5"
258 |
259 | for-in@^1.0.1:
260 | version "1.0.2"
261 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
262 |
263 | for-own@^0.1.4:
264 | version "0.1.5"
265 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
266 | dependencies:
267 | for-in "^1.0.1"
268 |
269 | for-own@^1.0.0:
270 | version "1.0.0"
271 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
272 | dependencies:
273 | for-in "^1.0.1"
274 |
275 | fs-exists-sync@^0.1.0:
276 | version "0.1.0"
277 | resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
278 |
279 | gaze@^0.5.1:
280 | version "0.5.2"
281 | resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f"
282 | dependencies:
283 | globule "~0.1.0"
284 |
285 | glob-base@^0.3.0:
286 | version "0.3.0"
287 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
288 | dependencies:
289 | glob-parent "^2.0.0"
290 | is-glob "^2.0.0"
291 |
292 | glob-parent@^2.0.0:
293 | version "2.0.0"
294 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
295 | dependencies:
296 | is-glob "^2.0.0"
297 |
298 | glob-stream@^3.1.5:
299 | version "3.1.18"
300 | resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b"
301 | dependencies:
302 | glob "^4.3.1"
303 | glob2base "^0.0.12"
304 | minimatch "^2.0.1"
305 | ordered-read-streams "^0.1.0"
306 | through2 "^0.6.1"
307 | unique-stream "^1.0.0"
308 |
309 | glob-watcher@^0.0.6:
310 | version "0.0.6"
311 | resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b"
312 | dependencies:
313 | gaze "^0.5.1"
314 |
315 | glob2base@^0.0.12:
316 | version "0.0.12"
317 | resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
318 | dependencies:
319 | find-index "^0.1.1"
320 |
321 | glob@^4.3.1:
322 | version "4.5.3"
323 | resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f"
324 | dependencies:
325 | inflight "^1.0.4"
326 | inherits "2"
327 | minimatch "^2.0.1"
328 | once "^1.3.0"
329 |
330 | glob@~3.1.21:
331 | version "3.1.21"
332 | resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd"
333 | dependencies:
334 | graceful-fs "~1.2.0"
335 | inherits "1"
336 | minimatch "~0.2.11"
337 |
338 | global-modules@^0.2.3:
339 | version "0.2.3"
340 | resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d"
341 | dependencies:
342 | global-prefix "^0.1.4"
343 | is-windows "^0.2.0"
344 |
345 | global-prefix@^0.1.4:
346 | version "0.1.5"
347 | resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f"
348 | dependencies:
349 | homedir-polyfill "^1.0.0"
350 | ini "^1.3.4"
351 | is-windows "^0.2.0"
352 | which "^1.2.12"
353 |
354 | globule@~0.1.0:
355 | version "0.1.0"
356 | resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5"
357 | dependencies:
358 | glob "~3.1.21"
359 | lodash "~1.0.1"
360 | minimatch "~0.2.11"
361 |
362 | glogg@^1.0.0:
363 | version "1.0.0"
364 | resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5"
365 | dependencies:
366 | sparkles "^1.0.0"
367 |
368 | graceful-fs@^3.0.0:
369 | version "3.0.11"
370 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818"
371 | dependencies:
372 | natives "^1.1.0"
373 |
374 | graceful-fs@~1.2.0:
375 | version "1.2.3"
376 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
377 |
378 | gulp-clean-css@^3.9.0:
379 | version "3.9.0"
380 | resolved "https://registry.yarnpkg.com/gulp-clean-css/-/gulp-clean-css-3.9.0.tgz#e43e4c8d695060f6ba08a154d8e76d0d87b1c822"
381 | dependencies:
382 | clean-css "4.1.9"
383 | gulp-util "3.0.8"
384 | through2 "2.0.3"
385 | vinyl-sourcemaps-apply "0.2.1"
386 |
387 | gulp-rename@^1.2.2:
388 | version "1.2.2"
389 | resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817"
390 |
391 | gulp-uglify@^2.1.0:
392 | version "2.1.2"
393 | resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-2.1.2.tgz#6db85b1d0ee63d18058592b658649d65c2ec4541"
394 | dependencies:
395 | gulplog "^1.0.0"
396 | has-gulplog "^0.1.0"
397 | lodash "^4.13.1"
398 | make-error-cause "^1.1.1"
399 | through2 "^2.0.0"
400 | uglify-js "~2.8.10"
401 | uglify-save-license "^0.4.1"
402 | vinyl-sourcemaps-apply "^0.2.0"
403 |
404 | gulp-util@3.0.8, gulp-util@^3.0.0:
405 | version "3.0.8"
406 | resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
407 | dependencies:
408 | array-differ "^1.0.0"
409 | array-uniq "^1.0.2"
410 | beeper "^1.0.0"
411 | chalk "^1.0.0"
412 | dateformat "^2.0.0"
413 | fancy-log "^1.1.0"
414 | gulplog "^1.0.0"
415 | has-gulplog "^0.1.0"
416 | lodash._reescape "^3.0.0"
417 | lodash._reevaluate "^3.0.0"
418 | lodash._reinterpolate "^3.0.0"
419 | lodash.template "^3.0.0"
420 | minimist "^1.1.0"
421 | multipipe "^0.1.2"
422 | object-assign "^3.0.0"
423 | replace-ext "0.0.1"
424 | through2 "^2.0.0"
425 | vinyl "^0.5.0"
426 |
427 | gulp@^3.9.1:
428 | version "3.9.1"
429 | resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4"
430 | dependencies:
431 | archy "^1.0.0"
432 | chalk "^1.0.0"
433 | deprecated "^0.0.1"
434 | gulp-util "^3.0.0"
435 | interpret "^1.0.0"
436 | liftoff "^2.1.0"
437 | minimist "^1.1.0"
438 | orchestrator "^0.3.0"
439 | pretty-hrtime "^1.0.0"
440 | semver "^4.1.0"
441 | tildify "^1.0.0"
442 | v8flags "^2.0.2"
443 | vinyl-fs "^0.3.0"
444 |
445 | gulplog@^1.0.0:
446 | version "1.0.0"
447 | resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5"
448 | dependencies:
449 | glogg "^1.0.0"
450 |
451 | has-ansi@^2.0.0:
452 | version "2.0.0"
453 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
454 | dependencies:
455 | ansi-regex "^2.0.0"
456 |
457 | has-gulplog@^0.1.0:
458 | version "0.1.0"
459 | resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce"
460 | dependencies:
461 | sparkles "^1.0.0"
462 |
463 | homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1:
464 | version "1.0.1"
465 | resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
466 | dependencies:
467 | parse-passwd "^1.0.0"
468 |
469 | inflight@^1.0.4:
470 | version "1.0.6"
471 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
472 | dependencies:
473 | once "^1.3.0"
474 | wrappy "1"
475 |
476 | inherits@1:
477 | version "1.0.2"
478 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
479 |
480 | inherits@2, inherits@~2.0.1, inherits@~2.0.3:
481 | version "2.0.3"
482 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
483 |
484 | ini@^1.3.4:
485 | version "1.3.5"
486 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
487 |
488 | interpret@^1.0.0:
489 | version "1.1.0"
490 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
491 |
492 | is-absolute@^0.2.3:
493 | version "0.2.6"
494 | resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb"
495 | dependencies:
496 | is-relative "^0.2.1"
497 | is-windows "^0.2.0"
498 |
499 | is-buffer@^1.1.5:
500 | version "1.1.6"
501 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
502 |
503 | is-dotfile@^1.0.0:
504 | version "1.0.3"
505 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
506 |
507 | is-equal-shallow@^0.1.3:
508 | version "0.1.3"
509 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
510 | dependencies:
511 | is-primitive "^2.0.0"
512 |
513 | is-extendable@^0.1.1:
514 | version "0.1.1"
515 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
516 |
517 | is-extglob@^1.0.0:
518 | version "1.0.0"
519 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
520 |
521 | is-glob@^2.0.0, is-glob@^2.0.1:
522 | version "2.0.1"
523 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
524 | dependencies:
525 | is-extglob "^1.0.0"
526 |
527 | is-number@^2.1.0:
528 | version "2.1.0"
529 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
530 | dependencies:
531 | kind-of "^3.0.2"
532 |
533 | is-number@^3.0.0:
534 | version "3.0.0"
535 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
536 | dependencies:
537 | kind-of "^3.0.2"
538 |
539 | is-plain-object@^2.0.3:
540 | version "2.0.4"
541 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
542 | dependencies:
543 | isobject "^3.0.1"
544 |
545 | is-posix-bracket@^0.1.0:
546 | version "0.1.1"
547 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
548 |
549 | is-primitive@^2.0.0:
550 | version "2.0.0"
551 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
552 |
553 | is-relative@^0.2.1:
554 | version "0.2.1"
555 | resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5"
556 | dependencies:
557 | is-unc-path "^0.1.1"
558 |
559 | is-unc-path@^0.1.1:
560 | version "0.1.2"
561 | resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9"
562 | dependencies:
563 | unc-path-regex "^0.1.0"
564 |
565 | is-utf8@^0.2.0:
566 | version "0.2.1"
567 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
568 |
569 | is-windows@^0.2.0:
570 | version "0.2.0"
571 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
572 |
573 | isarray@0.0.1:
574 | version "0.0.1"
575 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
576 |
577 | isarray@1.0.0, isarray@~1.0.0:
578 | version "1.0.0"
579 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
580 |
581 | isexe@^2.0.0:
582 | version "2.0.0"
583 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
584 |
585 | isobject@^2.0.0:
586 | version "2.1.0"
587 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
588 | dependencies:
589 | isarray "1.0.0"
590 |
591 | isobject@^3.0.0, isobject@^3.0.1:
592 | version "3.0.1"
593 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
594 |
595 | kind-of@^3.0.2:
596 | version "3.2.2"
597 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
598 | dependencies:
599 | is-buffer "^1.1.5"
600 |
601 | kind-of@^4.0.0:
602 | version "4.0.0"
603 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
604 | dependencies:
605 | is-buffer "^1.1.5"
606 |
607 | lazy-cache@^1.0.3:
608 | version "1.0.4"
609 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
610 |
611 | liftoff@^2.1.0:
612 | version "2.3.0"
613 | resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385"
614 | dependencies:
615 | extend "^3.0.0"
616 | findup-sync "^0.4.2"
617 | fined "^1.0.1"
618 | flagged-respawn "^0.3.2"
619 | lodash.isplainobject "^4.0.4"
620 | lodash.isstring "^4.0.1"
621 | lodash.mapvalues "^4.4.0"
622 | rechoir "^0.6.2"
623 | resolve "^1.1.7"
624 |
625 | lodash._basecopy@^3.0.0:
626 | version "3.0.1"
627 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
628 |
629 | lodash._basetostring@^3.0.0:
630 | version "3.0.1"
631 | resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5"
632 |
633 | lodash._basevalues@^3.0.0:
634 | version "3.0.0"
635 | resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7"
636 |
637 | lodash._getnative@^3.0.0:
638 | version "3.9.1"
639 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
640 |
641 | lodash._isiterateecall@^3.0.0:
642 | version "3.0.9"
643 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
644 |
645 | lodash._reescape@^3.0.0:
646 | version "3.0.0"
647 | resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"
648 |
649 | lodash._reevaluate@^3.0.0:
650 | version "3.0.0"
651 | resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed"
652 |
653 | lodash._reinterpolate@^3.0.0:
654 | version "3.0.0"
655 | resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
656 |
657 | lodash._root@^3.0.0:
658 | version "3.0.1"
659 | resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
660 |
661 | lodash.escape@^3.0.0:
662 | version "3.2.0"
663 | resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698"
664 | dependencies:
665 | lodash._root "^3.0.0"
666 |
667 | lodash.isarguments@^3.0.0:
668 | version "3.1.0"
669 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
670 |
671 | lodash.isarray@^3.0.0:
672 | version "3.0.4"
673 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
674 |
675 | lodash.isplainobject@^4.0.4:
676 | version "4.0.6"
677 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
678 |
679 | lodash.isstring@^4.0.1:
680 | version "4.0.1"
681 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
682 |
683 | lodash.keys@^3.0.0:
684 | version "3.1.2"
685 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
686 | dependencies:
687 | lodash._getnative "^3.0.0"
688 | lodash.isarguments "^3.0.0"
689 | lodash.isarray "^3.0.0"
690 |
691 | lodash.mapvalues@^4.4.0:
692 | version "4.6.0"
693 | resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c"
694 |
695 | lodash.restparam@^3.0.0:
696 | version "3.6.1"
697 | resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
698 |
699 | lodash.template@^3.0.0:
700 | version "3.6.2"
701 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f"
702 | dependencies:
703 | lodash._basecopy "^3.0.0"
704 | lodash._basetostring "^3.0.0"
705 | lodash._basevalues "^3.0.0"
706 | lodash._isiterateecall "^3.0.0"
707 | lodash._reinterpolate "^3.0.0"
708 | lodash.escape "^3.0.0"
709 | lodash.keys "^3.0.0"
710 | lodash.restparam "^3.0.0"
711 | lodash.templatesettings "^3.0.0"
712 |
713 | lodash.templatesettings@^3.0.0:
714 | version "3.1.1"
715 | resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5"
716 | dependencies:
717 | lodash._reinterpolate "^3.0.0"
718 | lodash.escape "^3.0.0"
719 |
720 | lodash@^4.13.1:
721 | version "4.17.4"
722 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
723 |
724 | lodash@~1.0.1:
725 | version "1.0.2"
726 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
727 |
728 | longest@^1.0.1:
729 | version "1.0.1"
730 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
731 |
732 | lru-cache@2:
733 | version "2.7.3"
734 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
735 |
736 | make-error-cause@^1.1.1:
737 | version "1.2.2"
738 | resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-1.2.2.tgz#df0388fcd0b37816dff0a5fb8108939777dcbc9d"
739 | dependencies:
740 | make-error "^1.2.0"
741 |
742 | make-error@^1.2.0:
743 | version "1.3.0"
744 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96"
745 |
746 | map-cache@^0.2.0:
747 | version "0.2.2"
748 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
749 |
750 | micromatch@^2.3.7:
751 | version "2.3.11"
752 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
753 | dependencies:
754 | arr-diff "^2.0.0"
755 | array-unique "^0.2.1"
756 | braces "^1.8.2"
757 | expand-brackets "^0.1.4"
758 | extglob "^0.3.1"
759 | filename-regex "^2.0.0"
760 | is-extglob "^1.0.0"
761 | is-glob "^2.0.1"
762 | kind-of "^3.0.2"
763 | normalize-path "^2.0.1"
764 | object.omit "^2.0.0"
765 | parse-glob "^3.0.4"
766 | regex-cache "^0.4.2"
767 |
768 | minimatch@^2.0.1:
769 | version "2.0.10"
770 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
771 | dependencies:
772 | brace-expansion "^1.0.0"
773 |
774 | minimatch@~0.2.11:
775 | version "0.2.14"
776 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a"
777 | dependencies:
778 | lru-cache "2"
779 | sigmund "~1.0.0"
780 |
781 | minimist@0.0.8:
782 | version "0.0.8"
783 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
784 |
785 | minimist@^1.1.0:
786 | version "1.2.0"
787 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
788 |
789 | mkdirp@^0.5.0:
790 | version "0.5.1"
791 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
792 | dependencies:
793 | minimist "0.0.8"
794 |
795 | multipipe@^0.1.2:
796 | version "0.1.2"
797 | resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
798 | dependencies:
799 | duplexer2 "0.0.2"
800 |
801 | natives@^1.1.0:
802 | version "1.1.0"
803 | resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31"
804 |
805 | normalize-path@^2.0.1:
806 | version "2.1.1"
807 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
808 | dependencies:
809 | remove-trailing-separator "^1.0.1"
810 |
811 | object-assign@^3.0.0:
812 | version "3.0.0"
813 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
814 |
815 | object.defaults@^1.1.0:
816 | version "1.1.0"
817 | resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
818 | dependencies:
819 | array-each "^1.0.1"
820 | array-slice "^1.0.0"
821 | for-own "^1.0.0"
822 | isobject "^3.0.0"
823 |
824 | object.omit@^2.0.0:
825 | version "2.0.1"
826 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
827 | dependencies:
828 | for-own "^0.1.4"
829 | is-extendable "^0.1.1"
830 |
831 | object.pick@^1.2.0:
832 | version "1.3.0"
833 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
834 | dependencies:
835 | isobject "^3.0.1"
836 |
837 | once@^1.3.0:
838 | version "1.4.0"
839 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
840 | dependencies:
841 | wrappy "1"
842 |
843 | once@~1.3.0:
844 | version "1.3.3"
845 | resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
846 | dependencies:
847 | wrappy "1"
848 |
849 | orchestrator@^0.3.0:
850 | version "0.3.8"
851 | resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e"
852 | dependencies:
853 | end-of-stream "~0.1.5"
854 | sequencify "~0.0.7"
855 | stream-consume "~0.1.0"
856 |
857 | ordered-read-streams@^0.1.0:
858 | version "0.1.0"
859 | resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126"
860 |
861 | os-homedir@^1.0.0, os-homedir@^1.0.1:
862 | version "1.0.2"
863 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
864 |
865 | parse-filepath@^1.0.1:
866 | version "1.0.1"
867 | resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73"
868 | dependencies:
869 | is-absolute "^0.2.3"
870 | map-cache "^0.2.0"
871 | path-root "^0.1.1"
872 |
873 | parse-glob@^3.0.4:
874 | version "3.0.4"
875 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
876 | dependencies:
877 | glob-base "^0.3.0"
878 | is-dotfile "^1.0.0"
879 | is-extglob "^1.0.0"
880 | is-glob "^2.0.0"
881 |
882 | parse-passwd@^1.0.0:
883 | version "1.0.0"
884 | resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
885 |
886 | path-parse@^1.0.5:
887 | version "1.0.5"
888 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
889 |
890 | path-root-regex@^0.1.0:
891 | version "0.1.2"
892 | resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
893 |
894 | path-root@^0.1.1:
895 | version "0.1.1"
896 | resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7"
897 | dependencies:
898 | path-root-regex "^0.1.0"
899 |
900 | preserve@^0.2.0:
901 | version "0.2.0"
902 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
903 |
904 | pretty-hrtime@^1.0.0:
905 | version "1.0.3"
906 | resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
907 |
908 | process-nextick-args@~1.0.6:
909 | version "1.0.7"
910 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
911 |
912 | randomatic@^1.1.3:
913 | version "1.1.7"
914 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
915 | dependencies:
916 | is-number "^3.0.0"
917 | kind-of "^4.0.0"
918 |
919 | "readable-stream@>=1.0.33-1 <1.1.0-0":
920 | version "1.0.34"
921 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
922 | dependencies:
923 | core-util-is "~1.0.0"
924 | inherits "~2.0.1"
925 | isarray "0.0.1"
926 | string_decoder "~0.10.x"
927 |
928 | readable-stream@^2.1.5:
929 | version "2.3.3"
930 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
931 | dependencies:
932 | core-util-is "~1.0.0"
933 | inherits "~2.0.3"
934 | isarray "~1.0.0"
935 | process-nextick-args "~1.0.6"
936 | safe-buffer "~5.1.1"
937 | string_decoder "~1.0.3"
938 | util-deprecate "~1.0.1"
939 |
940 | readable-stream@~1.1.9:
941 | version "1.1.14"
942 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
943 | dependencies:
944 | core-util-is "~1.0.0"
945 | inherits "~2.0.1"
946 | isarray "0.0.1"
947 | string_decoder "~0.10.x"
948 |
949 | rechoir@^0.6.2:
950 | version "0.6.2"
951 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
952 | dependencies:
953 | resolve "^1.1.6"
954 |
955 | regex-cache@^0.4.2:
956 | version "0.4.4"
957 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
958 | dependencies:
959 | is-equal-shallow "^0.1.3"
960 |
961 | remove-trailing-separator@^1.0.1:
962 | version "1.1.0"
963 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
964 |
965 | repeat-element@^1.1.2:
966 | version "1.1.2"
967 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
968 |
969 | repeat-string@^1.5.2:
970 | version "1.6.1"
971 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
972 |
973 | replace-ext@0.0.1:
974 | version "0.0.1"
975 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
976 |
977 | resolve-dir@^0.1.0:
978 | version "0.1.1"
979 | resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e"
980 | dependencies:
981 | expand-tilde "^1.2.2"
982 | global-modules "^0.2.3"
983 |
984 | resolve@^1.1.6, resolve@^1.1.7:
985 | version "1.5.0"
986 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
987 | dependencies:
988 | path-parse "^1.0.5"
989 |
990 | right-align@^0.1.1:
991 | version "0.1.3"
992 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
993 | dependencies:
994 | align-text "^0.1.1"
995 |
996 | safe-buffer@~5.1.0, safe-buffer@~5.1.1:
997 | version "5.1.1"
998 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
999 |
1000 | semver@^4.1.0:
1001 | version "4.3.6"
1002 | resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
1003 |
1004 | sequencify@~0.0.7:
1005 | version "0.0.7"
1006 | resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c"
1007 |
1008 | sigmund@~1.0.0:
1009 | version "1.0.1"
1010 | resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
1011 |
1012 | source-map@0.5.x, source-map@^0.5.1, source-map@~0.5.1:
1013 | version "0.5.7"
1014 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
1015 |
1016 | sparkles@^1.0.0:
1017 | version "1.0.0"
1018 | resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3"
1019 |
1020 | stream-consume@~0.1.0:
1021 | version "0.1.0"
1022 | resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f"
1023 |
1024 | string_decoder@~0.10.x:
1025 | version "0.10.31"
1026 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1027 |
1028 | string_decoder@~1.0.3:
1029 | version "1.0.3"
1030 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
1031 | dependencies:
1032 | safe-buffer "~5.1.0"
1033 |
1034 | strip-ansi@^3.0.0:
1035 | version "3.0.1"
1036 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1037 | dependencies:
1038 | ansi-regex "^2.0.0"
1039 |
1040 | strip-bom@^1.0.0:
1041 | version "1.0.0"
1042 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794"
1043 | dependencies:
1044 | first-chunk-stream "^1.0.0"
1045 | is-utf8 "^0.2.0"
1046 |
1047 | supports-color@^2.0.0:
1048 | version "2.0.0"
1049 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1050 |
1051 | through2@2.0.3, through2@^2.0.0:
1052 | version "2.0.3"
1053 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
1054 | dependencies:
1055 | readable-stream "^2.1.5"
1056 | xtend "~4.0.1"
1057 |
1058 | through2@^0.6.1:
1059 | version "0.6.5"
1060 | resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
1061 | dependencies:
1062 | readable-stream ">=1.0.33-1 <1.1.0-0"
1063 | xtend ">=4.0.0 <4.1.0-0"
1064 |
1065 | tildify@^1.0.0:
1066 | version "1.2.0"
1067 | resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a"
1068 | dependencies:
1069 | os-homedir "^1.0.0"
1070 |
1071 | time-stamp@^1.0.0:
1072 | version "1.1.0"
1073 | resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
1074 |
1075 | uglify-js@~2.8.10:
1076 | version "2.8.29"
1077 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
1078 | dependencies:
1079 | source-map "~0.5.1"
1080 | yargs "~3.10.0"
1081 | optionalDependencies:
1082 | uglify-to-browserify "~1.0.0"
1083 |
1084 | uglify-save-license@^0.4.1:
1085 | version "0.4.1"
1086 | resolved "https://registry.yarnpkg.com/uglify-save-license/-/uglify-save-license-0.4.1.tgz#95726c17cc6fd171c3617e3bf4d8d82aa8c4cce1"
1087 |
1088 | uglify-to-browserify@~1.0.0:
1089 | version "1.0.2"
1090 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
1091 |
1092 | unc-path-regex@^0.1.0:
1093 | version "0.1.2"
1094 | resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
1095 |
1096 | unique-stream@^1.0.0:
1097 | version "1.0.0"
1098 | resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b"
1099 |
1100 | user-home@^1.1.1:
1101 | version "1.1.1"
1102 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
1103 |
1104 | util-deprecate@~1.0.1:
1105 | version "1.0.2"
1106 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1107 |
1108 | v8flags@^2.0.2:
1109 | version "2.1.1"
1110 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
1111 | dependencies:
1112 | user-home "^1.1.1"
1113 |
1114 | vinyl-fs@^0.3.0:
1115 | version "0.3.14"
1116 | resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6"
1117 | dependencies:
1118 | defaults "^1.0.0"
1119 | glob-stream "^3.1.5"
1120 | glob-watcher "^0.0.6"
1121 | graceful-fs "^3.0.0"
1122 | mkdirp "^0.5.0"
1123 | strip-bom "^1.0.0"
1124 | through2 "^0.6.1"
1125 | vinyl "^0.4.0"
1126 |
1127 | vinyl-sourcemaps-apply@0.2.1, vinyl-sourcemaps-apply@^0.2.0:
1128 | version "0.2.1"
1129 | resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705"
1130 | dependencies:
1131 | source-map "^0.5.1"
1132 |
1133 | vinyl@^0.4.0:
1134 | version "0.4.6"
1135 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847"
1136 | dependencies:
1137 | clone "^0.2.0"
1138 | clone-stats "^0.0.1"
1139 |
1140 | vinyl@^0.5.0:
1141 | version "0.5.3"
1142 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde"
1143 | dependencies:
1144 | clone "^1.0.0"
1145 | clone-stats "^0.0.1"
1146 | replace-ext "0.0.1"
1147 |
1148 | which@^1.2.12:
1149 | version "1.3.0"
1150 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
1151 | dependencies:
1152 | isexe "^2.0.0"
1153 |
1154 | window-size@0.1.0:
1155 | version "0.1.0"
1156 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
1157 |
1158 | wordwrap@0.0.2:
1159 | version "0.0.2"
1160 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
1161 |
1162 | wrappy@1:
1163 | version "1.0.2"
1164 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1165 |
1166 | "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1:
1167 | version "4.0.1"
1168 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
1169 |
1170 | yargs@~3.10.0:
1171 | version "3.10.0"
1172 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
1173 | dependencies:
1174 | camelcase "^1.0.2"
1175 | cliui "^2.1.0"
1176 | decamelize "^1.0.0"
1177 | window-size "0.1.0"
1178 |
--------------------------------------------------------------------------------