| bw-dmenu-fill - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| bw-dmenu-fill (2440B) | |
| --- | |
| 1 #!/bin/sh | |
| 2 # bitwarden dmenu script - based off of the autofill userscript from qut… | |
| 3 # requires the fifo patch | |
| 4 # $1: winid | |
| 5 # | |
| 6 # add something like this to your config.h: | |
| 7 # #define BITWARDEN_DMENU { .v = (char *[]){ "/bin/sh", "-c", "bw-dmenu-… | |
| 8 # | |
| 9 # and this to your keybindings: | |
| 10 # { MODKEY, GDK_KEY_z, spawn, BITWARDEN_DMENU }, | |
| 11 | |
| 12 fifo=~/.surf/fifo/"$1" | |
| 13 url=$(xprop -id "$1" _SURF_URI | awk '{ print $3 }' | sed 's/"//g') | |
| 14 | |
| 15 username="" | |
| 16 password="" | |
| 17 | |
| 18 output=$(bitwarden-dmenu \ | |
| 19 --bw-list-args="--url=$url" \ | |
| 20 --dmenu-args="-l 5 -w $1" \ | |
| 21 --dmenu-pswd-args="-w $1" \ | |
| 22 --stdout) | |
| 23 | |
| 24 if [ ! -z "$output" ]; then | |
| 25 username=$(echo "$output" | awk 'FNR == 1 {print}') | |
| 26 password=$(echo "$output" | awk 'FNR == 2 {print}') | |
| 27 else | |
| 28 exit | |
| 29 fi | |
| 30 | |
| 31 javascript_escape() { | |
| 32 sed "s,[\\\\'\"],\\\\&,g" <<< "$1" | |
| 33 } | |
| 34 | |
| 35 js() { | |
| 36 cat <<EOF | |
| 37 function isVisible(elem) { | |
| 38 var style = elem.ownerDocument.defaultView.getComputedStyle(elem… | |
| 39 if (style.getPropertyValue("visibility") !== "visible" || | |
| 40 style.getPropertyValue("display") === "none" || | |
| 41 style.getPropertyValue("opacity") === "0") { | |
| 42 return false; | |
| 43 } | |
| 44 return elem.offsetWidth > 0 && elem.offsetHeight > 0; | |
| 45 }; | |
| 46 function hasPasswordField(form) { | |
| 47 var inputs = form.getElementsByTagName("input"); | |
| 48 for (var j = 0; j < inputs.length; j++) { | |
| 49 var input = inputs[j]; | |
| 50 if (input.type == "password") { | |
| 51 return true; | |
| 52 } | |
| 53 } | |
| 54 return false; | |
| 55 }; | |
| 56 function loadData2Form (form) { | |
| 57 var inputs = form.getElementsByTagName("input"); | |
| 58 for (var j = 0; j < inputs.length; j++) { | |
| 59 var input = inputs[j]; | |
| 60 if (isVisible(input) && (input.type == "text" || input.type … | |
| 61 input.focus(); | |
| 62 input.value = "$(javascript_escape "${username}")"; | |
| 63 input.blur(); | |
| 64 } | |
| 65 if (input.type == "password") { | |
| 66 input.focus(); | |
| 67 input.value = "$(javascript_escape "${password}")"; | |
| 68 input.blur(); | |
| 69 } | |
| 70 } | |
| 71 }; | |
| 72 var forms = document.getElementsByTagName("form"); | |
| 73 for (i = 0; i < forms.length; i++) { | |
| 74 if (hasPasswordField(forms[i])) { | |
| 75 loadData2Form(forms[i]); | |
| 76 } | |
| 77 } | |
| 78 EOF | |
| 79 } | |
| 80 | |
| 81 printjs() { | |
| 82 js | sed 's,//.*$,,' | tr '\n' ' ' | |
| 83 } | |
| 84 | |
| 85 echo "inject $(printjs)" >> "$fifo" |