Skip to content

Commit dd8ca86

Browse files
committed
Initial Commit
1 parent 5b73c40 commit dd8ca86

8 files changed

+254
-0
lines changed

Gruntfile.js

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
var fs = require('fs');
2+
3+
module.exports = function(grunt) {
4+
5+
var pkg = grunt.file.readJSON('package.json');
6+
7+
var banner = [ "<%= pkg.name %> v<%= pkg.version %>", "The MIT License (MIT)", "Copyright (c) 2014 <%= pkg.author %>" ].join("\n * ").trim();
8+
9+
grunt.initConfig({
10+
11+
pkg: pkg,
12+
13+
cssmin: {
14+
options: {
15+
banner: "/* " + banner + " */",
16+
preserveComments: 'some'
17+
},
18+
main: {
19+
files: {
20+
'dist/ripple.min.css': ['src/ripple.css']
21+
}
22+
}
23+
},
24+
25+
jshint: {
26+
all: ['src/ripple.js']
27+
},
28+
29+
uglify: {
30+
options: {
31+
banner: "/* " + banner + " */\n",
32+
preserveComments: 'some'
33+
},
34+
main: {
35+
files: {
36+
'dist/ripple.min.js': ['src/ripple.js']
37+
}
38+
}
39+
},
40+
41+
watch: {
42+
scripts: {
43+
files: 'src/*.js',
44+
tasks: ['jshint', 'uglify']
45+
},
46+
manifests: {
47+
files: ['package.json'],
48+
tasks: ['sync_versions']
49+
}
50+
}
51+
});
52+
53+
grunt.loadNpmTasks('grunt-contrib-cssmin');
54+
grunt.loadNpmTasks('grunt-contrib-jshint');
55+
grunt.loadNpmTasks('grunt-contrib-uglify');
56+
grunt.loadNpmTasks('grunt-contrib-watch');
57+
58+
// Custom task
59+
grunt.registerTask('sync_versions', 'Keeps versions in sync between NPM and Bower', function(){
60+
var bower = {
61+
name: pkg.name,
62+
author: pkg.author,
63+
version: pkg.version,
64+
main: 'dist/ripple.min.js'
65+
};
66+
fs.writeFileSync('bower.json', JSON.stringify(bower, null, "\t"));
67+
});
68+
69+
grunt.registerTask('default', ['jshint', 'uglify', 'cssmin', 'sync_versions']);
70+
grunt.registerTask('develop', ['jshint', 'uglify', 'cssmin', 'sync_versions', 'watch']);
71+
};

README.md

+28
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,31 @@ Ripple.js
22
=========
33

44
Adds Material style ripple to buttons
5+
6+
## Installation
7+
```html
8+
<link href="stylesheet" type="text/css" href="ripple.min.css">
9+
<script type="text/javascript" src="jquery.min.js"></script>
10+
<script type="text/javascript" src="ripple.min.js"></script>
11+
```
12+
or
13+
```bash
14+
$ bower install ripplejs
15+
```
16+
17+
## Usage
18+
Include jQuery, the ripple.css, and ripple.js into your page. Then upon initialization, you can activate ripple as follows:
19+
20+
```javascript
21+
$.ripple(".btn", {
22+
color: "auto", // Set the background color. If set to "auto", it will use the text color
23+
opacity: 0.5 // The opacity of the ripple
24+
});
25+
```
26+
27+
## Building
28+
```bash
29+
$ npm install
30+
$ npm run-script build
31+
$ npm run-script build-watch # To watch assets
32+
```

bower.json

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "Ripple.js",
3+
"author": "Jacob Kelley",
4+
"version": "1.0.0",
5+
"main": "dist/ripple.min.js"
6+
}

