comparison src/DML/VendorAssetsBundle/Resources/assets/jquery.bemhelpers/2.1.3-modif/jquery.bemhelpers.js @ 0:493bcb69166c

added public content
author Daniel Wolff
date Tue, 09 Feb 2016 20:54:02 +0100
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:493bcb69166c
1 /**
2 * jQuery plugin for basic BEM manipulations.
3 *
4 * @author Max Shirshin
5 * @version 2.1.3
6 *
7 */
8 (function($, undefined) {
9
10 var getElemClasses = function(domEl) {
11 if (domEl.classList) {
12 return $.makeArray(domEl.classList);
13 } else {
14 return $.trim(domEl.className).split(/\s+/);
15 }
16 };
17
18 $.bem = {
19 generateBlock: function(tag, blockName, modifiers) {
20 if (blockName === undefined) {
21 blockName = tag;
22 tag = 'div';
23 } else if (Array.isArray(blockName)) {
24 modifiers = blockName;
25 blockName = tag;
26 tag = 'div';
27 }
28
29 var $block = $('<' + tag + '/>').addClass(blockName);
30
31 if (Array.isArray(modifiers)) {
32 for (var i = 0; i < modifiers.length; i++) {
33 $block.addClass(blockName + '_' + modifiers[i]);
34 }
35 }
36 return $block;
37 },
38
39 generateElement: function(tag, blockName, elementName, modifiers) {
40 if (elementName === undefined) {
41 elementName = blockName;
42 blockName = tag;
43 tag = 'div';
44 } else if (Array.isArray(elementName)) {
45 modifiers = elementName;
46 elementName = blockName;
47 blockName = tag;
48 tag = 'div';
49 }
50
51 var elementClassName = blockName + '__' + elementName;
52 var $element = $('<' + tag + '/>').addClass(elementClassName);
53
54 if (Array.isArray(modifiers)) {
55 for (var i = 0; i < modifiers.length; i++) {
56 $element.addClass(elementClassName + '_' + modifiers[i]);
57 }
58 }
59 return $element;
60 }
61 };
62
63 $.extend($.fn, {
64 getMod: function(block, elem, modName) {
65 if (modName === undefined) {
66 modName = elem;
67 elem = undefined;
68 }
69
70 if (this.length) {
71 var classPattern = block + (elem !== undefined ? '__' + elem : '') + '_' + modName,
72 modVal = false;
73
74 $.each(getElemClasses(this.get(0)), function(i, c) {
75 if (c === classPattern) {
76 modVal = true;
77 return false;
78 } else if (c.indexOf(classPattern) === 0 && c.substr(classPattern.length, 1) === '_') {
79 modVal = c.substr(classPattern.length + 1);
80 return false;
81 }
82 });
83
84 return modVal;
85
86 } else return undefined;
87 },
88
89 setMod: function(block, elem, modName, modVal) {
90 if (modVal === undefined) {
91 modVal = modName;
92 modName = elem;
93 elem = undefined;
94 }
95
96 return this.each(function() {
97 var $this = $(this),
98 classPattern = block + (elem !== undefined ? '__' + elem : '') + '_' + modName;
99
100 if (modVal === false) {
101 $.each(getElemClasses(this), function(i, c) {
102 if (c.indexOf(classPattern) === 0) {
103 var afterPattern = c.substr(classPattern.length, 1);
104 if (afterPattern === undefined || afterPattern === '_') {
105 $this.removeClass(c);
106 }
107 }
108 });
109 } else if (modVal === true) {
110 $this.addClass(classPattern);
111 } else {
112 $.each(getElemClasses(this), function(i, c) {
113 if (c.indexOf(classPattern) === 0 && c.substr(classPattern.length, 1) === '_') {
114 $this.removeClass(c);
115 }
116 });
117
118 $this.addClass(classPattern + '_' + modVal);
119 }
120 });
121 },
122
123 hasMod: function(block, elem, modName) {
124 return !! this.getMod(block, elem, modName);
125 }
126 });
127
128 })(jQuery);