Stop Ctrl+F marking code editor as "dirty" (#3857)

Credit to @w20k. Fixes #946. Thanks to @petehalverson for Octodock for making testing these easy!
This commit is contained in:
Denis Denisov 2018-10-11 19:19:41 +03:00 committed by Luke Towers
parent 99bfae4ed0
commit daf3a5c7cd
2 changed files with 17 additions and 12 deletions

View File

@ -30,8 +30,8 @@
this.$el.on('pause.oc.changeMonitor', this.proxy(this.pause))
this.$el.on('resume.oc.changeMonitor', this.proxy(this.resume))
this.$el.on('keyup input paste', 'input, textarea:not(.ace_text-input)', this.proxy(this.onInputChange))
$('input:not([type=hidden]), textarea:not(.ace_text-input)', this.$el).each(function() {
this.$el.on('keyup input paste', 'input:not(.ace_search_field), textarea:not(.ace_text-input)', this.proxy(this.onInputChange))
$('input:not([type=hidden]):not(.ace_search_field), textarea:not(.ace_text-input)', this.$el).each(function() {
$(this).data('oldval.oc.changeMonitor', $(this).val());
})
@ -60,7 +60,7 @@
this.$el.off('unchange.oc.changeMonitor', this.proxy(this.unchange))
this.$el.off('pause.oc.changeMonitor ', this.proxy(this.pause))
this.$el.off('resume.oc.changeMonitor ', this.proxy(this.resume))
this.$el.off('keyup input paste', 'input, textarea:not(.ace_text-input)', this.proxy(this.onInputChange))
this.$el.off('keyup input paste', 'input:not(.ace_search_field), textarea:not(.ace_text-input)', this.proxy(this.onInputChange))
this.$el.off('dispose-control', this.proxy(this.dispose))
if (this.options.windowCloseConfirm)
@ -71,9 +71,12 @@
if (this.paused)
return
if (ev.target.className === 'ace_search_field')
return
if (!inputChange) {
var type = $(ev.target).attr('type')
if (type == 'text' || type == "password")
if (type === 'text' || type === 'password')
return
}
@ -98,7 +101,7 @@
return
var $el = $(ev.target)
if ($el.data('oldval.oc.changeMonitor') != $el.val()) {
if ($el.data('oldval.oc.changeMonitor') !== $el.val()) {
$el.data('oldval.oc.changeMonitor', $el.val());
this.change(ev, true);
@ -131,7 +134,7 @@
return this.each(function () {
var $this = $(this)
var data = $this.data('oc.changeMonitor')
var options = $.extend({}, ChangeMonitor.DEFAULTS, $this.data(), typeof option == 'object' && option)
var options = $.extend({}, ChangeMonitor.DEFAULTS, $this.data(), typeof option === 'object' && option)
if (!data) $this.data('oc.changeMonitor', (data = new ChangeMonitor(this, options)))
})

View File

@ -3979,8 +3979,8 @@ ChangeMonitor.prototype.init=function(){this.$el.on('change',this.proxy(this.cha
this.$el.on('unchange.oc.changeMonitor',this.proxy(this.unchange))
this.$el.on('pause.oc.changeMonitor',this.proxy(this.pause))
this.$el.on('resume.oc.changeMonitor',this.proxy(this.resume))
this.$el.on('keyup input paste','input, textarea:not(.ace_text-input)',this.proxy(this.onInputChange))
$('input:not([type=hidden]), textarea:not(.ace_text-input)',this.$el).each(function(){$(this).data('oldval.oc.changeMonitor',$(this).val());})
this.$el.on('keyup input paste','input:not(.ace_search_field), textarea:not(.ace_text-input)',this.proxy(this.onInputChange))
$('input:not([type=hidden]):not(.ace_search_field), textarea:not(.ace_text-input)',this.$el).each(function(){$(this).data('oldval.oc.changeMonitor',$(this).val());})
if(this.options.windowCloseConfirm)
$(window).on('beforeunload',this.proxy(this.onBeforeUnload))
this.$el.one('dispose-control',this.proxy(this.dispose))
@ -3996,14 +3996,16 @@ ChangeMonitor.prototype.unregisterHandlers=function(){this.$el.off('change',this
this.$el.off('unchange.oc.changeMonitor',this.proxy(this.unchange))
this.$el.off('pause.oc.changeMonitor ',this.proxy(this.pause))
this.$el.off('resume.oc.changeMonitor ',this.proxy(this.resume))
this.$el.off('keyup input paste','input, textarea:not(.ace_text-input)',this.proxy(this.onInputChange))
this.$el.off('keyup input paste','input:not(.ace_search_field), textarea:not(.ace_text-input)',this.proxy(this.onInputChange))
this.$el.off('dispose-control',this.proxy(this.dispose))
if(this.options.windowCloseConfirm)
$(window).off('beforeunload',this.proxy(this.onBeforeUnload))}
ChangeMonitor.prototype.change=function(ev,inputChange){if(this.paused)
return
if(ev.target.className==='ace_search_field')
return
if(!inputChange){var type=$(ev.target).attr('type')
if(type=='text'||type=="password")
if(type==='text'||type==='password')
return}
if(!this.$el.hasClass('oc-data-changed')){this.$el.trigger('changed.oc.changeMonitor')
this.$el.addClass('oc-data-changed')}}
@ -4014,7 +4016,7 @@ this.$el.removeClass('oc-data-changed')}}
ChangeMonitor.prototype.onInputChange=function(ev){if(this.paused)
return
var $el=$(ev.target)
if($el.data('oldval.oc.changeMonitor')!=$el.val()){$el.data('oldval.oc.changeMonitor',$el.val());this.change(ev,true);}}
if($el.data('oldval.oc.changeMonitor')!==$el.val()){$el.data('oldval.oc.changeMonitor',$el.val());this.change(ev,true);}}
ChangeMonitor.prototype.pause=function(){this.paused=true}
ChangeMonitor.prototype.resume=function(){this.paused=false}
ChangeMonitor.prototype.onBeforeUnload=function(){if($.contains(document.documentElement,this.$el.get(0))&&this.$el.hasClass('oc-data-changed'))
@ -4023,7 +4025,7 @@ ChangeMonitor.DEFAULTS={windowCloseConfirm:false}
var old=$.fn.changeMonitor
$.fn.changeMonitor=function(option){return this.each(function(){var $this=$(this)
var data=$this.data('oc.changeMonitor')
var options=$.extend({},ChangeMonitor.DEFAULTS,$this.data(),typeof option=='object'&&option)
var options=$.extend({},ChangeMonitor.DEFAULTS,$this.data(),typeof option==='object'&&option)
if(!data)$this.data('oc.changeMonitor',(data=new ChangeMonitor(this,options)))})}
$.fn.changeMonitor.Constructor=ChangeMonitor
$.fn.changeMonitor.noConflict=function(){$.fn.changeMonitor=old