summaryrefslogtreecommitdiff
path: root/share/frontend/js/okgradient-0.1.js
diff options
context:
space:
mode:
Diffstat (limited to 'share/frontend/js/okgradient-0.1.js')
-rw-r--r--share/frontend/js/okgradient-0.1.js149
1 files changed, 149 insertions, 0 deletions
diff --git a/share/frontend/js/okgradient-0.1.js b/share/frontend/js/okgradient-0.1.js
new file mode 100644
index 0000000..a28c11c
--- /dev/null
+++ b/share/frontend/js/okgradient-0.1.js
@@ -0,0 +1,149 @@
+(function($){
+
+ $.okgradient = function(el, options){
+ var base = this;
+ base.$el = $(el);
+ base.el = el;
+ base.$el.data("okgradient", base);
+
+ var width = $(window).width();
+ var height = $(window).height();
+
+ var browsers = " -webkit- -moz- -o- -ms-".split(" ");
+
+ base.init = function(){
+ base.options = $.extend({}, $.okgradient.options, options);
+ base.build();
+ };
+
+ base.build = function(){
+ base.start();
+ if (base.options.type in base.actions) {
+ base.action = base.actions[ base.options.type ];
+ }
+ };
+
+ base.start = function () {
+ $(window).bind({
+ mousemove: base.mousemove
+ });
+ base.mousemove({ pageX: $(window).width() / 2, pageY: $(window).height() / 2 });
+ if (base.options.transparent) {
+ base.el.style.color = "transparent";
+ }
+ };
+
+ base.parsecolor = function (rgb) {
+ var x = rgb.replace('rgb(','').replace(')','').split(',');
+ return [parseInt(x[0]), parseInt(x[1]), parseInt(x[2])];
+ };
+
+ base.scale = function (x, xbasis, newbasis) {
+ return (x - xbasis[0]) / (xbasis[1] - xbasis[0]) * (newbasis[1] - newbasis[0]) + newbasis[0];
+ };
+ base.clamp = function (x, min, max) {
+ return Math.max(min, Math.min(max, x));
+ };
+ base.parse_range = function (x, range) {
+ if (typeof range === "number") return range;
+ return base.scale(x, [0,1], range);
+ };
+
+ base.average_rgb = function (a, b, distance) {
+ var x = [];
+ for (var i = 0; i < 3; i++)
+ x[i] = Math.floor( a[i] * distance + b[i] * (1-distance) )
+ return x;
+ };
+
+ base.setoption = function (key, value) {
+ if (typeof key === "string") {
+ base.options[key] = value;
+ } else {
+ base.options = $.extend(base.options, key);
+ }
+ base.mousemove(base);
+ };
+
+ base.mousemove = function (e){
+ var offset = base.$el.offset(),
+ x = e.pageX,
+ y = e.pageY;
+ cy = offset.top + base.$el.height() / 2,
+ cx = offset.left + base.$el.width() / 2,
+ dx = (cx - x),
+ dy = (cy - y),
+ distance = Math.sqrt(dx*dx + dy*dy),
+ ratio = 1 - distance / $(window).height();
+ base.pageX = x;
+ base.pageY = y;
+ base.action(ratio);
+ };
+
+ base.opacity = function (ratio) {
+ base.el.style.opacity = ratio;
+ };
+
+ base.hsl = function (ratio, ranges) {
+ var hue = base.parse_range(ratio, ranges.hue),
+ sat = base.parse_range(ratio, ranges.saturation),
+ lum = base.parse_range(ratio, ranges.luminance);
+ if ("alpha" in ranges) {
+ var alpha = base.parse_range(ratio, ranges.alpha);
+ return "hsla(" + hue + "," + sat + "%," + lum + "%," + alpha + ")";
+ } else {
+ return "hsl(" + hue + "," + sat + "%," + lum + "%)";
+ }
+ };
+
+ base.background = function (ratio) {
+ var color = base.hsl(ratio, base.options);
+ base.el.style.background = color;
+ };
+
+ base.backgroundRadialGradient = function (ratio) {
+ var start = base.hsl(ratio, base.options.start),
+ end = base.hsl(ratio, base.options.end);
+ var gradient = 'radial-gradient(bottom, ' + start + ' 0%, ' + end + ' 100%);';
+ var gradients = "";
+ for (var i = 0, len = browsers.length; i < len; i++)
+ gradients += "background: " + browsers[i] + gradient + ";";
+ base.el.style.cssText = gradients;
+ };
+
+ base.backgroundLinearGradient = function (ratio) {
+ var start = base.hsl(ratio, base.options.start),
+ end = base.hsl(ratio, base.options.end);
+ var gradient = 'linear-gradient(bottom, ' + start + ' 0%, ' + end + ' 100%);';
+ var gradients = "";
+ for (var i = 0, len = browsers.length; i < len; i++)
+ gradients += "background: " + browsers[i] + gradient + ";";
+ base.el.style.cssText = gradients;
+ };
+
+ // initialize action to no-op
+ base.action = function(){};
+ base.actions = {
+ "opacity": base.opacity,
+ "background": base.background,
+ "background linear-gradient": base.backgroundLinearGradient,
+ "background radial-gradient": base.backgroundRadialGradient,
+ };
+
+ base.init();
+ };
+
+ $.okgradient.options = {
+ hue: [0,360],
+ saturation: [50,50],
+ luminance: [50,50],
+ opacity: [1,1],
+ };
+
+ $.fn.okgradient = function(options){
+ return this.each(function(){
+ (new $.okgradient(this, options));
+ });
+ };
+
+})(jQuery);