]> git.wh0rd.org Git - tt-rss.git/commitdiff
disable pref toolbars when nothing is selected
authorAndrew Dolgov <fox@bah.spb.su>
Thu, 18 May 2006 12:01:09 +0000 (13:01 +0100)
committerAndrew Dolgov <fox@bah.spb.su>
Thu, 18 May 2006 12:01:09 +0000 (13:01 +0100)
backend.php
functions.js
prefs.js
tt-rss.css

index 66d52ae9e92f9467c0b6195a8abd678219ecb0e1..4b174e858218004a3362a74bb52171694bff0f3f 100644 (file)
                                class=\"prefFeedList\" id=\"prefFeedList\">";
                        print "<tr><td class=\"selectPrompt\" colspan=\"8\">
                                Select: 
-                                       <a href=\"javascript:selectTableRowsByIdPrefix('prefFeedList', 
-                                               'FEEDR-', 'FRCHK-', true)\">All</a>,
-                                       <a href=\"javascript:selectTableRowsByIdPrefix('prefFeedList', 
-                                               'FEEDR-', 'FRCHK-', false)\">None</a>
+                                       <a href=\"javascript:selectPrefRows('feed', true)\">All</a>,
+                                       <a href=\"javascript:selectPrefRows('feed', false)\">None</a>
                                </td</tr>";
 
                        if (!get_pref($link, 'ENABLE_FEED_CATS')) {
                                        $feed_icon = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\">";
                                }
                                
