
    IiTO                       S r SSKrSSKJrJr  SSKJr  SSKJr  SSKJ	r	  SSK
JrJrJr  S	S
KJr  SSKJr  SSKJrJrJrJrJrJr  \(       a  S	SKJr  \" \5      R8                  R8                  R8                  r\S-  r " S S5      rg)z2Document browsing menus for the PlayPalace server.    N)datetimetimezone)Path)TYPE_CHECKING   )NetworkUser)MenuItemEscapeBehavior
TrustLevel   )Localization)show_yes_no_menu   )DocumentManagerSCOPE_SHAREDSCOPE_INDEPENDENTMODE_MANUALMODE_AUTO_COMMITMODE_AUTO_PR)Database	documentsc                      \ rS rSr% SrS\S'   \\S'   \\\4   \S'   S\	S\S	\S
\\\
4   4S jrS\	S\S-  S\S	\S
\4
S jrS\S
\4S jrS\	S
\4S jrS\S
\\   4S jrS\	S\S
\\   4S jrS\S\S
\4S jrS\	S
S4S jrS\	S\S	\S
S4S jrSSSSSS.rS\	S
S4S  jr ScS\	S!\\   S"\S-  S
S4S# jjrS\	S\S	\S
S4S$ jrS\	S
S4S% jrS\	S
S4S& jrS\	S
S4S' jrS\	S
S4S( jrS\	S)\S-  S
S4S* jrS\	S\S	\S
S4S+ jr S\	S\S	\S
S4S, jr!S\	S\S	\S
S4S- jr"S\	S\S	\S
S4S. jr#S\	S\S	\S
S4S/ jr$S\	S\S	\S
S4S0 jr%S\	S\S	\S
S4S1 jr&S\	S\S	\S
S4S2 jr'S\	S\S	\S
S4S3 jr(S\	S\S	\S
S4S4 jr)S\	S5\S	\S
S4S6 jr* ScS\	S\S	\S7\S-  S
S4
S8 jjr+S\	S\S	\S
S4S9 jr, ScS\	S\S	\S:\S-  S
S4
S; jjr-S\	S\S	\S
S4S< jr.S\	S\S	\S
S4S= jr/S\	S\S	\S
S4S> jr0S\	S\S?\S	\S
S4
S@ jr1S\	S\S	\S
S4SA jr2S\	S\S?\S	\S
S4
SB jr3S\	S\S	\S
S4SC jr4S\	S\S	\S
S4SD jr5S\	S\S	\S
S4SE jr6S\	S\S	\S
S4SF jr7S\	S\S	\S
S4SG jr8S\	S\S	\S
S4SH jr9S\	S\S	\S
S4SI jr:  SdS\	S\S?\S	\SJ\SK\S-  S
S4SL jjr;S\	S\S	\S
S4SM jr<S\	S\S?\SJ\S
S4
SN jr=S\	SO\S	\S
S4SP jr>S\	S
S4SQ jr?S\	S\S	\S
S4SR jr@ ScS\	S:\S-  S
S4SS jjrAS\	S\S	\S
S4ST jrBS\	S	\S
S4SU jrCS\	S5\S	\S
S4SV jrDS\	S
S4SW jrES\	S5\S	\S
S4SX jrFS\	S5\S	\S
S4SY jrGS\	S)\S
S4SZ jrHS\	S5\S	\S
S4S[ jrIS\	S)\S
S4S\ jrJS\	S\S	\S
S4S] jrKS\	S)\S
S4S^ jrLS\	S\S	\S
S4S_ jrMS\	S)\S
S4S` jrNS\	S\S	\S
S4Sa jrOSbrPg)eDocumentBrowsingMixin   zProvide document browsing menus.

Expected attributes:
    _db: Database instance.
    _documents: DocumentManager instance.
    _user_states: dict[str, dict] of user menu states.
    _show_main_menu(user): Method to show the main menu.
r   _db
_documents_user_statesuserselection_idstatereturnc                    0 SU R                   XU44_SU R                  XU44_SU R                  XU44_SU R                  XU44_SU R                  XU44_SU R
                  XU44_SU R                  XU44_SU R                  XU44_S	U R                  XU44_S
U R                  XU44_SU R                  XU44_SU R                  XU44_SU R                  XU44_SU R                  XU44_SU R                  XU44_SU R                  XU44_SU R                   XU44_U R"                  XU44U R$                  XU44U R&                  XU44S.EnUR)                  U R+                  XU5      5        U$ )z=Return menu dispatch entries for the entire documents system.documents_menudocuments_list_menudocument_actions_menudocument_settings_menudocument_title_lang_menudocument_visibility_menudocument_categories_menuremove_translation_lang_menuremove_translation_confirm remove_translation_title_confirmdelete_document_confirmpromote_to_shared_confirmdocument_edit_lang_menuadd_translation_lang_menunew_document_scope_menunew_document_categories_menucategory_settings_menu)category_sort_menudelete_category_confirmsync_discard_menu) _handle_documents_menu_selection _handle_documents_list_selection"_handle_document_actions_selection#_handle_document_settings_selection%_handle_document_title_lang_selection%_handle_document_visibility_selection%_handle_document_categories_selection)_handle_remove_translation_lang_selection"_handle_remove_translation_confirm(_handle_remove_translation_title_confirm_handle_delete_document_confirm_handle_promote_confirm_handle_edit_lang_selection&_handle_add_translation_lang_selection$_handle_new_document_scope_selection)_handle_new_document_categories_selection#_handle_category_settings_selection_handle_category_sort_selection_handle_delete_category_confirm_handle_sync_discard_selectionupdate_get_transcriber_menu_handlers)selfr   r   r    handlerss        =c:\Users\dbart\PlayPalace11\server\core\documents\browsing.py_get_document_menu_handlers1DocumentBrowsingMixin._get_document_menu_handlers.   s   N&
tDDt[`FabN&
!55U+$N&
 $77U+&N&
 %88U+'N&
 '::U+)N&
