🔥 Remove ReplaceIfExists class operation
This commit is contained in:
parent
82b28dee5c
commit
4b9b36ed6e
1 changed files with 22 additions and 16 deletions
|
|
@ -18,7 +18,6 @@ pub enum ClassesOp {
|
||||||
Add,
|
Add,
|
||||||
Remove,
|
Remove,
|
||||||
Replace(String),
|
Replace(String),
|
||||||
ReplaceIfExists(String),
|
|
||||||
Reset,
|
Reset,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,20 +62,22 @@ impl Classes {
|
||||||
self.0.retain(|(c, _)| c.ne(&name.to_string()));
|
self.0.retain(|(c, _)| c.ne(&name.to_string()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ClassesOp::Replace(class) => {
|
ClassesOp::Replace(classes_to_replace) => {
|
||||||
match self.0.iter().position(|(c, _)| c.eq(&class)) {
|
let mut pos = self.0.len();
|
||||||
Some(pos) => {
|
let mut class_type = ClassType::User;
|
||||||
let (_, class_type) = self.0.remove(pos);
|
let replace: Vec<&str> = classes_to_replace.split_ascii_whitespace().collect();
|
||||||
self.add(&classes, pos, class_type);
|
for class in replace {
|
||||||
|
if let Some(replace_pos) = self.0.iter().position(|(c, _)| c.eq(class)) {
|
||||||
|
let (_, replace_type) = self.0.remove(replace_pos);
|
||||||
|
if pos > replace_pos {
|
||||||
|
pos = replace_pos;
|
||||||
|
}
|
||||||
|
if replace_type.eq(&ClassType::Default) {
|
||||||
|
class_type = replace_type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
None => self.add(&classes, self.0.len(), ClassType::User),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
ClassesOp::ReplaceIfExists(class) => {
|
|
||||||
if let Some(pos) = self.0.iter().position(|(c, _)| c.eq(&class)) {
|
|
||||||
let (_, class_type) = self.0.remove(pos);
|
|
||||||
self.add(&classes, pos, class_type);
|
|
||||||
}
|
}
|
||||||
|
self.add(&classes, pos, class_type);
|
||||||
}
|
}
|
||||||
ClassesOp::Reset => {
|
ClassesOp::Reset => {
|
||||||
self.0.retain(|(_, t)| t.ne(&ClassType::User));
|
self.0.retain(|(_, t)| t.ne(&ClassType::User));
|
||||||
|
|
@ -88,17 +89,22 @@ impl Classes {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn add(&mut self, classes: &Vec<&str>, mut pos: usize, class_type: ClassType) {
|
fn add(&mut self, classes: &Vec<&str>, mut pos: usize, class_type: ClassType) {
|
||||||
for class in classes {
|
for class in classes {
|
||||||
if !class.is_empty() && self.0.iter().position(|(c, _)| c.eq(class)).is_none() {
|
if !class.is_empty() && !self.0.iter().any(|(c, _)| c.eq(class)) {
|
||||||
self.0.insert(pos, (class.to_string(), class_type.clone()));
|
self.0.insert(pos, (class.to_string(), class_type.clone()));
|
||||||
pos = pos + 1;
|
pos += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Classes GETTERS.
|
// Classes GETTERS.
|
||||||
|
|
||||||
|
pub fn exists(&self, class: impl Into<String>) -> bool {
|
||||||
|
let class: String = class.into();
|
||||||
|
self.0.iter().any(|(c, _)| c.eq(&class))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get(&self) -> Option<String> {
|
pub fn get(&self) -> Option<String> {
|
||||||
if self.0.len() == 0 {
|
if self.0.is_empty() {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(
|
Some(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue