Mercurial > hg > dml-open-vis
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); |