| | @@ -570,10 +570,12 @@ |
| 570 | 570 | }; |
| 571 | 571 | F.fetch.aftersend = function(){ |
| 572 | 572 | if(0===--ajaxState.count){ |
| 573 | 573 | D.removeClass(document.body, 'waiting'); |
| 574 | 574 | D.enable(ajaxState.toDisable); |
| 575 | + delete ajaxState.toDisable /* required to avoid enable/disable |
| 576 | + race condition with the save button */; |
| 575 | 577 | } |
| 576 | 578 | }; |
| 577 | 579 | |
| 578 | 580 | F.onPageLoad(function() { |
| 579 | 581 | document.body.classList.add('wikiedit'); |
| | @@ -582,11 +584,11 @@ |
| 582 | 584 | P.tabs = new fossil.TabManager('#wikiedit-tabs'); |
| 583 | 585 | P.e = { /* various DOM elements we work with... */ |
| 584 | 586 | taEditor: E('#wikiedit-content-editor'), |
| 585 | 587 | // btnCommit: E("#wikiedit-btn-commit"), |
| 586 | 588 | btnReload: E("#wikiedit-tab-content button.wikiedit-content-reload"), |
| 587 | | - btnSave: E("#wikiedit-tab-save button.wikiedit-save"), |
| 589 | + btnSave: E("button.wikiedit-save"), |
| 588 | 590 | selectMimetype: E('select[name=mimetype]'), |
| 589 | 591 | selectFontSizeWrap: E('#select-font-size'), |
| 590 | 592 | // selectDiffWS: E('select[name=diff_ws]'), |
| 591 | 593 | cbAutoPreview: E('#cb-preview-autoupdate > input[type=checkbox]'), |
| 592 | 594 | previewTarget: E('#wikiedit-tab-preview-wrapper'), |
| | @@ -595,11 +597,11 @@ |
| 595 | 597 | tabs:{ |
| 596 | 598 | pageList: E('#wikiedit-tab-pages'), |
| 597 | 599 | content: E('#wikiedit-tab-content'), |
| 598 | 600 | preview: E('#wikiedit-tab-preview'), |
| 599 | 601 | diff: E('#wikiedit-tab-diff'), |
| 600 | | - save: E('#wikiedit-tab-save') |
| 602 | + misc: E('#wikiedit-tab-misc') |
| 601 | 603 | //commit: E('#wikiedit-tab-commit') |
| 602 | 604 | } |
| 603 | 605 | }; |
| 604 | 606 | |
| 605 | 607 | P.tabs.e.container.insertBefore( |
| | @@ -612,10 +614,11 @@ |
| 612 | 614 | P.tabs.addEventListener( |
| 613 | 615 | /* Set up some before-switch-to tab event tasks... */ |
| 614 | 616 | 'before-switch-to', function(ev){ |
| 615 | 617 | if(ev.detail===P.e.tabs.preview){ |
| 616 | 618 | P.baseHrefForWiki(); |
| 619 | + P.updateSaveButton(); |
| 617 | 620 | if(P.previewNeedsUpdate && P.e.cbAutoPreview.checked) P.preview(); |
| 618 | 621 | }else if(ev.detail===P.e.tabs.diff){ |
| 619 | 622 | /* Work around a weird bug where the page gets wider than |
| 620 | 623 | the window when the diff tab is NOT in view and the |
| 621 | 624 | current SBS diff widget is wider than the window. When |
| | @@ -623,19 +626,12 @@ |
| 623 | 626 | the page size again. Weird. Maybe FF-specific. Note that |
| 624 | 627 | this weirdness happens even though P.e.diffTarget's parent |
| 625 | 628 | is hidden (and therefore P.e.diffTarget is also hidden). |
| 626 | 629 | */ |
| 627 | 630 | D.removeClass(P.e.diffTarget, 'hidden'); |
| 628 | | - }else if(ev.detail===P.e.tabs.save){ |
| 629 | | - const btn = P.e.btnSave; |
| 631 | + }else if(ev.detail===P.e.tabs.misc){ |
| 630 | 632 | P.updateAttachmentView(); |
| 631 | | - if(!P.winfo || !P.getStashedWinfo(P.winfo)){ |
| 632 | | - D.disable(btn).innerText = |
| 633 | | - "There are no changes to save"; |
| 634 | | - }else{ |
| 635 | | - D.enable(btn).innerText = "Save changes"; |
| 636 | | - } |
| 637 | 633 | } |
| 638 | 634 | } |
| 639 | 635 | ); |
| 640 | 636 | P.tabs.addEventListener( |
| 641 | 637 | /* Set up auto-refresh of the preview tab... */ |
| | @@ -810,10 +806,24 @@ |
| 810 | 806 | title = title.join(' '); |
| 811 | 807 | f.titleElement.innerText = title; |
| 812 | 808 | f.pageTitleHeader.innerText = title; |
| 813 | 809 | return this; |
| 814 | 810 | }; |
| 811 | + |
| 812 | + /** |
| 813 | + Change the save button depending on whether we have stuff to save |
| 814 | + or not. |
| 815 | + */ |
| 816 | + P.updateSaveButton = function(){ |
| 817 | + if(!this.winfo || !this.getStashedWinfo(this.winfo)){ |
| 818 | + D.disable(this.e.btnSave).innerText = |
| 819 | + "There are no changes to save"; |
| 820 | + }else{ |
| 821 | + D.enable(this.e.btnSave).innerText = "Save changes"; |
| 822 | + } |
| 823 | + return this; |
| 824 | + }; |
| 815 | 825 | |
| 816 | 826 | /** Updates attachment-related links and returns this. */ |
| 817 | 827 | P.updateAttachmentView = function(){ |
| 818 | 828 | const wrapper = P.e.attachmentWrapper; |
| 819 | 829 | D.clearElement(wrapper); |
| 820 | 830 | |