-                               print "<td class='feedSelect'><input onclick='toggleSelectRow(this);' 
+                               print "<td class='feedSelect'><input onclick='toggleSelectPrefRow(this, \"feed\");' 
                                type=\"checkbox\" id=\"FRCHK-".$line["id"]."\"></td>";
 
                                if (get_pref($link, 'ENABLE_FEED_ICONS')) {
                                print "<td><a href=\"javascript:editFeed($feed_id);\">" . 
                                        $edit_link . "</a></td>";               
 
-/*                             if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                                       print "<td><a href=\"javascript:editFeed($feed_id);\">" . 
-                                               $edit_cat . "</a></td>";                
-                               } */
-
-/*                             print "<td><a href=\"javascript:editFeed($feed_id);\">" . 
-                                       $update_intervals[$line["update_interval"]] . "</a></td>";
-
-                               print "<td><a href=\"javascript:editFeed($feed_id);\">" . 
-                                       $purge_intervals[$line["purge_interval"]] . "</a></td>"; */
-
                                print "<td align='right'><a href=\"javascript:editFeed($feed_id);\">" . 
                                        "$last_updated</a></td>";
 
        
                        print "</table>";
 
-                       print "<p>";
+                       print "<p><span id=\"feedOpToolbar\">";
        
                        if ($subop == "edit") {
                                print "Edit feed:&nbsp;
        
                                print "
                                        Selection:&nbsp;
-                               <!-- <input type=\"submit\" class=\"button\" 
-                                       onclick=\"javascript:selectedFeedDetails()\" value=\"Details\"> -->
-                               <input type=\"submit\" class=\"button\" 
+                               <input type=\"submit\" class=\"button\" disabled=\"true\"
                                        onclick=\"javascript:editSelectedFeed()\" value=\"Edit\">
-                               <input type=\"submit\" class=\"button\" 
+                               <input type=\"submit\" class=\"button\" disabled=\"true\"
                                        onclick=\"javascript:removeSelectedFeeds()\" value=\"Unsubscribe\">";
 
                                if (get_pref($link, 'ENABLE_FEED_CATS')) {
                                                WHERE owner_uid = ".$_SESSION["uid"]."
                                                ORDER BY title");
 
-                                       print "<select id=\"sfeed_set_fcat\">";
+                                       print "<select id=\"sfeed_set_fcat\" disabled=\"true\">";
                                        print "<option id=\"0\">Uncategorized</option>";
 
                                        if (db_num_rows($result) != 0) {
 
                                        print "</select>";
 
-                                       print " <input type=\"submit\" class=\"button\" 
+                                       print " <input type=\"submit\" class=\"button\" disabled=\"true\"
                                        onclick=\"javascript:categorizeSelectedFeeds()\" value=\"Recategorize\">";
 
                                }
                                
-                               print "
+                               print "</span>
                                        &nbsp;All feeds: <input type=\"submit\" 
                                                        class=\"button\" onclick=\"gotoExportOpml()\" 
                                                        value=\"Export OPML\">";                        
                        print "<div class=\"prefGenericAddBox\">
                                <input id=\"fadd_cat\" 
                                        onchange=\"javascript:addFeedCat()\"
+                                       onkeyup=\"toggleSubmitNotEmpty(this, 'catadd_submit_btn')\"
                                        size=\"40\">&nbsp;
                                <input 
-                                       type=\"submit\" class=\"button\" 
+                                       type=\"submit\" class=\"button\" disabled=\"true\" id=\"catadd_submit_btn\"
                                        onclick=\"javascript:addFeedCat()\" value=\"Create category\"></div>";
        
                        $result = db_query($link, "SELECT title,id FROM ttrss_feed_categories
 
                                print "<tr><td class=\"selectPrompt\" colspan=\"8\">
                                Select: 
-                                       <a href=\"javascript:selectTableRowsByIdPrefix('prefFeedCatList', 
-                                               'FCATR-', 'FCCHK-', true)\">All</a>,
-                                       <a href=\"javascript:selectTableRowsByIdPrefix('prefFeedCatList', 
-                                               'FCATR-', 'FCCHK-', false)\">None</a>
+                                       <a href=\"javascript:selectPrefRows('fcat', true)\">All</a>,
+                                       <a href=\"javascript:selectPrefRows('fcat', false)\">None</a>
                                </td</tr>";
 
                                print "<tr class=\"title\">
                
                                        if (!$edit_cat_id || $subop != "editCat") {
                
-                                               print "<td align='center'><input onclick='toggleSelectRow(this);' 
-                                               type=\"checkbox\" id=\"FCCHK-".$line["id"]."\"></td>";
+                                               print "<td align='center'><input onclick='toggleSelectPrefRow(this, \"fcat\");' 
+                                                       type=\"checkbox\" id=\"FCCHK-".$line["id"]."\"></td>";
                
                                                print "<td><a href=\"javascript:editFeedCat($cat_id);\">" . 
                                                        $edit_title . "</a></td>";              
        
                                print "</table>";
        
-                               print "<p>";
+                               print "<p id=\"catOpToolbar\">";
        
                                if ($subop == "editCat") {
                                        print "Edit category:&nbsp;
-                                               <input type=\"submit\" class=\"button\" 
+                                               <input type=\"submit\" class=\"button\"
                                                        onclick=\"javascript:feedCatEditCancel()\" value=\"Cancel\">
-                                               <input type=\"submit\" class=\"button\" 
+                                               <input type=\"submit\" class=\"button\"
                                                        onclick=\"javascript:feedCatEditSave()\" value=\"Save\">";
                                        } else {
                
                                        print "
                                                Selection:&nbsp;
-                                       <input type=\"submit\" class=\"button\" 
+                                       <input type=\"submit\" class=\"button\" disabled=\"true\"
                                                onclick=\"javascript:editSelectedFeedCat()\" value=\"Edit\">
-                                       <input type=\"submit\" class=\"button\" 
+                                       <input type=\"submit\" class=\"button\" disabled=\"true\"
                                                onclick=\"javascript:removeSelectedFeedCats()\" value=\"Remove\">";
        
                                }
 
                        print "<tr><td class=\"selectPrompt\" colspan=\"8\">
                                Select: 
-                                       <a href=\"javascript:selectTableRowsByIdPrefix('prefFilterList', 
-                                               'FILRR-', 'FICHK-', true)\">All</a>,
-                                       <a href=\"javascript:selectTableRowsByIdPrefix('prefFilterList', 
-                                               'FILRR-', 'FICHK-', false)\">None</a>
+                                       <a href=\"javascript:selectPrefRows('filter', true)\">All</a>,
+                                       <a href=\"javascript:selectPrefRows('filter', false)\">None</a>
                                </td</tr>";
 
                        print "<tr class=\"title\">
        
                                if (!$edit_filter_id || $subop != "edit") {
        
-                                       print "<td align='center'><input onclick='toggleSelectRow(this);' 
+                                       print "<td align='center'><input onclick='toggleSelectPrefRow(this, \"filter\");' 
                                        type=\"checkbox\" id=\"FICHK-".$line["id"]."\"></td>";
        
                                        print "<td><a href=\"javascript:editFilter($filter_id);\">" . 
        
                        print "</table>";
        
-                       print "<p>";
+                       print "<p id=\"filterOpToolbar\">";
        
                        if ($subop == "edit") {
                                print "Edit filter:
        
                                print "
                                        Selection:
-                               <input type=\"submit\" class=\"button\" 
+                               <input type=\"submit\" class=\"button\" disabled=\"true\"
                                        onclick=\"javascript:editSelectedFilter()\" value=\"Edit\">
-                               <input type=\"submit\" class=\"button\" 
+                               <input type=\"submit\" class=\"button\" disabled=\"true\"
                                        onclick=\"javascript:removeSelectedFilters()\" value=\"Remove\">";
                        }
 
 
                        print "<tr><td class=\"selectPrompt\" colspan=\"8\">
                                Select: 
-                                       <a href=\"javascript:selectTableRowsByIdPrefix('prefLabelList', 
-                                               'LILRR-', 'LICHK-', true)\">All</a>,
-                                       <a href=\"javascript:selectTableRowsByIdPrefix('prefLabelList', 
-                                               'LILRR-', 'LICHK-', false)\">None</a>
+                                       <a href=\"javascript:selectPrefRows('label', true)\">All</a>,
+                                       <a href=\"javascript:selectPrefRows('label', false)\">None</a>
                                </td</tr>";
 
                        print "<tr class=\"title\">
        
                                        if (!$line["description"]) $line["description"] = "[No caption]";
        
