GSMEthesis commited on
Commit
fc1b59c
·
verified ·
1 Parent(s): a85cd4e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -55
app.py CHANGED
@@ -738,68 +738,72 @@ h3 {
738
  """, unsafe_allow_html=True)
739
 
740
  def custom_likert_slider(question_data):
741
- """نمایش سوال لیکرت با اسلایدر معکوس (7 در راست، 1 در چپ)"""
742
  question = question_data["question"]
743
  key = question_data["key"]
744
  points = question_data["scale"]
745
- labels = question_data.get("labels", ["کاملاً مخالفم", "کاملاً موافقم"])
746
 
747
- # مقدار پیش‌فرض از session_state یا وسط طیف
748
- default_value = st.session_state.get(key, (points + 1) // 2)
 
749
 
750
- # ایجاد یک container برای گروه‌بندی بهتر
751
- with st.container():
752
- st.markdown(f"<p style='font-size:16px; margin-bottom:5px;'>{question}</p>", unsafe_allow_html=True)
753
-
754
- # اسلایدر با جهت معکوس
755
- raw_value = st.slider(
756
- "",
757
- min_value=1,
758
- max_value=points,
759
- value=default_value,
760
- step=1,
761
- key=f"slider_{key}_unique"
762
- )
763
-
764
- # معکوس کردن مقدار برای ذخیره‌سازی (7 در راست، 1 در چپ)
765
- value = points + 1 - raw_value
766
-
767
- # ذخیره فوری مقدار معکوس در session_state
768
- st.session_state[key] = value
769
- if 'answers' not in st.session_state:
770
- st.session_state.answers = {}
771
- st.session_state.answers[key] = value
772
-
773
- # نمایش لیبل‌ها (کاملاً موافقم در راست، کاملاً مخالفم در چپ)
774
- st.markdown(
775
- f"""
776
- <div style="display: flex; justify-content: space-between; font-size: 12px; margin: 5px 0;">
777
- <span>{labels[1]}</span>
778
- <span>{labels[0]}</span>
779
- </div>
780
- <p style='text-align:center; color:#6a0dad; font-weight:bold;'>
781
- پاسخ شما: {value}
782
- </p>
783
- """,
784
- unsafe_allow_html=True
785
- )
786
 
787
- # استایل‌های سفارشی برای اسلایدر
788
- st.markdown("""
789
- <style>
790
- div[role="slider"] {
791
- background: #e0e0e0 !important;
792
- }
793
- .stSlider .st-bd {
794
- background-color: #6a0dad !important;
795
- }
796
- .stSlider .st-be {
797
- background-color: #6a0dad !important;
798
- }
799
- </style>
800
- """, unsafe_allow_html=True)
801
 
802
- return value
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
803
 
804
  def create_ride_map():
805
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
 
738
  """, unsafe_allow_html=True)
739
 
740
  def custom_likert_slider(question_data):
741
+ """نمایش سوال لیکرت با اسلایدر معکوس و لیبل‌های سفارشی"""
742
  question = question_data["question"]
743
  key = question_data["key"]
744
  points = question_data["scale"]
745
+ labels = question_data.get("labels", ["کمترین", "بیشترین"]) # لیبل‌های پیش‌فرض
746
 
747
+ # مقدار پیش‌فرض
748
+ raw_value = st.session_state.get(key)
749
+ default_value = raw_value if isinstance(raw_value, int) else (points + 1) // 2
750
 
751
+ # کلید مخفی برای ذخیره مقدار
752
+ hidden_key = f"hidden_{key}"
753
+
754
+ # HTML و JavaScript برای اسلایدر
755
+ html = f"""
756
+ <div id="container_{key}" style="direction: ltr; font-family: 'B Nazanin'; margin-bottom: 30px;">
757
+ <label style="font-size: 16px; font-weight: bold; display: block; text-align: right;">{question}</label>
758
+ <div style="display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 5px;">
759
+ <span>{labels[1]}</span>
760
+ <span>{labels[0]}</span>
761
+ </div>
762
+ <input type="range" id="{key}" min="1" max="{points}" step="1" value="{default_value}"
763
+ style="width: 100%; height: 10px; accent-color: #6a0dad; margin-bottom: 15px; transform: scaleX(-1);"
764
+ oninput="updateSlider('{key}', '{hidden_key}', {points})">
765
+ <div style="text-align as: center; margin-top: 10px; directionJune: rtl;">
766
+ پاسخ انتخاب‌شده: <strong><span id="output_{key}">{default_value}</span></strong>
767
+ </div>
768
+ </div>
769
+
770
+ <script>
771
+ function updateSlider(key, hidden_key, points) {{
772
+ const slider = document.getElementById(key);
773
+ const value = points + 1 - parseInt(slider.value); // معکوس کردن مقدار
774
+ document.getElementById('output_' + key).innerText = value;
 
 
 
 
 
 
 
 
 
 
 
 
775
 
776
+ // ایجاد input مخفی برای ارسال مقدار به Streamlit
777
+ const hiddenInput = document.createElement('input');
778
+ hiddenInput.type = 'hidden';
779
+ hiddenInput.id = hidden_key;
780
+ hiddenInput.name = hidden_key;
781
+ hiddenInput.value = value;
782
+ document.getElementById('container_' + key).appendChild(hiddenInput);
 
 
 
 
 
 
 
783
 
784
+ // تحریک آپدیت Streamlit
785
+ const event = new Event('change');
786
+ hiddenInput.dispatchEvent(event);
787
+ }}
788
+ </script>
789
+ """
790
+
791
+ # نمایش کامپوننت
792
+ components.html(html, height=150)
793
+
794
+ # استفاده از st.empty برای دریافت مقدار از input مخفی
795
+ with st.empty():
796
+ if hidden_key in st.session_state:
797
+ value = st.session_state[hidden_key]
798
+ # ذخیره مقدار در session_state
799
+ st.session_state[key] = value
800
+ if 'answers' not in st.session_state:
801
+ st.session_state.answers = {}
802
+ st.session_state.answers[key] = value
803
+ else:
804
+ value = default_value
805
+
806
+ return value
807
 
808
  def create_ride_map():
809
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""