$ '::U+)%N&
, '::U+)-N&
4 +>>U+-5N&
< )77U++=N&
D /==U+1EN&
L &44U+(MN&
T (,,U+*UN&
\ &00U+(]N&
d (;;U+*eN&
l &99U+(mN&
t +>>U+-uN&
| %88U+'}N&
F 44U+#
 44U+(
 33U+"UN&
` 	;;DPUVW    current_menuNpacketc                 ,  #    US:X  a~  UR                  SS5      nU R                  UR                  5      (       d  U R                  U5      (       a  U R	                  XU5        gUR                  S5      nU R                  X5        gUS:X  a-  UR                  SS5      nU R                  XU5      I Sh  vN   gUS	:X  a%  UR                  SS5      nU R                  XU5        gUS
:X  a%  UR                  SS5      nU R                  XU5        gUS:X  a%  UR                  SS5      nU R                  XU5        gUS:X  a%  UR                  SS5      nU R                  XU5        gUS:X  a%  UR                  SS5      nU R                  XU5        gg N7f)zpHandle document-related editbox submissions.

Returns ``True`` if the editbox was handled, ``False`` otherwise.
document_viewfolder_name category_slugTdocument_title_editboxtextNnew_document_slug_editboxnew_category_slug_editboxnew_category_name_editboxrename_category_editboxcommit_message_editboxF)get_is_transcriberusername	_is_admin_show_document_actions_show_documents_list_handle_document_title_editbox_handle_new_document_slug_handle_new_category_slug_handle_new_category_name_handle_rename_category_handle_commit_message)rM   r   rS   rT   r    rW   rY   r[   s           rO   _handle_document_editbox.DocumentBrowsingMixin._handle_document_editbox   s     ?*))M26K##DMM22dnnT6J6J++DuE  !&		/ :))$>33::fb)D55d%HHH66::fb)D**4u=66::fb)D**4u=66::fb)D**4u=44::fb)D((U;33::fb)D''E:9 Is   B2F4F5CFrc   c                 P    [        U R                  R                  U5      5      S:  $ )zAReturn True if the user has any transcriber language assignments.r   )lenr   get_transcriber_languagesrM   rc   s     rO   rb   %DocumentBrowsingMixin._is_transcriber   s!    48855h?@1DDrR   c                 d    UR                   R                  [        R                  R                  :  $ )z$Return True if the user is an admin.)trust_levelvaluer   ADMIN)rM   r   s     rO   rd   DocumentBrowsingMixin._is_admin   s%    %%)9)9)?)???rR   c                 J    [        U R                  R                  U5      5      $ )z@Return the set of languages assigned to a user as a transcriber.)setr   rq   rr   s     rO   _get_user_assigned_languages2DocumentBrowsingMixin._get_user_assigned_languages   s    48855h?@@rR   rW   c                     U R                   R                  U5      nUc  / $ U R                  UR                  5      nUR	                  S0 5      R                  5        Vs/ s H  oUU;   d  M
  UPM     sn$ s  snf )z=Return document locales the user can edit (assigned to them).locales)r   get_document_metadatar{   rc   ra   keys)rM   r   rW   metaassignedlocs         rO   _get_user_accessible_locales2DocumentBrowsingMixin._get_user_accessible_locales   sf    44[A<I44T]]C#xx	26;;=Q==QQQs   	A4+A4localec                     U R                   R                  U5      nUc  U$ UR                  S0 5      nUR                  U5      =(       d    UR                  S5      =(       d    U$ )z!Get display title for a document.titlesen)r   r   ra   )rM   rW   r   r   r   s        rO   _get_document_title)DocumentBrowsingMixin._get_document_title   sS    44[A<(B'zz&!DVZZ%5DDrR   c           	          U R                   R                  UR                  5      nU R                   R                  5       nU R	                  U5      nU=(       d    U R                  UR                  5      n/ nUR                  SS5      n[        R                  " UR                  S5      nUR                  [        U SU S3SS95        U HO  n	UR                  U	S   S5      n
U
S:X  a	  U(       d  M'  UR                  [        U	S	    SU
 S3S
U	S    3S95        MQ     UR                  SS5      n[        R                  " UR                  S5      nUR                  [        U SU S3SS95        U(       Ga  UR                  [        [        R                  " UR                  S5      SS95        UR                  [        [        R                  " UR                  S5      SS95        UR                  [        [        R                  " UR                  S5      SS95        U R                   R                  5       nU R                   R                  nU[        :X  aC  [        R                  " UR                  S[        U5      S9nUR                  [        USS95        OU[        :X  aC  [        R                  " UR                  S[        U5      S9nUR                  [        USS95        OB[        R                  " UR                  S[        U5      S9nUR                  [        USS95        UR                  [        [        R                  " UR                  S5      SS95        UR                  [        [        R                  " UR                  S5      SS95        UR                  [        [        R                  " UR                  S5      SS95        UR!                  S US!["        R$                  S"9  S#S 0U R&                  UR                  '   g)$z!Show the documents category menu.Nr   zdocuments-allz ()allr[   idslugnamecat_rX   zdocuments-uncategorizeduncategorizedzdocuments-new-documentnew_documentzdocuments-new-categorynew_categoryzdocuments-syncsync_documentszdocuments-export-pendingcountexport_pendingzdocuments-pr-button	create_prz documents-pending-commits-buttonpending_infoztranscribers-by-languagetranscribers_by_languageztranscribers-by-usertranscribers_by_userbackr#   Tmultiletterescape_behaviormenu)r   get_categoriesr   get_category_document_countsrd   rb   rc   ra   r   appendr	   get_pending_change_countcontribution_moder   strr   	show_menur
   SELECT_LASTr   )rM   r   
categoriescountsis_admin
show_emptyitems	all_count	all_labelcat	cat_countuncat_countuncat_labelpending_countmodepending_labels                   rO   _show_documents_menu*DocumentBrowsingMixin._show_documents_menu   sp   __33DKK@
==?>>$'D!5!5dmm!D
 JJtQ'	 $$T[[/B	Xi[9+Q#?EJK C

3v;2IA~jLLK=9+Q7c&k]+	  jjQ'"&&t{{4MNXk]"[M#CXYLL%))$++7OP% LL%))$++7OP% LL%))$++7GH' !OODDFM??44D{" , 0 0KK.m,!
 X==MNO% , 0 0KK)m,!
 X=[IJ !- 0 0KK6m,!
 X=^LM!%%dkk3MN-	
 	!%%dkk3IJ)	
 	X<#3#3DKK#HVTU*66	 	 	
 -34D+E$--(rR   c                   #    US:X  a  U R                  U5        gUS:X  a  U R                  US5        gUS:X  a  U R                  US5        gUS:X  a  U R                  U5        gUS:X  a  U R                  U5        gUS:X  a  U R	                  U5      I Sh  vN   gUS	:X  a  U R                  U5      I Sh  vN   gUS
:X  a  U R                  U5      I Sh  vN   gUS:X  a  U R                  U5        gUS:X  a  U R                  U5        gUS:X  a  U R                  U5        gUR                  S5      (       a  USS nU R                  X5        gg N N N7f)z)Handle documents category menu selection.r   r   Nr   rX   r   r   r   r   r   r   r   r   r      )_show_main_menurf   _show_new_document_scope_show_new_category_slug_editbox_handle_sync_documents_handle_export_pending_handle_create_pr_handle_pending_info_show_transcribers_by_language_show_transcribers_by_user
startswith)rM   r   r   r    r   s        rO   r7   6DocumentBrowsingMixin._handle_documents_menu_selection9  sN     6!  &U"%%dD1_,%%dB/^+))$/^+006----d333----d333[(((...^+%%d+77//533++D1$$V,,#D%%d1 - 43.s7   BEEE7E8EEA<EEEzdocuments-sync-tag-absentzdocuments-sync-tag-presentdocuments-sync-tag-contentzdocuments-sync-tag-metadataz'documents-sync-tag-content-and-metadata)absentpresentcontentmetadatacontent_and_metadatac                    #    U R                   R                  5       nU(       a  U R                  X5        gU R                  U5        g7f)zSync shared documents from the git repository.

If there are uncommitted local changes to shared documents, the
admin is shown a per-document toggle list to choose which to
discard before syncing.
N)r    get_uncommitted_shared_documents_show_sync_discard_menu_do_sync)rM   r   changed_docss      rO   r   ,DocumentBrowsingMixin._handle_sync_documentsc  s6      GGI((<MM$s   AAr   focus_idc                    U R                   R                  UR                  0 5      n[        UR                  S/ 5      5      nUR	                  S[        [        U5      5      S9  / nSnU H  nUS   n	US   n
U R                  XR                  5      n[        R                  " UR                  U R                  R                  U
S5      5      nX;   a!  [        R                  " UR                  SXS	9nO [        R                  " UR                  S
XS	9nSU	 3nUR                  [        XS95        X:X  d  M  [        U5      nM     UR                  [        [        R                  " UR                  S5      SS95        UR                  [        [        R                  " UR                  S5      SS95        UR                  [        [        R                  " UR                  S5      SS95        UR                  [        [        R                  " UR                  S5      SS95        UR                  SUS[        R                  US9  SU[!        U5      S.U R                   UR                  '   g)z6Show per-document discard/keep toggles before syncing.sync_discardzdocuments-sync-local-changesr   r   rW   
change_tagr   zdocuments-sync-discard-label)titledescriptionzdocuments-sync-keep-labeltoggle_r   zdocuments-sync-discard-alldiscard_allzdocuments-sync-keep-allkeep_allzdocuments-sync-confirmsync_confirmr   r6   Tr   r   position)r   sync_changed_docsr   N)r   ra   rc   rz   speak_lr   rp   r   r   r   _CHANGE_TAG_KEYSr   r	   r   r
   r   list)rM   r   r   r   r    discard_setr   focus_positionentryfoldertagr   r   labelitem_ids                  rO   r   -DocumentBrowsingMixin._show_sync_discard_menup  s5    !!%%dmmR8%))NB78*c,'( 	 	

 !#!E=)F%C,,V[[AE&**%%))#/KLK $$((KK!?
 %((KK!<  x(GLLu9:"!$U+ ". 	X!!$++/KL
 	 	X!!$++/HI
 	 	X!!$++/GH
 	 	X!!$++v6
 	 	*66# 	 	
 (!- -,
$--(rR   c                   #    UR                  S/ 5      nU Vs/ s H  oUS   PM	     nn[        UR                  S/ 5      5      nUS:X  a  U R                  U5        gUS:X  aC  [        U5      n[        U5      US'   X0R                  UR
                  '   U R                  X5        gUS:X  a9  [        5       n/ US'   X0R                  UR
                  '   U R                  X5        gUS:X  a6  U H  nU R                  R                  U5        M      U R                  U5        gUR                  S	5      (       a  US
S nX;   a#  UR                  U5        UR                  S5        O"UR                  U5        UR                  S5        [        U5      US'   X0R                  UR
                  '   U R                  XUS9  ggs  snf 7f)z1Handle discard/keep toggle and sync confirmation.r   rW   r   r   Nr   r   r   r      checkbox_list_off.wavcheckbox_list_on.wav)r   )ra   rz   r   r   r   rc   r   r   discard_document_changesr   r   remove
play_soundadd)	rM   r   r   r    r   dall_foldersr   r   s	            rO   rJ   4DocumentBrowsingMixin._handle_sync_discard_selection  s     $)99-@"#E1=>A'>%))NB786!%%d+=(k*K$($5E.!/4dmm,((<:%%K$&E.!/4dmm,((<>)%88@ &MM$""9--!!"%F$""6* 78' 67$($5E.!/4dmm,((\ )  .9 ?s   GF=FGc                     U R                   R                  5       u  p#U(       a  UR                  S5        OUR                  SUS9  U R                  U5        g)z*Run the actual sync and report the result.zdocuments-sync-successzdocuments-sync-failedreasonN)r   sync_shared_documentsr   r   )rM   r   successmessages       rO   r   DocumentBrowsingMixin._do_sync  sF    ??@@BLL12LL0LA!!$'rR   c                 <  #    U R                   R                  5       nUS:X  a#  UR                  S5        U R                  U5        g[        R
                  " [        R                  5      R                  S5      n[        S-  nUR                  SS9  USU S	3-  nU R                   R                  U5      nUS:  a>  UR                  S
[        U5      [        U5      S9  U R                   R                  5         OUR                  S5        U R                  U5        g7f)z5Export pending shared document changes as a ZIP file.r   zdocuments-export-no-changesNz%Y%m%dT%H%M%SZ_exportsT)exist_okdocument_changes_z.zipzdocuments-export-success)r   path)r   r   r   r   r   nowr   utcstrftime_DOCUMENTS_DIRmkdirexport_pending_changesr   clear_pending_changes)rM   r   r   	timestamp
export_diroutput_pathr   s          rO   r   ,DocumentBrowsingMixin._handle_export_pending  s     @@BALL67%%d+LL.778HI	#j0
$' %6yk#FF66{C19LL*%j%  
 OO113LL67!!$'s   DDc                 <  #    U R                   R                  5       nUS:X  a#  UR                  S5        U R                  U5        gU R                   R	                  5       u  p4U(       a  UR                  SUS9  OUR                  SUS9  U R                  U5        g7f)z:Create a pull request from pending commits (auto_pr mode).r   zdocuments-pr-no-commitsNzdocuments-pr-success)urlzdocuments-pr-failedr   )r   r   r   r   create_pull_request)rM   r   r   r   results        rO   r   'DocumentBrowsingMixin._handle_create_pr  s     @@BALL23%%d+//==?LL/VL<LL.vL>!!$'s   BBc                     U R                   R                  5       nUR                  S[        U5      S9  U R	                  U5        g)zDShow informational message about pending commits (auto_commit mode).zdocuments-pending-commits-infor   N)r   r   r   r   r   )rM   r   r   s      rO   r   *DocumentBrowsingMixin._handle_pending_info  s@    @@B,m$ 	 	
 	!!$'rR   rY   c           	         U R                   R                  X!R                  5      nUSL=(       a    US:g  nU R                  U5      nU R	                  UR
                  5      n/ nU H%  nUR                  [        US   SUS    3S95        M'     U(       d  UR                  S5        U(       aF  U(       d  U(       a8  UR                  [        [        R                  " UR                  S5      S	S95        U(       aw  U(       ap  UR                  [        [        R                  " UR                  S
5      SS95        UR                  [        [        R                  " UR                  S5      SS95        UR                  [        [        R                  " UR                  S5      SS95        UR                  SUS[        R                  S9  SUS.U R                  UR
                  '   g)z)Show the list of documents in a category.NrX   r   doc_rW   r   zdocuments-no-documentszdocuments-rename-categoryrename_categoryzdocuments-category-settingscategory_settingszdocuments-delete-categorydelete_categoryr   r$   Tr   r   rY   )r   get_documents_in_categoryr   rd   rb   rc   r   r	   r   r   ra   r   r
   r   r   )	rM   r   rY   r   is_real_categoryr   is_transcriberr   docs	            rO   rf   *DocumentBrowsingMixin._show_documents_list  s   OO==m[[Y	(4L"9L>>$'--dmm<CLLs7|$s=?Q>R8STU  LL12 8LL%))$++7RS( LL%))$++7TU* LL%))$++7RS( 	X<#3#3DKK#HVTU!*66	 	 	
 **,
$--(rR   c                   #    UR                  S5      nUS:X  a  U R                  U5        gUS:X  a  U R                  X5        gUS:X  a  U R                  X5        gUS:X  a  U R	                  X5        gUR                  S5      (       aa  USS nU R                  UR                  5      (       d  U R                  U5      (       a  U R                  XU5        gU R                  XU5        gg7f)	z$Handle document list menu selection.rY   r   r  r  r  r  r   N)ra   r   _show_rename_category_editbox_show_category_settings_show_delete_category_confirmr   rb   rc   rd   re   _show_document_view)rM   r   r   r    rY   rW   s         rO   r8   6DocumentBrowsingMixin._handle_documents_list_selectionN  s      		/26!%%d+....tC00((=....tC$$V,,&qr*K##DMM22dnnT6J6J++DuE((EB -s   C*C,c                 j   U R                   R                  X!R                  5      nUc  U R                   R                  US5      nUc  UR                  S5        gU R	                  X!R                  5      nUR                  SUUSSS9  SUUR                  S5      S.U R                  UR                  '   g)	z'Show a document in a read-only editbox.Nr   zdocuments-no-contentrV   T)default_value	multiline	read_onlyrY   r   rW   rY   )	r   get_document_contentr   r   r   show_editboxra   r   rc   )rM   r   rW   r    r   r   s         rO   r%  )DocumentBrowsingMixin._show_document_viewf  s    //66{KKP?oo::;MG?LL/0((kkB! 	 	
 $&"YY7,
$--(rR   c           	         [        [        R                  " UR                  S5      SS9[        [        R                  " UR                  S5      SS9[        [        R                  " UR                  S5      SS9[        [        R                  " UR                  S5      SS9/nUR	                  S	US
[
        R                  S9  S	UUR                  S5      S.U R                  UR                  '   g)zAShow the action menu for a document (View, Edit, Settings, Back).zdocuments-viewviewr   zdocuments-update-contentseditzdocuments-settingssettingsr   r%   Tr   rY   r+  N)	r	   r   ra   r   r   r
   r   r   rc   )rM   r   rW   r    r   s        rO   re   ,DocumentBrowsingMixin._show_document_actions  s     !%%dkk3CD !%%dkk3NO !%%dkk3GH ,**4;;?FK
 	#*66	 	 	
 ,&"YY7,
$--(rR   c                   #    UR                  SS5      nUS:X  a!  U R                  XR                  S5      5        gUS:X  a  U R                  XU5        gUS:X  a  U R                  XU5        gUS:X  a  U R	                  XU5        gg7f)	z&Handle document action menu selection.rW   rX   r   rY   r0  r1  r2  N)ra   rf   r%  _show_edit_language_menu_show_document_settingsrM   r   r   r    rW   s        rO   r9   8DocumentBrowsingMixin._handle_document_actions_selection  s      iir26!%%dIIo,FGV#$$T>V#))$UCZ'((EB (s   BBc                    U R                  U5      nU R                  R                  U5      n[        [        R
                  " UR                  S5      SS9/nU(       aq  UR                  S0 5      n[        U5      n[        S UR                  5        5       5      n	[        R
                  " UR                  S[        U	5      [        U5      S9n
O![        R
                  " UR                  S5      n
UR                  [        U
S	S95        U(       a8  UR                  [        [        R
                  " UR                  S
5      SS95        UR                  [        [        R
                  " UR                  S5      SS95        U(       a  UR                  [        [        R
                  " UR                  S5      SS95        UR                  [        [        R
                  " UR                  S5      SS95        U R                  R                  U5      nU[        :X  a8  UR                  [        [        R
                  " UR                  S5      SS95        U(       a|  U R                  R                  U5      nUSL a\  UR                  S0 5      nUR                  SS5      nUR                  S[        [        R
                  " UR                  SUS9SS95        UR                  [        [        R
                  " UR                  S5      SS95        UR!                  SUS["        R$                  S9  SUUR                  S5      S .U R&                  UR(                  '   g!)"z#Show the document settings submenu.zdocuments-update-titlechange_titler   r~   c              3   V   #    U  H  oR                  S S5      (       d  M  Sv   M!     g7f)publicFr   N)ra   ).0r   s     rO   	<genexpr>@DocumentBrowsingMixin._show_document_settings.<locals>.<genexpr>  s      Y,<SRW@Xqq,<s   )	)zdocuments-visibility-count)r<  totalzdocuments-manage-visibilitymanage_visibilityzdocuments-modify-categoriesmodify_categorieszdocuments-add-translationadd_translationzdocuments-remove-translationremove_translationzdocuments-delete-documentdelete_documentzdocuments-promote-to-sharedpromote_to_sharedTbased_onr   rX   zdocuments-based-on-stale)sourcebased_on_stale_noticer   r&   r   rY   r+  N)rd   r   r   r	   r   ra   r   rp   sumvaluesr   r   get_document_scoper   check_based_on_staleinsertr   r
   r   r   rc   )rM   r   rW   r    r   r   r   r~   r@  public_count	vis_labelscopestalerG  source_slugs                  rO   r6  -DocumentBrowsingMixin._show_document_settings  s   >>$'44[A !%%dkk3KL!
 hhy"-GLEYGNN,<YYL$((,<(%j	I %((6STIX91DEFLL%))$++7TU* 	!%%dkk3NO$	
 LL%))$++7UV+ LL%))$++7RS( OO66{CE)))--dkk;XY. OO88EE}88J3&ll626)-- KK6#.
 3
 	X<#3#3DKK#HVTU$*66	 	 	
 -&"YY7,
$--(rR   c                   #    UR                  SS5      nUS:X  a  U R                  XU5        gUS:X  a  U R                  XU5        gUS:X  a  U R                  XU5        gUS:X  a  U R	                  XU5        gUS:X  a  U R                  XU5        gUS:X  a  U R                  XU5        gUS	:X  a  U R                  XU5        gUS
:X  a  U R                  XU5        gUS:X  a  U R                  XU5        gg7f)z+Handle document settings submenu selection.rW   rX   r   r:  rA  rB  rC  rD  rE  rF  rJ  N)
ra   re   _show_document_title_languages_show_document_visibility_show_document_categories_show_add_translation_languages"_show_remove_translation_languages_show_delete_document_confirm_show_promote_confirmr6  r7  s        rO   r:   9DocumentBrowsingMixin._handle_document_settings_selection  s      iir26!''5A^+//5I00**4eD00**4eD..00EJ1133DuM....t%H00&&t%@44((EB 5s   C5C7c                     [         R                  " UR                  S5      n[        USU5        SUUR                  S5      S.U R                  UR
                  '   g)z<Show yes/no confirmation for promoting a document to shared.zdocuments-promote-confirmr.   rY   r+  Nr   ra   r   r   r   rc   )rM   r   rW   r    questions        rO   r]  +DocumentBrowsingMixin._show_promote_confirm*  sP      ##DKK1LM:HE/&"YY7,
$--(rR   c                 >  #    UR                  SS5      nUS:X  a  U R                  R                  U5      nU(       a  UR                  S5        U R                  R	                  U5      nU(       a  UR                  SS5      OSnU R                  R
                  nU[        :X  a)  U R                  R                  XGUR                  SS5        O=U R                  R                  XGUR                  SU S	35        OUR                  S
5        U R                  XU5        g7f)z&Handle promote-to-shared confirmation.rW   rX   yeszdocuments-promoted-to-sharedsource_localer   promotezAdd z (promoted from independent)zdocuments-promote-failedN)ra   r   rF  r   r   r   r   _log_attributionrc   commit_changesr6  )	rM   r   r   r    rW   r  r   locale_coder   s	            rO   rB   -DocumentBrowsingMixin._handle_promote_confirm6  s      iir25 __66{CF;<<<[IAEdhh=488;&OO44#$--!2
 OO22#$--{m+GH
 78$$T>s   DDc                 ^   U R                   R                  U5      nUc  U R                  XU5        gU R                  UR                  5      n[
        R                  " 5       nU Vs/ s H  owU;   d  M
  UPM     nnU(       d$  UR                  S5        U R                  XU5        gUR                  S0 5      n	/ n
U He  n[
        R                  " UR                  SU 35      nU	R                  US5      nU(       a  U SU 3OUnU
R                  [        USU 3S95        Mg     U
R                  [        [
        R                  " UR                  S	5      S	S95        UR                  S
U
S[        R                  S9  S
UUR                  S5      S.U R                  UR                  '   gs  snf )z6Show language selection for changing a document title.Ndocuments-no-permissionr   	language-rX   : lang_r   r   r'   Tr   rY   r+  )r   r   r6  r{   rc   r   get_available_locale_codesr   ra   r   r   r	   r   r
   r   r   )rM   r   rW   r    r   r   	all_codescodetitle_localesr   r   ri  	lang_namecurrent_titledisplays                  rO   rW  4DocumentBrowsingMixin._show_document_title_languagesT  s    44[A<((EB 44T]]C ;;=	*3H)$x7G)HLL23((EB(B'(K$((	+6OPI"JJ{B7M9F2m_5IGLL {m,	 ) 	X<#3#3DKK#HVTU&*66	 	 	
 /&"YY7,
$--(5 Is   &	F*3F*c                 *  #    UR                  SS5      nUS:X  a  U R                  XU5        gUR                  S5      (       a  USS nU R                  R	                  U5      nSnU(       a"  UR                  S0 5      R                  US5      n[
        R                   " UR                  SU 35      n[
        R                   " UR                  S	US
9n	UR                  SU	US9  SUUUR                  S5      S.U R                  UR                  '   gg7f)z+Handle language selection for title change.rW   rX   r   ro     Nr   rm  documents-title-promptlanguagerZ   r(  rY   r   rW   ri  rY   )
ra   r6  r   r   r   r   r   r-  r   rc   )
rM   r   r   r    rW   ri  r   ru  rt  prompts
             rO   r;   ;DocumentBrowsingMixin._handle_document_title_lang_selection  s     iir26!((EB$$W--&qr*K??88EDM $2 6 : :; K$((	+6OPI!%%("F
 (+   1**!&?!;	0Ddmm,# .s   DDrv   c           	      H  #    UR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  5       (       d+  US:X  a  U R                  U5        gU R                  XU5        gUR                  5       nUS:X  a  U R	                  UUUUSUS9  gUS	:X  a  U R	                  UUUUS	US9  gU R
                  R                  XEU5        [        R                   " UR                  S
U 35      nUR                  SUS9  U R                  XU5        g7f)a  Handle title editbox submission.

Supports multiple flows via ``state["flow"]``:
- ``"change_title"`` (default): save title, return to settings.
- ``"add_translation"``: store title, open editor for content entry.
- ``"new_document"``: store title, open editor for content entry.
rW   rX   ri  flowr:  r   N)r  pending_titlerC  rm  zdocuments-title-changedr{  )
ra   stripr   r6  _open_document_editorr   set_document_titler   r   r   )	rM   r   rv   r    rW   ri  r  r   rt  s	            rO   rg   4DocumentBrowsingMixin._handle_document_title_editbox  s.     iir2iir2yy0{{}}~%))$/  ,,TF>!&&## '  &&&&&# '  OO..{O$((	+6OPILL2YLG((EBs   D D"focus_localec                    U R                   R                  U5      nUc  U R                  XU5        gUR                  S0 5      n/ nSnUR	                  5        H  u  p[
        R                  " UR                  SU	 35      nU
R                  SS5      n[
        R                  " UR                  U(       a  SOS5      nUR                  [        U S	U 3S
U	 3S95        X:X  d  M  [        U5      nM     UR                  [        [
        R                  " UR                  S5      SS95        UR                  SUS[        R                  US9  SUUR                  S5      S.U R                  UR                  '   g)z8Show toggle list of document locales with public on/off.Nr~   r   rm  r<  Fzvisibility-publiczvisibility-private ro  r   r   r(   Tr   rY   r+  )r   r   r6  ra   r   r   r   r   r	   rp   r   r
   r   r   rc   )rM   r   rW   r    r  r   doc_localesr   r   ri  loc_infort  r<  statuss                 rO   rX  /DocumentBrowsingMixin._show_document_visibility  sa    44[A<((EBhhy"-%0%6%6%8!K$((	+6OPI\\(E2F!%%F0@TF LL%;ax0{m, *!$U &9 	X<#3#3DKK#HVTU&*66# 	 	
 /&"YY7,
$--(rR   c                 R  #    UR                  SS5      nUS:X  a  U R                  XU5        gUR                  S5      (       Gaa  USS n[        U R                  R                  UR                  5      5      nXV;  aE  [        R                   " UR                  SU 35      nUR                  SUS	9  U R                  XX5S
9  gU R                  R                  U5      nU(       a  UR                  S0 5      R                  U0 5      R                  SS5      n	U R                  R                  XEU	(       + 5        [        R                   " UR                  SU 35      nUR                  SUS	9  U	(       a  UR                  S5        OUR                  S5        U R                  XX5S
9  gg7f)z#Handle visibility toggle selection.rW   rX   r   ro  ry  Nrm  z"documents-visibility-no-permissionr{  )r  r~   r<  Fzdocuments-visibility-changedr   r   )ra   r6  r   rz   r   rq   rc   r   r   r   rX  r   r   set_document_visibilityr   )
rM   r   r   r    rW   ri  r   rt  r   current_publics
             rO   r<   ;DocumentBrowsingMixin._handle_document_visibility_selection  su     iir26!((EB$$W--&qr*K488==dmmLMH*(,,T[[Ik]:ST	AIV..t%.b??88ED!%)R!8!<!<["!M!Q!QRZ\a!b77..@ ),,T[[Ik]:ST	;iP!OO$;<OO$:;**4e*^- .s   F%F'
focus_slugc           	      .   U R                   R                  U5      nUc  U R                  XU5        g[        UR	                  S/ 5      5      nU R                   R                  UR                  5      n[        R                  " UR                  S5      n[        R                  " UR                  S5      n	/ n
SnU HS  nUS   U;   nU(       a  UOU	nU
R                  [        US    SU 3S	US    3S
95        US   U:X  d  MH  [        U
5      nMU     U
R                  [        [        R                  " UR                  S5      SS
95        UR                  SU
S[        R                  US9  SUUR	                  S5      S.U R                  UR                  '   g)z:Show toggle list of all categories with included/excluded.Nr   	option-on
option-offr   r   r   r  r   r   r   r)   Tr   rY   r+  )r   r   r6  rz   ra   r   r   r   r   r	   rp   r   r
   r   r   rc   )rM   r   rW   r    r  r   doc_catsall_catson_label	off_labelr   r   r   includedr  s                  rO   rY  /DocumentBrowsingMixin._show_document_categories%  su    44[A<((EBtxxb12??11$++>##DKK= $$T[[,?	C6{h.H!)XyFLLK=&2c&k]+ 6{j(!$U  	X<#3#3DKK#HVTU&*66# 	 	
 /&"YY7,
$--(rR   c                    #    UR                  SS5      nUS:X  a  U R                  XU5        gUR                  S5      (       a  USS nU R                  R	                  U5      nU(       a  [        UR                  S/ 5      5      nXW;   a#  UR                  U5        UR                  S5        O"UR                  U5        UR                  S	5        U R                  R                  XG5        UR                  S
5        U R                  XX5S9  gg7f)z!Handle category toggle selection.rW   rX   r   r   r   Nr   r   r   zdocuments-categories-updatedr  )ra   r6  r   r   r   r   r   r   r   set_document_categoriesr   rY  )rM   r   r   r    rW   r   r   catss           rO   r=   ;DocumentBrowsingMixin._handle_document_categories_selectionS  s      iir26!((EB$$V,,#D??88EDDHH\267<KK%OO$;<KK%OO$:;77J;<**4e*U -s   DDc                    U R                   R                  U5      nUc  U R                  XU5        gUR                  SS5      nU R	                  X5      nU(       d$  UR                  S5        U R                  XU5        g/ nU HC  n[        R                  " UR                  SU 35      n	UR                  [        U	SU 3S95        ME     UR                  [        [        R                  " UR                  S5      SS95        UR                  S	US
[        R                  S9  S	UUUR                  S5      S.U R                  UR                  '   g)z3Show language selection for removing a translation.Nre  r   rl  rm  ro  r   r   r*   Tr   rY   )r   rW   re  rY   )r   r   r6  ra   r   r   r   r   r   r	   r   r
   r   r   rc   )
rM   r   rW   r    r   re  r  r   ri  rt  s
             rO   r[  8DocumentBrowsingMixin._show_remove_translation_languagesm  s/    44[A<((EB$777JLL23((EB&K$((	+6OPILLyu[M5JKL ' 	X<#3#3DKK#HVTU**66	 	 	
 3&*"YY7	,
$--(rR   c                 8  #    UR                  SS5      nUR                  SS5      nUS:X  a  U R                  XU5        gUR                  S5      (       aC  USS nXe:X  a$  UR                  S	5        U R	                  XU5        gU R                  UUUU5        gg7f)
z5Handle language selection for removing a translation.rW   rX   re  r   r   ro  ry  Nz#documents-remove-translation-source)ra   r6  r   r   r[   _show_remove_translation_confirm)rM   r   r   r    rW   re  ri  s          rO   r>   ?DocumentBrowsingMixin._handle_remove_translation_lang_selection  s      iir2		/486!((EB$$W--&qr*K+BC775Q55	 .s   BBri  c                     [         R                  " UR                  SU 35      n[         R                  " UR                  SUS9n[        USU5        SUUUR                  S5      S.U R                  UR
                  '   g)z4Show yes/no confirmation for removing a translation.rm  z$documents-remove-translation-confirmr{  r+   rY   r~  Nr`  rM   r   rW   ri  r    rt  ra  s          rO   r  6DocumentBrowsingMixin._show_remove_translation_confirm  sx    
 !$$T[[Ik]2KL	##KK2

 	;XF0&&"YY7	,
$--(rR   c                   #    UR                  SS5      nUR                  SS5      nUS:X  Ga%  U R                  R                  UU5      nU(       aH  [        R                   " UR                  SU 35      nUR                  SUUS9  U R                  XU5        gU R                  R                  U5      n[        U=(       a!    UR                  S	0 5      R                  U5      5      n	U	(       a  U R                  UUUU5        gU R                  R                  UU5        [        R                   " UR                  SU 35      nUR                  S
US9  U R                  XU5        g7f)z'Handle remove-translation confirmation.rW   rX   ri  rd  rm  z#documents-remove-translation-lockedr|  rc   Nr   documents-translation-removedr{  )ra   r   get_edit_lock_holderr   r   r   r6  r   bool&_show_remove_translation_title_confirmremove_document_translation)
rM   r   r   r    rW   ri  lock_holderrt  r   	has_titles
             rO   r?   8DocumentBrowsingMixin._handle_remove_translation_confirm  sc     iir2iir25 //>>K (,,KK}-	 9&(  
 ,,TF ??88EDTMdhhx&<&@&@&MNI;;	 OO77 %((K=)I LL/"   	$$T>s   E$E&c                     [         R                  " UR                  SU 35      n[         R                  " UR                  SUS9n[        USU5        SUUUR                  S5      S.U R                  UR
                  '   g)zAAsk whether to also remove the title when removing a translation.rm  zdocuments-remove-title-confirmr{  r,   rY   r~  Nr`  r  s          rO   r  <DocumentBrowsingMixin._show_remove_translation_title_confirm  sx     !$$T[[Ik]2KL	##KK,

 	A8L6&&"YY7	,
$--(rR   c                    #    UR                  SS5      nUR                  SS5      nUS:H  nU R                  R                  UUUS9  [        R                   " UR                  SU 35      nUR                  SUS9  U R                  XU5        g	7f)
z<Handle title removal confirmation after translation removal.rW   rX   ri  rd  )remove_titlerm  r  r{  N)ra   r   r  r   r   r   r6  )rM   r   r   r    rW   ri  r  rt  s           rO   r@   >DocumentBrowsingMixin._handle_remove_translation_title_confirm  s      iir2iir2#u,33% 	4 	

 !$$T[[Ik]2KL	4yI$$T>s   BBc                 J   U R                   R                  U5      nU(       a  [        UR                  S0 5      R	                  5       5      n[        U R
                  R                  UR                  5      5      nXV-  (       d$  UR                  S5        U R                  XU5        gU R                   R                  U5      n[        R                  " UR                  S[        U5      S9n[        USU5        SUUR                  S5      S.U R                  UR                  '   g)	z1Show yes/no confirmation for deleting a document.r~   rl  Nzdocuments-delete-confirmr   r-   rY   r+  )r   r   rz   ra   r   r   rq   rc   r   r6  get_document_locale_countr   r   r   r   r   )	rM   r   rW   r    r   doc_locale_codesr   r   ra  s	            rO   r\  3DocumentBrowsingMixin._show_delete_document_confirm  s     44[A"488Ir#:#?#?#AB488==dmmLMH#.67,,TF99+F##KK&e*

 	8(C-&"YY7,
$--(rR   c                   #    UR                  SS5      nUR                  S5      nUS:X  a  U R                  R                  U5      nU(       al  [        [	        UR                  5       5      5      u  px[        R                   " UR                  SU 35      n	UR                  SU	US9  U R                  XU5        g	U R                  R                  U5        UR                  S5        U R                  X5        g	U R                  XU5        g	7f)
z$Handle delete-document confirmation.rW   rX   rY   rd  rm  zdocuments-delete-lockedr  zdocuments-deletedN)ra   r   get_document_lock_holdersnextiterr   r   r   r   r6  rE  rf   )
rM   r   r   r    rW   rY   active_locksri  r  rt  s
             rO   rA   5DocumentBrowsingMixin._handle_delete_document_confirm1  s      iir2		/25 ??DDL +/\5G5G5I0J+K((,,KK}-	 -&(  
 ,,TF//<01))$>((EBs   D	Dc                    U R                  X5      nU(       d$  UR                  S5        U R                  XU5        gU R                  R	                  U5      nU(       a  UR                  SS5      OSn/ nSnU H_  n	[        R
                  " UR                  SU	 35      n
UR                  [        U
SU	 3S95        XR                  :X  d  MT  [        U5      nMa     UR                  [        [        R
                  " UR                  S	5      S	S95        UR                  S
US[        R                  US9  S
UUR                  S5      S.U R                  UR                  '   g)z5Show language selection for editing document content.rl  Nre  r   r   rm  ro  r   r   r/   Tr   rY   r+  )r   r   re   r   r   ra   r   r   r   r	   rp   r   r
   r   r   rc   )rM   r   rW   r    r~   r   re  r   r   ri  rt  s              rO   r5  .DocumentBrowsingMixin._show_edit_language_menuR  s1   33DFLL23''5A44[A;?$7T"K$((	+6OPILLyu[M5JKLkk)!$U	 #
 	X<#3#3DKK#HVTU%*66# 	 	
 .&"YY7,
$--(rR   c                    #    UR                  SS5      nUS:X  a  U R                  XU5        gUR                  S5      (       a  USS nU R                  UUUUSS9  gg7f)	z&Handle language selection for editing.rW   rX   r   ro  ry  Nr1  )r  )ra   re   r   r  )rM   r   r   r    rW   ri  s         rO   rC   1DocumentBrowsingMixin._handle_edit_lang_selectionr  ss      iir26!''5A$$W--&qr*K&& '  .s   AAc                    U R                   R                  U5      nUc  U R                  XU5        g[        UR	                  S0 5      R                  5       5      nU R                  UR                  5      n[        R                  " 5       nU Vs/ s H  oU;   d  M
  X;  d  M  UPM     n	nU	(       d$  UR                  S5        U R                  XU5        g/ n
SnU	 H_  n[        R                  " UR                  SU 35      nU
R                  [        USU 3S95        XR                  :X  d  MT  [        U
5      nMa     U
R                  [        [        R                  " UR                  S5      SS95        UR                  S	U
S
[         R"                  US9  S	UUR	                  S5      S.U R$                  UR                  '   gs  snf )z5Show language selection for adding a new translation.Nr~   z documents-no-languages-availabler   rm  ro  r   r   r0   Tr   rY   r+  )r   r   r6  rz   ra   r   r{   rc   r   rp  r   r   r   r	   rp   r   r
   r   r   )rM   r   rW   r    r   existing_localesr   rq  rr  	availabler   r   ri  rt  s                 rO   rZ  5DocumentBrowsingMixin._show_add_translation_languages  s    44[A<((EBtxx	26;;=>44T]]C ;;=	&
&T(*:Dt?[DY 	 
 LL;<((EB$K$((	+6OPILLyu[M5JKLkk)!$U	 %
 	X<#3#3DKK#HVTU'*66# 	 	
 0&"YY7,
$--(1
s   	GG#Gc                 ,  #    UR                  SS5      nUS:X  a  U R                  XU5        gUR                  S5      (       a  USS n[        R                   " UR                  SU 35      n[        R                   " UR                  SUS	9nSnU R
                  R                  U5      n	U	(       a"  U	R                  S
0 5      R                  US5      nUR                  SUUS9  SUUUR                  S5      SS.U R                  UR                  '   gg7f)z3Handle language selection for adding a translation.rW   rX   r   ro  ry  Nrm  rz  r{  r   rZ   r}  rY   rC  )r   rW   ri  rY   r  )
ra   r6  r   r   r   r   r   r-  r   rc   )
rM   r   r   r    rW   ri  rt  r  existing_titler   s
             rO   rD   <DocumentBrowsingMixin._handle_add_translation_lang_selection  s     iir26!((EB$$W--&qr*K %((	+6OPI!%%("F
  N??88ED!%(B!7!;!;K!L(,   1**!&?!;)0Ddmm,' .s   DDr  r  c           
         US:X  a  SnSnSn	U=(       d    Un
GOfU R                   R                  U5      nUc  U R                  XU5        gU R                   R                  UUUR                  5      nU(       a<  UR                  SUS9  US:X  a  U R                  XU5        gU R                  XU5        gUS:X  a  SnO%U R                   R                  UU5      =(       d    SnUR                  SS5      nSnSn	X=:w  ag  U R                   R                  UU5      nU(       aD  [        R                  " UR                  S	U 35      n[        R                  " UR                  S
US9n	U=(       d    U R                  UU5      n
[        R                  " UR                  S	U 35      n[        R                  " UR                  SU
US9n[        R                  " UR                  SUS9nSU SU 3nUR                  UUUUU	US9  SUUUR                  S5      UR                  S/ 5      UR                  S[        5      UUUS.	U R                  UR                  '   g)a  Open the document editor dialog.

Args:
    flow: ``"edit"`` for editing existing content,
          ``"add_translation"`` for a new translation,
          ``"new_document"`` for creating a new document.
    pending_title: Title for the new translation/document.
r   rX   Nzdocuments-locked)rc   rC  re  r   rm  zdocuments-source-labelr{  zdocuments-editor-prompt)r   r|  zdocuments-content-label	doc_edit__)	dialog_idr   content_labelsource_contentsource_labelr  document_editorrY   selected_categoriesnew_document_scope)	r   rW   ri  rY   r  r  r  r  r  )r   r   re   acquire_edit_lockrc   r   r6  r,  ra   r   r   r   show_document_editorr   r   )rM   r   rW   ri  r    r  r  r   r  r  r   r   
lock_ownerre  source_langrt  r  r  r  s                      rO   r  +DocumentBrowsingMixin._open_document_editor  s   " >!G!NL!0[E??88ED|++DuE ::J
 /*E,,00EJ  //5I (( OO88##    !HH_d;M!NL+!%!E!E!" ""."2"2#M?3#K $0#3#30!,$L " T%=%=&E !$$T[[Ik]2KL	!!KK%	
 %((KK%
  }Ak];	!!')% 	" 	
 &&&"YY7#(99-BB#G"')),@BS"T*"
,
$--(rR   c           	        #    UR                  S5      S:w  a  gUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  S	S5      nUR                  S	5      U:w  a  gUR                  S
S5      nUS:X  a  US:X  a  UR                  SS5      n	UR                  SS5      n
UR                  S/ 5      nUR                  S[        5      nU R                  R                  UUUU
U	US9  UR	                  S5        U[
        :X  a  U R                  XXV5        gU R                  U5        gU R                  R                  U5      nUS:X  GaA  UGb=  UR                  SS5      n	U R                  R                  U5      [
        :H  nUS:X  a  UR                  SS5      n
U R                  R                  UUU
U	5        U R                  R                  UUUR                  5        [        R                   " UR                  SU 35      nUR	                  SUS9  O\U R                  R                  UUU	UR                  5        [        R                   " UR                  SU 35      nUR	                  SUS9  U(       a  U R                  XXV5        gO'U R                  R                  UUUR                  5        Uc  U R                  U5        gUS:X  a  U R!                  XU5        gU R#                  XU5        g7f)z3Handle save/cancel from the document editor dialog.r   r  NrW   rX   ri  r  r1  r  actioncancelr   saver   r  r  r  )rR  zdocuments-document-createdrC  rm  zdocuments-translation-addedr{  zdocuments-content-saved)ra   r   r   create_documentr   r   _show_commit_message_editboxr   r   rM  add_document_translationrelease_edit_lockrc   r   r   save_document_contentr6  re   )rM   r   rT   r    rW   ri  r  r  r  r   r  r  rR  r   	is_sharedrt  s                   rO    _handle_document_editor_response6DocumentBrowsingMixin._handle_document_editor_responseJ  s     99V 11iir2iir2yy(IIk2.	::k"i/Hh/>! **Y3 %		/2 >&+ii0Er&J#		"68IJ//'! 0  9:L(55; %%d+
 44[AV 0jjB/G22;?<O  (( %		/2 >88!	 11MM
 ),,KK}-	 :YO 55MM	 ),,KK}-	 6K 11{ 	  OO-- <%%d+&&((EB''5As   LL
c                     [         R                  " UR                  S5      nUR                  SUSS9  SUUUS.U R                  UR
                  '   g)a  Show an editbox prompting for a commit/change description.

Displayed after every save to a shared document, regardless of
contribution mode.  The text entered is used differently per mode:
manual stores it in the attribution log; auto modes pass it as
the git commit message.
zdocuments-commit-message-promptr`   T)r)  )r   rW   ri  r  Nr   ra   r   r-  r   rc   )rM   r   rW   ri  r  r  s         rO   r  2DocumentBrowsingMixin._show_commit_message_editbox  sX     !!KK:
 	2FM,&&	,
$--(rR   r[   c                 r   UR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  5       nU R                  R                  nU[        :X  a<  US:X  a  Sn	OUS:X  a  S	n	OSn	U R                  R                  XEUR                  X5        ORU R                  R                  XEUR                  U5      u  pU
(       a  UR                  S
5        OUR                  SUS9  US:X  a  U R                  U5        gUS:X  a  U R                  XU5        gU R                  XU5        g)z8Process the commit message after a shared document save.rW   rX   ri  r  r1  r   createrC  translation_addzdocuments-commit-successzdocuments-commit-failedr   N)ra   r  r   r   r   rg  rc   rh  r   r   r6  re   )rM   r   r[   r    rW   ri  r  r   r   change_typer   errors               rO   rl   ,DocumentBrowsingMixin._handle_commit_message  s    iir2iir2yy(**,00;~%&**/$OO,,$--
 "__;;$--NG 786uE >!%%d+&&((EB''5ArR   c                    [        [        R                  " UR                  S5      SS9[        [        R                  " UR                  S5      SS9[        [        R                  " UR                  S5      SS9/nUR	                  S5        UR                  SUS	[        R                  S
9  SS0U R                  UR                  '   g)z-Show scope selection menu for a new document.zdocuments-scope-sharedsharedr   zdocuments-scope-independentindependentr   zdocuments-scope-promptr1   Tr   r   N)
r	   r   ra   r   r   r   r
   r   r   rc   )rM   r   r   s      rO   r   .DocumentBrowsingMixin._show_new_document_scope  s     !%%dkk3KL !%%dkk3PQ  !%%dkk6:
 	-.%*66	 	 	
 -34M+N$--(rR   c                    #    US:X  a  U R                  U5        gUS:X  a  [        O[        nSUS.U R                  UR                  '   U R                  U5        g7f)z1Handle scope selection for new document creation.r   Nr  r1   )r   r  )r   r   r   r   rc   _show_new_document_categories)rM   r   r   r    rR  s        rO   rE   :DocumentBrowsingMixin._handle_new_document_scope_selection  s[      6!%%d+ , 8>O-"',
$--( 	**40s   AAc           	         U R                   R                  UR                  0 5      nUR                  S[        5      n[	        UR                  S/ 5      5      nU R
                  R                  UR                  5      nU(       d  / US.nU R                  X5        g[        R                  " UR                  S5      n[        R                  " UR                  S5      n	/ n
SnU HS  nUS   U;   nU(       a  UOU	nU
R                  [        US	    S
U 3SUS    3S95        US   U:X  d  MH  [        U
5      nMU     U
R                  [        [        R                  " UR                  S5      SS95        U
R                  [        [        R                  " UR                  S5      SS95        Uc  UR                  S5        UR                  SU
S[        R                   US9  S[#        U5      US.U R                   UR                  '   g)zpShow category toggle list for a new document.

If there are no categories, skips straight to the title editbox.
r  r  )r  r  Nr  r  r   r   r   r  r   r   doner   zdocuments-select-categoriesr2   Tr   r   r  r  )r   ra   rc   r   rz   r   r   r   _show_new_document_slug_editboxr   r   r	   rp   r   r   r
   r   r   )rM   r   r  r    rR  selectedr  	new_stater  r  r   r   r   r  r  s                  rO   r  3DocumentBrowsingMixin._show_new_document_categories%  s    !!%%dmmR8		.0ABuyy!6;<??11$++> ')&+I 00A##DKK= $$T[[,?	C6{h.H!)XyFLLK=&2c&k]+ 6{j(!$U  	X<#3#3DKK#HVTUX<#3#3DKK#HVTU LL67**66# 	 	
 3#'>"',
$--(rR   c                   #    US:X  a  U R                  U5        gUS:X  a  U R                  X5        gUR                  S5      (       a  USS n[        UR	                  S/ 5      5      nXE;   a#  UR                  U5        UR                  S5        O"UR                  U5        UR                  S5        XSS'   XPR                  UR                     S'   U R                  XS	9  gg7f)
z;Handle category toggle/done/back for new document creation.r   r  r   r   Nr  r   r   r  )r   r  r   r   ra   r   r   r   r   rc   r  )rM   r   r   r    r   r  s         rO   rF   ?DocumentBrowsingMixin._handle_new_document_categories_selectionb  s      6!%%d+V#00=$$V,,#DEII&;R@AH% 78% 67+3'(FNdmm,-BC..t.E -s   C!C#c                     [         R                  " UR                  S5      nUR                  SU5        SUR                  S/ 5      UR                  S[        5      S.U R
                  UR                  '   g)z)Show the slug editbox for a new document.z"documents-new-document-slug-promptr\   r  r  r  N)r   ra   r   r-  r   r   rc   )rM   r   r    r  s       rO   r  5DocumentBrowsingMixin._show_new_document_slug_editboxw  sg    !!KK0
 	5v>/#(99-BB#G"')),@BS"T,
$--(rR   c                    UR                  5       (       d  U R                  U5        gUR                  5       R                  5       R                  SS5      n[        R
                  " SU5      (       d#  UR                  S5        U R                  X5        gU R                  R                  U5      b#  UR                  S5        U R                  X5        g[        R                  " UR                  SUR                   35      n[        R                  " UR                  SUS	9nUR                  S
U5        S
UUR                  UR                  S/ 5      UR                  S[        5      SS.U R                  UR                   '   g)z2Handle slug editbox submission for a new document.Nr  r  
[a-z0-9_]+documents-slug-invalidzdocuments-slug-existsrm  rz  r{  rZ   r  r  r   )r   rW   ri  r  r  r  )r  r   lowerreplacere	fullmatchr   r  r   r   r   ra   r   r-  r   r   rc   )rM   r   rv   r    r   rt  r  s          rO   rh   /DocumentBrowsingMixin._handle_new_document_slug  s9   {{}}%%d+{{}""$,,S#6||M400LL1200=??006BLL0100= !$$T[[Idkk]2KL	!!KK$

 	2F;,;;#(99-BB#G"')),@BS"T",
$--(rR   c                     [         R                  " UR                  S5      nUR                  SU5        SS0U R                  UR
                  '   g)z)Show the slug editbox for a new category.z"documents-new-category-slug-promptr]   r   Nr  )rM   r   r  s      rO   r   5DocumentBrowsingMixin._show_new_category_slug_editbox  sK    !!KK0
 	5v>/,
$--(rR   c                   ^ UR                  5       (       d  U R                  U5        gUR                  5       R                  5       R                  SS5      m[        R
                  " ST5      (       d#  UR                  S5        U R                  U5        gU R                  R                  UR                  5      n[        U4S jU 5       5      (       a#  UR                  S5        U R                  U5        g[        R                  " UR                  SUR                   35      n[        R                  " UR                  S	US
9nUR                  SU5        STS.U R                  UR                   '   g)z2Handle slug editbox submission for a new category.Nr  r  r  r  c              3   2   >#    U  H  oS    T:H  v   M     g7f)r   N )r=  r   r   s     rO   r>  BDocumentBrowsingMixin._handle_new_category_slug.<locals>.<genexpr>  s     9js6{d"js   zdocuments-slug-exists-categoryrm  documents-category-name-promptr{  r^   r  )r  r   r  r  r	  r
  r   r   r   r   r   anyr   ra   r-  r   rc   )rM   r   rv   r    r   rt  r  r   s          @rO   ri   /DocumentBrowsingMixin._handle_new_category_slug  s*   {{}}%%d+{{}""$,,S#6||M400LL12006 __33DKK@
9j999LL9:006 $$T[[Idkk]2KL	!!KK,

 	'	

 0!,
$--(rR   c                 &   UR                  SS5      nUR                  5       (       d  U R                  U5        gUR                  5       nU R                  R	                  XEUR
                  5        UR                  S5        U R                  U5        g)z2Handle name editbox submission for a new category.rY   rX   Nzdocuments-category-created)ra   r  r   r   create_categoryr   r   rM   r   rv   r    r   r   s         rO   rj   /DocumentBrowsingMixin._handle_new_category_name  sl    yy"-{{}}%%d+{{}''DKK@12!!$'rR   c                 z   U R                   R                  UR                  5      nSnU H  nUS   U:X  d  M  US   n  O   [        R                  " UR                  SUR                   35      n[        R                  " UR                  SUS9nUR                  SUUS9  SUS	.U R                  UR                  '   g
)z'Show the rename editbox for a category.rX   r   r   rm  r  r{  r_   r}  r  N)r   r   r   r   ra   r-  r   rc   )rM   r   rY   r   current_namer   rt  r  s           rO   r"  3DocumentBrowsingMixin._show_rename_category_editbox  s     __33DKK@
C6{m+"6{ 
 !$$T[[Idkk]2KL	!!KK,

 	%& 	 	
 .*,
$--(rR   c                 &   UR                  SS5      nUR                  5       (       d  U R                  X5        gUR                  5       nU R                  R	                  XEUR
                  5        UR                  S5        U R                  X5        g)z0Handle rename editbox submission for a category.rY   rX   Nzdocuments-category-renamed)ra   r  rf   r   r  r   r   r  s         rO   rk   -DocumentBrowsingMixin._handle_rename_category  sl    yy"-{{}}%%d1{{}''DKK@12!!$-rR   c                    U R                   R                  U5      n[        R                  " UR                  SUR                  SS5       35      n[        R                  " UR                  S5      n[        U SU 3SS9[        [        R                  " UR                  S5      SS9/nUR                  S	US
[        R                  S9  S	US.U R                  UR                  '   g)z-Show category settings submenu (sort method).documents-sort-r  -zdocuments-sort-methodrn  sort_methodr   r   r3   Tr   r  N)r   get_category_sortr   ra   r   r  r	   r   r
   r   r   rc   )rM   r   rY   current_sort
sort_label	sort_textr   s          rO   r#  -DocumentBrowsingMixin._show_category_settings  s     88G!%%KKl223<=>

 !$$KK#
	
 !{"ZL1  !%%dkk6:	
 	$*66	 	 	
 -*,
$--(rR   c                    #    UR                  SS5      nUS:X  a  U R                  X5        gUS:X  a  U R                  X5        gg7f)z+Handle category settings submenu selection.rY   rX   r   r!  N)ra   rf   _show_category_sort_menurM   r   r   r    rY   s        rO   rG   9DocumentBrowsingMixin._handle_category_settings_selection5  sH      		/266!%%d:]*))$> +s   AAc           	         U R                   R                  U5      n/ SQn/ nSnU Hg  n[        R                  " UR                  SUR                  SS5       35      nXs:X  a  SU 3n[        U5      S-   nUR                  [        XS95        Mi     UR                  [        [        R                  " UR                  S5      SS95        UR                  S	US
[        R                  US9  S	US.U R                  UR                  '   g)z$Show the sort method selection menu.alphabeticaldate_createddate_modifiedr   r  r  r   z* r   r   r4   Tr   r  N)r   r"  r   ra   r   r  rp   r   r	   r   r
   r   r   rc   )	rM   r   rY   r#  sort_optionsr   r   r!  r   s	            rO   r(  .DocumentBrowsingMixin._show_category_sort_menu?  s     88GH'K $$!+"5"5c3"?!@AE *UG!$UaLLu=> ( 	X<#3#3DKK#HVTU *66# 	 	
 )*,
$--(rR   c                    #    UR                  SS5      nUS:X  a  U R                  X5        gUS;   a>  U R                  R                  XB5        UR	                  S5        U R                  X5        gg7f)zHandle sort method selection.rY   rX   r   r,  zdocuments-sort-changedN)ra   r#  r   set_category_sortr   r)  s        rO   rH   5DocumentBrowsingMixin._handle_category_sort_selection`  si      		/266!((=NNOO--mJLL12((= Os   A0A2c                     [         R                  " UR                  S5      n[        USU5        SUS.U R                  UR
                  '   g)z1Show yes/no confirmation for deleting a category.z!documents-delete-category-confirmr5   r  Nr`  )rM   r   rY   ra  s       rO   r$  3DocumentBrowsingMixin._show_delete_category_confirml  sI      ##KK/
 	8(C-*,
$--(rR   c                    #    UR                  SS5      nUS:X  a>  U R                  R                  U5        UR                  S5        U R	                  U5        gU R                  X5        g7f)z$Handle delete-category confirmation.rY   rX   rd  zdocuments-category-deletedN)ra   r   r  r   r   rf   r)  s        rO   rI   5DocumentBrowsingMixin._handle_delete_category_confirm|  sZ      		/265 OO++M:LL56%%d+%%d:s   A)A+r  )N)r1  N)Q__name__
__module____qualname____firstlineno____doc____annotations__r   dictr   r   tuplerP   r  rm   rb   rd   rz   r{   r   r   r   r   r7   r   r   r   rJ   r   r   r   r   rf   r8   r%  re   r9   r6  r:   r]  rB   rW  r;   rg   rX  r<   rY  r=   r[  r>   r  r?   r  r@   r\  rA   r5  rC   rZ  rD   r  r  r  rl   r   rE   r  rF   r  rh   r   ri   rj   r"  rk   r#  rG   r(  rH   r$  rI   __static_attributes__r  rR   rO   r   r      s	    
OsDy/!UU/2U;?U	c5j	Un../2Tz.CG.PT.	.hE E E@k @d @AS ASX AR R3 RSWX[S\ REs EC EC E^F ^F ^F@22/22;?2	2F .//1 I     "  $	C
C
 4jC
 *	C

 
C
J--/2-;?-	-^([ (T (( ( (2(K (D (( ( (.
 .
S4Z .
TX .
`CC/2C;?C	C0
 
# 
d 
W[ 
8
; 
S 
QU 
Z^ 
:CC/2C;?C	C$^
K ^
c ^
RV ^
[_ ^
@CC/2C;?C	C2



.1

:>

	

??/2?;??	?<+
+
.1+
:>+
	+
Z/2;?	>.C.C(+.C48.C	.Cr $(,
,
 ,
 	,

 Dj,
 
,
\__/2_;?_	_P "&,
,
 ,
 	,

 $J,
 
,
\VV/2V;?V	V4!
!
.1!
:>!
	!
F/2;?	*

.1
@C
LP
	
&0?0?/20?;?0?	0?d

 
 	

 
 

.??/2?;??	?(

.1
:>
	
8CC/2C;?C	CB
[ 
s 
SW 
\` 
@/2;?	*(
(
.1(
:>(
	(
T  /2 ;? 	 X $(q
q
 q
 	q

 q
 q
 Tzq
 
q
fiBiB)-iB6:iB	iB^

 
 	

 
 

2&B&B'*&B37&B	&BXO[ OT O211/21;?1	1" "&;
;
 $J;
 
	;
zFF/2F;?F	F*
K 
 
QU 
 
k  
#  
d  
W[  
L	
K 	
D 	
 
k  
#  
d  
W[  
D
(k 
(# 
(d 
(W[ 
( 

 
 
	
<
.K 
. 
.D 
.UY 
."
"
 "
 
	"
H??/2?;??	?

 
 
	
B
>
>/2
>;?
>	
>

 
 
	
 
;
;/2
;;?
;	
;rR   r   ) r=  r	  r   r   pathlibr   typingr   users.network_userr   
users.baser	   r
   r   messages.localizationr   server.core.ui.common_flowsr   managerr   r   r   r   r   r   persistence.databaser   __file__parent_MODULE_DIRr  r   r  rR   rO   <module>rM     sf    8 	 '    , = = 1 8  08n##**11{*j!; j!;rR   