diff --git a/README.md b/README.md index bc1a086..86160b9 100644 --- a/README.md +++ b/README.md @@ -134,13 +134,12 @@ $('input').kladr('option1', 123); Структура папок, файлов -------------------------------------------------------------------------------- -* **jquery.kladr.js** - Плагин * **jquery.kladr.min.js** - Минимифицированный код плагина -* **jquery.kladr.css** - Стили * **jquery.kladr.min.css** - Минимифицированные стили -* **jquery.kladr.images** - Изображения плагина -* **kladr** - Состовляющие плагина (ядро и плагин для автодополнения) по отдельности -* **examples** - Примеры использования +* **examples** - Примеры +* **images** - Изображения плагина +* **kladr** - Исходный код плагина + Примеры -------------------------------------------------------------------------------- diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..d1c79a9 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,19 @@ +var gulp = require('gulp'), + csso = require('gulp-csso'), + imagemin = require('gulp-imagemin'), + uglify = require('gulp-uglify'), + concat = require('gulp-concat'), + rename = require('gulp-rename'); + +gulp.task('default', function() { + gulp.src('./kladr/css/style.css') + .pipe(csso()) + .pipe(rename('jquery.kladr.min.css')) + .pipe(gulp.dest('./')); + + gulp.src(['./kladr/js/core.js', './kladr/js/plugin.js']) + .pipe(concat('jquery.kladr.js')) + .pipe(uglify()) + .pipe(rename({suffix: '.min'})) + .pipe(gulp.dest('./')); +}); \ No newline at end of file diff --git a/jquery.kladr.images/spinner.png b/images/spinner.png similarity index 100% rename from jquery.kladr.images/spinner.png rename to images/spinner.png diff --git a/jquery.kladr.min.css b/jquery.kladr.min.css index 1be3c17..2a37655 100644 --- a/jquery.kladr.min.css +++ b/jquery.kladr.min.css @@ -1 +1 @@ -.kladr-error{color:#cb3e27}#kladr_autocomplete ul{position:absolute;display:block;margin:0;padding:0;border:1px solid #c4c4c4;background-color:white;z-index:9999;overflow-x:hidden;overflow-y:auto;min-width:200px;max-height:420px;color:#313131}#kladr_autocomplete li{display:list-item;list-style-type:none;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#kladr_autocomplete li+li{border-top:1px solid #ededed}#kladr_autocomplete li:hover{background-color:#f2f2f2;cursor:pointer}#kladr_autocomplete li.active{background-color:#e9e9e9}#kladr_autocomplete a{text-decoration:none}#kladr_autocomplete strong{color:#038ebd}#kladr_autocomplete .spinner{position:absolute;display:block;margin:0;padding:0;width:16px;height:16px;background:transparent url("examples/img/spinner.png") center center no-repeat;z-index:9999} \ No newline at end of file +.kladr-error{color:#cb3e27}#kladr_autocomplete ul{position:absolute;display:block;margin:0;padding:0;border:1px solid #c4c4c4;background-color:#fff;z-index:9999;overflow-x:hidden;overflow-y:auto;min-width:200px;max-height:420px;color:#313131}#kladr_autocomplete li{display:list-item;list-style-type:none;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#kladr_autocomplete li+li{border-top:1px solid #ededed}#kladr_autocomplete li:hover{background-color:#f2f2f2;cursor:pointer}#kladr_autocomplete li.active{background-color:#e9e9e9}#kladr_autocomplete a{text-decoration:none}#kladr_autocomplete strong{color:#038ebd}#kladr_autocomplete .spinner{position:absolute;display:block;margin:0;padding:0;width:16px;height:16px;background:url("./images/spinner.png") center center no-repeat;z-index:9999} \ No newline at end of file diff --git a/kladr/README.md b/kladr/README.md deleted file mode 100644 index ac1ed24..0000000 --- a/kladr/README.md +++ /dev/null @@ -1,9 +0,0 @@ -jQuery Kladr -================================================================================ - -Составляющие плагина по отдельности - -* **jquery.kladr.core.min.js** - Реализует $.kladr. Позволяет обращаться к сервису [kladr-api.ru] [1]. -* **jquery.kladr.plugin.min.js** - Реализует плагин $( '' ).kladr. - -[1]: http://kladr-api.ru/ "КЛАДР API" \ No newline at end of file diff --git a/jquery.kladr.css b/kladr/css/style.css similarity index 92% rename from jquery.kladr.css rename to kladr/css/style.css index 4802add..3fd9eaf 100644 --- a/jquery.kladr.css +++ b/kladr/css/style.css @@ -55,6 +55,6 @@ padding: 0; width: 16px; height: 16px; - background: transparent url("examples/img/spinner.png") center center no-repeat; + background: transparent url("./images/spinner.png") center center no-repeat; z-index: 9999; } \ No newline at end of file diff --git a/kladr/jquery.kladr.core.min.js b/kladr/jquery.kladr.core.min.js deleted file mode 100644 index 78d1eda..0000000 --- a/kladr/jquery.kladr.core.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){function t(e){var t={},r={token:"token",key:"key",type:"contentType",name:"query",withParents:"withParent",oneString:"oneString",limit:"limit"};e.parentType&&e.parentId&&(t[e.parentType+"Id"]=e.parentId);for(var n in e)e.hasOwnProperty(n)&&r.hasOwnProperty(n)&&e[n]&&(t[r[n]]=e[n]);return t}function r(e){window.console&&window.console.error&&window.console.error(e)}e.kladr={},e.kladr.url="http://kladr-api.ru/api.php",e.kladr.type={region:"region",district:"district",city:"city",street:"street",building:"building"},e.kladr.validate=function(t){switch(t.type){case e.kladr.type.region:case e.kladr.type.district:case e.kladr.type.city:if(t.parentType&&!t.parentId)return r("parentId undefined"),!1;break;case e.kladr.type.street:if(t.parentType!=e.kladr.type.city)return r('parentType must equal "city"'),!1;if(!t.parentId)return r("parentId undefined"),!1;break;case e.kladr.type.building:if(t.parentType!=e.kladr.type.street)return r('parentType must equal "street"'),!1;if(!t.parentId)return r("parentId undefined"),!1;break;default:if(!t.oneString)return r("type incorrect"),!1}return t.oneString&&t.parentType&&!t.parentId?(r("parentId undefined"),!1):t.limit<1?(r("limit must greater than 0"),!1):!0},e.kladr.api=function(n,i){if(!i)return void r("Callback undefined");if(!e.kladr.validate(n))return void i([]);var a=e.Deferred();a.done(i),a.fail(function(e){r(e),i([])}),e.getJSON(e.kladr.url+"?callback=?",t(n),function(e){a.resolve(e.result||[])}),setTimeout(function(){a.reject("Request error")},3e3)},e.kladr.check=function(t,n){return n?(t.withParents=!1,t.limit=1,void e.kladr.api(t,function(e){n(e&&e.length?e[0]:!1)})):void r("Callback undefined")}}(jQuery); \ No newline at end of file diff --git a/kladr/jquery.kladr.plugin.min.js b/kladr/jquery.kladr.plugin.min.js deleted file mode 100644 index 2d73964..0000000 --- a/kladr/jquery.kladr.plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(t,e){function n(n,r){function u(t,n){return t.isGet?s.get(t.str[0]):(s.set(t),n(),e)}var s=function(){var r=n.data("kladr-data");return r||(r=t.extend({},o,i),n.data("kladr-data",r)),{set:function(t){if(t.obj)for(var e in t.obj)t.obj.hasOwnProperty(e)&&o.hasOwnProperty(e)&&(r[e]=t.obj[e]);else t.str&&!t.isGet&&o.hasOwnProperty(t.str[0])&&(r[t.str[0]]=t.str[1]);n.data("kladr-data",r)},get:function(t){return o.hasOwnProperty(t)||i.hasOwnProperty(t)?r[t]:e},_set:function(t,e){r[t]=e,n.data("kladr-data",r)},_get:function(t){return r.hasOwnProperty(t)?r[t]:e}}}();return u(r,function(){function r(e){var r=t(document.getElementById("kladr_autocomplete"));r.length||(r=t('
').appendTo(document.body));var o=O("guid");o?(T=r.find(".autocomplete"+o),j=r.find(".spinner"+o),n.off(".kladr"),T.off(".kladr")):(o=a(),S("guid",o),n.attr("autocomplete","off"),T=t('').appendTo(r),j=t('').appendTo(r),i()),e()}function o(e,n){var r,a,o,i;T.empty();for(var l in e)e.hasOwnProperty(l)&&(r=e[l],a=O("valueFormat")(r,n),o=O("labelFormat")(r,n),i=t(''+o+""),i.data("kladr-object",r),t("
  • ").append(i).appendTo(T))}function i(){var t=n.offset(),e=n.outerWidth(),r=n.outerHeight();if(i.top!=t.top||i.left!=t.left||i.width!=e||i.height!=r){i.top=t.top,i.left=t.left,i.width=e,i.height=r,T.css({top:t.top+r+"px",left:t.left});var a=T.outerWidth()-T.width();T.width(e-a);var o=j.width(),l=j.height();j.css({top:t.top+(r-l)/2-1,left:t.left+e-o-2})}}function u(e){if(!(e.which>8&&e.which<46)){if(!v("open_before"))return void d();var r=n.val();if(!t.trim(r))return b(null),P(!1),void d();var a=g(r);if(!v("send_before",a))return void d();y(),v("send"),O("source")(a,function(e){return v("received"),n.is(":focus")?t.trim(n.val())&&e.length?(o(e,a),i(),k(),T.slideDown(50),void v("open")):(k(),b(null),void d()):(k(),void d())})}}function d(){v("close_before")&&(T.empty().hide(),v("close"))}function f(t){var n=T.find("li.active");switch(t.which){case l.up:n.length?(n.removeClass("active"),n.prev().length&&(n=n.prev())):n=T.find("li").last(),function(){var t=T.scrollTop(),e=T.offset(),r=n.outerHeight(),a=n.offset();a.top-e.top<0&&T.scrollTop(t-r)}(),n.addClass("active"),p();break;case l.down:n.length?(n.removeClass("active"),n.next().length&&(n=n.next())):n=T.find("li").first(),function(){var t=T.scrollTop(),e=T.height(),r=T.offset(),a=n.outerHeight(),o=n.offset();o.top-r.top+a>e&&T.scrollTop(t+a)}(),n.addClass("active"),p();break;case l.enter:d()}return e}function c(){var e=t(this);return e.is("a")&&(e=e.parents("li")),e.addClass("active"),p(),d(),n.focus(),!1}function p(){if(v("select_before")){var t=T.find(".active a");t.length&&(n.val(t.attr("data-val")),P(!1),b(t.data("kladr-object")),v("select",O("current")))}}function h(){function e(t,e){P(e),b(t)}if(O("verify")&&v("check_before")){var r=t.trim(n.val());if(!r)return void e(null,!1);var a=g(r);if(a.withParents=!1,a.limit=10,!v("send_before",a))return e(null,!1),void v("check",null);y(),v("send"),O("source")(a,function(r){function o(t,n){k(),e(t,n)}if(v("received"),!t.trim(n.val()))return void o(null,!1);var i=a.name.toLowerCase(),l=null,u=null;for(var s in r)if(r.hasOwnProperty(s)&&(l=r[s].name.toLowerCase(),i==l)){u=r[s];break}u&&n.val(O("valueFormat")(u,a)),o(u,!u),v("check",u)})}}function v(e,r){if(!e)return!0;var a=e.replace(/_([a-z])/gi,function(t,e){return e.toUpperCase()});return n.trigger("kladr_"+e,r),"function"===t.type(O(a))?O(a).call(n.get(0),r):!0}function y(){O("spinner")&&O("showSpinner")(j)}function k(){O("spinner")&&O("hideSpinner")(j)}function g(t){var e,n={token:O("token"),key:O("key"),type:O("type"),name:w(t),parentType:O("parentType"),parentId:O("parentId"),oneString:O("oneString"),withParents:O("withParents"),limit:O("limit")},r=O("parentInput");return n.oneString&&(n.withParents=!0),r&&(e=m(r,n.type),e&&(n.parentType=e.type,n.parentId=e.id)),n}function m(e,n){var r,a=t.kladr.getInputs(e),o=t.kladr.getTypes(),i={},l=null;a.each(function(){var e,n=t(this);(e=n.attr("data-kladr-id"))&&(i[n.attr("data-kladr-type")]=e)});for(r in o){if(r==n)return l;o.hasOwnProperty(r)&&i[r]&&(l={type:r,id:i[r]})}return l}function w(t){for(var e,n,r="abcdefghijklmnopqrstuvwxyz",a="Ёё",o="Ее",i=t.toLowerCase(),l="",u=0;u-1)return P(!0),t;e=t[u],n=a.indexOf(e),l+=n>-1?o[n]:e}return P(!1),l}function b(t){S("current",t),t&&t.id?n.attr("data-kladr-id",t.id):n.removeAttr("data-kladr-id"),O("oneString")&&t&&t.contentType&&n.attr("data-kladr-type",t.contentType)}function P(t){t?n.addClass("kladr-error"):n.removeClass("kladr-error")}function O(t){return s._get(t)}function S(t,e){s._set(t,e)}var T=null,j=null;r(function(){var t=!1;n.attr("data-kladr-type",O("type")||"").attr("data-kladr-one-string",O("oneString")||null).on("keyup.kladr",u).on("keydown.kladr",f).on("blur.kladr",function(){t||(h(),d())}),T.on("touchstart.kladr click.kladr","li, a",function(){t=!0,c.call(this),t=!1}).on("mouseenter.kladr",function(){t=!0}).on("mouseleave.kladr",function(){t=!1})})})}function r(n){var r={obj:!1,str:!1,isGet:!1};if("object"===t.type(n))return r.obj=n,r;if("string"===t.type(n)){r.str=[];for(var a in arguments)arguments.hasOwnProperty(a)&&(r.str[a]=arguments[a]);r.str[1]===e&&(r.isGet=!0)}return r}function a(){return a.guid||(a.guid=0),++a.guid}var o={token:null,key:null,type:null,parentType:null,parentId:null,limit:10,oneString:!1,withParents:!1,parentInput:null,verify:!1,spinner:!0,open:null,close:null,send:null,received:null,select:null,check:null,openBefore:null,closeBefore:null,sendBefore:null,selectBefore:null,checkBefore:null,source:function(e,n){t.kladr.api(e,n)},labelFormat:function(e,n){var r;if(n.oneString)return e.parents?(r=t.extend(!0,[],e.parents),r.push(e),t.kladr.buildAddress(r)):(e.typeShort?e.typeShort+". ":"")+e.name;var a,o,i,l,u="";return e.typeShort&&(u+=e.typeShort+". "),a=e.name,o=a.toLowerCase(),i=n.name.toLowerCase(),l=o.indexOf(i),l=l>0?l:0,i.length"+a.substr(l,i.length)+"",u+=a.substr(l+i.length,o.length-i.length-l)):u+=""+a+"",u},valueFormat:function(e,n){var r;return n.oneString?e.parents?(r=t.extend(!0,[],e.parents),r.push(e),t.kladr.buildAddress(r)):(e.typeShort?e.typeShort+". ":"")+e.name:e.name},showSpinner:function(t){var e=-.2,n=setInterval(function(){return t.is(":visible")?(t.css("background-position","0% "+e+"%"),e+=5.555556,void(e>95&&(e=-.2))):(clearInterval(n),void(n=null))},30);t.show()},hideSpinner:function(t){t.hide()}},i={current:null},l={up:38,down:40,enter:13};t.kladr=t.extend(t.kladr,{setDefault:function(t,e){var n=r(t,e);if(n.obj)for(var a in n.obj)o.hasOwnProperty(a)&&(o[a]=n.obj[a]);else n.str&&!n.isGet&&o.hasOwnProperty(n.str[0])&&(o[n.str[0]]=n.str[1])},getDefault:function(t){return o.hasOwnProperty(t)?o[t]:e},getTypes:function(){return t.kladr.type},getInputs:function(e){var n=t(),r="[data-kladr-type]";return t(e||document.body).each(function(){var e=t(this);n=n.add(e.is(r)?e:e.find(r))}),n},getAddress:function(e,n){var r,a=t.kladr.getInputs(e),o=t.kladr.getTypes(),i={},l={};a.each(function(){var e,n,r,a=t(this);if(a.attr("data-kladr-id"))if(e=a.kladr("current"),a.attr("data-kladr-one-string")&&e.parents){n=t.extend(!0,[],e.parents),n.push(e);for(r in n)n.hasOwnProperty(r)&&(i[n[r].contentType]=n[r])}else i[a.attr("data-kladr-type")]=e;else i[a.attr("data-kladr-type")]=a.val()});for(r in o)o.hasOwnProperty(r)&&i[r]&&(l[r]=i[r]);return(n||t.kladr.buildAddress)(l)},buildAddress:function(e){var n,r,a=[],o=!1,i="",l="",u="",s="";for(n in e)if(e.hasOwnProperty(n)){if("object"===t.type(e[n])){for(o=!1,r=0;r