-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery-bem.min.js
8 lines (8 loc) · 8.98 KB
/
jquery-bem.min.js
1
2
3
4
5
6
7
8
/*!
* A small JavaScript library that helps to create CSS classes according to the BEM methodology and add, remove, modify CSS classes of DOM elements or select DOM elements by BEM-like CSS classes.
* https://github.com/eakoryakin/jquery-bem
*
* Copyright (c) 2015 Evgenii Koriakin.
* Released under the MIT license.
*/
window.bem={},function(e){function t(e){return null===e||void 0===e?!0:e.replace(/\s/g,"").length<1}function r(t){return t=$.trim(t),t=t.replace(new RegExp("^["+e.elementSeparator+e.modifierSeparator+e.modifierValueSeparator+"]+"),""),t=t.replace(new RegExp("["+e.elementSeparator+e.modifierSeparator+e.modifierValueSeparator+"]+$"),"")}function n(){this.strings=[],this.append=function(e){return this.strings.push(e),this},this.toString=function(){return this.strings.join("")}}e.elementSeparator="__",e.modifierSeparator="_",e.modifierValueSeparator="_",e.block=function(){var i=arguments;if(2===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]){var a=r(i[0]),o=i[1];return t(a)?"":a+" "+e.blockModifier(a,o)}if(3===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]&&"string"==typeof i[2]){var a=i[0],o=i[1],p=i[2];return e.block(a,e.splitModifiers(o),e.splitCssClasses(p))}if(2===i.length&&"string"==typeof i[0]&&$.isArray(i[1])){var a=r(i[0]),l=i[1];return t(a)?"":a+" "+e.blockModifier(a,l)}if(3===i.length&&"string"==typeof i[0]&&$.isArray(i[1])&&$.isArray(i[2])){var a=r(i[0]),l=i[1],s=i[2];if(t(a))return"";var f=(new n).append(a).append(" ");if(l.length>0&&(f.append(e.blockModifier(a,l)),f.append(" ")),s.length>0)for(var g=0;g<s.length;g++)t(s[g])||(f.append(s[g]),f.append(" "));return $.trim(f.toString())}return""},e.blockModifier=function(){var i=arguments;if(2===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]){var a=r(i[0]),o=i[1];return t(a)||t(o)?"":e.blockModifier(a,e.splitModifiers(o))}if(3===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]&&"string"==typeof i[2]){var a=r(i[0]),p=r(i[1]),l=r(i[2]);return t(a)||t(p)||t(l)?"":a+e.modifierSeparator+p+e.modifierValueSeparator+l}if(2===i.length&&"string"==typeof i[0]&&$.isArray(i[1])){var a=r(i[0]),s=i[1];if(t(a)||0===s.length)return"";for(var f=new n,g=0;g<s.length;g++){var o=s[g];t(o.name)||(t(o.value)?f.append(a).append(e.modifierSeparator).append(o.name).append(" "):f.append(a).append(e.modifierSeparator).append(o.name).append(e.modifierValueSeparator).append(o.value).append(" "))}return $.trim(f.toString())}return""},e.element=function(){var i=arguments;if(2===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]){var a=r(i[0]),o=r(i[1]);return t(a)||t(o)?"":a+e.elementSeparator+o}if(3===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]&&"string"==typeof i[2]){var a=r(i[0]),o=r(i[1]),p=i[2];return t(a)||t(o)?"":a+e.elementSeparator+o+" "+e.elementModifier(a,o,p)}if(4===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]&&"string"==typeof i[2]&&"string"==typeof i[3]){var a=r(i[0]),o=r(i[1]),p=i[2],l=i[3];return e.element(a,o,e.splitModifiers(p),e.splitCssClasses(l))}if(3===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]&&$.isArray(i[2])){var a=r(i[0]),o=r(i[1]),s=i[2];return t(a)||t(o)||0===s.length?"":a+e.elementSeparator+o+" "+e.elementModifier(a,o,s)}if(4===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]&&$.isArray(i[2])&&$.isArray(i[3])){var a=r(i[0]),o=r(i[1]),s=i[2],f=i[3];if(t(a)||t(o))return"";var g=(new n).append(a).append(e.elementSeparator).append(o).append(" ");if(s.length>0&&(g.append(e.elementModifier(a,o,s)),g.append(" ")),f.length>0)for(var m=0;m<f.length;m++)t(f[m])||(g.append(f[m]),g.append(" "));return $.trim(g.toString())}},e.elementModifier=function(){var i=arguments;if(3===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]&&"string"==typeof i[2]){var a=i[0],o=i[1],p=i[2];return t(a)||t(o)||t(p)?"":e.elementModifier(a,o,e.splitModifiers(p))}if(4===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]&&"string"==typeof i[2]&&"string"==typeof i[3]){var a=r(i[0]),o=r(i[1]),l=r(i[2]),s=r(i[3]);return t(a)||t(o)||t(l)||t(s)?"":a+e.elementSeparator+o+e.modifierSeparator+l+e.modifierValueSeparator+s}if(3===i.length&&"string"==typeof i[0]&&"string"==typeof i[1]&&$.isArray(i[2])){var a=r(i[0]),o=r(i[1]),f=i[2];if(t(a)||t(o)||0===f.length)return"";for(var g=new n,m=0;m<f.length;m++){var p=f[m];p.name=r(p.name),p.value=r(p.value),t(p.name)||(t(p.value)?g.append(a).append(e.elementSeparator).append(o).append(e.modifierSeparator).append(p.name).append(" "):g.append(a).append(e.elementSeparator).append(o).append(e.modifierSeparator).append(p.name).append(e.modifierValueSeparator).append(p.value).append(" "))}return $.trim(g.toString())}return""},e.getBlock=function(){var t=arguments;return 1===t.length&&"string"==typeof t[0]?$("."+$.trim(t[0])):2===t.length&&"string"==typeof t[0]&&"string"==typeof t[1]?$("."+e.blockModifier(t[0],t[1]).replace(/\s/g,".")):3===t.length&&"string"==typeof t[0]&&"string"==typeof t[1]&&"string"==typeof t[2]?$("."+e.blockModifier(t[0],t[1],t[2]).replace(/\s/g,".")):2===t.length&&"string"==typeof t[0]&&"object"==typeof t[1]?$("."+$.trim(t[0]),t[1]):3===t.length&&"string"==typeof t[0]&&"string"==typeof t[1]&&"object"==typeof t[2]?$("."+e.blockModifier(t[0],t[1]).replace(/\s/g,"."),t[2]):4===t.length&&"string"==typeof t[0]&&"string"==typeof t[1]&&"string"==typeof t[2]&&"object"==typeof t[3]?$("."+e.blockModifier(t[0],t[1],t[2]).replace(/\s/g,"."),t[3]):$()},e.getElement=function(){var t=arguments;return 2===t.length&&"string"==typeof t[0]&&"string"==typeof t[1]?$("."+$.trim(t[0])+e.elementSeparator+$.trim(t[1])):3===t.length&&"string"==typeof t[0]&&"string"==typeof t[1]&&"string"==typeof t[2]?$("."+e.elementModifier(t[0],t[1],t[2]).replace(/\s/g,".")):4===t.length&&"string"==typeof t[0]&&"string"==typeof t[1]&&"string"==typeof t[2]&&"string"==typeof t[3]?$("."+e.elementModifier(t[0],t[1],t[2],t[3]).replace(/\s/g,".")):3===t.length&&"string"==typeof t[0]&&"string"==typeof t[1]&&"object"==typeof t[2]?$("."+$.trim(t[0])+e.elementSeparator+$.trim(t[1]),t[2]):4===t.length&&"string"==typeof t[0]&&"string"==typeof t[1]&&"string"==typeof t[2]&&"object"==typeof t[3]?$("."+e.elementModifier(t[0],t[1],t[2]).replace(/\s/g,"."),t[3]):5===t.length&&"string"==typeof t[0]&&"string"==typeof t[1]&&"string"==typeof t[2]&&"string"==typeof t[3]&&"object"==typeof t[4]?$("."+e.elementModifier(t[0],t[1],t[2],t[3]).replace(/\s/g,"."),t[4]):$()},e.splitCssClasses=function(e){var n=[];if(e=$.trim(e),!e)return n;for(var i=e.split(" "),a=0;a<i.length;a++){for(var o=r(i[a]),p=!1,l=0;l<n.length;l++)if(o===n[l]){p=!0;break}t(o)||p||n.push(o)}return n},e.splitModifiers=function(n){var i=[];if(n=$.trim(n),!n)return i;for(var a=n.split(" "),o=0;o<a.length;o++){var p=r(a[o]),l=p.split(e.modifierValueSeparator),s=l[0],f=2===l.length?l[1]:"",g=!1;if(!t(s)||!t(f)){for(var m=0;m<i.length;m++)if(s===i[m].name){i[m].value=f,g=!0;break}g||i.push({name:s,value:f})}}return i},jQuery.fn.extend({addModifier:function(){for(var t=0;t<this.length;t++){var r=$(this[t]);r.isBlock()?r.addClass(e.blockModifier.apply(null,[r.blockName()].concat(Array.prototype.slice.call(arguments)))):r.isElement()&&r.addClass(e.elementModifier.apply(null,[r.blockName(),r.elementName()].concat(Array.prototype.slice.call(arguments))))}return this},blockName:function(){var t=this.eq(0).attr("class"),r=t?t.split(" ")[0]:"";return r?r.split(e.elementSeparator)[0]:""},elementName:function(){var t=this.eq(0).attr("class"),r=t?t.split(" ")[0]:"";return r?r.split(e.elementSeparator)[1]:""},getBlock:function(){return e.getBlock.apply(null,Array.prototype.slice.call(arguments).concat([this]))},getElement:function(){return e.getElement.apply(null,[this.blockName()].concat(Array.prototype.slice.call(arguments),[this]))},hasModifier:function(){for(var t=0;t<this.length;t++){var r=$(this[t]);if(r.isBlock()){if(r.hasClass(e.blockModifier.apply(null,[r.blockName()].concat(Array.prototype.slice.call(arguments)))))return!0}else if(r.isElement()&&r.hasClass(e.elementModifier.apply(null,[r.blockName(),r.elementName()].concat(Array.prototype.slice.call(arguments)))))return!0}return!1},isBlock:function(){var r=this.eq(0).attr("class"),n=r?r.split(" ")[0]:"";return!t(n)&&-1===n.indexOf(e.elementSeparator)},isElement:function(){var r=this.eq(0).attr("class"),n=r?r.split(" ")[0]:"";return!t(n)&&-1!==n.indexOf(e.elementSeparator)},modifierValue:function(t,r){if(1===arguments.length){var n=this.attr("class");if(!t||!n)return"";var i=new RegExp(e.modifierSeparator+t+e.modifierValueSeparator+"([a-z0-9-]+)","ig").exec(n);return i?i[1]:""}if(2===arguments.length){for(var a=0;a<this.length;a++){var o=$(this[a]),n=o.attr("class");t&&r&&n&&o.attr("class",n.replace(new RegExp(e.modifierSeparator+t+e.modifierValueSeparator+"([a-z0-9-]+)","ig"),function(){return e.modifierSeparator+t+e.modifierValueSeparator+r}))}return this}},removeModifier:function(){for(var t=0;t<this.length;t++){var r=$(this[t]);r.isBlock()?r.removeClass(e.blockModifier.apply(null,[r.blockName()].concat(Array.prototype.slice.call(arguments)))):r.isElement()&&r.removeClass(e.elementModifier.apply(null,[r.blockName(),r.elementName()].concat(Array.prototype.slice.call(arguments))))}return this}})}(window.bem);