Wordpress/wp-admin/js/revisions.min.js
2013-07-09 20:58:49 +00:00

1 line
14 KiB
JavaScript

window.wp=window.wp||{};(function(b){var a;a=wp.revisions={model:{},view:{},controller:{}};a.settings=typeof _wpRevisionsSettings==="undefined"?{}:_wpRevisionsSettings;a.debug=true;a.log=function(){if(a.debug){console.log.apply(console,arguments)}};if(a.settings.selectedRevision){a.settings.selectedRevision=parseInt(a.settings.selectedRevision,10)}a.model.Slider=Backbone.Model.extend({defaults:{value:0,min:0,max:1,step:1}});a.model.Tooltip=Backbone.Model.extend({defaults:{revision:null,position:0}});a.model.Revision=Backbone.Model.extend({});a.model.Revisions=Backbone.Collection.extend({model:a.model.Revision,comparator:function(e,c){var g=e.get("dateUnix");var d=c.get("dateUnix");var f=(g>d)-(g<d);if(f===0&&e.id!=c.id){f=e.id<c.id?-1:1}return f},next:function(d){var c=this.indexOf(d);if(c!==-1&&c!==this.length-1){return this.at(c+1)}},prev:function(d){var c=this.indexOf(d);if(c!==-1&&c!==0){return this.at(c-1)}}});a.model.Field=Backbone.Model.extend({});a.model.Fields=Backbone.Collection.extend({model:a.model.Field});a.model.Diff=Backbone.Model.extend({initialize:function(d,e){var c=this.get("fields");this.unset("fields");this.fields=new a.model.Fields(c)}});a.model.Diffs=Backbone.Collection.extend({initialize:function(d,c){this.revisions=c.revisions;this.requests={}},model:a.model.Diff,ensure:function(h,d){var g=this.get(h);var f=this.requests[h];var c=b.Deferred();var e={};if(g){c.resolveWith(d,[g])}else{this.trigger("ensure:load",e);_.each(e,_.bind(function(i){if(this.requests[i]){delete e[i]}},this));if(!f){e[h]=true;f=this.load(_.keys(e))}f.done(_.bind(function(){c.resolveWith(d,[this.get(h)])},this))}return c.promise()},loadNew:function(d){var c=this;_.each(d,function(f,e){if(c.get(f)){delete d[e]}});wp.revisions.log("loadNew",d);if(d.length){return this.load(d)}else{return b.Deferred().resolve().promise()}},load:function(c){wp.revisions.log("load",c);return this.fetch({data:{compare:c},remove:false})},loadLast:function(c){var d;c=c||1;d=_.last(this.getProximalDiffIds(),c);if(d.length){return this.loadNew(d)}else{return b.Deferred().resolve().promise()}},loadLastUnloaded:function(c){var d;c=c||1;d=_.last(this.getUnloadedProximalDiffIds(),c);if(d.length){return this.loadNew(d)}else{return b.Deferred().resolve().promise()}},getProximalDiffIds:function(){var d=0,c=[];this.revisions.each(_.bind(function(e){c.push(d+":"+e.id);d=e.id},this));return c},getUnloadedProximalDiffIds:function(){var c=this.getProximalDiffIds();c=_.object(c,c);_.each(c,_.bind(function(d){if(this.get(d)){delete c[d]}},this));return _.toArray(c)},loadAllBy:function(d){d=d||20;var c=this.getUnloadedProximalDiffIds();if(c.length){return this.loadLastUnloaded(d).always(_.bind(function(){this.loadAllBy(d)},this))}},sync:function(g,e,d){if("read"===g){d=d||{};d.context=this;d.data=_.extend(d.data||{},{action:"get-revision-diffs",post_id:a.settings.postId});var c=wp.xhr.send(d);var f=this.requests;if(d.data.compare){_.each(d.data.compare,function(h){f[h]=c})}c.always(function(){if(d.data.compare){_.each(d.data.compare,function(h){delete f[h]})}});return c}else{return Backbone.Model.prototype.sync.apply(this,arguments)}}});a.model.FrameState=Backbone.Model.extend({initialize:function(c,d){var e={};this._debouncedEnsureDiff=_.debounce(this._ensureDiff,200);this.revisions=d.revisions;this.diffs=new a.model.Diffs([],{revisions:this.revisions});e.to=this.revisions.get(a.settings.selectedRevision);e.from=this.revisions.prev(e.to);this.set(e);this.router=new a.Router({model:this});Backbone.history.start();this.listenTo(this,"change:from",this.changeRevisionHandler);this.listenTo(this,"change:to",this.changeRevisionHandler);this.listenTo(this,"update:revisions",this.loadSurrounding);this.listenTo(this,"change:compareTwoMode",this.changedMode);this.updateDiff({immediate:true})},changedMode:function(){this.loadSurrounding(this.get("from"),this.get("to"))},loadSurrounding:function(d,c){if(this.get("compareTwoMode")){}else{if(this.revisions.length){this.diffs.loadLastUnloaded(10).always(_.bind(function(){this.diffs.loadAllBy(50)},this))}}},diff:function(){return this.diffs.get(this._diffId)},updateDiff:function(c){var g,f,d,e;c=c||{};g=this.get("from");f=this.get("to");d=(g?g.id:0)+":"+f.id;if(this._diffId===d){return}this._diffId=d;this.trigger("update:revisions",g,f);e=this.diffs.get(d);if(e){this.trigger("update:diff",e)}else{if(c.immediate){this._ensureDiff()}else{this._debouncedEnsureDiff()}}},changeRevisionHandler:function(d,e,c){this.updateDiff()},_ensureDiff:function(){this.diffs.ensure(this._diffId,this).done(function(c){if(this._diffId===c.id){this.trigger("update:diff",c)}})}});a.view.Frame=wp.Backbone.View.extend({className:"revisions",template:wp.template("revisions-frame"),initialize:function(){this.model=new a.model.FrameState({},{revisions:this.collection});this.listenTo(this.model,"update:diff",this.renderDiff);this.listenTo(this.model,"change:compareTwoMode",this.updateCompareTwoMode);this.views.set(".revisions-control-frame",new a.view.Controls({model:this.model}))},render:function(){wp.Backbone.View.prototype.render.apply(this,arguments);b("#wpbody-content .wrap").append(this.el);this.views.ready();return this},renderDiff:function(c){this.views.set(".revisions-diff-frame",new a.view.Diff({model:c}))},updateCompareTwoMode:function(){this.$el.toggleClass("comparing-two-revisions",this.model.get("compareTwoMode"))}});a.view.Controls=wp.Backbone.View.extend({className:"revisions-controls",initialize:function(){this.views.add(new a.view.Buttons({model:this.model}));this.views.add(new a.view.Checkbox({model:this.model}));var c=new a.view.Tooltip({model:new a.model.Tooltip()});this.views.add(c);this.views.add(new a.view.Tickmarks({model:this.model}));this.views.add(new a.view.Slider({model:this.model,tooltip:c}));this.views.add(new a.view.Meta({model:this.model}))}});a.view.Tickmarks=wp.Backbone.View.extend({className:"revisions-tickmarks",numberOfTickmarksSet:function(){var e=this.model.revisions.length-1,g=b(".wp-slider").parent().width()*0.7,d=Math.floor(g/e),c=((d+1)*e)+1,f;b(".wp-slider").css("width",c);this.$el.css("width",c);for(f=0;f<=e;f++){this.$el.append('<div style="left:'+(d*f)+'px;"></div>')}},ready:function(){var c=this;c.numberOfTickmarksSet();b(window).on("resize",_.debounce(function(){c.$el.html("");c.numberOfTickmarksSet()},50))}});a.view.Meta=wp.Backbone.View.extend({className:"revisions-meta",template:wp.template("revisions-meta"),events:{"click #restore-revision":"restoreRevision"},initialize:function(){this.listenTo(this.model,"update:revisions",this.updateMeta)},restoreRevision:function(){var c=this.model.get("to").attributes.restoreUrl.replace(/&amp;/g,"&");document.location=c},updateMeta:function(d,c){this.$el.html(this.template(this.model.toJSON()));b("#restore-revision").prop("disabled",c.attributes.current)}});a.view.Checkbox=wp.Backbone.View.extend({className:"revisions-checkbox",template:wp.template("revisions-checkbox"),events:{"click .compare-two-revisions":"compareTwoToggle"},initialize:function(){this.$el.html(this.template())},updateCompareTwoMode:function(){if(this.model.get("compareTwoMode")){b(".compare-two-revisions").prop("checked",true);b(".wp-slider a.ui-slider-handle").first().addClass(isRtl?"right-handle":"left-handle");b(".wp-slider a.ui-slider-handle").last().addClass(isRtl?"left-handle":"right-handle")}else{b(".compare-two-revisions").prop("checked",false);b(".wp-slider a.ui-slider-handle").removeClass("left-handle").removeClass("right-handle")}},compareTwoToggle:function(c){this.model.set({compareTwoMode:b(".compare-two-revisions").prop("checked")});this.model.router.updateUrl()},ready:function(){if(this.model.revisions.length<3){b(".revision-toggle-compare-mode").hide()}this.listenTo(this.model,"change:compareTwoMode",this.updateCompareTwoMode);this.updateCompareTwoMode()}});a.view.Tooltip=wp.Backbone.View.extend({className:"revisions-tooltip",template:wp.template("revisions-tooltip"),initialize:function(){this.listenTo(this.model,"change",this.render)},ready:function(){this.$el.addClass("hidden")},show:function(){this.$el.removeClass("hidden")},hide:function(){this.$el.addClass("hidden")},render:function(){if(null===this.model.get("revision")){return}this.$el.html(this.template(this.model.get("revision").toJSON()));var c=b(".revisions-buttons").offset().left;this.$el.css("left",this.model.get("position")-c)}});a.view.Buttons=wp.Backbone.View.extend({className:"revisions-buttons",template:wp.template("revisions-buttons"),events:{"click #next":"nextRevision","click #previous":"previousRevision"},initialize:function(){this.$el.html(this.template())},ready:function(){this.listenTo(this.model,"update:revisions",this.disabledButtonCheck)},gotoModel:function(d){var c={to:this.model.revisions.at(isRtl?this.model.revisions.length-d-1:d)};if(isRtl?this.model.revisions.length-d-1:d){c.from=this.model.revisions.at(isRtl?this.model.revisions.length-d-2:d-1)}else{this.model.unset("from",{silent:true})}this.model.set(c);this.model.router.updateUrl()},nextRevision:function(){var c=isRtl?this.model.revisions.length-this.model.revisions.indexOf(this.model.get("to"))-1:this.model.revisions.indexOf(this.model.get("to"));c=isRtl?c-1:c+1;this.gotoModel(c)},previousRevision:function(){var c=isRtl?this.model.revisions.length-this.model.revisions.indexOf(this.model.get("to"))-1:this.model.revisions.indexOf(this.model.get("to"));c=isRtl?c+1:c-1;this.gotoModel(c)},disabledButtonCheck:function(){var g=this.model.revisions.length-1,c=0,d=b(".revisions-next .button"),e=b(".revisions-previous .button"),f=this.model.revisions.indexOf(this.model.get("to"));d.prop("disabled",(g===f));e.prop("disabled",(c===f))}});a.view.Slider=wp.Backbone.View.extend({className:"wp-slider",events:{mousemove:"mousemove",mouseleave:"mouseleave",mouseenter:"mouseenter"},initialize:function(c){_.bindAll(this,"start","slide","stop");this.tooltip=c.tooltip;var d=this.model.revisions.length-1;var e=this.model.revisions.indexOf(this.model.revisions.findWhere({id:a.settings.selectedRevision}));this.settings=new a.model.Slider({max:d,value:e,start:this.start,slide:this.slide,stop:this.stop})},ready:function(){this.settings.attributes.value=this.model.revisions.indexOf(this.model.revisions.findWhere({id:a.settings.selectedRevision}));this.updateSliderSettings();this.slide("",this.settings.attributes);this.$el.slider(this.settings.toJSON());this.listenTo(this.model,"change:compareTwoMode",this.updateSliderSettings);this.settings.on("change",function(){this.updateSliderSettings()},this);this.listenTo(this.model,"update:revisions",this.updateRevisions)},mousemove:function(k){var f=this.model.revisions.length-1,h=Math.ceil(this.$el.offset().left),g=this.$el.width(),c=Math.floor(g/f),j=k.clientX-h,d=Math.floor((j+c/2)/c),i=h+2+d*c;if(isRtl){d=this.model.revisions.length-d-1}if(d<0){d=0}else{if(d>=this.model.revisions.length){d=this.model.revisions.length-1}}this.tooltip.model.set("revision",this.model.revisions.at(d));this.tooltip.model.set("position",i)},mouseleave:function(c){this.tooltip.hide()},mouseenter:function(c){this.tooltip.show()},updateSliderSettings:function(){if(this.model.get("compareTwoMode")){var d,c;if("undefined"==typeof this.model.get("from")){if(isRtl){d=this.model.revisions.length-this.model.revisions.indexOf(this.model.get("to"))-2;c=d+1}else{d=this.model.revisions.indexOf(this.model.get("to"));c=d+1}}else{d=isRtl?this.model.revisions.length-this.model.revisions.indexOf(this.model.get("to"))-1:this.model.revisions.indexOf(this.model.get("from")),c=isRtl?this.model.revisions.length-this.model.revisions.indexOf(this.model.get("from"))-1:this.model.revisions.indexOf(this.model.get("to"))}this.$el.slider({values:[d,c],value:null,range:true})}else{this.$el.slider({value:isRtl?this.model.revisions.length-this.model.revisions.indexOf(this.model.get("to"))-1:this.model.revisions.indexOf(this.model.get("to")),values:null,range:false})}if(this.model.get("compareTwoMode")){b("a.ui-slider-handle",this.$el).first().addClass(isRtl?"right-handle":"left-handle").removeClass(isRtl?"left-handle":"right-handle");b("a.ui-slider-handle",this.$el).last().addClass(isRtl?"left-handle":"right-handle").removeClass(isRtl?"right-handle":"left-handle")}},updateRevisions:function(d,c){if(this.model.get("compareTwoMode")){this.settings.set({values:[this.model.revisions.indexOf(d),this.model.revisions.indexOf(c)]})}else{this.settings.set({value:this.model.revisions.indexOf(c)})}},getSliderPosition:function(c){return isRtl?this.model.revisions.length-c.value-1:c.value},start:function(c,d){b(window).on("mousemove",{view:this},function(i){var j=i.data.view,n=j.$el.offset().left,f=n,g=n+j.$el.width(),l=g,m=0,o=g-f;if(j.model.get("compareTwoMode")){var k=b(d.handle).parent().find(".right-handle"),h=b(d.handle).parent().find(".left-handle");if(b(d.handle).hasClass("left-handle")){if(isRtl){n=k.offset().left+k.width();m=n-f}else{l=k.offset().left;o=l-f}}else{if(isRtl){l=h.offset().left;o=l-f}else{n=h.offset().left+h.width();m=n-f}}}if(i.clientX<n){b(d.handle).css("left",m)}else{if(i.clientX>l){b(d.handle).css("left",o)}else{b(d.handle).css("left",i.clientX-f)}}})},slide:function(e,f){var d;if("undefined"!==typeof f.values&&this.model.get("compareTwoMode")){if(f.values[1]===f.values[0]){return false}d={to:this.model.revisions.at(isRtl?this.model.revisions.length-f.values[0]-1:f.values[1]),from:this.model.revisions.at(isRtl?this.model.revisions.length-f.values[1]-1:f.values[0])}}else{var c=this.getSliderPosition(f);d={to:this.model.revisions.at(c)};if(c){d.from=this.model.revisions.at(c-1)}else{this.model.unset("from",{silent:true})}}this.model.set(d)},stop:function(c,d){b(window).off("mousemove");this.settings.trigger("change")}});a.view.Diff=wp.Backbone.View.extend({className:"revisions-diff",template:wp.template("revisions-diff"),prepare:function(){return _.extend({fields:this.model.fields.toJSON()},this.options)}});a.Router=Backbone.Router.extend({initialize:function(c){this.model=c.model;this.listenTo(this.model,"update:diff",_.debounce(this.updateUrl,250))},routes:{"revision/from/:from/to/:to/handles/:handles":"gotoRevisionId"},updateUrl:function(){var e=this.model.has("from")?this.model.get("from").id:0;var d=this.model.get("to").id;var c=this.model.get("compareTwoMode")?"2":"1";this.navigate("/revision/from/"+e+"/to/"+d+"/handles/"+c)},gotoRevisionId:function(g,f,e){g=parseInt(g,10);f=parseInt(f,10);this.model.set({compareTwoMode:("2"===e)});if("undefined"!==typeof this.model){var d=this.model.revisions.findWhere({id:f}),c=this.model.revisions.findWhere({id:g});this.model.set({to:d,from:c})}a.settings.selectedRevision=f}});a.init=function(){a.view.frame=new a.view.Frame({collection:new a.model.Revisions(a.settings.revisionData)}).render()};b(a.init)}(jQuery));