Hauptmenü

Werkzeuge

Kategorien

Archiv

Bitvergleich mit Javascript

Erstellt in Allgemein am 19. Oktober 2021 vom Daschmi

Mit folgender JavaScript Funktion kann man einzelne Bits einer Zahl vergleichen.

checkBit(hayStack, bit, needle) {
    
    return (hayStack >> (bit - 1) & 1) === needle;

}

Die Anwendung kann dann wie folgt erfolgen:

let b = checkBit(2, 0, 1); // false
let b = checkBit(3, 0, 1); // true

Dateigröße mit PHP Formatieren

Erstellt in Allgemein am 2. September 2021 vom Daschmi

Mit folgender statischer Funktion kann die Dateigröße formatiert ausgegeben werden.

/**
 * Gibt die Dateigröße einer Datei formatiert zurück
 * @param mixed $size Dateigröße in Bytes der Datei
 */
public static function formatFileSize($size): string {
        
  if (is_string($size) && !is_numeric($size)) $size = filesize($size);

  $mod = 1024;

  $units = explode(' ', 'B KB MB GB TB PB');

  for ($i = 0; $size > $mod; $i++) {

    $size /= $mod;

  }

  return round($size, 2).' '.$units[$i];

}

Die Gleiche Funktion in Typescript/Javascript

Rootline / Breadcrumb eines WordPress Menüs

Erstellt in Allgemein am 3. August 2021 vom Daschmi

Mit folgender Funktion kann man die Rootline / Breadcrumb eines WordPress Menüs bilden. Die Einträge im Menü sollten dabei nur einmal vorhanden sein, sonst ist der Pfad nicht eindeutig.

abstract class Nav {
		
    public static function getRootline(string $menu_location): array {
    
        $arMenuLocations = \get_nav_menu_locations();                
        $menuID = $arMenuLocations[$menu_location];
        $arNav = \wp_get_nav_menu_items($menuID);

        $arRootline = [];
        
        foreach ($arNav as $nav_item) {
            
            if ($nav_item->type === 'post_type' && get_the_ID() === intval($nav_item->object_id)) {
                
                $arRootline[] = $nav_item;
                
                while (intval($nav_item->menu_item_parent) !== 0) {
                    
                    foreach ($arNav as $sub_nav_item) {
                        
                        if (intval($sub_nav_item->ID) === intval($nav_item->menu_item_parent)) {
                            
                            $arRootline[] = $sub_nav_item;
                            
                            $nav_item = $sub_nav_item;
                            
                            break;
                            
                        }
                        
                    }
                    
                }
                
            }

        }
        
        array_reverse($arRootline);
        
        return $arRootline;
        
    }
    
} 

Beispielhafte Anwendung der Funktion

$arRootline = Nav::getRootline('main_menu');

Javascript forEach Schleife abbrechen

Erstellt in Javascript am 1. August 2021 vom Daschmi

Ein Callback der an eine forEach Funktion übergeben wurde kann die Schleife nicht mit return oder break beenden. Es geht aber über das Nutzen einer Exception.

try {
    			
    BigIPBlock.forEach(function(ip, long, index) {
    
        console.log(index, ip);
        
        if (index > 255) throw new Error();
    
    });

} catch (E) {
    
    console.log('To much IPs in block.');
    
}

Weiter Anker Scroll mit VanillaJS

Erstellt in Javascript am 30. Juli 2021 vom Daschmi

Mit folgenden Vanilla JS Code Schnipsel scrollen die Anker Links smart zu den Zielen.

for (let element of document.querySelectorAll('a[href^="#"]')) {
        
    element.addEventListener('click', (event) => {
        
        event.preventDefault();
        
        let hash = element.getAttribute('href');
        let target = document.getElementById(hash.substr(1));
        
        if (target !== null) {
        
            let rect = target.getBoundingClientRect();
            let top = (window.pageYOffset || document.documentElement.scrollTop) + rect.top;
                
            let offset = 92;
            
            window.scrollTo({
                top: top - offset,
                behavior: "smooth"
            });

        }
        
    });
    
}