diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 221af2a..ded9737 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,13 @@ jobs: if: runner.os == 'Linux' run: | sudo apt-get update - sudo apt-get install -y --no-install-recommends libssl-dev pkg-config + sudo apt-get install -y --no-install-recommends libssl-dev pkg-config libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev libsoup-3.0-dev + + - name: Install LLVM (macOS) + if: runner.os == 'macOS' + run: brew install llvm - name: Run tests + env: + LIBCLANG_PATH: ${{ runner.os == 'macOS' && '/opt/homebrew/opt/llvm/lib' || '' }} run: cargo test --all-features diff --git a/crates/pardus-core/src/js/bootstrap.js b/crates/pardus-core/src/js/bootstrap.js index 36a02e1..b79c1ce 100644 --- a/crates/pardus-core/src/js/bootstrap.js +++ b/crates/pardus-core/src/js/bootstrap.js @@ -335,8 +335,40 @@ class Element { contains(token) { return self.className.split(/\s+/).includes(token); }, + replace(oldToken, newToken) { + const current = self.className.split(/\s+/).filter(s => s); + const idx = current.indexOf(oldToken); + if (idx < 0) return false; + current[idx] = newToken; + self.className = current.join(' '); + return true; + }, + item(index) { + const current = self.className.split(/\s+/).filter(s => s); + return current[index] || null; + }, + forEach(callback, thisArg) { + const current = self.className.split(/\s+/).filter(s => s); + current.forEach(callback, thisArg); + }, + toString() { + return self.className; + }, get length() { return self.className.split(/\s+/).filter(s => s).length; + }, + [Symbol.iterator]() { + const current = self.className.split(/\s+/).filter(s => s); + return current[Symbol.iterator](); + }, + values() { + return self.className.split(/\s+/).filter(s => s).values(); + }, + keys() { + return self.className.split(/\s+/).filter(s => s).keys(); + }, + entries() { + return self.className.split(/\s+/).filter(s => s).entries(); } }; } diff --git a/crates/pardus-core/src/js/bootstrap_readonly.js b/crates/pardus-core/src/js/bootstrap_readonly.js index 5da9f37..ce98afb 100644 --- a/crates/pardus-core/src/js/bootstrap_readonly.js +++ b/crates/pardus-core/src/js/bootstrap_readonly.js @@ -120,6 +120,9 @@ class Element { const self = this; return { add() {}, remove() {}, toggle() { return false; }, contains(c) { return self.className.split(" ").includes(c); }, + replace() { return false; }, item(i) { return null; }, forEach() {}, toString() { return self.className; }, + values() { return [].values(); }, keys() { return [].keys(); }, entries() { return [].entries(); }, + [Symbol.iterator]() { return [][Symbol.iterator](); }, get length() { return self.className.split(" ").filter(Boolean).length; }, }; }