dist/ripple.min.css

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/ripple.min.js

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"name": "Ripple.js",
3+
"author": "Jacob Kelley",
4+
"version": "1.0.0",
5+
"repository": {
6+
"type": "git",
7+
"url": "https://github.com/jakiestfu/Ripple.js.git"
8+
},
9+
"scripts": {
10+
"build": "./node_modules/grunt-cli/bin/grunt",
11+
"build-watch": "./node_modules/grunt-cli/bin/grunt develop"
12+
},
13+
"devDependencies": {
14+
"grunt": "~0.4.1",
15+
"grunt-cli": "~0.1.9",
16+
"grunt-contrib-watch": "~0.5.3",
17+
"grunt-contrib-uglify": "0.2.5",
18+
"grunt-contrib-jshint": "0.8.0",
19+
"grunt-contrib-cssmin": "0.10.0"
20+
}
21+
}

src/ripple.css

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
.has-ripple {
2+
position: relative;
3+
overflow: hidden;
4+
-webkit-transform: translate3d(0,0,0);
5+
}
6+
.ripple {
7+
display: block;
8+
position: absolute;
9+
pointer-events: none;
10+
border-radius: 50%;
11+
12+
-webkit-transform: scale(0);
13+
-moz-transform: scale(0);
14+
-ms-transform: scale(0);
15+
-o-transform: scale(0);
16+
transform: scale(0);
17+
18+
background: #fff;
19+
opacity: 1;
20+
}
21+
.ripple.animate {
22+
-webkit-animation: ripple .7s linear;
23+
-moz-animation: ripple .5s linear;
24+
-ms-animation: ripple .5s linear;
25+
-o-animation: ripple .5s linear;
26+
animation: ripple .5s linear;
27+
}
28+
@keyframes ripple {
29+
100% {
30+
opacity: 0;
31+
transform: scale(2.5);
32+
}
33+
}
34+
@-webkit-keyframes ripple {
35+
100% {
36+
opacity: 0;
37+
-webkit-transform: scale(2.5);
38+
transform: scale(2.5);
39+
}
40+
}
41+
@-moz-keyframes ripple {
42+
100% {
43+
opacity: 0;
44+
-moz-transform: scale(2.5);
45+
transform: scale(2.5);
46+
}
47+
}
48+
@-ms-keyframes ripple {
49+
100% {
50+
opacity: 0;
51+
-ms-transform: scale(2.5);
52+
transform: scale(2.5);
53+
}
54+
}
55+
@-o-keyframes ripple {
56+
100% {
57+
opacity: 0;
58+
-o-transform: scale(2.5);
59+
transform: scale(2.5);
60+
}
61+
}

src/ripple.js

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
;(function($){
2+
$.ripple = function(selector, options) {
3+
4+
var self = this;
5+
6+
self.defaults = {
7+
opacity: 0.5,
8+
color: "auto"
9+
};
10+
11+
var settings = $.extend({}, self.defaults, options);
12+
13+
$(document).on('click', selector, function(e) {
14+
15+
var $this = $(this);
16+
var $ripple;
17+
18+
$this.addClass('has-ripple');
19+
20+
// Create the ripple element
21+
if ($this.find(".ripple").length === 0) {
22+
$ripple = $("<span></span>").addClass("ripple");
23+
$ripple.appendTo($this);
24+
25+
var color = (settings.color == "auto") ? $this.css('color') : settings.color;
26+
$ripple.css({
27+
background: color,
28+
opacity: settings.opacity
29+
});
30+
}
31+
32+
$ripple = $this.find(".ripple");
33+
34+
// Kill animation
35+
$ripple.removeClass("animate");
36+
37+
// Set ripple size
38+
if (!$ripple.height() && !$ripple.width()) {
39+
var size = Math.max($this.outerWidth(), $this.outerHeight());
40+
$ripple.css({
41+
height: size,
42+
width: size
43+
});
44+
}
45+
46+
// Retrieve coordinates
47+
var x = e.pageX - $this.offset().left - $ripple.width() / 2;
48+
var y = e.pageY - $this.offset().top - $ripple.height() / 2;
49+
50+
// Set position and animate
51+
$ripple.css({
52+
top: y + 'px',
53+
left: x + 'px'
54+
}).addClass("animate");
55+
});
56+
};
57+
})(jQuery);
58+
59+
$.ripple(".btn-ripple");

0 commit comments

Comments
 (0)