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