-app.Models.Admin.RegClass=Backbone.Model.extend({defaults:{id:null,parent:0,reg_event:0,name:"",descr:""},initialize:function(){this.rates=new app.Collections.Admin.RegRates}}),app.Models.Admin.RegEvent=Backbone.Model.extend({defaults:{name:"regEvent",event_name:"",event_code:"",notify_email:"",attendees_max:0,attendees_max_per_reg:0,reg_hold_minutes:0,cart_hold_days:0,terms:""},initialize:function(){this.classes=new app.Collections.Admin.RegClasses},setClasses:function(e){this.classes.reset(e)}}),app.Models.Admin.RegRate=Backbone.Model.extend({defaults:{reg_event:0,reg_class:"",name:"",start_days:0,end_days:0,base_rate:0,per_registrant:0,registrant_credits:0},initialize:function(){}}),app.Collections.Admin.RegClasses=Backbone.Collection.extend({model:app.Models.Admin.RegClass,localStorage:new Backbone.LocalStorage("Classes")}),app.Collections.Admin.RegRates=Backbone.Collection.extend({model:app.Models.Admin.RegRate}),Backbone.emulateJSON=!0,Backbone.emulateHTTP=!0,app.Views.Admin.EventEditLevels=Backbone.View.extend({el:"#regApp",initialize:function(){this.event=new app.Views.Admin.RegEvent({model:regEvent}),this.render()},render:function(){return this.$el.append(this.event.render().el),this},events:{}}),app.Views.Admin.RegClass=Backbone.View.extend({tagName:"div",className:"glm-reg-level",template:_.template(jQuery("#regClass-template").html()),initialize:function(){return this.listenTo(this.model,"change",this.render),this},events:{"click .edit-level":"editLevel","click .class-update":"update","click .class-add":"add","click .class-cancel":"cancel"},update:function(){console.log("Update called");var e=this.$(".class-name").val().trim(),t=this.$(".class-descr").val().trim();this.model.save({name:e,descr:t}),this.$(".class-edit-form").hide(),this.$(".class-label").show()},add:function(){console.log("Add called");var e=this.$(".class-name").val().trim(),t=this.$(".class-descr").val().trim();this.model.set({name:e,descr:t}),this.model.get("parent").classes.create(this.model)},cancel:function(){console.log("Cancel called"),this.remove()},editLevel:function(){this.$(".class-edit-form").show(),this.$(".class-label").hide(),this.$(".class-name").focus()},render:function(){return this.$el.html(this.template(this.model.toJSON())),this},addOne:function(e){if(e.isValid()){var t=new app.Views.Admin.RegClasses({model:e});this.$el.append(t.render().el)}},addAll:function(){jQuery(".glm-reg-level").html("")}}),app.Views.Admin.RegEvent=Backbone.View.extend({tagName:"div",className:"glm-reg-event-item clearfix",template:_.template(jQuery("#regEvent-template").html()),initialize:function(){this.listenTo(this.model,"change",this.render),this.listenTo(this.model.classes,"add",this.addOne),this.listenTo(this.model.classes,"create",this.addOne),this.listenTo(this.model.classes,"reset",this.addAll)},events:{"click #add-reg-level":"addLevel"},addLevel:function(){console.log("Add Level Called");var e=new app.Models.Admin.RegClass({parent:this.model}),t=new app.Views.Admin.RegClass({model:e});this.$el.append(t.render().el)},render:function(){this.$el.html(this.template(this.model.toJSON()));var e=regEvent.classes.map(function(e){return new app.Views.Admin.RegClass({model:e}).render().el});return this.$el.append(e),this}});
\ No newline at end of file
+app.Models.Admin.RegClass=Backbone.Model.extend({defaults:{id:null,reg_event:0,name:"",descr:""},initialize:function(){this.rates=new app.Collections.Admin.RegRates}}),app.Models.Admin.RegEvent=Backbone.Model.extend({defaults:{name:"regEvent",event_name:"",event_code:"",notify_email:"",attendees_max:0,attendees_max_per_reg:0,reg_hold_minutes:0,cart_hold_days:0,terms:""},initialize:function(){this.classes=new app.Collections.Admin.RegClasses},setClasses:function(e){this.classes.reset(e)}}),app.Models.Admin.RegRate=Backbone.Model.extend({defaults:{reg_event:0,reg_class:"",name:"",start_days:0,end_days:0,base_rate:0,per_registrant:0,registrant_credits:0},initialize:function(){}}),app.Collections.Admin.RegClasses=Backbone.Collection.extend({model:app.Models.Admin.RegClass,localStorage:new Backbone.LocalStorage("Classes")}),app.Collections.Admin.RegRates=Backbone.Collection.extend({model:app.Models.Admin.RegRate}),Backbone.emulateJSON=!0,Backbone.emulateHTTP=!0,app.Views.Admin.EventEditLevels=Backbone.View.extend({el:"#regApp",initialize:function(){this.event=new app.Views.Admin.RegEvent({model:regEvent}),this.render()},render:function(){return this.$el.append(this.event.render().el),this},events:{}}),app.Views.Admin.RegClass=Backbone.View.extend({tagName:"div",className:"glm-reg-level",template:_.template(jQuery("#regClass-template").html()),initialize:function(){return this.listenTo(this.model,"change",this.render),this},events:{"click .class-edit":"editLevel","click .class-update":"update","click .class-add":"add","click .class-cancel":"cancel"},update:function(){console.log("update called");var e=this.$(".class-name").val().trim(),s=this.$(".class-descr").val().trim();this.model.save({name:e,descr:s}),this.$(".class-display-template").show(),this.$(".class-edit-template").hide(),glmSubmitRequired--},s:function(){console.log("add called");var e=this.$(".class-name").val().trim(),s=this.$(".class-descr").val().trim();this.model.set({name:e,descr:s}),this.model.get("parent").classes.create(this.model)},cancel:function(){console.log("cancel called"),this.remove()},editLevel:function(){console.log("editLevel called"),this.$(".class-display-template").hide(),this.$(".class-edit-template").show(),this.$(".class-name").focus(),glmSubmitRequired++},render:function(e){return this.$el.html(this.template(this.model.toJSON())),e&&(console.log("New level created"),this.$(".class-display-template").hide(),this.$(".class-edit-template").show(),this.$(".class-name").focus(),glmSubmitRequired++),this},addOne:function(e){if(console.log("addOne called"),e.isValid()){var s=new app.Views.Admin.RegClasses({model:e});this.$el.append(s.render().el)}},addAll:function(){jQuery(".glm-reg-level").html("")}}),app.Views.Admin.RegEvent=Backbone.View.extend({tagName:"div",className:"glm-reg-event-item clearfix",template:_.template(jQuery("#regEvent-template").html()),initialize:function(){this.listenTo(this.model,"change",this.render),this.listenTo(this.model.classes,"add",this.addOne),this.listenTo(this.model.classes,"create",this.addOne),this.listenTo(this.model.classes,"reset",this.addAll)},events:{"click #class-add":"addLevel"},addLevel:function(){console.log("addLevel Called");var e=new app.Models.Admin.RegClass({parent:this.model}),s=new app.Views.Admin.RegClass({model:e});this.$el.append(s.render(!0).el)},render:function(){this.$el.html(this.template(this.model.toJSON()));var e=regEvent.classes.map(function(e){return new app.Views.Admin.RegClass({model:e}).render().el});return this.$el.append(e),this}});
\ No newline at end of file
},
events: {
- 'click .edit-level': 'editLevel',
- 'click .class-update': 'update',
- 'click .class-add': 'add',
- 'click .class-cancel': 'cancel',
+ 'click .class-edit': 'editLevel',
+ 'click .class-update': 'update',
+ 'click .class-add': 'add',
+ 'click .class-cancel': 'cancel',
},
update: function(){
- console.log('Update called');
+ console.log('update called');
var cName = this.$('.class-name').val().trim();
var cDescr = this.$('.class-descr').val().trim();
this.model.save({ name: cName, descr: cDescr });
- this.$('.class-edit-form').hide();
- this.$('.class-label').show();
- },
+ this.$('.class-display-template').show();
+ this.$('.class-edit-template').hide();
+ glmSubmitRequired--;
+ },s
add: function(){
- console.log('Add called');
+ console.log('add called');
var cName = this.$('.class-name').val().trim();
var cDescr = this.$('.class-descr').val().trim();
this.model.set({ name: cName, descr: cDescr });
},
cancel: function(){
- console.log('Cancel called');
+ console.log('cancel called');
this.remove();
},
editLevel: function(){
- this.$('.class-edit-form').show();
- this.$('.class-label').hide();
+ console.log('editLevel called');
+ this.$('.class-display-template').hide();
+ this.$('.class-edit-template').show();
this.$('.class-name').focus();
+ glmSubmitRequired++;
},
- render: function(){
- this.$el.html( this.template( this.model.toJSON() ) );
+ render: function(addFlag){
+ this.$el.html( this.template( this.model.toJSON() ) );
+ // If addFlag set then we know the call to this is to add a class and not to initialize existing classes
+ if (addFlag) {
+ console.log('New level created');
+ this.$('.class-display-template').hide();
+ this.$('.class-edit-template').show();
+ this.$('.class-name').focus();
+ glmSubmitRequired++;
+ }
return this;
},
addOne: function( item ){
- if ( item.isValid() ) {
+ console.log('addOne called');
+ if ( item.isValid() ) {
var view = new app.Views.Admin.RegClasses({ model: item });
this.$el.append( view.render().el );
}
},
events: {
- 'click #add-reg-level': 'addLevel',
+ 'click #class-add': 'addLevel',
},
addLevel: function(){
- console.log( 'Add Level Called' );
+ console.log( 'addLevel Called' );
// create a new view and model and add it to classes and call render.
// Create the model for the view and add it to the collection
var regClass = new app.Models.Admin.RegClass({ parent: this.model });
//this.model.classes.add( regClass );
var view = new app.Views.Admin.RegClass({ model: regClass });
- this.$el.append(view.render().el);
+ this.$el.append(view.render(true).el);
},
render: function(){
// Make all arrays of arrays non-associative to make Backbone happy
foreach ($regEvent['reg_class'] as $k=>$v) {
- $regEvent['reg_class'][$k]['reg_rate'] = array_values($regEvent['reg_class'][$k]['reg_rate']);
+ if (is_array($regEvent['reg_class'][$k]['reg_rate'])) {
+ $regEvent['reg_class'][$k]['reg_rate'] = array_values($regEvent['reg_class'][$k]['reg_rate']);
+ }
+ }
+ if (is_array($regEvent['reg_class'])) {
+ $regEvent['reg_class'] = array_values($regEvent['reg_class']);
+ }
+ if (is_array($regEvent['reg_time'])) {
+ $regEvent['reg_time'] = array_values($regEvent['reg_time']);
}
- $regEvent['reg_class'] = array_values($regEvent['reg_class']);
- $regEvent['reg_time'] = array_values($regEvent['reg_time']);
// Separate Event, Classes, and Times and send those as separate JSONs
$regClassesJSON = json_encode($regEvent['reg_class']);
<script type="text/template" id="regEvent-template">
<div style="margin-bottom: 1em;">
- <a id="add-reg-level" class="button button-secondary glm-button glm-right">Add a Registration Level</a>
+ <a id="class-add" class="button button-secondary glm-button glm-right">Add a Registration Level</a>
<h3>Event: <%= event_name %></h3>
<p><%= descr %></p>
</div>
</script>
<script type="text/template" id="regClass-template">
- <div class="glm-class-header">
- <div class="glm-right">
- <a class="delete-level button button-secondary glm-button-small">Delete Level</a>
- <a class="edit-level button button-secondary glm-button-small">Edit</a>
- <a class="add-reg-rate button button-secondary glm-button-small">Add Reg Rate</a>
- </div>
- <div class="glm-class-label">
- <h3><%= name %></h3>
+ <div class="class-display-template">
+ <div class="glm-class-header">
+ <div class="glm-right">
+ <a class="class-edit button button-secondary glm-button-small">Edit</a>
+ <a class="class-add-reg-rate button button-secondary glm-button-small">Add Reg Rate</a>
+ <a class="class-delete-level button button-secondary glm-button-small">Delete Level</a>
+ </div>
+ <div class="glm-class-label">
+ <h3><%= name %></h3>
+ </div>
</div>
+ <%= descr %>
</div>
- <%= descr %>
- <div class="class-edit-form">
- <input class="class-name" type="text" name="reg_name_<% if (id) { %><%- id %><% } else { %> new <% } %>" value="<% if (name) { %><%- name %><% } %>">
- <input class="class-descr" type="text" name="reg_descr_<% if (id) { %><%- id %><% } else { %> new <% } %>" size="90" value="<% if (descr) { %><%- descr %><% } %>">
+ <div class="class-edit-template" style="display: none;">
+ <div class="glm-class-header">
+ <div class="glm-right">
+ <a class="class-update button glm-button-small-highlighted">Update</a>
+ <a class="class-add-reg-rate button button-secondary glm-button-small">Add Reg Rate</a>
+ <a class="class-delete-level button button-secondary glm-button-small">Delete Level</a>
+ </div>
+ <div class="glm-class-label" style="padding-bottom: .3em;">
+ Level Name: <input class="class-name" type="text" name="class_name_<% if (id) { %><%- id %><% } else { %> new <% } %>" value="<% if (name) { %><%- name %><% } %>">
+ </div>
+ </div>
+ Description: <input class="class-descr" type="text" name="reg_descr_<% if (id) { %><%- id %><% } else { %> new <% } %>" size="90" value="<% if (descr) { %><%- descr %><% } %>">
</div>
</script>
{* Need to have RegEvent model created *}
{* And create the RegClasses collection *}
<script>
+
+ // Start with submit not required as 0, this is incremented for each edit area opened
+ var glmSubmitRequired = 0;
+
//var $=jQuery.noConflict();
var ajaxUrl = '{$ajaxUrl}?action=glm_members_admin_ajax';
var app = {
Views: { Admin: {} },
};
var regEvent = '';
+
jQuery(function($){
regEvent = new app.Models.Admin.RegEvent;
regEvent.setClasses({$regClassesJSON});
// regEvent.setTimes({$regTimesJSON});
regEvent.set( {$regEventJSON} );
new app.Views.Admin.EventEditLevels();
+
+ // If submit is required and we're laving the page, alert the user
+ $(window).bind('beforeunload', function() {
+ if (glmSubmitRequired) {
+ return true;
+ }
+ });
+
});
</script>