Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
|
@@ -783,11 +783,17 @@ def enhanced_likert_scale(question_data):
|
|
| 783 |
st.markdown(f"<div style='text-align:right; font-weight:bold; margin-bottom:15px; direction: rtl;'>{question}</div>",
|
| 784 |
unsafe_allow_html=True)
|
| 785 |
|
| 786 |
-
# نمایش برچسبها
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 787 |
st.markdown(
|
| 788 |
f"""
|
| 789 |
<div style='display: flex; justify-content: space-between; max-width: 475px; margin: 0 auto 10px; direction: rtl;'>
|
| 790 |
<span style='font-size: 14px; font-weight: bold; color: #6a0dad;'>{labels[0]}</span>
|
|
|
|
| 791 |
<span style='font-size: 14px; font-weight: bold; color: #6a0dad;'>{labels[1]}</span>
|
| 792 |
</div>
|
| 793 |
""",
|
|
@@ -804,7 +810,7 @@ def enhanced_likert_scale(question_data):
|
|
| 804 |
key=f"{key}_radio"
|
| 805 |
)
|
| 806 |
|
| 807 |
-
#
|
| 808 |
st.markdown(
|
| 809 |
"""
|
| 810 |
<style>
|
|
@@ -820,7 +826,7 @@ def enhanced_likert_scale(question_data):
|
|
| 820 |
if selected_value is not None:
|
| 821 |
st.session_state[key] = selected_value
|
| 822 |
|
| 823 |
-
# ایجاد JavaScript
|
| 824 |
js_code = """
|
| 825 |
<script>
|
| 826 |
function handleLikertClick(index) {
|
|
@@ -831,7 +837,8 @@ def enhanced_likert_scale(question_data):
|
|
| 831 |
}
|
| 832 |
</script>
|
| 833 |
"""
|
| 834 |
-
|
|
|
|
| 835 |
options_html = "".join([
|
| 836 |
f'<div class="likert-option {"selected" if st.session_state.get(key) == i+1 else ""}" '
|
| 837 |
f'onclick="handleLikertClick({i})">'
|
|
@@ -840,7 +847,7 @@ def enhanced_likert_scale(question_data):
|
|
| 840 |
for i in range(scale)
|
| 841 |
])
|
| 842 |
|
| 843 |
-
# ترکیب تمام بخشها
|
| 844 |
components.html(
|
| 845 |
f"""
|
| 846 |
{js_code}
|
|
@@ -865,6 +872,7 @@ def enhanced_likert_scale(question_data):
|
|
| 865 |
cursor: pointer;
|
| 866 |
margin: 0 3px;
|
| 867 |
transition: all 0.2s;
|
|
|
|
| 868 |
}}
|
| 869 |
.likert-option:hover {{
|
| 870 |
transform: scale(1.1);
|
|
@@ -878,25 +886,50 @@ def enhanced_likert_scale(question_data):
|
|
| 878 |
font-weight: bold;
|
| 879 |
font-size: 16px;
|
| 880 |
user-select: none;
|
|
|
|
| 881 |
}}
|
| 882 |
.likert-option.selected .likert-number {{
|
| 883 |
color: white;
|
| 884 |
}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 885 |
</style>
|
| 886 |
<div class="likert-container">
|
| 887 |
{options_html}
|
| 888 |
</div>
|
| 889 |
""",
|
| 890 |
-
height=
|
| 891 |
)
|
| 892 |
|
| 893 |
-
# نمایش وضعیت انتخاب
|
| 894 |
status = f"پاسخ شما: {st.session_state[key]}" if st.session_state.get(key) else "پاسخ شما: هنوز انتخاب نشده"
|
| 895 |
-
st.markdown(
|
| 896 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 897 |
|
| 898 |
return st.session_state.get(key)
|
| 899 |
-
|
| 900 |
|
| 901 |
def create_ride_map():
|
| 902 |
"""ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
|
|
@@ -968,7 +1001,7 @@ def show_explanation(exp_type):
|
|
| 968 |
st.markdown(f"<p class='explanation-item'>• {item}</p>", unsafe_allow_html=True)
|
| 969 |
|
| 970 |
elif exp_type == "counterfactual":
|
| 971 |
-
st.markdown("<p class='explanation-title'>علت قیمت گذاری:</p>", unsafe_allow_html=True)
|
| 972 |
for item in explanations.get(exp_type, []):
|
| 973 |
st.markdown(f"<p class='explanation-item'>• {item}</p>", unsafe_allow_html=True)
|
| 974 |
|
|
@@ -1244,7 +1277,7 @@ def random_likert_questions():
|
|
| 1244 |
در این بخش، با یک سری سؤال درمورد قیمتی که در صفحه اطلاعات سفر و در زیر نقشه دیدید، مواجه خواهید شد. در زیر سوالات طیفی قرار دارد: <br>
|
| 1245 |
- سمت راست (۱): کاملاً نامنصفانه، غیرمعقول یا غیرقابل قبول<br>
|
| 1246 |
- سمت چپ (۷): کاملاً منصفانه، معقول یا قابل قبول<br>
|
| 1247 |
-
لطفاً با دقت عدد مناسب را بین ۱ تا ۷ را
|
| 1248 |
</p>
|
| 1249 |
"""),
|
| 1250 |
"questions": [
|
|
@@ -1302,7 +1335,7 @@ def random_likert_questions():
|
|
| 1302 |
در این بخش، با یک سری سؤال درمورد توضیحاتی که در صفحه اطلاعات سفر و در زیر نقشه درمورد قیمت به شما ارائه شد، مواجه خواهید شد. در زیر سوالات طیفی قرار دارد: <br>
|
| 1303 |
- سمت راست (۱): به هیچ وجه<br>
|
| 1304 |
- سمت چپ (۷): خیلی زیاد<br>
|
| 1305 |
-
لطفاً با دقت عدد مناسب را بین ۱ تا ۷ را
|
| 1306 |
</p>
|
| 1307 |
"""),
|
| 1308 |
"questions": [
|
|
|
|
| 783 |
st.markdown(f"<div style='text-align:right; font-weight:bold; margin-bottom:15px; direction: rtl;'>{question}</div>",
|
| 784 |
unsafe_allow_html=True)
|
| 785 |
|
| 786 |
+
# نمایش برچسبها (با برچسب وسط اگر مقیاس فرد باشد)
|
| 787 |
+
middle_label = ""
|
| 788 |
+
if scale % 2 == 1: # اگر مقیاس فرد باشد
|
| 789 |
+
middle_value = (scale // 2) + 1
|
| 790 |
+
middle_label = "<span style='font-size: 14px; font-weight: bold; color: #6a0dad;'>متوسط</span>"
|
| 791 |
+
|
| 792 |
st.markdown(
|
| 793 |
f"""
|
| 794 |
<div style='display: flex; justify-content: space-between; max-width: 475px; margin: 0 auto 10px; direction: rtl;'>
|
| 795 |
<span style='font-size: 14px; font-weight: bold; color: #6a0dad;'>{labels[0]}</span>
|
| 796 |
+
{middle_label}
|
| 797 |
<span style='font-size: 14px; font-weight: bold; color: #6a0dad;'>{labels[1]}</span>
|
| 798 |
</div>
|
| 799 |
""",
|
|
|
|
| 810 |
key=f"{key}_radio"
|
| 811 |
)
|
| 812 |
|
| 813 |
+
# مخفی کردن رادیو باتن
|
| 814 |
st.markdown(
|
| 815 |
"""
|
| 816 |
<style>
|
|
|
|
| 826 |
if selected_value is not None:
|
| 827 |
st.session_state[key] = selected_value
|
| 828 |
|
| 829 |
+
# ایجاد JavaScript
|
| 830 |
js_code = """
|
| 831 |
<script>
|
| 832 |
function handleLikertClick(index) {
|
|
|
|
| 837 |
}
|
| 838 |
</script>
|
| 839 |
"""
|
| 840 |
+
|
| 841 |
+
# ایجاد دکمههای سفارشی با استایل بهبود یافته
|
| 842 |
options_html = "".join([
|
| 843 |
f'<div class="likert-option {"selected" if st.session_state.get(key) == i+1 else ""}" '
|
| 844 |
f'onclick="handleLikertClick({i})">'
|
|
|
|
| 847 |
for i in range(scale)
|
| 848 |
])
|
| 849 |
|
| 850 |
+
# ترکیب تمام بخشها با استایل بهبود یافته
|
| 851 |
components.html(
|
| 852 |
f"""
|
| 853 |
{js_code}
|
|
|
|
| 872 |
cursor: pointer;
|
| 873 |
margin: 0 3px;
|
| 874 |
transition: all 0.2s;
|
| 875 |
+
position: relative;
|
| 876 |
}}
|
| 877 |
.likert-option:hover {{
|
| 878 |
transform: scale(1.1);
|
|
|
|
| 886 |
font-weight: bold;
|
| 887 |
font-size: 16px;
|
| 888 |
user-select: none;
|
| 889 |
+
transition: all 0.2s;
|
| 890 |
}}
|
| 891 |
.likert-option.selected .likert-number {{
|
| 892 |
color: white;
|
| 893 |
}}
|
| 894 |
+
/* برچسب وسط برای گزینه میانی */
|
| 895 |
+
.likert-option.middle-option::after {{
|
| 896 |
+
content: "متوسط";
|
| 897 |
+
position: absolute;
|
| 898 |
+
bottom: -25px;
|
| 899 |
+
font-size: 12px;
|
| 900 |
+
color: #6a0dad;
|
| 901 |
+
white-space: nowrap;
|
| 902 |
+
font-weight: bold;
|
| 903 |
+
}}
|
| 904 |
</style>
|
| 905 |
<div class="likert-container">
|
| 906 |
{options_html}
|
| 907 |
</div>
|
| 908 |
""",
|
| 909 |
+
height=70 # افزایش ارتفاع برای جا دادن برچسب وسط
|
| 910 |
)
|
| 911 |
|
| 912 |
+
# نمایش وضعیت انتخاب با استایل بهبود یافته
|
| 913 |
status = f"پاسخ شما: {st.session_state[key]}" if st.session_state.get(key) else "پاسخ شما: هنوز انتخاب نشده"
|
| 914 |
+
st.markdown(
|
| 915 |
+
f"""
|
| 916 |
+
<p style='
|
| 917 |
+
text-align: right;
|
| 918 |
+
color: #6a0dad;
|
| 919 |
+
direction: rtl;
|
| 920 |
+
margin-top: 20px;
|
| 921 |
+
padding: 10px;
|
| 922 |
+
background-color: #f8f0ff;
|
| 923 |
+
border-radius: 8px;
|
| 924 |
+
border-right: 3px solid #6a0dad;
|
| 925 |
+
'>
|
| 926 |
+
{status}
|
| 927 |
+
</p>
|
| 928 |
+
""",
|
| 929 |
+
unsafe_allow_html=True
|
| 930 |
+
)
|
| 931 |
|
| 932 |
return st.session_state.get(key)
|
|
|
|
| 933 |
|
| 934 |
def create_ride_map():
|
| 935 |
"""ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
|
|
|
|
| 1001 |
st.markdown(f"<p class='explanation-item'>• {item}</p>", unsafe_allow_html=True)
|
| 1002 |
|
| 1003 |
elif exp_type == "counterfactual":
|
| 1004 |
+
st.markdown("<p class='explanation-title'>توضیح رهیار درمورد علت قیمت گذاری:</p>", unsafe_allow_html=True)
|
| 1005 |
for item in explanations.get(exp_type, []):
|
| 1006 |
st.markdown(f"<p class='explanation-item'>• {item}</p>", unsafe_allow_html=True)
|
| 1007 |
|
|
|
|
| 1277 |
در این بخش، با یک سری سؤال درمورد قیمتی که در صفحه اطلاعات سفر و در زیر نقشه دیدید، مواجه خواهید شد. در زیر سوالات طیفی قرار دارد: <br>
|
| 1278 |
- سمت راست (۱): کاملاً نامنصفانه، غیرمعقول یا غیرقابل قبول<br>
|
| 1279 |
- سمت چپ (۷): کاملاً منصفانه، معقول یا قابل قبول<br>
|
| 1280 |
+
لطفاً با دقت عدد مناسب را بین ۱ تا ۷ را انتخاب نمایید. بدین گونه شما انتخاب خواهید کرد که چقدر قیمت به نظرتان منصفانه بوده. چقدر با توجه به شرایط منطقی بوده و چقدر قابل قبول بوده.
|
| 1281 |
</p>
|
| 1282 |
"""),
|
| 1283 |
"questions": [
|
|
|
|
| 1335 |
در این بخش، با یک سری سؤال درمورد توضیحاتی که در صفحه اطلاعات سفر و در زیر نقشه درمورد قیمت به شما ارائه شد، مواجه خواهید شد. در زیر سوالات طیفی قرار دارد: <br>
|
| 1336 |
- سمت راست (۱): به هیچ وجه<br>
|
| 1337 |
- سمت چپ (۷): خیلی زیاد<br>
|
| 1338 |
+
لطفاً با دقت عدد مناسب را بین ۱ تا ۷ را انتخاب نمایید. بدین گونه شما انتخاب خواهید کرد که از هیچ مقدار تا خیلی زیاد به چه مقدار به شما توضیح با ویژگیهای سوال ارائه شده است.
|
| 1339 |
</p>
|
| 1340 |
"""),
|
| 1341 |
"questions": [
|