A Pen by Guilherme Rv Coelho on CodePen.
Created
December 28, 2014 17:42
-
-
Save grvcoelho/60d5926b3f908607052e to your computer and use it in GitHub Desktop.
MYjqLq
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>Material Design Ripple Effect</title> | |
</head> | |
<body> | |
<div class="btn"></div> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function($, window, document, undefined) { | |
'use strict'; | |
/** | |
* Define the name of the plugin | |
*/ | |
var ripple = 'ripple'; | |
/** | |
* Get an instance of the plugin | |
*/ | |
var self = null; | |
/** | |
* Define the defaults of the plugin | |
*/ | |
var defaults = {}; | |
/** | |
* Create the main plugin function | |
*/ | |
function Ripples(element, options) { | |
self = this; | |
this.element = $(element); | |
this.options = $.extend({}, defaults, options); | |
this._defaults = defaults; | |
this._name = ripple; | |
this.init(); | |
} | |
/** | |
* Initialize the plugin | |
*/ | |
Ripples.prototype.init = function() { | |
var $element = this.element; | |
$element.on('mousedown touchstart', function(event) { | |
/** | |
* Verify if the user is just touching on a device and return if so | |
*/ | |
if(self.isTouch() && event.type === 'mousedown') { | |
return false; | |
} | |
/** | |
* Verify if the current element already has a ripple wrapper element and | |
* creates if it doesn't | |
*/ | |
if(!($element.find('.ripple-wrapper').length)) { | |
$element.append('<div class="ripple-wrapper"></div>'); | |
} | |
/** | |
* Find the ripple wrapper | |
*/ | |
var $wrapper = $element.find('.ripple-wrapper'); | |
/** | |
* Get relY and relX positions | |
*/ | |
var relY = self.getRelY(event); | |
var relX = self.getRelX(event); | |
/** | |
* If relY and/or relX are false, return the event | |
*/ | |
if(!relY && !relX) { | |
return; | |
} | |
/** | |
* Get the ripple color | |
*/ | |
var rippleColor = self.getRippleColor(); | |
/** | |
* Create the ripple element | |
*/ | |
var $ripple = $('<div></div>'); | |
$ripple | |
.addClass('ripple') | |
.css({ | |
'left': relX, | |
'top': relY, | |
'background-color': rippleColor | |
}); | |
/** | |
* Append the ripple to the wrapper | |
*/ | |
$wrapper.append($ripple); | |
/** | |
* Make sure the ripple has the styles applied (ugly hack but it works) | |
*/ | |
(function() { return window.getComputedStyle($ripple[0]).opacity; })(); | |
/** | |
* Turn on the ripple animation | |
*/ | |
self.rippleOn($ripple); | |
/** | |
* Call the rippleEnd function when the transition 'on' ends | |
*/ | |
setTimeout(function() { | |
self.rippleEnd($ripple); | |
}, 500); | |
/** | |
* Detect when the user leaves the element | |
*/ | |
$element.on('mouseup mouseleave touchend', function() { | |
$ripple.data('mousedown', 'off'); | |
if($ripple.data('animating') === 'off') { | |
self.rippleOut($ripple); | |
} | |
}); | |
}); | |
}; | |
/** | |
* Get the new size based on the element height/width and the ripple width | |
*/ | |
Ripples.prototype.getNewSize = function($ripple) { | |
var $element = this.element; | |
return (Math.max($element.outerWidth(), $element.outerHeight()) / $ripple.outerWidth()) * 2.5; | |
}; | |
/** | |
* Get the relX | |
*/ | |
Ripples.prototype.getRelX = function(event) { | |
var $element = this.element; | |
var wrapperOffset = $element.find('.ripple-wrapper').offset(); | |
if(!self.isTouch()) { | |
/** | |
* Get the mouse position relative to the ripple wrapper | |
*/ | |
return event.pageX - wrapperOffset.left; | |
} else { | |
/** | |
* Make sure the user is using only one finger and then get the touch | |
* position relative to the ripple wrapper | |
*/ | |
event = event.originalEvent; | |
if(event.touches.length !== 1) { | |
return event.touches[0].pageX - wrapperOffset.left; | |
} | |
return false; | |
} | |
}; | |
/** | |
* Get the relY | |
*/ | |
Ripples.prototype.getRelY = function(event) { | |
var $element = this.element; | |
var wrapperOffset = $element.find('.ripple-wrapper').offset(); | |
if(!self.isTouch()) { | |
/** | |
* Get the mouse position relative to the ripple wrapper | |
*/ | |
return event.pageY - wrapperOffset.top; | |
} else { | |
/** | |
* Make sure the user is using only one finger and then get the touch | |
* position relative to the ripple wrapper | |
*/ | |
event = event.originalEvent; | |
if(event.touches.length !== 1) { | |
return event.touches[0].pageY - wrapperOffset.top; | |
} | |
return false; | |
} | |
}; | |
/** | |
* Get the ripple color | |
*/ | |
Ripples.prototype.getRippleColor = function() { | |
var $element = this.element; | |
var color = $element.data('ripple-color') ? $element.data('ripple-color') : window.getComputedStyle($element[0]).color; | |
return color; | |
}; | |
/** | |
* Verify if the client browser has transistion support | |
*/ | |
Ripples.prototype.hasTransitionSupport = function() { | |
var thisBody = document.body || document.documentElement; | |
var thisStyle = thisBody.style; | |
var support = ( | |
thisStyle.transition !== undefined || | |
thisStyle.WebkitTransition !== undefined || | |
thisStyle.MozTransition !== undefined || | |
thisStyle.MsTransition !== undefined || | |
thisStyle.OTransition !== undefined | |
); | |
return support; | |
}; | |
/** | |
* Verify if the client is using a mobile device | |
*/ | |
Ripples.prototype.isTouch = function() { | |
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); | |
}; | |
/** | |
* End the animation of the ripple | |
*/ | |
Ripples.prototype.rippleEnd = function($ripple) { | |
$ripple.data('animating', 'off'); | |
if($ripple.data('mousedown') === 'off') { | |
self.rippleOut($ripple); | |
} | |
}; | |
/** | |
* Turn off the ripple effect | |
*/ | |
Ripples.prototype.rippleOut = function($ripple) { | |
$ripple.off(); | |
if(self.hasTransitionSupport()) { | |
$ripple.addClass('ripple-out'); | |
} else { | |
$ripple.animate({'opacity': 0}, 100, function() { | |
$ripple.trigger('transitionend'); | |
}); | |
} | |
$ripple.on('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function() { | |
$ripple.remove(); | |
}); | |
}; | |
/** | |
* Turn on the ripple effect | |
*/ | |
Ripples.prototype.rippleOn = function($ripple) { | |
var size = self.getNewSize($ripple); | |
var $element = this.element; | |
if(self.hasTransitionSupport()) { | |
$ripple | |
.css({ | |
'-ms-transform': 'scale(' + size + ')', | |
'-moz-transform': 'scale(' + size + ')', | |
'-webkit-transform': 'scale(' + size + ')', | |
'transform': 'scale(' + size + ')' | |
}) | |
.addClass('ripple-on') | |
.data('animating', 'on') | |
.data('mousedown', 'on'); | |
} else { | |
$ripple.animate({ | |
'width': Math.max($element.outerWidth(), $element.outerHeight()) * 2, | |
'height': Math.max($element.outerWidth(), $element.outerHeight()) * 2, | |
'margin-left': Math.max($element.outerWidth(), $element.outerHeight()) * (-1), | |
'margin-top': Math.max($element.outerWidth(), $element.outerHeight()) * (-1), | |
'opacity': 0.2 | |
}, 500, function() { | |
$ripple.trigger('transitionend'); | |
}); | |
} | |
}; | |
/** | |
* Create the jquery plugin function | |
*/ | |
$.fn.ripple = function(options) { | |
return this.each(function() { | |
if(!$.data(this, 'plugin_' + ripple)) { | |
$.data(this, 'plugin_' + ripple, new Ripples(this, options)); | |
} | |
}); | |
}; | |
})(jQuery, window, document); | |
$(document).ready(function() { | |
$('.btn').ripple(); | |
}) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.btn { | |
position: relative; | |
background: #283593; | |
display: inline-block; | |
margin: 20px; | |
width: 200px; height: 200px; | |
color: #fff; | |
border-radius: 50% | |
} | |
.ripple-wrapper { | |
position: absolute; | |
top: 0; | |
left: 0; | |
z-index: 1; | |
width: 100%; | |
height: 100%; | |
overflow: hidden; | |
border-radius: inherit; | |
pointer-events: none; | |
} | |
.ripple { | |
position: absolute; | |
width: 20px; | |
height: 20px; | |
margin-left: -10px; | |
margin-top: -10px; | |
border-radius: 100%; | |
background-color: rgba(0,0,0,0.05); | |
-webkit-transform: scale(1); | |
-ms-transform: scale(1); | |
transform: scale(1); | |
-webkit-transform-origin: 50%; | |
-ms-transform-origin: 50%; | |
transform-origin: 50%; | |
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; | |
filter: alpha(opacity=0); | |
opacity: 0; | |
pointer-events: none; | |
} | |
.ripple.ripple-on { | |
-webkit-transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s; | |
transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s; | |
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=15)"; | |
filter: alpha(opacity=15); | |
opacity: 0.15; | |
} | |
.ripple.ripple-out { | |
-webkit-transition: opacity 0.1s linear 0s !important; | |
transition: opacity 0.1s linear 0s !important; | |
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; | |
filter: alpha(opacity=0); | |
opacity: 0; | |
} | |
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdHlsL3JpcHBsZS5zdHlsIiwiLi4vbm9kZV9tb2R1bGVzL2tvdXRvLXN3aXNzL2xpYi9rb3V0by1zd2lzcy91dGlsaXRpZXMvb3ZlcmZsb3cuc3R5bCIsIi4uL25vZGVfbW9kdWxlcy9rb3V0by1zd2lzcy9saWIva291dG8tc3dpc3MvbWl4aW5zL3ZlbmRvcnMuc3R5bCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTtFQUNFLFVBQVMsU0FBVDtFQUNBLEtBQUksRUFBSjtFQUNBLE1BQUssRUFBTDtFQUNBLFNBQVEsRUFBUjtFQUNBLE9BQU0sS0FBTjtFQUNBLFFBQU8sS0FBUDtFQ0ZNLFVBQVMsT0FBVDtFRElOLGVBQWMsUUFBZDtFQUNBLGdCQUFlLEtBQWY7O0FBRUY7RUFDRSxVQUFTLFNBQVQ7RUFDQSxPQUFNLEtBQU47RUFDQSxRQUFPLEtBQVA7RUFDQSxhQUFZLE1BQVo7RUFDQSxZQUFXLE1BQVg7RUFDQSxlQUFjLEtBQWQ7RUFDQSxrQkFBbUMsaUJBQW5DO0VFYitCLG1CQUFHLFNBQUg7RUFBQSxlQUFHLFNBQUg7RUFTaEIsV0FBRyxTQUFIO0VBVGdCLDBCQUFHLElBQUg7RUFBQSxzQkFBRyxJQUFIO0VBU2hCLGtCQUFHLElBQUg7RUFpSUQsWUFBc0UscURBQXRFO0VBQ0EsUUFBOEIsaUJBQTlCO0VBQ1IsU0FBUSxFQUFSO0VGM0hOLGdCQUFlLEtBQWY7O0FBRUY7RUVuQmlDLG9CQUFHLDJFQUFIO0VBU2hCLFlBQUcsMkVBQUg7RUFpSUQsWUFBc0Usc0RBQXRFO0VBQ0EsUUFBOEIsa0JBQTlCO0VBQ1IsU0FBUSxLQUFSOztBRnJIUjtFRXZCaUMsb0JBQUcsa0NBQUg7RUFTaEIsWUFBRyxrQ0FBSDtFQWlJRCxZQUFzRSxxREFBdEU7RUFDQSxRQUE4QixpQkFBOUI7RUFDUixTQUFRLEVBQVIiLCJmaWxlIjoicmlwcGxlLmNzcyIsInNvdXJjZVJvb3QiOiIuLiIsInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgJ2tvdXRvLXN3aXNzJ1xyXG5cclxuLnJpcHBsZS13cmFwcGVyXHJcbiAgcG9zaXRpb24gYWJzb2x1dGVcclxuICB0b3AgMFxyXG4gIGxlZnQgMFxyXG4gIHotaW5kZXggMVxyXG4gIHdpZHRoIDEwMCVcclxuICBoZWlnaHQgMTAwJVxyXG4gIG92ZXJmbG93IGhpZGRlblxyXG4gIGJvcmRlci1yYWRpdXMgaW5oZXJpdFxyXG4gIHBvaW50ZXItZXZlbnRzIG5vbmVcclxuXHJcbi5yaXBwbGVcclxuICBwb3NpdGlvbiBhYnNvbHV0ZVxyXG4gIHdpZHRoIDIwcHhcclxuICBoZWlnaHQgMjBweFxyXG4gIG1hcmdpbi1sZWZ0IC0xMHB4XHJcbiAgbWFyZ2luLXRvcCAtMTBweFxyXG4gIGJvcmRlci1yYWRpdXMgMTAwJVxyXG4gIGJhY2tncm91bmQtY29sb3IgcmdiYSgwLCAwLCAwLCAwLjA1KVxyXG4gIHRyYW5zZm9ybSBzY2FsZSgxKVxyXG4gIHRyYW5zZm9ybS1vcmlnaW4gNTAlXHJcbiAgb3BhY2l0eSAwXHJcbiAgcG9pbnRlci1ldmVudHMgbm9uZVxyXG5cclxuLnJpcHBsZS5yaXBwbGUtb25cclxuICB0cmFuc2l0aW9uIG9wYWNpdHkgMC4xNXMgZWFzZS1pbiAwcywgdHJhbnNmb3JtIDAuNXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAwLjFzXHJcbiAgb3BhY2l0eSAwLjE1XHJcblxyXG4ucmlwcGxlLnJpcHBsZS1vdXRcclxuICB0cmFuc2l0aW9uIG9wYWNpdHkgMC4xcyBsaW5lYXIgMHMgIWltcG9ydGFudFxyXG4gIG9wYWNpdHkgMCIsImtzLW92ZXJmbG93KCB2YWx1ZSwgYXJncy4uLiApXG4gICAgaWYgdmFsdWUgPT0gZWxsaXBzaXNcbiAgICAgICAgd2hpdGUtc3BhY2Ugbm93cmFwXG4gICAgICAgIHRleHQtb3ZlcmZsb3cgZWxsaXBzaXNcbiAgICAgICAgb3ZlcmZsb3cgaGlkZGVuXG4gICAgZWxzZVxuICAgICAgICBvdmVyZmxvdyB2YWx1ZSBhcmdzXG5cbm92ZXJmbG93ID0ga3Mtb3ZlcmZsb3cgdW5sZXNzIGtzLW5vLWNvbmZsaWN0XG4iLCJrcy12ZW5kb3JzLXByZWZpeGVzID0gcmVjb21tZW5kZWRcblxua3MtdmVuZG9yKCBwcm9wZXJ0eSwgdmFsdWUsIGZlYXR1cmUgPSBudWxsLCBwcmVmaXhlcyA9IG51bGwsIG9mZmljaWFsID0gdHJ1ZSApXG4gICAgdW5sZXNzIFwidmVuZG9yXCIgaW4gY2FsbGVkLWZyb21cbiAgICAgICAgaWYgZmVhdHVyZSBpc250IG51bGwgYW5kICEoIGZlYXR1cmUgaW4ga3Mtc3VwcG9ydC1pZ25vcmUtZmVhdHVyZXMgKVxuICAgICAgICAgICAgZm9yIHByZWZpeCBpbiBjYW5pdXNlLXByZWZpeGVzKCBmZWF0dXJlIClcbiAgICAgICAgICAgICAgICBwcmVmaXhlZHByb3BlcnR5ID0gXCItXCIgKyBwcmVmaXggKyBcIi1cIiArIHByb3BlcnR5XG4gICAgICAgICAgICAgICAge3ByZWZpeGVkcHJvcGVydHl9OiB2YWx1ZVxuICAgICAgICBlbHNlIGlmIGtzLXZlbmRvcnMtcHJlZml4ZXMgaXNudCBmYWxzZVxuICAgICAgICAgICAgICAgIGlmIGtzLXZlbmRvcnMtcHJlZml4ZXMgaXNudCByZWNvbW1lbmRlZFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhlcyA9IGtzLXZlbmRvcnMtcHJlZml4ZXNcbiAgICAgICAgICAgICAgICBpZiBwcmVmaXhlc1xuICAgICAgICAgICAgICAgICAgICBmb3IgcHJlZml4IGluIHByZWZpeGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhlZHByb3BlcnR5ID0gXCItXCIgKyBwcmVmaXggKyBcIi1cIiArIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgICAgICB7cHJlZml4ZWRwcm9wZXJ0eX06IHZhbHVlXG4gICAgaWYgb2ZmaWNpYWxcbiAgICAgICAge3Byb3BlcnR5fTogdmFsdWVcblxudmVuZG9yID0ga3MtdmVuZG9yIHVubGVzcyBrcy1uby1jb25mbGljdFxuXG51bmxlc3Mga3Mtbm8tY29uZmxpY3RcbiAgICBhbmltYXRpb24oKVxuICAgICAgICBrcy12ZW5kb3IoIFwiYW5pbWF0aW9uXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJjc3MtYW5pbWF0aW9uXCIgKVxuICAgIGFuaW1hdGlvbi1kZWxheSgpXG4gICAgICAgIGtzLXZlbmRvciggXCJhbmltYXRpb24tZGVsYXlcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy1hbmltYXRpb25cIiApXG4gICAgYW5pbWF0aW9uLWRpcmVjdGlvbigpXG4gICAgICAgIGtzLXZlbmRvciggXCJhbmltYXRpb24tZGlyZWN0aW9uXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJjc3MtYW5pbWF0aW9uXCIgKVxuICAgIGFuaW1hdGlvbi1kdXJhdGlvbigpXG4gICAgICAgIGtzLXZlbmRvciggXCJhbmltYXRpb24tZHVyYXRpb25cIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy1hbmltYXRpb25cIiApXG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZSgpXG4gICAgICAgIGtzLXZlbmRvciggXCJhbmltYXRpb24tZmlsbC1tb2RlXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJjc3MtYW5pbWF0aW9uXCIgKVxuICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQoKVxuICAgICAgICBrcy12ZW5kb3IoIFwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudFwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiY3NzLWFuaW1hdGlvblwiIClcbiAgICBhbmltYXRpb24tbmFtZSgpXG4gICAgICAgIGtzLXZlbmRvciggXCJhbmltYXRpb24tbmFtZVwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiY3NzLWFuaW1hdGlvblwiIClcbiAgICBhbmltYXRpb24tcGxheS1zdGF0ZSgpXG4gICAgICAgIGtzLXZlbmRvciggXCJhbmltYXRpb24tcGxheS1zdGF0ZVwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiY3NzLWFuaW1hdGlvblwiIClcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uKClcbiAgICAgICAga3MtdmVuZG9yKCBcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy1hbmltYXRpb25cIiApXG5cbiAgICBhcHBlYXJhbmNlKClcbiAgICAgICAga3MtdmVuZG9yKCBcImFwcGVhcmFuY2VcIiwgYXJndW1lbnRzLCBwcmVmaXhlczogd2Via2l0IG1veiApXG5cbiAgICBiYWNrZmFjZS12aXNpYmlsaXR5KClcbiAgICAgICAga3MtdmVuZG9yKCBcImJhY2tmYWNlLXZpc2liaWxpdHlcIiwgYXJndW1lbnRzLCBwcmVmaXhlczogd2Via2l0IG1zIClcblxuICAgIGJhY2tncm91bmQtY2xpcCgpXG4gICAgICAgIGtzLXZlbmRvciggXCJiYWNrZ3JvdW5kLWNsaXBcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImJhY2tncm91bmQtaW1nLW9wdHNcIiApXG4gICAgYmFja2dyb3VuZC1vcmlnaW4oKVxuICAgICAgICBrcy12ZW5kb3IoIFwiYmFja2dyb3VuZC1vcmlnaW5cIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImJhY2tncm91bmQtaW1nLW9wdHNcIiApXG4gICAgYmFja2dyb3VuZC1zaXplKClcbiAgICAgICAga3MtdmVuZG9yKCBcImJhY2tncm91bmQtc2l6ZVwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiYmFja2dyb3VuZC1pbWctb3B0c1wiIClcblxuICAgIGJveC1zaXppbmcoKVxuICAgICAgICBrcy12ZW5kb3IoIFwiYm94LXNpemluZ1wiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiY3NzMy1ib3hzaXppbmdcIiApXG5cbiAgICBib3JkZXItaW1hZ2Utc291cmNlKClcbiAgICAgICAga3MtdmVuZG9yKCBcImJvcmRlci1pbWFnZS1zb3VyY2VcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImJvcmRlci1pbWFnZVwiIClcbiAgICBib3JkZXItaW1hZ2Utc2xpY2UoKVxuICAgICAgICBrcy12ZW5kb3IoIFwiYm9yZGVyLWltYWdlLXNsaWNlXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJib3JkZXItaW1hZ2VcIiApXG4gICAgYm9yZGVyLWltYWdlLXdpZHRoKClcbiAgICAgICAga3MtdmVuZG9yKCBcImJvcmRlci1pbWFnZS13aWR0aFwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiYm9yZGVyLWltYWdlXCIgKVxuICAgIGJvcmRlci1pbWFnZS1vdXRzZXQoKVxuICAgICAgICBrcy12ZW5kb3IoIFwiYm9yZGVyLWltYWdlLW91dHNldFwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiYm9yZGVyLWltYWdlXCIgKVxuICAgIGJvcmRlci1pbWFnZS1yZXBlYXQoKVxuICAgICAgICBrcy12ZW5kb3IoIFwiYm9yZGVyLWltYWdlLXJlcGVhdFwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiYm9yZGVyLWltYWdlXCIgKVxuICAgIGJvcmRlci1pbWFnZSgpXG4gICAgICAgIGtzLXZlbmRvciggXCJib3JkZXItaW1hZ2VcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImJvcmRlci1pbWFnZVwiIClcblxuICAgIGNsaXAtcGF0aCgpXG4gICAgICAgIGtzLXZlbmRvciggXCJjbGlwLXBhdGhcIiwgYXJndW1lbnRzLCBwcmVmaXhlczogd2Via2l0IClcblxuICAgIGNvbHVtbi1jb3VudCgpXG4gICAgICAgIGtzLXZlbmRvciggXCJjb2x1bW4tY291bnRcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcIm11bHRpY29sdW1uXCIgKVxuICAgIGNvbHVtbi1maWxsKClcbiAgICAgICAga3MtdmVuZG9yKCBcImNvbHVtbi1maWxsXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJtdWx0aWNvbHVtblwiIClcbiAgICBjb2x1bW4tZ2FwKClcbiAgICAgICAga3MtdmVuZG9yKCBcImNvbHVtbi1nYXBcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcIm11bHRpY29sdW1uXCIgKVxuICAgIGNvbHVtbi1ydWxlKClcbiAgICAgICAga3MtdmVuZG9yKCBcImNvbHVtbi1ydWxlXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJtdWx0aWNvbHVtblwiIClcbiAgICBjb2x1bW4tcnVsZS1jb2xvcigpXG4gICAgICAgIGtzLXZlbmRvciggXCJjb2x1bW4tcnVsZS1jb2xvclwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwibXVsdGljb2x1bW5cIiApXG4gICAgY29sdW1uLXJ1bGUtc3R5bGUoKVxuICAgICAgICBrcy12ZW5kb3IoIFwiY29sdW1uLXJ1bGUtc3R5bGVcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcIm11bHRpY29sdW1uXCIgKVxuICAgIGNvbHVtbi1ydWxlLXdpZHRoKClcbiAgICAgICAga3MtdmVuZG9yKCBcImNvbHVtbi1ydWxlLXdpZHRoXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJtdWx0aWNvbHVtblwiIClcbiAgICBjb2x1bW4tc3BhbigpXG4gICAgICAgIGtzLXZlbmRvciggXCJjb2x1bW4tc3BhblwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwibXVsdGljb2x1bW5cIilcbiAgICBjb2x1bW4td2lkdGgoKVxuICAgICAgICBrcy12ZW5kb3IoIFwiY29sdW1uLXdpZHRoXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJtdWx0aWNvbHVtblwiIClcbiAgICBjb2x1bW5zKClcbiAgICAgICAga3MtdmVuZG9yKCBcImNvbHVtbnNcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcIm11bHRpY29sdW1uXCIgKVxuXG4gICAgZ3JpZCgpXG4gICAgICAgIGtzLXZlbmRvciggXCJncmlkXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJjc3MtZ3JpZFwiIClcbiAgICBncmlkLWFyZWEoKVxuICAgICAgICBrcy12ZW5kb3IoIFwiZ3JpZC1hcmVhXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJjc3MtZ3JpZFwiIClcbiAgICBncmlkLWF1dG8tY29sdW1ucygpXG4gICAgICAgIGtzLXZlbmRvciggXCJncmlkLWF1dG8tY29sdW1uc1wiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiY3NzLWdyaWRcIiApXG4gICAgZ3JpZC1hdXRvLWZsb3coKVxuICAgICAgICBrcy12ZW5kb3IoIFwiZ3JpZC1hdXRvLWZsb3dcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy1ncmlkXCIgKVxuICAgIGdyaWQtYXV0by1wb3NpdGlvbigpXG4gICAgICAgIGtzLXZlbmRvciggXCJncmlkLWF1dG8tcG9zaXRpb25cIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy1ncmlkXCIgKVxuICAgIGdyaWQtYXV0by1yb3dzKClcbiAgICAgICAga3MtdmVuZG9yKCBcImdyaWQtYXV0by1yb3dzXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJjc3MtZ3JpZFwiIClcbiAgICBncmlkLWNvbHVtbigpXG4gICAgICAgIGtzLXZlbmRvciggXCJncmlkLWNvbHVtblwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiY3NzLWdyaWRcIiApXG4gICAgZ3JpZC1jb2x1bW4tZW5kKClcbiAgICAgICAga3MtdmVuZG9yKCBcImdyaWQtY29sdW1uLWVuZFwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiY3NzLWdyaWRcIiApXG4gICAgZ3JpZC1jb2x1bW4tc3RhcnQoKVxuICAgICAgICBrcy12ZW5kb3IoIFwiZ3JpZC1jb2x1bW4tc3RhcnRcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy1ncmlkXCIgKVxuICAgIGdyaWQtcm93KClcbiAgICAgICAga3MtdmVuZG9yKCBcImdyaWQtcm93XCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJjc3MtZ3JpZFwiIClcbiAgICBncmlkLXJvdy1lbmQoKVxuICAgICAgICBrcy12ZW5kb3IoIFwiZ3JpZC1yb3ctZW5kXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJjc3MtZ3JpZFwiIClcbiAgICBncmlkLXJvdy1zdGFydCgpXG4gICAgICAgIGtzLXZlbmRvciggXCJncmlkLXJvdy1zdGFydFwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiY3NzLWdyaWRcIiApXG4gICAgZ3JpZC10ZW1wbGF0ZSgpXG4gICAgICAgIGtzLXZlbmRvciggXCJncmlkLXRlbXBsYXRlXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJjc3MtZ3JpZFwiIClcbiAgICBncmlkLXRlbXBsYXRlLWFyZWFzKClcbiAgICAgICAga3MtdmVuZG9yKCBcImdyaWQtdGVtcGxhdGUtYXJlYXNcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy1ncmlkXCIgKVxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1ucygpXG4gICAgICAgIGtzLXZlbmRvciggXCJncmlkLXRlbXBsYXRlLWNvbHVtbnNcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy1ncmlkXCIgKVxuICAgIGdyaWQtdGVtcGxhdGUtcm93cygpXG4gICAgICAgIGtzLXZlbmRvciggXCJncmlkLXRlbXBsYXRlLXJvd3NcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy1ncmlkXCIgKVxuXG4gICAgaHlwaGVucygpXG4gICAgICAgIGtzLXZlbmRvciggXCJoeXBoZW5zXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJjc3MtaHlwaGVuc1wiIClcblxuICAgIGp1c3RpZnktY29udGVudCgpXG4gICAgICAgIGtzLXZlbmRvciggXCJqdXN0aWZ5LWNvbnRlbnRcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImZsZXhib3hcIiApXG5cbiAgICBtYXNrKClcbiAgICAgICAga3MtdmVuZG9yKCBcIm1hc2tcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy1tYXNrc1wiIClcblxuICAgIG9wYWNpdHkoIHZhbHVlIClcbiAgICAgICAgaWYgdmFsdWUgPT0gaW5oZXJpdCBvciB2YWx1ZSA9PSBpbml0aWFsXG4gICAgICAgICAgICAtbXMtZmlsdGVyIHZhbHVlXG4gICAgICAgICAgICBmaWx0ZXIgdmFsdWVcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdmFsID0gcm91bmQoIHZhbHVlICogMTAwIClcbiAgICAgICAgICAgIGlmIHZhbCA9PSAxMDBcbiAgICAgICAgICAgICAgICAtbXMtZmlsdGVyOiBub25lXG4gICAgICAgICAgICAgICAgZmlsdGVyOiBub25lXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgLW1zLWZpbHRlcjogJ1wicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9JXMpXCInICUgdmFsXG4gICAgICAgICAgICAgICAgZmlsdGVyOiAnYWxwaGEob3BhY2l0eT0lcyknICUgdmFsXG4gICAgICAgIG9wYWNpdHkgdmFsdWVcblxuICAgIG9yZGVyKClcbiAgICAgICAga3MtdmVuZG9yKCBcIm9yZGVyXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJmbGV4Ym94XCIgKVxuXG4gICAgcGVyc3BlY3RpdmUoKVxuICAgICAgICBpZiBjdXJyZW50LXByb3BlcnR5WyAwIF0gaXMgXCJwZXJzcGVjdGl2ZVwiXG4gICAgICAgICAgICBrcy12ZW5kb3IoIFwicGVyc3BlY3RpdmVcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcInRyYW5zZm9ybXMzZFwiIClcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdW5xdW90ZSggXCJwZXJzcGVjdGl2ZShcIiArIGFyZ3VtZW50cyArIFwiKVwiIClcblxuICAgIHBlcnNwZWN0aXZlLW9yaWdpbigpXG4gICAgICAgIGtzLXZlbmRvciggXCJwZXJzcGVjdGl2ZS1vcmlnaW5cIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcInRyYW5zZm9ybXMzZFwiIClcblxuICAgIHRyYW5zZm9ybSgpXG4gICAgICAgIGtzLXZlbmRvciggXCJ0cmFuc2Zvcm1cIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcInRyYW5zZm9ybXMyZFwiIClcbiAgICB0cmFuc2Zvcm0tb3JpZ2luKClcbiAgICAgICAga3MtdmVuZG9yKCBcInRyYW5zZm9ybS1vcmlnaW5cIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcInRyYW5zZm9ybXMyZFwiIClcbiAgICB0cmFuc2Zvcm0tc3R5bGUoKVxuICAgICAgICBrcy12ZW5kb3IoIFwidHJhbnNmb3JtLXN0eWxlXCIsIGFyZ3VtZW50cywgZmVhdHVyZTogXCJ0cmFuc2Zvcm1zM2RcIiApXG5cbiAgICB0cmFuc2l0aW9uKClcbiAgICAgICAga3MtdmVuZG9yKCBcInRyYW5zaXRpb25cIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy10cmFuc2l0aW9uc1wiIClcbiAgICB0cmFuc2l0aW9uLWRlbGF5KClcbiAgICAgICAga3MtdmVuZG9yKCBcInRyYW5zaXRpb24tZGVsYXlcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy10cmFuc2l0aW9uc1wiIClcbiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uKClcbiAgICAgICAga3MtdmVuZG9yKCBcInRyYW5zaXRpb24tZHVyYXRpb25cIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy10cmFuc2l0aW9uc1wiIClcbiAgICB0cmFuc2l0aW9uLXByb3BlcnR5KClcbiAgICAgICAga3MtdmVuZG9yKCBcInRyYW5zaXRpb24tcHJvcGVydHlcIiwgYXJndW1lbnRzLCBmZWF0dXJlOiBcImNzcy10cmFuc2l0aW9uc1wiIClcbiAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbigpXG4gICAgICAgIGtzLXZlbmRvciggXCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvblwiLCBhcmd1bWVudHMsIGZlYXR1cmU6IFwiY3NzLXRyYW5zaXRpb25zXCIgKVxuIl19 */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment