#// auth_ Mohamad Janati
#// Copyright (c) 2019-2021 Mohamad Janati (freaking stupid, right? :|)
from aqt import mw
from anki import version
anki_version = int(version.replace('.', ''))
is_nightMode = False
if anki_version > 2119:
from aqt.theme import theme_manager
is_nightMode = theme_manager.night_mode
#// getting config information
config = mw.addonManager.getConfig(__name__)
#// getting colors that user defined in config
again_color = config['Color_ Again']
again_hover_color = config['Color_ Again on hover']
hard_color = config['Color_ Hard']
hard_hover_color = config['Color_ Hard on hover']
good_color = config['Color_ Good']
good_hover_color = config['Color_ Good on hover']
easy_color = config['Color_ Easy']
easy_hover_color = config['Color_ Easy on hover']
button_style = config[' Review_ Buttons Style']
custom_colors = config[' Review_ Custom Colors']
hover_effect = config[' Review_ Hover Effect']
active_indicator = config[' Review_ Active Button Indicator']
bottombarButtons_style = config[' Review_ Bottombar Buttons Style']
textColor_background = config['Color_ General Text Color']
activeIndicator_color = config['Color_ Active Button Indicator']
bottombarButtonText_color = config['Color_ Bottombar Button Text Color']
bottombarButtonBorder_color = config['Color_ Bottombar Button Border Color']
custom_bottombarButtonTextColor = config['Color_ Custom Bottombar Button Text Color']
custom_bottombarButtonBorderColor = config['Color_ Custom Bottombar Button Border Color']
custom_buttonSize = config ['Button_ Custom Button Sizes']
buttons_height = config['Button_ Height_ All Bottombar Buttons']
edit_width = config['Button_ Width_ Edit Button']
# answer_width = config['Button_ Width_ Show Answer Button']
info_width = config['Button_ Width_ Info Button']
skip_width = config['Button_ Width_ Skip Button']
text_size = config["Button_ Text Size"]
showSkipped_width = config['Button_ Width_ Show Skipped Button']
undo_width = config['Button_ Width_ Undo Button']
more_width = config['Button_ Width_ More Button']
custom_activeIndicatorColor = config[" Review_ Custom Active Indicator Color"]
custom_reviewButtonTextColor = config[" Review_ Custom Review Button Text Color"]
cursor_style = config[' Review_ Cursor Style']
transition = "{}s".format(float(config[' Review_ Button Transition Time']/1000))
border_radius = "{}px".format(config[' Review_ Button Border Radius'])
######//////__BEGIN__ EXTRAS __BEGIN__//////######
#// rplacing textColor with "default" if custom review button text color is disabled
if custom_reviewButtonTextColor == False:
textColor_background = "default"
#//replacing indicato color with "default" is custom active indicator color is disabled
if custom_activeIndicatorColor == False:
activeIndicator_color = "default"
#// Choosing cursor style
if cursor_style == 0:
cursor = "normal"
elif cursor_style == 1:
cursor = "pointer"
#// Choosing button text color
if not custom_reviewButtonTextColor:
if is_nightMode:
textColor = "#dedede"
if button_style > 3:
textColor = "black"
else:
textColor = "black"
else:
textColor = textColor_background
#// choosing color for general buttons
if custom_bottombarButtonTextColor:
bottombarButton_textColor = bottombarButtonText_color
else:
if is_nightMode:
bottombarButton_textColor = "#F0F0F0"
else:
bottombarButton_textColor = "#2F2F31"
#// choosing border color for general buttons
if custom_bottombarButtonBorderColor:
border_color = bottombarButtonBorder_color
else:
if is_nightMode:
if bottombarButtons_style == 0:
border_color = ""
elif bottombarButtons_style in [1, 2]:
border_color = "#939399"
elif bottombarButtons_style == 3:
border_color = "#dedede"
elif bottombarButtons_style == 4:
border_color = "#BFBFC7"
else:
if bottombarButtons_style == 0:
border_color = ""
elif bottombarButtons_style == 1:
border_color = "#404040"
elif bottombarButtons_style == 2:
border_color = "#939399"
elif bottombarButtons_style in[3, 4]:
border_color = "#080808"
#// seting colors for neon and fill desings when custom colors is disabled
if not custom_colors:
again_color = "#FF1111"
hard_color = "#FF9814"
good_color = "#33FF2D"
easy_color = "#21C0FF"
######//////__END__ EXTRAS __END__ //////######
######//////__BEGIN__ GENERAL BUTTON DESIGNS __BEGIN__ //////######
#// changing height and width of bottombar buttons based on button design or sizes that user has given
#// bottomHTML_style makes us able to add classes ids or edit bottombar buttons altogether
#// edit_stle, info_style, etc. make us able to define classes, ids or add styles to each button
#// classes and ids should be defined in bottomHTML_style first
if is_nightMode:
bottombar_neon1 = """""" % dict (text=bottombarButton_textColor, border_color=border_color, border_radius=border_radius, cursor=cursor, transition=transition)
bottombar_neon2 = """""" % dict (text=bottombarButton_textColor, border_color=border_color, border_radius=border_radius, cursor=cursor, transition=transition)
bottombar_fill1 = """""" % dict(text=bottombarButton_textColor, border_color=border_color, cursor=cursor, transition=transition, border_radius=border_radius)
bottombar_fill2 = """""" % dict(text=bottombarButton_textColor, border_color=border_color, cursor=cursor, transition=transition, border_radius=border_radius)
else:
bottombar_neon1 = """""" % dict (text=bottombarButton_textColor, border_color=border_color, border_radius=border_radius, cursor=cursor, transition=transition)
bottombar_neon2 = """""" % dict (text=bottombarButton_textColor, border_color=border_color, border_radius=border_radius, cursor=cursor, transition=transition)
bottombar_fill1 = """""" % dict(text=bottombarButton_textColor, border_color=border_color, cursor=cursor, transition=transition, border_radius=border_radius)
bottombar_fill2 = """""" % dict(text=bottombarButton_textColor, border_color=border_color, cursor=cursor, transition=transition, border_radius=border_radius)
if custom_buttonSize:
if bottombarButtons_style == 0:
edit_style = 'style="height: {}px; width: {}px; font-size: {}px;"'.format(buttons_height, edit_width, text_size)
info_style = 'style="height: {}px; width: {}px; font-size: {}px;"'.format(buttons_height, info_width, text_size)
skip_style = 'style="height: {}px; width: {}px; font-size: {}px;"'.format(buttons_height, skip_width, text_size)
showSkipped_style = 'style="height: {}px; width: {}px; font-size: {}px;"'.format(buttons_height, showSkipped_width, text_size)
undo_style = 'style="height: {}px; width: {}px; font-size: {}px;"'.format(buttons_height, undo_width, text_size)
more_style = 'style="height: {}px; width: {}px; font-size: {}px;"'.format(buttons_height, more_width, text_size)
min_buttonSize = "" % cursor
else:
edit_style = 'style="height: {}px; width: {}px; font-size: {}px;" id=main'.format(buttons_height, edit_width, text_size)
info_style = 'style="height: {}px; width: {}px; font-size: {}px;" id=main'.format(buttons_height, info_width, text_size)
skip_style = 'style="height: {}px; width: {}px; font-size: {}px;" id=main'.format(buttons_height, skip_width, text_size)
showSkipped_style = 'style="height: {}px; width: {}px; font-size: {}px;" id=main'.format(buttons_height, showSkipped_width, text_size)
undo_style = 'style="height: {}px; width: {}px; font-size: {}px;" id=main'.format(buttons_height, undo_width, text_size)
more_style = 'style="height: {}px; width: {}px; font-size: {}px;" id=main'.format(buttons_height, more_width, text_size)
min_buttonSize = "" % cursor
else:
if bottombarButtons_style == 0:
edit_style = ""
info_style = ""
skip_style = ""
showSkipped_style = ""
undo_style = ""
more_style = ""
min_buttonSize = "" % cursor
else:
edit_style = "id=main"
info_style = "id=main"
skip_style = "id=main"
showSkipped_style = "id=main"
undo_style = "id=main"
more_style = "id=main"
min_buttonSize = "" % cursor
######//////__END__ GENERAL BUTTON DESIGNS __END__//////######
######//////__BEGIN__ ACtIVE BUTTON INDOCATORS __BEGIN__//////######
#// active button indicator
if activeIndicator_color == "default":
activeIndicator_color = "#21BFFF"
if active_indicator == 2:
active_extra = "border: solid 1px; border-color: {0}; box-shadow: 0 0 5px {0}, 0 0 20px {0}, 0 0 40px {0}".format(activeIndicator_color)
else:
active_extra = "border: solid 1px; border-color: {}".format(activeIndicator_color)
if active_indicator == 0 or button_style in [4, 5, 6, 7]:
active_extra = ""
######//////__END__ ACtIVE BUTTON INDOCATORS __END__//////######
######//////__BEGIN__ HOVER EFFECTS __BEGIN__//////######
if not custom_colors:
again_shadow = "box-shadow: 0 0 5px #BA0C0C, 0 0 20px #BA0C0C, 0 0 40px #BA0C0C;"
hard_shadow = "box-shadow: 0 0 5px #BF720F, 0 0 20px #BF720F, 0 0 40px #BF720F;"
good_shadow = "box-shadow: 0 0 5px #20A11C, 0 0 20px #20A11C, 0 0 40px #20A11C;"
easy_shadow = "box-shadow: 0 0 5px #188AB8, 0 0 20px #188AB8, 0 0 40px #188AB8;"
else:
again_shadow = "box-shadow: 0 0 5px {0}, 0 0 20px {0}, 0 0 40px {0};".format(again_hover_color)
hard_shadow = "box-shadow: 0 0 5px {0}, 0 0 20px {0}, 0 0 40px {0};".format(hard_hover_color)
good_shadow = "box-shadow: 0 0 5px {0}, 0 0 20px {0}, 0 0 40px {0};".format(good_hover_color)
easy_shadow = "box-shadow: 0 0 5px {0}, 0 0 20px {0}, 0 0 40px {0};".format(easy_hover_color)
again_hover = ""
hard_hover = ""
good_hover = ""
easy_hover = ""
if not custom_colors:
if button_style == 0 or button_style == 2:
if hover_effect == 1:
again_hover = "color: #FF1111;"
hard_hover = "color: #FF9814;"
good_hover = "color: #33FF2D;"
easy_hover = "color: #21C0FF;"
elif hover_effect == 2:
again_hover = again_shadow
hard_hover = hard_shadow
good_hover = good_shadow
easy_hover = easy_shadow
elif hover_effect == 3:
again_hover = "color: #FF1111; {}".format(again_shadow)
hard_hover = "color: #FF9814; {}".format(hard_shadow)
good_hover = "color: #33FF2D; {}".format(good_shadow)
easy_hover = "color: #21C0FF; {}".format(easy_shadow)
elif button_style == 1 or button_style == 3:
if hover_effect == 1:
if is_nightMode:
again_hover = "background: #FF1111;"
hard_hover = "background: #FF9814;"
good_hover = "background: #33FF2D;"
easy_hover = "background: #21C0FF;"
else:
again_hover = "background: linear-gradient(0deg, #E02A1C, #FF3020);"
hard_hover = "background: linear-gradient(0deg, #E08C08, #FF9F09);"
good_hover = "background: linear-gradient(0deg, #22D414, #27F217);"
easy_hover = "background: linear-gradient(0deg, #11A7D1, #13C0F0);"
elif hover_effect == 2:
again_hover = again_shadow
hard_hover = hard_shadow
good_hover = good_shadow
easy_hover = easy_shadow
elif hover_effect == 3:
if is_nightMode:
again_hover = "background: #FF1111; {}".format(again_shadow)
hard_hover = "background: #FF9814; {}".format(hard_shadow)
good_hover = "background: #2CDB27; {}".format(good_shadow)
easy_hover = "background: #21C0FF; {}".format(easy_shadow)
else:
again_hover = "background: linear-gradient(0deg, #E02A1C, #FF3020); {}".format(again_shadow)
hard_hover = "background: linear-gradient(0deg, #E08C08, #FF9F09); {}".format(hard_shadow)
good_hover = "background: linear-gradient(0deg, #22D414, #27F217); {}".format(good_shadow)
easy_hover = "background: linear-gradient(0deg, #11A7D1, #13C0F0); {}".format(easy_shadow)
else:
if button_style == 0 or button_style == 2:
if hover_effect == 1:
again_hover = "color: {};".format(again_hover_color)
hard_hover = "color: {};".format(hard_hover_color)
good_hover = "color: {};".format(good_hover_color)
easy_hover = "color: {};".format(easy_hover_color)
elif hover_effect == 2:
again_hover = again_shadow
hard_hover = hard_shadow
good_hover = good_shadow
easy_hover = easy_shadow
elif hover_effect == 3:
again_hover = "color: {}; {}".format(again_hover_color, again_shadow)
hard_hover = "color: {}; {}".format(hard_hover_color, hard_shadow)
good_hover = "color: {}; {}".format(good_hover_color, good_shadow)
easy_hover = "color: {}; {}".format(easy_hover_color, easy_shadow)
elif button_style == 1 or button_style == 3:
if hover_effect == 1:
again_hover = "background: {};".format(again_hover_color)
hard_hover = "background: {};".format(hard_hover_color)
good_hover = "background: {};".format(good_hover_color)
easy_hover = "background: {};".format(easy_hover_color)
elif hover_effect == 2:
again_hover = again_shadow
hard_hover = hard_shadow
good_hover = good_shadow
easy_hover = easy_shadow
elif hover_effect == 3:
again_hover = "background: {}; {}".format(again_hover_color, again_shadow)
hard_hover = "background: {}; {}".format(hard_hover_color, hard_shadow)
good_hover = "background: {}; {}".format(good_hover_color, good_shadow)
easy_hover = "background: {}; {}".format(easy_hover_color, easy_shadow)
######//////__END__ HOVER EFFECTS __END__//////######
######//////__BEGIN__ REVIEW BUTTON DESIGNS __BEGIN__//////######
fill2 = """""" % dict(text=textColor, again_color=again_color,hard_color=hard_color, good_color=good_color,
easy_color=easy_color,cursor=cursor, transition=transition, border_radius=border_radius)
fill1 = """""" % dict(text=textColor, again_color=again_color, hard_color=hard_color, good_color=good_color,
easy_color=easy_color, cursor=cursor, transition=transition, border_radius=border_radius)
neon2 = """""" % dict(text=textColor, again_color=again_color,hard_color=hard_color,
good_color=good_color, easy_color=easy_color, cursor=cursor, transition=transition, border_radius=border_radius)
neon1 = """""" % dict(text=textColor, again_color=again_color, hard_color=hard_color,
good_color=good_color, easy_color=easy_color, cursor=cursor, transition=transition, border_radius=border_radius)
#// styling for text color change method
text_color = """""" % dict(cursor=cursor, again_hover=again_hover, hard_hover=hard_hover, good_hover=good_hover, easy_hover=easy_hover)
#// styling for background color change method
if is_nightMode: #// style if anki version is 2.1.20 and night mode is enabled
background_color = """""" % dict (text=textColor, cursor=cursor, again_hover=again_hover, hard_hover=hard_hover, good_hover=good_hover, easy_hover=easy_hover)
else: #// style if anki version is older than 2.1.20 or night mode is disabled
background_color = """""" % dict (text=textColor, cursor=cursor, again_hover=again_hover, hard_hover=hard_hover, good_hover=good_hover, easy_hover=easy_hover)
#// styling for custom text color change method
custom_text = """""" % dict(again_color=again_color, hard_color=hard_color, good_color=good_color, easy_color=easy_color, easy_hover_color=easy_hover_color,
again_hover=again_hover, hard_hover=hard_hover, good_hover=good_hover, easy_hover=easy_hover, cursor=cursor)
#// styling for custom background color change method
if is_nightMode: #// style if anki version is 2.1.20 and above and night mode is endabled
custom_background = """""" % dict (text=textColor, cursor=cursor, again_color=again_color, hard_color=hard_color, good_color=good_color, easy_color=easy_color,
again_hover=again_hover, hard_hover=hard_hover, good_hover=good_hover, easy_hover=easy_hover)
else: #// style if anki is in day/light mode or anki version is older than 2.1.20
custom_background = """""" % dict (text=textColor, cursor=cursor, again_color=again_color, again_hover_color=again_hover_color, hard_color=hard_color, hard_hover_color=hard_hover_color, good_color=good_color, good_hover_color=good_hover_color, easy_color=easy_color, easy_hover_color=easy_hover_color,
again_hover=again_hover, hard_hover=hard_hover, good_hover=good_hover, easy_hover=easy_hover)
button_styles = """"""
######//////__END__ REVIEW BUTTONS DESIGNS __END__//////######
######//////__BEGIN__ CARD INFO STYLING __BEGIN//////######
light = """
body {
margin: 8px;
background-color: #dedede;
}
p {
margin-top: 1em;
margin-bottom: 1em;
}
h1,h2,h3,h4{
display: block;
font-size: 1.17em;
margin-top: 1em;
margin-bottom: 1em;
margin-left: 0;
margin-right: 0;
font-weight: bold;
}
a:link {
text-decoration: none;
color:black;
}
/* anki.stats
colYoung = "#7c7"
colMature = "#070"
colCum = "rgba(0,0,0,0.9)"
colLearn = "#00F"
colRelearn = "#c00"
colCram = "#ff0"
colIvl = "#077"
colHour = "#ccc"
colTime = "#770"
colUnseen = "#000"
colSusp = "#ff0"
*/
.color_learn {color: #00F;}
.color_mature {color: #070;}
.color_relearn {color: #c00;}
.color_type3 {color: #3c9690;}
.color_rest {color: #000;}
.color_ease3 {color: navy;}
.color_ease4 {color: darkgreen;}
.critical_color_lower {color: red;}
.critical_color_upper {color: blue;}
"""
dark = """
body {
background-color: #272828;
color: #d7d7d7;
margin: 8px;
}
p {
background-color: #272828;
color: #d7d7d7;
margin-top: 1em;
margin-bottom: 1em;
}
h1,h2,h3,h4{
background-color: #272828;
color: #d7d7d7;
display: block;
font-size: 1.17em;
margin-top: 1em;
margin-bottom: 1em;
margin-left: 0;
margin-right: 0;
font-weight: bold;
}
a:link {
text-decoration: none;
color:#d7d7d7;
}
.color_learn {color: #01b3f5;}
.color_mature {color: #070;}
.color_relearn {color: #ff0000;}
.color_type3 {color: #57d9d1;}
.color_rest {color: #dedede;}
.color_ease3 {color: #00aaff;}
.color_ease4 {color: #55ff00;}
.critical_color_lower {color: #ff0000;}
.critical_color_upper {color: #00aaff;}
"""
######//////__END__ CARD INFO __END__//////######