-                                       print "<td align='center'><input onclick='toggleSelectRow(this);' 
+                                       print "<td align='center'><input onclick='toggleSelectPrefRow(this, \"label\");' 
                                        type=\"checkbox\" id=\"LICHK-".$line["id"]."\"></td>";
        
                                        print "<td><a href=\"javascript:editLabel($label_id);\">" . 
                                                "\"></td>";
        
                                        print "<td><input id=\"iedit_descr\" value=\"".$line["description"].
-                                               "\"></td>";
-                                                       
+                                               "\"></td>";                                                     
                                }
                                        
                                
        
                        print "</table>";
        
-                       print "<p>";
+                       print "<p id=\"labelOpToolbar\">";
        
                        if ($subop == "edit") {
                                print "Edit label:
                                        <input type=\"submit\" class=\"button\" 
                                                onclick=\"javascript:labelEditCancel()\" value=\"Cancel\">";
                                                
-                       } else {
-       
+                       } else {        
                                print "
                                        Selection:
-                               <input type=\"submit\" class=\"button\" 
+                               <input type=\"submit\" class=\"button\" disabled=\"true\"
                                        onclick=\"javascript:editSelectedLabel()\" value=\"Edit\">
-                               <input type=\"submit\" class=\"button\" 
+                               <input type=\"submit\" class=\"button\" disabled=\"true\"
                                        onclick=\"javascript:removeSelectedLabels()\" value=\"Remove\">";
                        }
                } else {
                                $tmp_user_pwd = make_password(8);
                                $pwd_hash = 'SHA1:' . sha1($tmp_user_pwd);
 
-                               db_query($link, "INSERT INTO ttrss_users 
-                                       (login,pwd_hash,access_level,last_login)
-                                       VALUES ('$login', '$pwd_hash', 0, NOW())");
-
-
                                $result = db_query($link, "SELECT id FROM ttrss_users WHERE 
-                                       login = '$login' AND pwd_hash = '$pwd_hash'");
-
-                               if (db_num_rows($result) == 1) {
-
-                                       $new_uid = db_fetch_result($result, 0, "id");
+                                       login = '$login'");
 
-                                       print "<div class=\"notice\">Added user <b>".$_GET["login"].
-                                               "</b> with password <b>$tmp_user_pwd</b>.</div>";
-
-                                       initialize_user($link, $new_uid);
+                               if (db_num_rows($result) == 0) {
 
+                                       db_query($link, "INSERT INTO ttrss_users 
+                                               (login,pwd_hash,access_level,last_login)
+                                               VALUES ('$login', '$pwd_hash', 0, NOW())");
+       
+       
+                                       $result = db_query($link, "SELECT id FROM ttrss_users WHERE 
+                                               login = '$login' AND pwd_hash = '$pwd_hash'");
+       
+                                       if (db_num_rows($result) == 1) {
+       
+                                               $new_uid = db_fetch_result($result, 0, "id");
+       
+                                               print "<div class=\"notice\">Added user <b>".$_GET["login"].
+                                                       "</b> with password <b>$tmp_user_pwd</b>.</div>";
+       
+                                               initialize_user($link, $new_uid);
+       
+                                       } else {
+                                       
+                                               print "<div class=\"warning\">Could not create user <b>".
+                                                       $_GET["login"]."</b></div>";
+       
+                                       }
                                } else {
-                               
-                                       print "<div class=\"warning\">Error while adding user <b>".
-                                       $_GET["login"].".</b></div>";
-
+                                       print "<div class=\"warning\">User <b>".
+                                               $_GET["login"]."</b> already exists.</div>";
                                }
                        } 
                } else if ($subop == "resetPass") {
 
                print "<tr><td class=\"selectPrompt\" colspan=\"8\">
                                Select: 
-                                       <a href=\"javascript:selectTableRowsByIdPrefix('prefUserList', 
-                                               'UMRR-', 'UMCHK-', true)\">All</a>,
-                                       <a href=\"javascript:selectTableRowsByIdPrefix('prefUserList', 
-                                               'UMRR-', 'UMCHK-', false)\">None</a>
+                                       <a href=\"javascript:selectPrefRows('user', true)\">All</a>,
+                                       <a href=\"javascript:selectPrefRows('user', false)\">None</a>
                                </td</tr>";
 
                print "<tr class=\"title\">
 
                        $access_level_names = array(0 => "User", 10 => "Administrator");
 
-/*                     if ($uid == $_SESSION["uid"]) {
-
-                               print "<td align='center'><input disabled=\"true\" type=\"checkbox\" 
-                                       id=\"UMCHK-".$line["id"]."\"></td>";
-
-                               print "<td>".$line["login"]."</td>";
-                               print "<td>".$line["email"]."</td>";
-                               print "<td>".$line["access_level"]."</td>";
+                       if (!$edit_uid || $subop != "edit") {
 
-                       } else */ if (!$edit_uid || $subop != "edit") {
-
-                               print "<td align='center'><input onclick='toggleSelectRow(this);' 
+                               print "<td align='center'><input onclick='toggleSelectPrefRow(this, \"user\");' 
                                type=\"checkbox\" id=\"UMCHK-$uid\"></td>";
 
                                print "<td><a href=\"javascript:editUser($uid);\">" . 
                                print "<td><input id=\"iedit_email\" value=\"".$line["email"].
                                        "\"></td>";
 
-//                             print "<td><input id=\"iedit_ulevel\" value=\"".$line["access_level"].
-//                                     "\"></td>";
-
                                print "<td>";
                                print "<select id=\"iedit_ulevel\">";
                                foreach (array_keys($access_level_names) as $al) {
 
                print "</table>";
 
-               print "<p>";
+               print "<p id='userOpToolbar'>";
 
                if ($subop == "edit") {
                        print "Edit user:
 
                        print "
                                Selection:
-                       <input type=\"submit\" class=\"button\" 
+                       <input type=\"submit\" class=\"button\" disabled=\"true\"
                                onclick=\"javascript:selectedUserDetails()\" value=\"User details\">
-                       <input type=\"submit\" class=\"button\" 
+                       <input type=\"submit\" class=\"button\" disabled=\"true\"
                                onclick=\"javascript:editSelectedUser()\" value=\"Edit\">
-                       <input type=\"submit\" class=\"button\" 
+                       <input type=\"submit\" class=\"button\" disabled=\"true\"
                                onclick=\"javascript:removeSelectedUsers()\" value=\"Remove\">
-                       <input type=\"submit\" class=\"button\" 
+                       <input type=\"submit\" class=\"button\" disabled=\"true\"
                                onclick=\"javascript:resetSelectedUserPass()\" value=\"Reset password\">";
 
                }
index 6b064b2f0f84f6db852ae70cf3b821ddc02c8c3f..bcbc93b36591b83c0f77abf927efdd0651819468 100644 (file)
@@ -28,7 +28,6 @@ function xmlhttp_ready(obj) {
        return obj.readyState == 4 || obj.readyState == 0 || !obj.readyState;
 }
 
-
 function notify_callback() {
        var container = document.getElementById('notify');
        if (xmlhttp.readyState == 4) {
@@ -73,26 +72,31 @@ function delay(gap) {
        }
 }
 
-function p_notify(msg) {
-
-       var n = parent.document.getElementById("notify");
-       var nb = parent.document.getElementById("notify_body");
-
-       if (!n || !nb) return;
-
-       if (msg == "") {
-               n.style.display = "none";
-       } else {
-               n.style.display = "block";
+var notify_hide_timerid = false;
+var notify_last_doc = false;
+
+function hide_notify() {
+       if (notify_last_doc) {
+               var n = notify_last_doc.getElementById("notify");               
+               if (navigator.userAgent.match("Firefox")) {
+                       if (notify_opacity >= 0) {
+                               notify_opacity = notify_opacity - 0.2;
+                               n.style.opacity = notify_opacity;
+                               notify_hide_timerid = window.setTimeout(hide_notify, 20);                               
+                       } else {
+                               n.style.display = "none";
+                               n.style.opacity = 1;                            
+                       }
+               } else {
+                       n.style.display = "none";
+               }
        }
-       
-       nb.innerHTML = msg;
 }
 
-function notify(msg) {
+function notify_real(msg, doc) {
 
-       var n = document.getElementById("notify");
-       var nb = document.getElementById("notify_body");
+       var n = doc.getElementById("notify");
+       var nb = doc.getElementById("notify_body");
 
        if (!n || !nb) return;
 
@@ -104,6 +108,22 @@ function notify(msg) {
 
        nb.innerHTML = msg;
 
+       if (notify_hide_timerid) {
+               window.clearTimeout(notify_hide_timerid);
+       }
+
+       notify_last_doc = doc;
+       notify_opacity = 1;
+
+       notify_hide_timerid = window.setTimeout(hide_notify, 3000);
+}
+
+function p_notify(msg) {
+       notify_real(msg, parent.document);
+}
+
+function notify(msg) {
+       notify_real(msg, document);
 }
 
 function printLockingError() {
index 8622526dd22ac6e71eafb895f3932a1114f8da2f..fc3d6eb05134c12dd294b2195e69d083c85e04b2 100644 (file)
--- a/prefs.js
+++ b/prefs.js
@@ -182,7 +182,7 @@ function updateFeedList(sort_key) {
 
 //     document.getElementById("prefContent").innerHTML = "Loading feeds, please wait...";
 
-       p_notify("Loading, please wait...");
+//     p_notify("Loading, please wait...");
 
        var feed_search = document.getElementById("feed_search");
        var search = "";
@@ -205,7 +205,7 @@ function updateUsersList() {
 
 //     document.getElementById("prefContent").innerHTML = "Loading feeds, please wait...";
 
-       p_notify("Loading, please wait...");
+//     p_notify("Loading, please wait...");
 
        xmlhttp.open("GET", "backend.php?op=pref-users", true);
        xmlhttp.onreadystatechange=userlist_callback;
@@ -1220,7 +1220,7 @@ function updateFilterList() {
 
 //     document.getElementById("prefContent").innerHTML = "Loading filters, please wait...";
 
-       p_notify("Loading, please wait...");
+//     p_notify("Loading, please wait...");
 
        xmlhttp.open("GET", "backend.php?op=pref-filters", true);
        xmlhttp.onreadystatechange=filterlist_callback;
@@ -1235,7 +1235,7 @@ function updateLabelList() {
                return
        }
 
-       p_notify("Loading, please wait...");
+//     p_notify("Loading, please wait...");
 
 //     document.getElementById("prefContent").innerHTML = "Loading labels, please wait...";
 
@@ -1251,7 +1251,7 @@ function updatePrefsList() {
                return
        }
 
-       p_notify("Loading, please wait...");
+//     p_notify("Loading, please wait...");
 
        xmlhttp.open("GET", "backend.php?op=pref-prefs", true);
        xmlhttp.onreadystatechange=prefslist_callback;
@@ -1417,7 +1417,7 @@ function updateBigFeedBrowser(limit) {
                return
        }
 
-       p_notify("Loading, please wait...");
+//     p_notify("Loading, please wait...");
 
        var query = "backend.php?op=pref-feed-browser";
 
@@ -1471,3 +1471,81 @@ function validateNewPassword(form) {
        }
        return true;
 }
+
+function selectPrefRows(kind, select) {
+
+       if (kind) {
+               var opbarid = false;    
+               var nchk = false;
+               var nrow = false;
+               var lname = false;
+
+               if (kind == "feed") {
+                       opbarid = "feedOpToolbar";
+                       nrow = "FEEDR-";
+                       nchk = "FRCHK-";                        
+                       lname = "prefFeedList";
+               } else if (kind == "fcat") {
+                       opbarid = "catOpToolbar";
+                       nrow = "FCATR-";
+                       nchk = "FCHK-";
+                       lname = "prefFeedCatList";
+               } else if (kind == "filter") {
+                       opbarid = "filterOpToolbar";
+                       nrow = "FILRR-";
+                       nchk = "FICHK-";
+                       lname = "prefFilterList";
+               } else if (kind == "label") {
+                       opbarid = "labelOpToolbar";
+                       nrow = "LILRR-";
+                       nchk = "LCHK-";
+                       lname = "prefLabelList";
+               } else if (kind == "user") {
+                       opbarid = "userOpToolbar";
+                       nrow = "UMRR-";
+                       nchk = "UMCHK-";
+                       lname = "prefUserList";
+               }
+
+               if (opbarid) {
+                       selectTableRowsByIdPrefix(lname, nrow, nchk, select);
+                       disableContainerChildren(opbarid, !select);
+               }
+
+       } 
+}
+
+
+function toggleSelectPrefRow(sender, kind) {
+
+       toggleSelectRow(sender);
+
+       if (kind) {
+               var opbarid = false;    
+               var nsel = -1;
+               
+               if (kind == "feed") {
+                       opbarid = "feedOpToolbar";
+                       nsel = getSelectedFeeds();
+               } else if (kind == "fcat") {
+                       opbarid = "catOpToolbar";
+                       nsel = getSelectedFeedCats();
+               } else if (kind == "filter") {
+                       opbarid = "filterOpToolbar";
+                       nsel = getSelectedFilters();
+               } else if (kind == "label") {
+                       opbarid = "labelOpToolbar";
+                       nsel = getSelectedLabels();
+               } else if (kind == "user") {
+                       opbarid = "userOpToolbar";
+                       nsel = getSelectedUsers();
+               }
+
+               if (opbarid && nsel != -1) {
+                       disableContainerChildren(opbarid, nsel == false);
+               }
+
+       } 
+}
+
+
index b1b2a23a8c02531600c83f4ef37e12296f446692..09678ec427e507fb208808cf0eb85e28e38aa9b7 100644 (file)
@@ -299,13 +299,16 @@ td.notifyBox {
        background : #fff7d5;
        border : 1px solid #d7c47a;
        padding : 3px;
-       top : 2px;
-       right : 2px;
-       float : right;  
+       top : 25px;
+       right : 150px;
+       min-width : 300px;
        position : absolute;    
        -moz-border-radius : 3px;
        font-size : x-small;
        font-weight : bold;
+       text-align : center;
+       float : right;
+       padding : 3px 20px 3px 20px;
 }
 
 #dispSwitch {
@@ -522,23 +525,26 @@ div.helpResponse {
 
 #infoBoxTitle {
        border-width : 1px 1px 1px 1px;
-                 border-style : solid;
-                 border-color : #88b0f0;
-                 background-color : #88b0f0;
-                 padding : 2px;
-                 color : white;
+       border-style : solid;
+       border-color : #88b0f0;
+       background-color : #88b0f0;
+       padding : 2px;
+       color : white;
 }
 
 #infoBox {     
        border-width : 1px 1px 1px 1px;
-                 border-style : solid;
-                 border-color : #88b0f0;
+       border-style : solid;
+       border-color : #88b0f0;
        font-size : small;
        position : relative;
        bottom : 2px;
        right : 2px;
-       background-color : #ecf4ff;
-                 padding-bottom : 5px;
+       padding-bottom : 5px;
+       background-image : url("images/prefs-content.png");
+       background-position : top left;
+       background-repeat : repeat-x;
+       background-color : white;
 }
 
 #infoBoxShadow {