148 lines
4.6 KiB
JavaScript
148 lines
4.6 KiB
JavaScript
// Copyright (c) 2014 Adobe Systems Incorporated. All rights reserved.
|
||
//
|
||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
// you may not use this file except in compliance with the License.
|
||
// You may obtain a copy of the License at
|
||
//
|
||
// http://www.apache.org/licenses/LICENSE-2.0
|
||
//
|
||
// Unless required by applicable law or agreed to in writing, software
|
||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
// See the License for the specific language governing permissions and
|
||
// limitations under the License.
|
||
Snap.plugin(function (Snap, Element, Paper, glob, Fragment) {
|
||
var rgNotSpace = /\S+/g,
|
||
rgBadSpace = /[\t\r\n\f]/g,
|
||
rgTrim = /(^\s+|\s+$)/g,
|
||
Str = String,
|
||
elproto = Element.prototype;
|
||
/*\
|
||
* Element.addClass
|
||
[ method ]
|
||
**
|
||
* Adds given class name or list of class names to the element.
|
||
- value (string) class name or space separated list of class names
|
||
**
|
||
= (Element) original element.
|
||
\*/
|
||
elproto.addClass = function (value) {
|
||
var classes = Str(value || "").match(rgNotSpace) || [],
|
||
elem = this.node,
|
||
className = elem.className.baseVal,
|
||
curClasses = className.match(rgNotSpace) || [],
|
||
j,
|
||
pos,
|
||
clazz,
|
||
finalValue;
|
||
|
||
if (classes.length) {
|
||
j = 0;
|
||
while ((clazz = classes[j++])) {
|
||
pos = curClasses.indexOf(clazz);
|
||
if (!~pos) {
|
||
curClasses.push(clazz);
|
||
}
|
||
}
|
||
|
||
finalValue = curClasses.join(" ");
|
||
if (className != finalValue) {
|
||
elem.className.baseVal = finalValue;
|
||
}
|
||
}
|
||
return this;
|
||
};
|
||
/*\
|
||
* Element.removeClass
|
||
[ method ]
|
||
**
|
||
* Removes given class name or list of class names from the element.
|
||
- value (string) class name or space separated list of class names
|
||
**
|
||
= (Element) original element.
|
||
\*/
|
||
elproto.removeClass = function (value) {
|
||
var classes = Str(value || "").match(rgNotSpace) || [],
|
||
elem = this.node,
|
||
className = elem.className.baseVal,
|
||
curClasses = className.match(rgNotSpace) || [],
|
||
j,
|
||
pos,
|
||
clazz,
|
||
finalValue;
|
||
if (curClasses.length) {
|
||
j = 0;
|
||
while ((clazz = classes[j++])) {
|
||
pos = curClasses.indexOf(clazz);
|
||
if (~pos) {
|
||
curClasses.splice(pos, 1);
|
||
}
|
||
}
|
||
|
||
finalValue = curClasses.join(" ");
|
||
if (className != finalValue) {
|
||
elem.className.baseVal = finalValue;
|
||
}
|
||
}
|
||
return this;
|
||
};
|
||
/*\
|
||
* Element.hasClass
|
||
[ method ]
|
||
**
|
||
* Checks if the element has a given class name in the list of class names applied to it.
|
||
- value (string) class name
|
||
**
|
||
= (boolean) `true` if the element has given class
|
||
\*/
|
||
elproto.hasClass = function (value) {
|
||
var elem = this.node,
|
||
className = elem.className.baseVal,
|
||
curClasses = className.match(rgNotSpace) || [];
|
||
return !!~curClasses.indexOf(value);
|
||
};
|
||
/*\
|
||
* Element.toggleClass
|
||
[ method ]
|
||
**
|
||
* Add or remove one or more classes from the element, depending on either
|
||
* the class’s presence or the value of the `flag` argument.
|
||
- value (string) class name or space separated list of class names
|
||
- flag (boolean) value to determine whether the class should be added or removed
|
||
**
|
||
= (Element) original element.
|
||
\*/
|
||
elproto.toggleClass = function (value, flag) {
|
||
if (flag != null) {
|
||
if (flag) {
|
||
return this.addClass(value);
|
||
} else {
|
||
return this.removeClass(value);
|
||
}
|
||
}
|
||
var classes = (value || "").match(rgNotSpace) || [],
|
||
elem = this.node,
|
||
className = elem.className.baseVal,
|
||
curClasses = className.match(rgNotSpace) || [],
|
||
j,
|
||
pos,
|
||
clazz,
|
||
finalValue;
|
||
j = 0;
|
||
while ((clazz = classes[j++])) {
|
||
pos = curClasses.indexOf(clazz);
|
||
if (~pos) {
|
||
curClasses.splice(pos, 1);
|
||
} else {
|
||
curClasses.push(clazz);
|
||
}
|
||
}
|
||
|
||
finalValue = curClasses.join(" ");
|
||
if (className != finalValue) {
|
||
elem.className.baseVal = finalValue;
|
||
}
|
||
return this;
|
||
};
|
||
});
|