forked from jamiescode/bash-menu-generator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmenu.sh
113 lines (102 loc) · 2.94 KB
/
menu.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/bin/sh
# menu.sh
# Description: Bash menu generator
#
# Created by Jamie Cruwys on 21/02/2014.
#
# Configuration
symbol="*"
paddingSymbol=" "
lineLength=70
charsToOption=1
charsToName=3
function generatePadding() {
string="";
for (( i=0; i < $2; i++ )); do
string+="$1";
done
echo "$string";
}
# Generated configs
remainingLength=$(( $lineLength - 2 ));
line=$(generatePadding "${symbol}" "${lineLength}");
toOptionPadding=$(generatePadding "${paddingSymbol}" "${charsToOption}");
toNamePadding=$(generatePadding "$paddingSymbol" "$charsToName");
# generateText (text)
function generateText() {
totalCharsToPad=$((remainingLength - ${#1}));
charsToPadEachSide=$((totalCharsToPad / 2));
padding=$(generatePadding "$paddingSymbol" "$charsToPadEachSide");
totalChars=$(( ${#symbol} + ${#padding} + ${#1} + ${#padding} + ${#symbol} ));
if [[ ${totalChars} < ${lineLength} ]]; then
echo "${symbol}${padding}${1}${padding}${paddingSymbol}${symbol}";
else
echo "${symbol}${padding}${1}${padding}${symbol}";
fi
}
# generateTitle (title)
function generateTitle() {
echo "$line"
generateText ""
generateText "$1"
generateText ""
echo "$line"
}
# generateOption (dialogType, optionNumber, optionName)
function generateOption() {
tempOptionPadding=$toOptionPadding
tempNamePadding=$toNamePadding
if [[ $1 == "options" ]]; then
if [[ $3 == "Exit" ]] || [[ $3 == "Return to the main menu" ]]; then
optionString="[0]"
else
optionString="[$2]"
fi
elif [[ $1 == "instructions" ]]; then
optionString="$2."
fi
charsToPadName=$(( ${lineLength} - ${#symbol} - ${#tempOptionPadding} - ${#optionString} - ${#tempNamePadding} - ${#3} - ${#symbol} ));
namePadding=$(generatePadding "$paddingSymbol" "$charsToPadName");
echo "${symbol}${tempOptionPadding}${optionString}${tempNamePadding}${3}${namePadding}${symbol}";
}
# generateOptionsFromArray (dialogType, array[options])
function generateOptionsFromArray() {
index=1
generateText ""
for OPTION in "${@:2}"
do
if [[ "$1" == "message" ]]; then
generateText "$OPTION"
else
generateOption "$1" "$index" "$OPTION"
fi
((index++))
done
generateText ""
}
# generateDialog (dialogType, dialogTitle, array[options])
function generateDialog() {
generateTitle "$2"
generateOptionsFromArray "$1" "${@:3}"
echo "$line";
}
# generateGoBackDialog (name, isNewLine)
function generateGoBackDialog() {
if [[ $2 == "true" ]]; then
echo -e "\n$line"
else
echo -e "$line"
fi
generateText ""
generateOption "options" "0" "$1"
generateText ""
echo -e "$line"
}
# generateMessageDialog (title, array[message])
function generateMessageDialog() {
if [[ "${#1}" > 0 ]]; then
generateTitle "$1"
fi
generateOptionsFromArray "message" "${@:2}"
echo "$line"
}