bvd757 commited on
Commit
47cd49c
·
1 Parent(s): d0fdf20
Files changed (1) hide show
  1. app.py +34 -20
app.py CHANGED
@@ -77,7 +77,7 @@ def main():
77
  errors = check_text(text, tool)
78
  st.session_state.errors = errors
79
  st.session_state.sorted_errors = sorted(errors, key=lambda x: x['start'])
80
- st.query_params.clear() # Очищаем параметры URL
81
 
82
  # Используем сохраненные ошибки при наличии
83
  errors = st.session_state.get('errors', [])
@@ -91,10 +91,10 @@ def main():
91
  for index, error in enumerate(sorted_errors):
92
  highlighted.append(html.escape(text[last_pos:error['start']]))
93
  highlighted.append(
94
- f'<a href="?selected_error={index}" style="text-decoration: none; color: inherit;">'
95
- f'<span class="error-highlight" title="{html.escape(error["message"])}">'
96
  f'{html.escape(text[error["start"]:error["end"]])}'
97
- f'</span></a>'
98
  )
99
  last_pos = error['end']
100
 
@@ -117,24 +117,38 @@ def main():
117
  st.markdown("### Результат проверки:")
118
  st.markdown(html_content, unsafe_allow_html=True)
119
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  # Обработка выбранной ошибки
121
- selected_error = st.query_params.get("selected_error", None)
122
-
123
- if selected_error is not None:
124
- try:
125
- selected_index = int(selected_error)
126
- if 0 <= selected_index < len(sorted_errors):
127
- error = sorted_errors[selected_index]
128
- st.markdown("### Описание ошибки:")
129
- st.markdown(f"**Ошибка {selected_index + 1}** (позиция {error['start']}-{error['end']}): {error['message']}")
130
- return # Прекращаем выполнение, чтобы не показывать все ошибки
131
- except:
132
- pass
133
 
134
- # Показываем все ошибки, если не выбрана конкретная
135
- st.markdown("### Найденные ошибки:")
136
- for i, error in enumerate(sorted_errors, 1):
137
- st.markdown(f"{i}. **Позиция {error['start']}-{error['end']}**: {error['message']}")
 
 
 
 
 
 
 
138
 
139
  if __name__ == "__main__":
140
  main()
 
77
  errors = check_text(text, tool)
78
  st.session_state.errors = errors
79
  st.session_state.sorted_errors = sorted(errors, key=lambda x: x['start'])
80
+ st.session_state.selected_error = None # Сброс выбранной ошибки
81
 
82
  # Используем сохраненные ошибки при наличии
83
  errors = st.session_state.get('errors', [])
 
91
  for index, error in enumerate(sorted_errors):
92
  highlighted.append(html.escape(text[last_pos:error['start']]))
93
  highlighted.append(
94
+ f'<span class="error-highlight" onclick="window.parent.postMessage({{index: {index}}}, \'*\')" '
95
+ f'title="{html.escape(error["message"])}">'
96
  f'{html.escape(text[error["start"]:error["end"]])}'
97
+ f'</span>'
98
  )
99
  last_pos = error['end']
100
 
 
117
  st.markdown("### Результат проверки:")
118
  st.markdown(html_content, unsafe_allow_html=True)
119
 
120
+ # JavaScript для обработки кликов
121
+ st.markdown("""
122
+ <script>
123
+ window.addEventListener('message', function(event) {
124
+ if (event.data.index !== undefined) {
125
+ const index = event.data.index;
126
+ // Отправляем индекс в Streamlit
127
+ const streamlitDoc = window.parent.document;
128
+ const iframe = streamlitDoc.querySelector('iframe[data-testid="stIFrame"]');
129
+ if (iframe) {
130
+ iframe.contentWindow.postMessage({type: 'streamlit:setComponentValue', value: index}, '*');
131
+ }
132
+ }
133
+ });
134
+ </script>
135
+ """, unsafe_allow_html=True)
136
+
137
  # Обработка выбранной ошибки
138
+ if 'selected_error' not in st.session_state:
139
+ st.session_state.selected_error = None
 
 
 
 
 
 
 
 
 
 
140
 
141
+ # Обновляем selected_error через кнопку (для демонстрации)
142
+ # В реальном приложении можно использовать st.experimental_set_query_params
143
+ selected_error = st.session_state.get('selected_error', None)
144
+
145
+ if selected_error is not None:
146
+ error = sorted_errors[selected_error]
147
+ st.markdown("### Описание ошибки:")
148
+ st.markdown(f"**Ошибка {selected_error + 1}** (позиция {error['start']}-{error['end']}): {error['message']}")
149
+ else:
150
+ st.markdown("### Найденные ошибки:")
151
+ st.markdown("🔍 **Кликните на выделенный текст, чтобы увидеть описание ошибки**")
152
 
153
  if __name__ == "__main__":
154
  main()