diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
diff --git a/Gruntfile.js b/Gruntfile.js
new file mode 100644
index 0000000..e89661e
--- /dev/null
+++ b/Gruntfile.js
@@ -0,0 +1,14 @@
+module.exports = function(grunt) {
+ var path = require('path');
+
+ require('load-grunt-config')(grunt, {
+ init: true,
+ configPath: path.join(process.cwd(), 'src/tasks'),
+ data: {
+ projectDev: 'src',
+ projectDir: 'dist',
+ pkg: grunt.file.readJSON('package.json')
+ }
+ });
+
+};
diff --git a/demo/index.html b/demo/index.html
index 263673b..83bbc34 100644
--- a/demo/index.html
+++ b/demo/index.html
@@ -7,7 +7,7 @@
-
+
diff --git a/dist/tipso.min.css b/dist/tipso.min.css
new file mode 100644
index 0000000..b95e8fc
--- /dev/null
+++ b/dist/tipso.min.css
@@ -0,0 +1 @@
+.tipso_bubble,.tipso_bubble>.tipso_arrow{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.tipso_bubble{position:absolute;text-align:center;border-radius:6px;z-index:9999;padding:10px}.tipso_style{cursor:help;border-bottom:1px dotted}.tipso_content{word-wrap: break-word}.tipso_bubble>.tipso_arrow{position:absolute;width:0;height:0;border:8px solid;pointer-events:none}.tipso_bubble.top>.tipso_arrow{border-top-color:#000;border-right-color:transparent;border-left-color:transparent;border-bottom-color:transparent;top:100%;left:50%;margin-left:-8px}.tipso_bubble.bottom>.tipso_arrow{border-bottom-color:#000;border-right-color:transparent;border-left-color:transparent;border-top-color:transparent;bottom:100%;left:50%;margin-left:-8px}.tipso_bubble.left>.tipso_arrow{border-left-color:#000;border-top-color:transparent;border-bottom-color:transparent;border-right-color:transparent;top:50%;left:100%;margin-top:-8px}.tipso_bubble.right>.tipso_arrow{border-right-color:#000;border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;top:50%;right:100%;margin-top:-8px}
diff --git a/dist/tipso.min.js b/dist/tipso.min.js
new file mode 100644
index 0000000..4389308
--- /dev/null
+++ b/dist/tipso.min.js
@@ -0,0 +1 @@
+!function(a,b,c,d){function e(d,e){this.element=a(d),this.doc=a(c),this.win=a(b),this.settings=a.extend({},j,e),this._defaults=j,this._name=i,this._title=this.element.attr("title"),this.mode="hide",this.ieFade=!k,this.init()}function f(){var a=b.navigator.msMaxTouchPoints,d="ontouchstart"in c.createElement("div");return a||d?!0:!1}function g(b){var c=b.clone();c.css("visibility","hidden"),a("body").append(c);var d=c.outerHeight(),e=c.outerWidth();return c.remove(),{width:e,height:d}}function h(c){var d,e,f,h=c.tooltip(),i=c.element,j=c,k=a(b),l=10;switch(i.parent().outerWidth()>k.outerWidth()&&(k=i.parent()),j.settings.position){case"top":e=i.offset().left+i.outerWidth()/2-g(h).width/2,d=i.offset().top-g(h).height-l,h.find(".tipso_arrow").css({marginLeft:-8,marginTop:""}),dk.scrollTop()+k.outerHeight()?(d=i.offset().top-g(h).height-l,h.find(".tipso_arrow").css({"border-top-color":j.settings.background,"border-bottom-color":"transparent","border-left-color":"transparent","border-right-color":"transparent"}),h.removeClass("top bottom left right"),h.addClass("top")):(h.find(".tipso_arrow").css({"border-bottom-color":j.settings.background,"border-top-color":"transparent","border-left-color":"transparent","border-right-color":"transparent"}),h.removeClass("top bottom left right"),h.addClass(j.settings.position));break;case"left":e=i.offset().left-g(h).width-l,d=i.offset().top+i.outerHeight()/2-g(h).height/2,h.find(".tipso_arrow").css({marginTop:-8,marginLeft:""}),ek.scrollLeft()+k.outerWidth()?(e=i.offset().left-g(h).width-l,h.find(".tipso_arrow").css({"border-left-color":j.settings.background,"border-right-color":"transparent","border-top-color":"transparent","border-bottom-color":"transparent"}),h.removeClass("top bottom left right"),h.addClass("left")):(h.find(".tipso_arrow").css({"border-right-color":j.settings.background,"border-left-color":"transparent","border-top-color":"transparent","border-bottom-color":"transparent"}),h.removeClass("top bottom left right"),h.addClass(j.settings.position))}ek.outerWidth()&&("bottom"==j.settings.position||"top"==j.settings.position)&&(f=k.outerWidth()-(e+j.settings.width),h.find(".tipso_arrow").css({marginLeft:-f-8,marginTop:""}),e+=f),ek.outerWidth()&&(f=k.outerWidth()-(e+j.settings.width),h.find(".tipso_arrow").css({marginLeft:-f-8,marginTop:""}),e+=f),ek.outerWidth()&&("left"==j.settings.position||"right"==j.settings.position)&&(e=i.offset().left+i.outerWidth()/2-g(h).width/2,h.find(".tipso_arrow").css({marginLeft:-8,marginTop:""}),d=i.offset().top-g(h).height-l,dk.outerWidth()&&(f=k.outerWidth()-(e+j.settings.width),h.find(".tipso_arrow").css({marginLeft:-f-8,marginTop:""}),e+=f),e')),this.tipso_bubble},show:function(){var c=this.tooltip(),d=this,e=this.win;"hide"==d.mode&&(a.isFunction(d.settings.onBeforeShow)&&d.settings.onBeforeShow(a(this)),d.settings.width?c.css({background:d.settings.background,color:d.settings.color,width:d.settings.width}).hide():d.settings.maxWidth?c.css({background:d.settings.background,color:d.settings.color,maxWidth:d.settings.maxWidth}).hide():c.css({background:d.settings.background,color:d.settings.color,width:200}).hide(),c.find(".tipso_content").html(d.content()),h(d),e.resize(function(){h(d)}),d.timeout=b.setTimeout(function(){d.ieFade||""===d.settings.animationIn||""===d.settings.animationOut?c.appendTo("body").stop(!0,!0).fadeIn(d.settings.speed,function(){d.mode="show",a.isFunction(d.settings.onShow)&&d.settings.onShow(a(this))}):c.remove().appendTo("body").stop(!0,!0).removeClass("animated "+d.settings.animationOut).addClass("noAnimation").removeClass("noAnimation").addClass("animated "+d.settings.animationIn).fadeIn(d.settings.speed,function(){a(this).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){a(this).removeClass("animated "+d.settings.animationIn)}),d.mode="show",a.isFunction(d.settings.onShow)&&d.settings.onShow(a(this)),e.off("resize",null,"tipsoResizeHandler")})},d.settings.delay))},hide:function(){var c=this,d=this.win;tipso_bubble=this.tooltip(),b.clearTimeout(c.timeout),c.timeout=null,"tooltipHover"!=c.mode&&(c.ieFade||""===c.settings.animationIn||""===c.settings.animationOut?tipso_bubble.stop(!0,!0).fadeOut(c.settings.speed,function(){a(this).remove(),a.isFunction(c.settings.onHide)&&"show"==c.mode&&c.settings.onHide(a(this)),c.mode="hide",d.off("resize",null,"tipsoResizeHandler")}):tipso_bubble.stop(!0,!0).removeClass("animated "+c.settings.animationIn).addClass("noAnimation").removeClass("noAnimation").addClass("animated "+c.settings.animationOut).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){a(this).removeClass("animated "+c.settings.animationOut).remove(),a.isFunction(c.settings.onHide)&&"show"==c.mode&&c.settings.onHide(a(this)),c.mode="hide",d.off("resize",null,"tipsoResizeHandler")}))},destroy:function(){var a=this.element,b=this.win,c=this.doc;a.off("."+i),b.off("resize",null,"tipsoResizeHandler"),f()&&c.off("click",null,"closeTipso"),a.removeData(i),a.removeClass("tipso_style").attr("title",this._title)},content:function(){var b,c=this.element,d=this,e=this._title;return b=d.settings.ajaxContentUrl?a.ajax({type:"GET",url:d.settings.ajaxContentUrl,async:!1}).responseText:d.settings.content?d.settings.content:d.settings.useTitle===!0?e:c.data("tipso")},update:function(a,b){var c=this;return b?void(c.settings[a]=b):c.settings[a]}});var k=function(){var a=c.createElement("p").style,b=["ms","O","Moz","Webkit"];if(""==a.transition)return!0;for(;b.length;)if(b.pop()+"Transition"in a)return!0;return!1}();a[i]=a.fn[i]=function(b){var c=arguments;if(b===d||"object"==typeof b)return this instanceof a||a.extend(j,b),this.each(function(){a.data(this,"plugin_"+i)||a.data(this,"plugin_"+i,new e(this,b))});if("string"==typeof b&&"_"!==b[0]&&"init"!==b){var f;return this.each(function(){var d=a.data(this,"plugin_"+i);d||(d=a.data(this,"plugin_"+i,new e(this,b))),d instanceof e&&"function"==typeof d[b]&&(f=d[b].apply(d,Array.prototype.slice.call(c,1))),"destroy"===b&&a.data(this,"plugin_"+i,null)}),f!==d?f:this}}}(jQuery,window,document);
\ No newline at end of file
diff --git a/package.json b/package.json
index 36366bc..6d27a1c 100644
--- a/package.json
+++ b/package.json
@@ -30,5 +30,16 @@
"url": "https://github.com/object505/tipso.git"
},
"homepage": "https://github.com/object505/tipso",
- "license": "MIT"
+ "license": "MIT",
+ "devDependencies": {
+ "grunt": ">=0.4.5",
+ "grunt-contrib-jshint": "~0.11.1",
+ "grunt-contrib-uglify": "^0.8.0",
+ "grunt-sass": "^1.0.0",
+ "load-grunt-config": "^0.10.0",
+ "load-grunt-tasks": "^0.4.0"
+ },
+ "dependencies": {
+ "node-sass": "^3.1.2"
+ }
}
diff --git a/src/tipso.js b/src/js/tipso.js
similarity index 100%
rename from src/tipso.js
rename to src/js/tipso.js
diff --git a/src/tipso.css b/src/scss/tipso.scss
similarity index 96%
rename from src/tipso.css
rename to src/scss/tipso.scss
index 8eea076..f0e67c9 100644
--- a/src/tipso.css
+++ b/src/scss/tipso.scss
@@ -15,6 +15,9 @@
cursor: help;
border-bottom: 1px dotted;
}
+.tipso_content {
+ word-wrap: break-word;
+}
/* Tipso Bubble Div */
.tipso_bubble > .tipso_arrow{
diff --git a/src/tasks/aliases.yaml b/src/tasks/aliases.yaml
new file mode 100644
index 0000000..71512ba
--- /dev/null
+++ b/src/tasks/aliases.yaml
@@ -0,0 +1,4 @@
+default:
+ - 'sass'
+# - 'jshint'
+ - 'uglify'
diff --git a/src/tasks/config/.jshintrc b/src/tasks/config/.jshintrc
new file mode 100644
index 0000000..98ff50d
--- /dev/null
+++ b/src/tasks/config/.jshintrc
@@ -0,0 +1,25 @@
+{
+ "bitwise": true,
+ "eqeqeq": true,
+ "eqnull": true,
+ "immed": true,
+ "newcap": false,
+ "esnext": true,
+ "latedef": true,
+ "noarg": true,
+ "undef": true,
+ "browser": true,
+ "trailing": true,
+ "jquery": true,
+ "curly": true,
+ "trailing": true,
+ "smarttabs": true,
+ "browser": true,
+ "node": true,
+ "laxcomma" : true,
+ "sub":true,
+ "expr":true,
+ "globals": {
+ "$": true
+ }
+}
diff --git a/src/tasks/jshint.js b/src/tasks/jshint.js
new file mode 100644
index 0000000..b911e29
--- /dev/null
+++ b/src/tasks/jshint.js
@@ -0,0 +1,10 @@
+module.exports = function(grunt, options){
+ var projectDev = options.projectDev;
+
+ return {
+ options: {
+ jshintrc: '<%= projectDev %>/tasks/config/.jshintrc'
+ },
+ tipso: ['<%= projectDev %>/js/{,*/,**/}*.js']
+ }
+};
diff --git a/src/tasks/sass.js b/src/tasks/sass.js
new file mode 100644
index 0000000..36b6d5a
--- /dev/null
+++ b/src/tasks/sass.js
@@ -0,0 +1,15 @@
+module.exports = function(grunt, options){
+ var projectDev = options.projectDev;
+ var projectDir = options.projectDir;
+
+ return {
+ options: {
+ outputStyle: 'compressed'
+ },
+ tipso: {
+ files: {
+ '<%= projectDir %>/tipso.min.css': '<%= projectDev %>/scss/tipso.scss'
+ }
+ }
+ };
+};
diff --git a/src/tasks/uglify.js b/src/tasks/uglify.js
new file mode 100644
index 0000000..8aa8c6b
--- /dev/null
+++ b/src/tasks/uglify.js
@@ -0,0 +1,18 @@
+module.exports = function(grunt, options){
+ var projectDev = options.projectDev;
+ var projectDir = options.projectDir;
+
+ return {
+ options: {
+ },
+ tipso: {
+ files: [{
+ expand: true,
+ cwd: '<%= projectDev %>/js/',
+ src : 'tipso.js',
+ dest: '<%= projectDir %>/',
+ ext: '.min.js'
+ }]
+ }
+ };
+};
diff --git a/src/tipso.min.css b/src/tipso.min.css
deleted file mode 100644
index d9e07f3..0000000
--- a/src/tipso.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.tipso_bubble,.tipso_bubble>.tipso_arrow{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.tipso_bubble{position:absolute;text-align:center;border-radius:6px;z-index:9999;padding:10px}.tipso_style{cursor:help;border-bottom:1px dotted}.tipso_bubble>.tipso_arrow{position:absolute;width:0;height:0;border:8px solid;pointer-events:none}.tipso_bubble.top>.tipso_arrow{border-color:#000 transparent transparent;top:100%;left:50%;margin-left:-8px}.tipso_bubble.bottom>.tipso_arrow{border-color:transparent transparent #000;bottom:100%;left:50%;margin-left:-8px}.tipso_bubble.left>.tipso_arrow{border-color:transparent transparent transparent #000;top:50%;left:100%;margin-top:-8px}.tipso_bubble.right>.tipso_arrow{border-color:transparent #000 transparent transparent;top:50%;right:100%;margin-top:-8px}
\ No newline at end of file