
Perpustakaan untuk meniru Sistem Operasi Antarmuka Pengguna Grafis di Web
Secara khusus, Windows 98 - setidaknya untuk saat ini; itu bisa diperluas di masa depan.
Perpustakaan ini Powers 98.js.org, versi Windows 98 berbasis web, termasuk cat, notepad, perekam suara, dan banyak lagi.
Lihat beranda untuk informasi lebih lanjut.
Bilah menu, dengan dukungan untuk kotak centang dan item radio, status dinonaktifkan, submenus, pintasan keyboard, dan banyak lagi
Aplikasi Windows yang dapat Anda seret, memaksimalkan, meminimalkan, menutup, dan mengubah ukuran
Varian dialog dan jendela alat
Animasi terbang titlebar yang memandu mata Anda selama memaksimalkan/meminimalkan/memulihkan
Fokus Containment: Jika Anda tab atau Shift+tab di dalam jendela, itu membungkus ke kontrol pertama/terakhir.
Gaya tombol, termasuk tombol ringan, tombol dinonaktifkan, dan tombol aksi default
Gaya scrollbar, spesifik webkit (di masa depan mungkin ada scrollbar khusus berdasarkan perpustakaan scrollbar non-intrusif, atau gaya yang mendukung perpustakaan, di mana Anda diharapkan menggunakan perpustakaan secara langsung)
Dapat ditema dengan windows .theme & .themepack file saat runtime !
Lihat demo online di sini
Perpustakaan ini saat ini membutuhkan jQuery untuk implementasi windowing. Bilah menu tidak memerlukan jQuery.
(Akhirnya saya ingin tidak memiliki dependensi. Sejauh ini saya telah menghapus jQuery dari kode menu ...)
Perpustakaan belum (belum) disediakan sebagai satu file yang nyaman.
Anda dapat 1. Unduh repositori sebagai file zip, 2. Kloning repositori, atau 3. Instal perpustakaan sebagai paket NPM.
Anda harus menyertakan skrip untuk komponen yang ingin Anda gunakan ( MenuBar.js atau $Window.js ), bersama dengan stylesheet untuk tata letak, tema, dan skema warna.
Pastikan untuk menggunakan file CSS yang dikompilasi, bukan file sumber.
Di <head> :
< link href =" os-gui/layout.css " rel =" stylesheet " type =" text/css " >
< link href =" os-gui/windows-98.css " rel =" stylesheet " type =" text/css " >
< link href =" os-gui/windows-default.css " rel =" stylesheet " type =" text/css " > Di <head> atau <body> :
< script src =" os-gui/MenuBar.js " > </ script >
< script src =" lib/jquery.js " > </ script > <!-- required by $Window.js -->
< script src =" os-gui/$Window.js " > </ script > Catatan : API kemungkinan akan banyak berubah, tetapi saya mempertahankan changelog.
.inset-deep menciptakan perbatasan inset 2px.outset-deep Membuat perbatasan inset 2px (seperti tombol atau jendela atau popup menu).inset-shallow menciptakan perbatasan inset 1px.outset-shallow menciptakan batas awal 1px Gaya tombol diterapkan pada elemen button secara global. (Dan jika Anda ingin mengatur ulang, perhatikan bahwa Anda harus menyingkirkan elemen pseudo ::after juga. @Todo: Lingkup CSS)
Untuk membuat tombol sakelar, tambahkan kelas .toggle ke tombol. Jadikan itu ditampilkan sebagai ditekan dengan kelas .selected . (@Todo: ganti nama ini .pressed )
Anda harus menggunakan gaya bersama dengan atribut aria-pressed , aria-haspopup , dan/atau aria-expanded sebagaimana mestinya.
Anda dapat menampilkan tombol adalah tindakan default dengan menambahkan .default ke tombol. Perhatikan bahwa di Windows 98, gaya ini bergerak dari tombol ke tombol tergantung pada fokusnya. Aturan praktis adalah bahwa itu harus ada di tombol yang akan memicu dengan Enter.
Anda dapat membuat tombol ringan dengan menambahkan .lightweight ke tombol. Tombol ringan halus dan tidak memiliki perbatasan sampai melayang.
Anda dapat menonaktifkan tombol dengan menambahkan atribut standar disabled ke tombol.
Anda dapat menampilkan tombol sebagai ditekan dengan menambahkan kelas .pressing ke tombol.
Ini berguna untuk tombol yang dipicu oleh penekanan tombol.
Gaya scrollbar diterapkan secara global, tetapi mereka memiliki awalan -webkit- , sehingga mereka hanya akan bekerja di browser "berbasis web", umumnya, seperti chrome, safari, dan opera.
(Dapat ditimpa dengan ::-webkit-scrollbar dan selektor terkait (tetapi tidak mudah diatur ulang ke browser default, kecuali -webkit-appearance: scrollbar berfungsi ... @todo: lingkup css)
Gaya seleksi diterapkan secara global.
(Dapat ditimpa dengan ::selection (tetapi tidak mudah diatur ulang ke browser default ... kecuali dengan unset ? @Todo: Lingkup CSS)
MenuBar(menus)Membuat komponen bar menu.
menus harus berupa array penahan objek dari spesifikasi item menu, dikunci oleh nama tombol menu.
Mengembalikan objek dengan element properti, yang kemudian harus Anda tambahkan ke DOM tempat yang Anda inginkan.
Lihat contoh dalam kode demo.
elementElemen DOM yang mewakili bilah menu.
closeMenus()Menutup menu apa pun yang terbuka.
setKeyboardScope(...eventTargets)Hotkeys Like Alt akan ditangani pada tingkat elemen yang diberikan atau target acara.
Secara default, ruang lingkupnya adalah window (Global), untuk kasus aplikasi satu halaman di mana bilah menu berada di atas. Jika Anda meletakkan bilah menu di jendela, Anda harus memanggil ini dengan elemen jendela:
menu_bar . setKeyboardScope ( $window . element ) ;atau lebih baik lagi,
$window . setMenuBar ( menu_bar ) ;Yang menangani ruang lingkup keyboard untuk Anda, sambil memasang bilah menu ke jendela.
Perhatikan bahwa beberapa perilaku keyboard selalu ditangani jika bilah menu memiliki fokus.
Catatan juga untuk iframes, Anda mungkin perlu memanggil ini dengan $window[0], iframe.contentWindow saat ini, tetapi ini harus diubah di masa mendatang (acara keyboard harus diproksi).
info Dapat digunakan untuk mengimplementasikan bilah status. Deskripsi disediakan sebagai event.detail.description saat menggulung item menu yang menentukan description . Misalnya:
menubar . element . addEventListener ( "info" , ( event ) => {
statusBar . textContent = event . detail ?. description || "" ;
} ) ; default-infoSinyal bahwa bilah status harus diatur ulang menjadi kosong atau pesan default.
menubar . element . addEventListener ( "default-info" , ( event ) => {
statusBar . textContent = "" ;
// or:
statusBar . textContent = "For Help, click Help Topics on the Help Menu." ;
// like in MS Paint (and JS Paint)
// or:
statusBar . textContent = "For Help, press F1." ;
// like WordPad
// or perhaps even:
statusBar . innerHTML = "For Help, <a href='docs'>click here</a>" ;
// Note that a link is not a common pattern, and it could only work for the default text;
// for menu item descriptions the message in the status bar is transient, so
// you wouldn't be able to reach it to click on it.
} ) ; Spesifikasi item menu adalah MENU_DIVIDER (konstanta yang menunjukkan aturan horizontal), atau spesifikasi grup radio, atau objek dengan properti berikut:
label : Label untuk item; ampersands mendefinisikan kunci akses (untuk menggunakan ampersand literal, gunakan && )shortcutLabel (Opsional): Pintasan keyboard untuk ditampilkan untuk item, seperti "Ctrl+A" (Catatan: Anda perlu mendengarkan sendiri pintasan, tidak seperti tombol akses)ariaKeyShortcuts (opsional): aria-keyshortcuts untuk item, seperti "Kontrol+A Meta+A", untuk pembaca layar. "Ctrl" tidak valid (Anda harus mengejanya), dan yang terbaik adalah memberikan alternatif untuk macOS, biasanya dengan kunci perintah yang setara, menggunakan "meta" (dan event.metaKey ).action (Opsional): Fungsi untuk dieksekusi saat item diklik (hanya dapat menentukan action atau checkbox )checkbox (opsional): Objek yang menentukan bahwa item ini harus berperilaku sebagai kotak centang.check properti dari objek ini harus menjadi fungsi yang memeriksa apakah item harus diperiksa atau tidak, mengembalikan true untuk dicentang dan false untuk tidak dicentang. Nama yang sangat imut.toggle properti harus menjadi fungsi yang mengubah keadaan opsi, namun Anda menyimpannya; dipanggil saat diklik.enabled (Opsional): Dapat false untuk menonaktifkan item tanpa syarat, atau fungsi yang menentukan apakah item harus diaktifkan, mengembalikan true untuk mengaktifkan item, false untuk menonaktifkan.submenu (opsional): Array spesifikasi item menu untuk membuat submenudescription (Opsional): Untuk mengimplementasikan bilah status; Acara info dipancarkan saat menggulung item dengan deskripsi inivalue (opsional): Untuk item radio, nilai item; dapat berupa jenis apa pun, tetapi === digunakan untuk menentukan apakah item diperiksa.Spesifikasi grup radio adalah objek dengan properti berikut:
radioItems : Array spesifikasi item menu untuk membuat grup tombol radio. Tidak seperti submenu , item disertakan langsung dalam menu ini. Disarankan untuk memisahkan grup radio dari item menu lain dengan MENU_DIVIDER .getValue : Fungsi yang harus mengembalikan nilai item radio yang dipilih.setValue : Fungsi yang harus mengubah status ke nilai yang diberikan, dengan cara khusus aplikasi.ariaLabel (Opsional): String yang akan digunakan sebagai aria-label untuk grup radio (untuk aksesibilitas pembaca layar)Menu dapat dinavigasi dengan hotkey kontekstual yang dikenal sebagai kunci akses .
Tempatkan ampersand di depan huruf di tombol menu atau label item menu untuk menjadikannya kunci akses. Microsoft memiliki dokumentasi tentang kunci akses, termasuk pedoman untuk memilih kunci akses. Umumnya surat pertama adalah pilihan yang baik.
Jika item menu tidak menentukan kunci akses, huruf pertama label dapat digunakan untuk mengaksesnya.
Untuk tombol menu, Anda harus menahan alt saat menekan tombol akses tombol, tetapi untuk item menu di popup menu Anda harus menekan tombol secara langsung, karena ALT akan menutup menu.
Jika ada beberapa item menu dengan tombol akses yang sama, itu akan bersepeda di antara mereka tanpa mengaktifkannya. Anda harus mencoba membuat tombol akses unik, termasuk antara tombol akses yang ditentukan dan huruf pertama dari item menu tanpa tombol akses yang ditentukan. (Perilaku ini diamati di Windows 98, di menu favorit Explorer, di mana Anda dapat membuat bookmark dengan huruf pertama yang cocok dengan tombol akses item menu lainnya.)
Ada objek AccessKeys yang diekspor oleh MenuBar.js , dengan fungsi untuk berurusan dengan kunci akses:
AccessKeys.escape(label)Menyampaikan ampersand dalam label yang diberikan, sehingga mereka tidak ditafsirkan sebagai kunci akses.
Ini berguna untuk menu dinamis, seperti menu sejarah yang menggunakan judul halaman sebagai label. Anda tidak ingin ampersands ditafsirkan secara palsu sebagai kunci akses, atau ampersand ganda untuk ditafsirkan sebagai ampersand tunggal.
AccessKeys.unescape(label)Un-escapes semua ampersand ganda dalam label.
Untuk rendering, gunakan toHTML atau toFragment sebagai gantinya.
AccessKeys.has(label)Mengembalikan true jika label memiliki kunci akses.
AccessKeys.get(label)Mengembalikan kunci akses untuk label yang diberikan, atau nol jika tidak ada.
MenuBar menangani tombol akses secara otomatis, tetapi jika Anda memasukkan kunci akses untuk elemen UI lainnya, Anda perlu menanganinya sendiri, dan Anda dapat menggunakan ini daripada menggerakkan kunci akses akses, sehingga tidak perlu diubah di dua tempat.
AccessKeys.remove(label) Menghapus indikator kunci akses ( & ) dari label, dan tidak ada ampersand ganda. Juga menghapus indikator kunci akses tanda kurung, seperti "(& n)", sebagai kasus khusus.
AccessKeys.toText(label) Menghapus indikator kunci akses ( & ) dari label, dan tidak ada ampersand ganda. Ini seperti toHTML tetapi untuk teks biasa.
Catatan : Meskipun sering kali akses akses adalah bagian dari kata, seperti "& baru", dalam terjemahan mereka sering ditunjukkan secara terpisah, seperti "새로 만들기 (& n)", karena kunci akses tetap sama, tetapi surat itu bukan lagi bagian dari kata (atau bahkan alfabet). Fungsi ini tidak menghilangkan string seperti "(& n)", itu hanya akan menghapus "&" dan meninggalkan "새로 만들기 (n)". Jika Anda menginginkan perilaku itu, gunakan AccessKeys.remove(label) .
AccessKeys.toHTML(label) Mengembalikan html (dengan pelarian yang tepat) dengan kunci akses sebagai elemen <span class='menu-hotkey'> .
Catatan Keamanan : Aman untuk menggunakan hasil fungsi ini dalam konten elemen HTML, karena lolos dari label. Tidak aman digunakan dalam nilai atribut, tetapi ini bukan penggunaan yang dimaksud.
Catatan Tata Letak : Anda mungkin ingin mengelilingi hasilnya dengan <span style="white-space: pre"> Untuk mencegah ruang putih runtuh jika kunci akses berada di sebelah ruang.
AccessKeys.toFragment(label) Mengembalikan DocumentFragment dengan kunci akses sebagai elemen <span class='menu-hotkey'> .
Catatan Tata Letak : Anda mungkin ingin mengelilingi hasilnya dengan <span style="white-space: pre"> Untuk mencegah ruang putih runtuh jika kunci akses berada di sebelah ruang.
$Window(options)Membuat komponen jendela yang dapat diseret dan semacamnya, dibawa ke depan saat diklik, dan ditutup. Berbagai jenis jendela dapat dibuat dengan opsi yang berbeda. Perhatikan bahwa fokus membungkus dalam konten jendela.
Mengembalikan objek jQuery dengan metode dan properti tambahan (lihat di bawah, setelah opsi).
Node DOM dapat diakses dengan $window.element , dan objek $Window dapat diakses dari node DOM dengan dengan element.$window .
|
Mengembalikan objek jQuery dengan metode dan properti tambahan:
title(text) Mengatur judul, atau jika text tidak dilewati, mengembalikan judul jendela saat ini.
close(force=false)Menutup jendela.
Jika force itu true , acara "Tutup" tidak akan dipancarkan, dan jendela akan segera ditutup.
focus()Mencoba memfokuskan sesuatu di dalam jendela, dalam urutan prioritas ini:
class="default"$window.$content ) blur()Menghapus fokus dari jendela. Jika fokus berada di luar jendela, itu tidak berubah.
minimize() Meminimalkan jendela. Jika $window.task.$task didefinisikan, itu akan menggunakannya sebagai target untuk meminimalkan, jika tidak jendela akan meminimalkan ke bagian bawah layar.
Perilaku saat ini adalah minimalisasi mengubah minimalisasi. Ini mungkin berubah di masa depan.
maximize() Memaksimalkan jendela. Saat memaksimalkan, jendela akan menggunakan position: fixed , sehingga tidak akan menggulir dengan halaman.
Perilaku saat ini adalah bahwa ia mengubah maksimalisasi. Ini mungkin berubah di masa depan. Juga, jika diminimalkan, itu akan mengembalikan alih -alih memaksimalkan. Pada dasarnya, ia melakukan apa yang dilakukan tombol Maksimalkan, bukan hanya apa yang disarankan oleh nama metode.
unminimize() Pribadi: Jangan gunakan ini. Gunakan restore() sebagai gantinya.
Mengembalikan jendela dari keadaan yang diminimalkan.
restore()Mengembalikan jendela dari keadaan yang diminimalkan atau dimaksimalkan. Jika jendela tidak diminimalkan atau dimaksimalkan, metode ini tidak melakukan apa -apa.
center()Memusatkan jendela di halaman. Anda harus memanggil ini setelah isi jendela sepenuhnya diterjemahkan, atau Anda telah menetapkan ukuran tetap untuk jendela.
Jika Anda memiliki gambar di jendela, tunggu mereka memuat sebelum menunjukkan dan memusatkan jendela, atau menentukan ukuran tetap untuk gambar.
applyBounds()Sesuai dengan jendela di dalam halaman jika sebagian di luar layar. (Tidak mengubah ukuran jendela jika terlalu besar; itu akan keluar dari kanan dan bawah layar.)
bringTitleBarInBounds()Reposisi jendela sehingga bilah judul berada dalam batas -batas halaman, sehingga dapat diseret.
bringToFront() Membawa jendela ke depan dengan mengatur z-index ke lebih besar dari z-index yang belum digunakan oleh sistem windowing.
setDimensions({ innerWidth, innerHeight, outerWidth, outerHeight }) Mengatur ukuran jendela. Lulus { innerWidth, innerHeight } untuk menentukan ukuran dalam hal konten jendela, atau { outerWidth, outerHeight } untuk menentukan ukuran termasuk bingkai jendela.
(Ini dapat diperluas di masa depan untuk memungkinkan pengaturan posisi juga ...)
setIcons(icons) Mengubah ikon jendela. icons berada dalam format yang sama dengan options.icons .
setTitlebarIconSize(size)Mengatur ukuran ikon bilah judul jendela, memilih ukuran terdekat yang tersedia.
getTitlebarIconSize()Mengembalikan ukuran ikon bilah judul jendela.
getIconAtSize(size) Pilih ukuran ikon terdekat yang tersedia, dan mengembalikan simpul DOM yang unik (yaitu dikloning), atau null jika tidak ada ikon yang ditentukan.
Ini dapat digunakan untuk mewakili jendela di bilah tugas.
setMenuBar(menuBar)Tambahkan bilah menu ke jendela, dan atur ruang lingkup keyboard untuk hotkeys bar menu ke jendela.
Dapat dipanggil dengan null untuk menghapus bilah menu.
setMinimizeTarget(minimizeTargetElement) Minimalkan target (tombol bilah tugas) mewakili jendela saat diminimalkan, dan digunakan untuk menjiwai meminimalkan dan memulihkan. Jika minimizeTargetElement adalah null , jendela akan meminimalkan ke bagian bawah layar (default).
$Button(text, action)Membuat tombol di area konten jendela. Secara otomatis menutup jendela saat diklik. Tidak ada cara (bagus) untuk mencegah ini, karena itu dimaksudkan hanya untuk dialog.
Jika Anda membutuhkan perilaku lain, cukup buat <button> dan tambahkan ke area konten jendela.
Mengembalikan objek jQuery.
addChildWindow($window)Pribadi: Jangan gunakan ini.
Mendefinisikan jendela sebagai seorang anak. Untuk jendela alat, status fokus akan dibagikan dengan jendela induk.
Ini digunakan secara internal ketika Anda mengatur options.parentWindow ParentWindow saat membuat jendela.
onFocus(listener)Memanggil pendengar saat jendela (secara visual?) Fokus.
Mengembalikan fungsi untuk menghapus pendengar.
onBlur(listener)Memanggil pendengar saat jendela (secara visual?) Kehilangan fokus.
Mengembalikan fungsi untuk menghapus pendengar.
onClosed(listener)Panggilan pendengar saat jendela ditutup (setelah acara tutup dipancarkan, dan jika tidak dicegah).
Mengembalikan fungsi untuk menghapus pendengar.
onBeforeClose(listener) Memanggil pendengar sebelum jendela ditutup. Jika pendengar memanggil event.preventDefault() , jendela tidak akan ditutup.
Mengembalikan fungsi untuk menghapus pendengar.
Acara ini berguna untuk mengonfirmasi dengan pengguna sebelum menutup jendela, misalnya.
$window.close(true) kemudian dapat digunakan untuk memotong acara ini (dan konfirmasi) ketika jendela harus benar -benar ditutup.
Jika Anda tidak akan mencegah penutupan jendela, Anda mungkin harus menggunakan acara closed , karena, secara hipotetis, pendengar lain dapat mencegah penutupan setelah pendengar Anda, yang mengarah ke pembersihan dini.
onBeforeDrag(listener) Panggilan pendengar sebelum jendela diseret oleh titleBar. Jika pendengar memanggil event.preventDefault() , drag akan dicegah.
Mengembalikan fungsi untuk menghapus pendengar.
Acara ini memungkinkan mengesampingkan perilaku seret dari warna dan alat jendela dalam cat JS.
onTitleChange(listener)Memanggil pendengar saat judul jendela berubah.
Mengembalikan fungsi untuk menghapus pendengar.
Acara ini dapat digunakan untuk memperbarui label tombol bilah tugas.
onIconChange(listener)Memanggil pendengar saat ikon jendela berubah.
Mengembalikan fungsi untuk menghapus pendengar.
Acara ini dapat digunakan untuk memperbarui ikon tombol bilah tugas. Gunakan $window.getIconAtSize(size) untuk mendapatkan ikon yang sesuai.
closedApakah jendela telah ditutup.
icons Ikon jendela pada ukuran yang berbeda, sebagaimana ditetapkan oleh options.icons atau setIcons() .
elementsObjek yang berisi referensi ke elemen jendela.
content (htmlelement)Area konten jendela.
titlebar (htmlelement)Titlebar jendela, termasuk judul, tombol jendela, dan mungkin ikon.
_title_area (htmlelement)Elemen pembungkus di sekitar judul.
Pribadi: Jangan gunakan ini. Gunakan elements.titlebar atau elements.title Sebaliknya, jika memungkinkan.
title (htmlelement)Judul jendela.
closeButton (htmlButtonElement)Tombol tutup jendela.
minimizeButton (htmlButtonElement)Tombol meminimalkan jendela.
maximizeButton (htmlButtonElement)Tombol Maksimalkan jendela.
$content objek jQuery.
Di mana Anda dapat menambahkan konten ke jendela.
$titlebar objek jQuery.
Titlebar jendela, termasuk judul, tombol jendela, dan mungkin ikon.
$title_area Pribadi: Jangan gunakan ini. Gunakan $title atau $titlebar sebagai gantinya, jika memungkinkan.
objek jQuery.
Membungkus di sekitar judul.
$title objek jQuery.
Bagian judul titlebar.
$x objek jQuery.
Tombol tutup.
$minimize objek jQuery.
Tombol minimalkan.
$maximize objek jQuery.
Tombol Maximize.
$iconPribadi: Jangan gunakan ini.
objek jQuery.
Ikon TitleBar.
elementElemen DOM yang mewakili jendela.
close Tercerahkan: Gunakan metode onBeforeClose sebagai gantinya.
Dapat digunakan untuk mencegah penutupan jendela, dengan event.preventDefault() . Karena mungkin ada banyak pendengar, dan pendengar lain dapat mencegah penutupan, jika Anda ingin mendeteksi ketika jendela benar -benar ditutup, gunakan acara closed .
closed Tercerahkan: Gunakan metode onClosed sebagai gantinya.
Acara ini dipancarkan saat jendela ditutup. Itu tidak dapat dicegah.
window-drag-start Tercerahkan: Gunakan metode onBeforeDrag sebagai gantinya.
Dapat digunakan untuk mencegah menyeret jendela, dengan event.preventDefault() .
title-change Tercerahkan: Gunakan metode onTitleChange sebagai gantinya.
Dapat digunakan untuk memperbarui label tombol bilah tugas.
icon-change Tercerahkan: Gunakan metode onIconChange sebagai gantinya.
Dapat digunakan untuk memperbarui ikon tombol bilah tugas. Gunakan $window.getIconAtSize(size) untuk mendapatkan ikon yang sesuai.
Selain center() , tidak ada API secara khusus untuk memposisikan jendela.
Anda dapat menggunakan $($window.element).css({ top: "500px", left: "500px" }) untuk mengatur posisi jendela dengan metode jquery css() , atau menggunakan: atau menggunakan lagi:
$window . element . style . top = "500px" ;
$window . element . style . left = "500px" ; Anda juga dapat menetapkan position untuk fixed atau absolute untuk memposisikan jendela relatif terhadap viewport atau leluhur yang diposisikan terdekat.
Jika Anda ingin memposisikan jendela relatif ke jendela lain, Anda dapat menggunakan $otherWindow.element.getBoundingClientRect() untuk mendapatkan persegi panjang yang terikat dari jendela lain, dan kemudian menggunakannya untuk memposisikan jendela. Ini adalah API DOM bawaan. Misalnya:
const otherRect = $otherWindow . element . getBoundingClientRect ( ) ;
$window . element . top = ` ${ otherRect . top } px` ;
$window . element . left = ` ${ otherRect . right + 10 } px` ; !important ) untuk memposisikan jendela, karena perpustakaan menggunakan gaya inline untuk memposisikan jendela, yang diutamakan.setDimensions() di masa depan untuk memungkinkan pemosisian jendela selain mengukurnya, atau menambahkan metode setPosition() .options.constrainRect Constrainrect untuk secara dinamis membatasi posisi dan ukuran jendela selama menyeret dan mengubah ukuran. parse-theme.js berisi fungsi untuk parsing dan menerapkan tema.
parseThemeFileString(themeString)Purse string file INI ke properti CSS.
Secara otomatis membuat grafik tema dinamis, dan memasukkannya ke dalam properti CSS.
applyCSSProperties(cssProperties, {element=document.documentElement, recurseIntoIframes=false}) cssProperties adalah objek dengan properti dan nilai CSS. Ini juga bisa menjadi objek CSSStyleDeclaration .
element adalah elemen untuk menerapkan properti ke.
Jika recurseIntoIframes benar, maka properti akan diterapkan pada semua elemen <iframe> di dalam elemen juga. Ini hanya berfungsi dengan iframe yang sama-sama.
renderThemeGraphics(cssProperties)Dapat digunakan untuk memperbarui grafik tema (ikon scrollbar, dll.) Untuk bagian tertentu dari halaman. Digunakan oleh demo untuk menunjukkan variasi.
Mengembalikan properti CSS yang mewakili grafik tema yang diberikan.
element . style . setProperty ( '--scrollbar-size' , '30px' ) ;
applyCSSProperties ( renderThemeGraphics ( getComputedStyle ( element ) ) , { element } ) ; makeThemeCSSFile(cssProperties)Mengekspor file CSS untuk suatu tema. Mengasumsikan bahwa grafik tema sudah diberikan. Termasuk komentar "file yang dihasilkan".
makeBlackToInsetFilter()Menginisialisasi filter SVG yang dapat digunakan untuk membuat ikon tampak dinonaktifkan. Ini mungkin tidak berfungsi dengan semua ikon, karena menggunakan bagian hitam gambar untuk membentuk bentuk.
Penggunaan dari CSS:
button : disabled . icon {
filter : saturate ( 0 % ) opacity ( 50 % ); /* fallback until SVG filter is initialized */
filter : url ( "#os-gui-black-to-inset-filter" );
}Lisensi di bawah lisensi MIT, lihat lisensi untuk detailnya.
Instal node.js jika Anda belum memilikinya.
Kloning repositori, lalu di direktori proyek menjalankan npm i untuk menginstal dependensi. Jalankan juga npm i saat menarik perubahan dari repositori, jika ada perubahan pada dependensi.
Jalankan npm start untuk membuka server pengembangan. Ini akan membuka halaman demo di browser default Anda. Perubahan pada perpustakaan akan dikompilasi ulang secara otomatis, dan halaman akan secara otomatis memuat ulang.
Jalankan npm run lint untuk menjalankan pengecekan tipe dan pemeriksaan ejaan (dan tugas berbaris lainnya).
Jalankan npm test untuk menjalankan tes. Ini juga menyimpan laporan cakupan ke direktori coverage , tetapi perhatikan bahwa itu hanya mencatat kode yang dicakup oleh tes unit, yaitu kode yang diimpor langsung ke tes, bukan kode yang dimuat dalam konteks halaman, karena ini memerlukan pengaturan lebih lanjut untuk instrumentasi.
Ide yang bagus untuk menutup server saat memperbarui atau menginstal dependensi; Kalau tidak, Anda dapat mengalami masalah EPERM.
Gaya ditulis dengan postcss, untuk mixin dan transformasi lainnya.
Direkomendasikan: Instal plugin bahasa PostCSS untuk editor Anda, seperti dukungan bahasa PostCSS untuk VS Code.
Saat ini ada beberapa CSS yang harus secara manual diregenerasi dalam browser dan disalin ke dalam file CSS khusus tema.
Di masa depan ini dapat dilakukan dengan parser sintaks PostCSS khusus untuk file .theme/.themepack, dan mungkin SVG alih-alih grafik raster untuk menghindari membutuhkan node-canvas (dependensi asli adalah rasa sakit). Atau mungkin Upng.js dan manipulasi piksel polos.