1 line
7.4 KiB
JavaScript
1 line
7.4 KiB
JavaScript
window.wp=window.wp||{};(function(b){var a;a=wp.revisions={model:{},view:{},controller:{}};a.settings=typeof _wpRevisionsSettings==="undefined"?{}:_wpRevisionsSettings;a.model.Slider=Backbone.Model.extend({defaults:{value:0,min:0,max:1,step:1}});a.model.Revision=Backbone.Model.extend({});a.model.Revisions=Backbone.Collection.extend({model:a.model.Revision,comparator:function(c){return c.id},});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(c){c=_.object(c,c);_.each(c,_.bind(function(d){if(this.get(d)){delete c[d]}},this));c=_.toArray(c);return this.load(c)},load:function(c){return this.fetch({data:{compare:c},remove:false})},loadLast:function(c){c=c||1;var d=this.getProximalDiffIds();d=_.last(d,c);if(d.length){return this.loadNew(d)}},loadLastUnloaded:function(c){c=c||1;var d=this.getUnloadedProximalDiffIds();d=_.last(d,c);if(d.length){return this.loadNew(d)}},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){this.revisions=d.revisions;this.diffs=new a.model.Diffs([],{revisions:this.revisions});this.listenTo(this,"change:from change:to",this.updateDiffId)},updateDiffId:function(){var d=this.get("from");var c=this.get("to");this.set("diffId",(d?d.id:"0")+":"+c.id)}});a.view.Frame=wp.Backbone.View.extend({tagName:"div",className:"revisions",template:wp.template("revisions-frame"),initialize:function(){this.model=new a.model.FrameState({},{revisions:this.collection});this.listenTo(this.model,"change:diffId",this.updateDiff);this.views.set(".revisions-control-frame",new a.view.Controls({model:this.model}));if(this.model.revisions.length){var d=this.model.revisions.last(2);var c={to:d.pop()};if(d.length){c.from=d.pop()}this.model.set(c);this.model.diffs.loadLastUnloaded(10).always(_.bind(function(){this.model.diffs.loadAllBy(50)},this))}},render:function(){wp.Backbone.View.prototype.render.apply(this,arguments);b("#wpbody-content .wrap").append(this.el);this.views.ready();return this},updateDiff:function(){this.model.diffs.ensure(this.model.get("diffId"),this).done(function(c){if(this.model.get("diffId")!==c.id){return}this.views.set(".revisions-diff-frame",new a.view.Diff({model:c}))})}});a.view.Controls=wp.Backbone.View.extend({tagName:"div",className:"revisions-controls",initialize:function(){this.views.add(new a.view.Buttons({model:this.model}));this.views.add(new a.view.Slider({model:this.model}));this.views.add(new a.view.Meta({model:this.model}))}});a.view.Meta=wp.Backbone.View.extend({tagName:"div",className:"revisions-meta",template:wp.template("revisions-meta"),initialize:function(){this.listenTo(this.model,"change:diffId",this.updateMeta)},events:{"click #restore-revision":"restoreRevision"},restoreRevision:function(){var c=this.model.get("to").attributes.restoreUrl.replace(/&/g,"&");document.location=c},updateMeta:function(){this.$el.html(this.template(this.model.toJSON()));if(this.model.get("to").attributes.current){b("#restore-revision").prop("disabled",true)}else{b("#restore-revision").prop("disabled",false)}}});a.view.Buttons=wp.Backbone.View.extend({tagName:"div",className:"revisions-buttons",template:wp.template("revisions-controls"),initialize:function(){this.$el.html(this.template())},events:{"click #next":"nextRevision","click #previous":"previousRevision"},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)},nextRevision:function(){var c=this.model.revisions.indexOf(this.model.get("to"));c=isRtl?c-1:c+1;this.gotoModel(c)},previousRevision:function(){var c=this.model.revisions.indexOf(this.model.get("to"));c=isRtl?c+1:c-1;this.gotoModel(c)},ready:function(){this.listenTo(this.model,"change:diffId",this.disabledButtonCheck)},disabledButtonCheck:function(){var g=isRtl?0:this.model.revisions.length-1,c=isRtl?this.model.revisions.length-1:0,d=b(".revisions-next .button"),e=b(".revisions-previous .button"),f=this.model.revisions.indexOf(this.model.get("to"));if(g===f){d.prop("disabled",true)}else{d.prop("disabled",false)}if(c===f){e.prop("disabled",true)}else{e.prop("disabled",false)}},});a.view.Slider=wp.Backbone.View.extend({tagName:"div",className:"wp-slider",initialize:function(){_.bindAll(this,"start","slide","stop");var c=this.model.revisions.length-1;var d=this.model.revisions.indexOf(this.model.revisions.findWhere({id:Number(a.settings.selectedRevision)}));this.settings=new a.model.Slider({max:c,value:d,start:this.start,slide:this.slide,stop:this.stop})},ready:function(){this.$el.slider(this.settings.toJSON());this.settings.on("change",function(d,c){this.$el.slider({value:this.model.revisions.indexOf(this.model.get("to"))})},this);this.slide("",this.settings.attributes);this.listenTo(this.model,"change:diffId",this.diffIdChanged)},diffIdChanged:function(){this.settings.set({value:this.model.revisions.indexOf(this.model.get("to"))})},start:function(c,d){b(window).mousemove(function(h){var g=b(".wp-slider").offset().left,f=g+b(".wp-slider").width();if(h.clientX<g){b(d.handle).css("left",0)}else{if(h.clientX>f){b(d.handle).css("left",f-g)}else{b(d.handle).css("left",h.clientX-g)}}})},slide:function(d,e){var c={to:this.model.revisions.at(isRtl?this.model.revisions.length-e.value-1:e.value)};if(isRtl?this.model.revisions.length-e.value-1:e.value){c.from=this.model.revisions.at(isRtl?this.model.revisions.length-e.value-2:e.value-1)}else{this.model.unset("from",{silent:true})}this.model.set(c)},stop:function(c,d){b(window).unbind("mousemove");this.settings.trigger("change")}});a.view.Diff=wp.Backbone.View.extend({tagName:"div",className:"revisions-diff",template:wp.template("revisions-diff"),prepare:function(){return _.extend({fields:this.model.fields.toJSON()},this.options)}});a.init=function(){a.view.frame=new a.view.Frame({collection:new a.model.Revisions(a.settings.revisionData)}).render()};b(a.init)}(jQuery)); |