<commit_before>describe('Pad modal', function() {
  context('when modal is a "force reconnect" message', function() {
    var MODAL_SELECTOR = '#connectivity .slowcommit';

    beforeEach(function(done) {
      helper.newPad(function() {
        // force a "slowcommit" error
        helper.padChrome$.window.pad.handleChannelStateChange('DISCONNECTED', 'slowcommit');

        // wait for modal to be displayed
        var $modal = helper.padChrome$(MODAL_SELECTOR);
        helper.waitFor(function() {
          return $modal.is(':visible');
        }, 50000).done(done);
      });

      this.timeout(60000);
    });

    it('disables editor', function(done) {
      expect(isEditorDisabled()).to.be(true);

      done();
    });

    context('and user clicks on editor', function() {
      beforeEach(function() {
        clickOnPadInner();
      });

      it('does not close the modal', function(done) {
        var $modal = helper.padChrome$(MODAL_SELECTOR);
        var modalIsVisible = $modal.is(':visible');

        expect(modalIsVisible).to.be(true);

        done();
      });
    });

    context('and user clicks on pad outer', function() {
      beforeEach(function() {
        clickOnPadOuter();
      });

      it('does not close the modal', function(done) {
        var $modal = helper.padChrome$(MODAL_SELECTOR);
        var modalIsVisible = $modal.is(':visible');

        expect(modalIsVisible).to.be(true);

        done();
      });
    });
  });

  // we use "settings" here, but other modals have the same behaviour
  context('when modal is not an error message', function() {
    var MODAL_SELECTOR = '#settings';

    beforeEach(function(done) {
      helper.newPad(function() {
        openSettingsAndWaitForModalToBeVisible(done);
      });

      this.timeout(60000);
    });

    it('does not disable editor', function(done) {
      expect(isEditorDisabled()).to.be(false);
      done();
    });

    context('and user clicks on editor', function() {
      beforeEach(function() {
        clickOnPadInner();
      });

      it('closes the modal', function(done) {
        expect(isModalOpened(MODAL_SELECTOR)).to.be(false);
        done();
      });
    });

    context('and user clicks on pad outer', function() {
      beforeEach(function() {
        clickOnPadOuter();
      });

      it('closes the modal', function(done) {
        expect(isModalOpened(MODAL_SELECTOR)).to.be(false);
        done();
      });
    });
  });

  var clickOnPadInner = function() {
    var $editor = helper.padInner$('#innerdocbody');
    $editor.click();
  }

  var clickOnPadOuter = function() {
    var $lineNumbersColumn = helper.padOuter$('#sidedivinner');
    $lineNumbersColumn.click();
  }

  var openSettingsAndWaitForModalToBeVisible = function(done) {
    helper.padChrome$('.buttonicon-settings').click();

    // wait for modal to be displayed
    var modalSelector = '#settings';
    helper.waitFor(function() {
      return isModalOpened(modalSelector);
    }, 10000).done(done);
  }

  var isEditorDisabled = function() {
    var editorDocument = helper.padOuter$("iframe[name='ace_inner']").get(0).contentDocument;
    var editorBody     = editorDocument.getElementById('innerdocbody');

    var editorIsDisabled = editorBody.contentEditable === 'false' // IE/Safari
                        || editorDocument.designMode === 'off'; // other browsers

    return editorIsDisabled;
  }

  var isModalOpened = function(modalSelector) {
    var $modal = helper.padChrome$(modalSelector);
    return $modal.is(':visible');
  }
});<commit_msg>test: fix pad_modal test with new popups<commit_after>describe('Pad modal', function() {
  context('when modal is a "force reconnect" message', function() {
    var MODAL_SELECTOR = '#connectivity';

    beforeEach(function(done) {
      helper.newPad(function() {
        // force a "slowcommit" error
        helper.padChrome$.window.pad.handleChannelStateChange('DISCONNECTED', 'slowcommit');

        // wait for modal to be displayed
        var $modal = helper.padChrome$(MODAL_SELECTOR);
        helper.waitFor(function() {
          return $modal.hasClass('popup-show');
        }, 50000).done(done);
      });

      this.timeout(60000);
    });

    it('disables editor', function(done) {
      expect(isEditorDisabled()).to.be(true);

      done();
    });

    context('and user clicks on editor', function() {
      beforeEach(function() {
        clickOnPadInner();
      });

      it('does not close the modal', function(done) {
        var $modal = helper.padChrome$(MODAL_SELECTOR);
        var modalIsVisible = $modal.hasClass('popup-show');

        expect(modalIsVisible).to.be(true);

        done();
      });
    });

    context('and user clicks on pad outer', function() {
      beforeEach(function() {
        clickOnPadOuter();
      });

      it('does not close the modal', function(done) {
        var $modal = helper.padChrome$(MODAL_SELECTOR);
        var modalIsVisible = $modal.hasClass('popup-show');

        expect(modalIsVisible).to.be(true);

        done();
      });
    });
  });

  // we use "settings" here, but other modals have the same behaviour
  context('when modal is not an error message', function() {
    var MODAL_SELECTOR = '#settings';

    beforeEach(function(done) {
      helper.newPad(function() {
        openSettingsAndWaitForModalToBeVisible(done);
      });

      this.timeout(60000);
    });

    it('does not disable editor', function(done) {
      expect(isEditorDisabled()).to.be(false);
      done();
    });

    context('and user clicks on editor', function() {
      beforeEach(function() {
        clickOnPadInner();
      });

      it('closes the modal', function(done) {
        expect(isModalOpened(MODAL_SELECTOR)).to.be(false);
        done();
      });
    });

    context('and user clicks on pad outer', function() {
      beforeEach(function() {
        clickOnPadOuter();
      });

      it('closes the modal', function(done) {
        expect(isModalOpened(MODAL_SELECTOR)).to.be(false);
        done();
      });
    });
  });

  var clickOnPadInner = function() {
    var $editor = helper.padInner$('#innerdocbody');
    $editor.click();
  }

  var clickOnPadOuter = function() {
    var $lineNumbersColumn = helper.padOuter$('#sidedivinner');
    $lineNumbersColumn.click();
  }

  var openSettingsAndWaitForModalToBeVisible = function(done) {
    helper.padChrome$('.buttonicon-settings').click();

    // wait for modal to be displayed
    var modalSelector = '#settings';
    helper.waitFor(function() {
      return isModalOpened(modalSelector);
    }, 10000).done(done);
  }

  var isEditorDisabled = function() {
    var editorDocument = helper.padOuter$("iframe[name='ace_inner']").get(0).contentDocument;
    var editorBody     = editorDocument.getElementById('innerdocbody');

    var editorIsDisabled = editorBody.contentEditable === 'false' // IE/Safari
                        || editorDocument.designMode === 'off'; // other browsers

    return editorIsDisabled;
  }

  var isModalOpened = function(modalSelector) {
    var $modal = helper.padChrome$(modalSelector);

    return $modal.hasClass('popup-show');
  }
});
{'fraction_non_alphanumeric': 0.14678899082568808, 'fraction_numerical': 0.005838198498748957, 'mean_word_length': 2.864124597207304, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6626048', 'n_tokens_mistral': 2172, 'n_tokens_neox': 2061, 'n_words': 421}