Separate front and admin js files into two min ones.
authorSteve Sutton <steve@gaslightmedia.com>
Mon, 11 Sep 2017 20:17:01 +0000 (16:17 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Mon, 11 Sep 2017 20:17:01 +0000 (16:17 -0400)
All admin scripts now in adminRegApp.js.
All front scripts now in frontRegApp.js.
Updating enqueue for the scripts.
Update gulp file to only watch for admin folder for the admin file, and
front files for the front one.
Working on the edit class in admin.

css/admin.css
gulpfile.js
js/adminRegApp.js [new file with mode: 0644]
js/frontRegApp.js [new file with mode: 0644]
js/regApp.js [deleted file]
js/views/admin/regClass.js
js/views/admin/regEvent.js
js/views/front/account.js
models/admin/registrations/events.php
models/front/registrations/registration.php
views/admin/registrations/eventEditLevels.html

index 27a9fda..9acebfd 100644 (file)
@@ -41,7 +41,6 @@
 .glm-reg-level h3 {
     font-size: 1rem;
     font-weight: bold;
-    color: white;
     text-decoration: none;
     padding: .3rem;
 }
@@ -51,3 +50,6 @@
     bottom: .3rem;
     right: .5rem;
 }
+.class-edit-form {
+    display: none;
+}
index 5545412..4df9536 100644 (file)
@@ -4,24 +4,42 @@ var gulp    = require('gulp'),
     jshint  = require('gulp-jshint'),
     plumber = require('gulp-plumber');
 
-gulp.task('scripts', function(){
+gulp.task('adminscripts', function(){
     gulp.src([
-            'js/models/front/*.js',
             'js/models/admin/*.js',
-            'js/collections/front/*.js',
             'js/collections/admin/*.js',
-            'js/views/front/*.js',
             'js/views/admin/*.js'
         ])
         .pipe(plumber())
-        .pipe(concat('regApp.js'))
+        .pipe(concat('adminRegApp.js'))
+        .pipe(uglify())
+        .pipe(jshint())
+        .pipe(gulp.dest('js/'));
+});
+gulp.task('frontscripts', function(){
+    gulp.src([
+            'js/models/front/*.js',
+            'js/collections/front/*.js',
+            'js/views/front/*.js'
+        ])
+        .pipe(plumber())
+        .pipe(concat('frontRegApp.js'))
         .pipe(uglify())
         .pipe(jshint())
         .pipe(gulp.dest('js/'));
 });
 
 gulp.task('watch', function(){
-    gulp.watch('js/**/*.js', {awaitWriteFinish: true}, ['scripts']);
+    gulp.watch([
+        'js/model/admin/*.js',
+        'js/collections/admin/*.js',
+        'js/views/admin/*.js',
+    ], {awaitWriteFinish: true}, ['adminscripts']);
+    gulp.watch([
+        'js/model/front/*.js',
+        'js/collections/front/*.js',
+        'js/views/front/*.js',
+    ], {awaitWriteFinish: true}, ['frontscripts']);
 });
 
-gulp.task('default', ['scripts', 'watch']);
+gulp.task('default', ['frontscripts', 'adminscripts', 'watch']);
diff --git a/js/adminRegApp.js b/js/adminRegApp.js
new file mode 100644 (file)
index 0000000..4833fb9
--- /dev/null
@@ -0,0 +1 @@
+app.Models.Admin.RegClass=Backbone.Model.extend({defaults:{id:"new",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}),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.updateCount),this},events:{"click .edit-level":"editLevel"},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.Account({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)},events:{"click .add-reg-level":"addLevel"},addLevel:function(){console.log("Add Level Called");var e=new app.Views.Admin.RegClass({model:new app.Models.Admin.RegClass});this.$el.append(e.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
diff --git a/js/frontRegApp.js b/js/frontRegApp.js
new file mode 100644 (file)
index 0000000..2c314ce
--- /dev/null
@@ -0,0 +1 @@
+app.Models.Front.Account=Backbone.Model.extend({defaults:{id:"",email:"",parent:""},initialize:function(){this.on("invalid",function(e,t){console.log(t)})},validate:function(e,t){if(void 0===e.email||""===e.email)return"Need an email address!"}}),app.Models.Front.AccountDetail=app.Models.Front.Account.extend({defaults:{id:"",fname:"",lname:"",org:"",title:"",addr1:"",addr2:"",city:"",state:"",zip:"",country:"",phone:"",fax:"",email_ok:!1,is_member:!1,date_created:"",email:"",parent:""}}),app.Models.Front.Login=Backbone.Model.extend({defaults:{username:"",password:""},urlRoot:appLoginUrl,initialize:function(){this.on("invalid",function(e,t){console.log(t)})},validate:function(e,t){return void 0===e.username||""===e.username?"Username required!":void 0===e.password||""===e.password?"Password required!":void 0}}),app.Models.Front.RegClass=Backbone.Model.extend({defaults:{reg_event:0,name:"",descr:"",reg_rate_name:"",reg_rate_base_price:"",reg_rate_per_reg:"",reg_count:0},initialize:function(){this.accounts=new app.Collections.Front.Accounts}}),app.Models.Front.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.Front.RegClasses},setClasses:function(e){this.classes.reset(e)}}),app.Models.Front.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.Front.Accounts=Backbone.Collection.extend({model:app.Models.Front.Account,localStorage:new Backbone.LocalStorage("Accounts"),sync:function(e,t,n){console.log("sync called on collection. method: "+e)}}),app.Collections.Front.RegClasses=Backbone.Collection.extend({model:app.Models.Front.RegClass}),app.Collections.Front.RegRates=Backbone.Collection.extend({model:app.Models.Front.RegRate}),app.Views.Front.Account=Backbone.View.extend({tagName:"div",className:"glm-reg-level-registrant clearfix",template:_.template(jQuery("#account-template").html()),events:{"click label":"edit","click .glm-reg-level-registrant-delete":"deleteOne","click .saveRegistrant":"close"},initialize:function(){return this.listenTo(this.model,"change",this.render),this.listenTo(this.model,"destroy",this.remove),this},render:function(){return this.$el.html(this.template(this.model.toJSON())),this.$emailInput=this.$(".editEmail"),this},deleteOne:function(){this.model.destroy()},edit:function(){this.$el.addClass("editing"),this.$emailInput.focus()},close:function(){var e=this.$emailInput.val().trim();e?this.model.save({email:e}):this.clear(),this.$el.removeClass("editing")}}),Backbone.emulateJSON=!0,Backbone.emulateHTTP=!0,app.Views.Front.App=Backbone.View.extend({el:"#regApp",initialize:function(){this.event=new app.Views.Front.RegEvent({model:regEvent}),this.render()},render:function(){return this.$el.append(this.event.render().el),this},events:{"click #appLogin":"login"},login:function(){this.loginView=new app.Views.Front.Login({model:new app.Models.Front.Login}),this.$el.append(this.loginView.render().el),jQuery("#appLogin").hide()}}),app.Views.Front.Login=Backbone.View.extend({tagName:"div",className:"glm-reg-login",template:_.template(jQuery("#eventReg-account-login").html()),events:{"click .accountLogin":"loginToAccount","click #loginCancel":"closeLoginForm"},initialize:function(){return this},closeLoginForm:function(){this.remove(),jQuery("#appLogin").show()},loginToAccount:function(){jQuery.ajax({url:ajaxUrl})},render:function(){return this.$el.html(this.template(this.model.toJSON())),this.$userInput=jQuery(".login"),this.$pwdInput=jQuery(".password"),this}}),app.Views.Front.RegClass=Backbone.View.extend({tagName:"div",className:"glm-reg-level",template:_.template(jQuery("#regClass-template").html()),initialize:function(){return this.listenTo(this.model.accounts,"add",this.addOne),this.listenTo(this.model.accounts,"create",this.addOne),this.listenTo(this.model.accounts,"reset",this.addAll),this.listenTo(this.model,"change",this.updateCount),this},events:{"click .addRegistrant":"newEntry"},newEntry:function(){this.$newEmail=jQuery(".addEmail"),this.$newEmail.val().trim()&&jQuery.ajax({context:this,url:ajaxUrl+"&glm_action=account&option=checkEmail",dataType:"json",data:"email="+this.$newEmail.val().trim()}).done(function(e){!0!==e.validEmail?alert("Must be a valid email address!"):!0!==e.valid?alert("No account matched that email address!"):void 0!==e.id&&void 0!==e.email&&(this.model.accounts.create({id:e.id,email:e.email,parent:this.model.id}),this.model.trigger("change"),this.$newEmail.val(""))}).fail(function(e){console.log("Fail: "+e)})},render:function(){return this.$el.html(this.template(this.model.toJSON())),this},updateCount:function(){return this.model.reg_count=this.model.accounts.length,console.log("Updating Count: "+this.model.reg_count),this.render,this},addOne:function(e){if(e.isValid()){var t=new app.Views.Front.Account({model:e});this.$el.append(t.render().el)}},addAll:function(){jQuery(".glm-reg-level").html("")}}),app.Views.Front.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)},render:function(){this.$el.html(this.template(this.model.toJSON()));var e=regEvent.classes.map(function(e){return new app.Views.Front.RegClass({model:e}).render().el});return this.$el.append(e),this}});
\ No newline at end of file
diff --git a/js/regApp.js b/js/regApp.js
deleted file mode 100644 (file)
index af3b0da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-app.Models.Front.Account=Backbone.Model.extend({defaults:{id:"",email:"",parent:""},initialize:function(){this.on("invalid",function(e,t){console.log(t)})},validate:function(e,t){if(void 0===e.email||""===e.email)return"Need an email address!"}}),app.Models.Front.AccountDetail=app.Models.Front.Account.extend({defaults:{id:"",fname:"",lname:"",org:"",title:"",addr1:"",addr2:"",city:"",state:"",zip:"",country:"",phone:"",fax:"",email_ok:!1,is_member:!1,date_created:"",email:"",parent:""}}),app.Models.Front.Login=Backbone.Model.extend({defaults:{username:"",password:""},urlRoot:appLoginUrl,initialize:function(){this.on("invalid",function(e,t){console.log(t)})},validate:function(e,t){return void 0===e.username||""===e.username?"Username required!":void 0===e.password||""===e.password?"Password required!":void 0}}),app.Models.Front.RegClass=Backbone.Model.extend({defaults:{reg_event:0,name:"",descr:"",reg_rate_name:"",reg_rate_base_price:"",reg_rate_per_reg:"",reg_count:0},initialize:function(){this.accounts=new app.Collections.Front.Accounts}}),app.Models.Front.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.Front.RegClasses},setClasses:function(e){this.classes.reset(e)}}),app.Models.Front.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.Models.Admin.RegClass=Backbone.Model.extend({defaults:{id:"new",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.Front.Accounts=Backbone.Collection.extend({model:app.Models.Front.Account,localStorage:new Backbone.LocalStorage("Accounts"),sync:function(e,t,n){console.log("sync called on collection. method: "+e)}}),app.Collections.Front.RegClasses=Backbone.Collection.extend({model:app.Models.Front.RegClass}),app.Collections.Front.RegRates=Backbone.Collection.extend({model:app.Models.Front.RegRate}),app.Collections.Admin.RegClasses=Backbone.Collection.extend({model:app.Models.Admin.RegClass}),app.Collections.Admin.RegRates=Backbone.Collection.extend({model:app.Models.Admin.RegRate}),app.Views.Front.Account=Backbone.View.extend({tagName:"div",className:"glm-reg-level-registrant clearfix",template:_.template(jQuery("#account-template").html()),events:{"click label":"edit","click .glm-reg-level-registrant-delete":"deleteOne","click .saveRegistrant":"close"},initialize:function(){return this.listenTo(this.model,"change",this.render),this.listenTo(this.model,"destroy",this.remove),this},render:function(){return this.$el.html(this.template(this.model.toJSON())),this.$nameInput=this.$(".editName"),this.$emailInput=this.$(".editEmail"),this},deleteOne:function(){this.model.destroy()},edit:function(){this.$el.addClass("editing"),this.$nameInput.focus()},close:function(){var e=this.$nameInput.val().trim(),t=this.$emailInput.val().trim();e&&t?this.model.save({name:e,email:t}):this.clear(),this.$el.removeClass("editing")}}),Backbone.emulateJSON=!0,Backbone.emulateHTTP=!0,app.Views.Front.App=Backbone.View.extend({el:"#regApp",initialize:function(){this.event=new app.Views.Front.RegEvent({model:regEvent}),this.render()},render:function(){return this.$el.append(this.event.render().el),this},events:{"click #appLogin":"login"},login:function(){this.loginView=new app.Views.Front.Login({model:new app.Models.Front.Login}),this.$el.append(this.loginView.render().el),jQuery("#appLogin").hide()}}),app.Views.Front.Login=Backbone.View.extend({tagName:"div",className:"glm-reg-login",template:_.template(jQuery("#eventReg-account-login").html()),events:{"click .accountLogin":"loginToAccount","click #loginCancel":"closeLoginForm"},initialize:function(){return this},closeLoginForm:function(){this.remove(),jQuery("#appLogin").show()},loginToAccount:function(){jQuery.ajax({url:ajaxUrl})},render:function(){return this.$el.html(this.template(this.model.toJSON())),this.$userInput=jQuery(".login"),this.$pwdInput=jQuery(".password"),this}}),app.Views.Front.RegClass=Backbone.View.extend({tagName:"div",className:"glm-reg-level",template:_.template(jQuery("#regClass-template").html()),initialize:function(){return this.listenTo(this.model.accounts,"add",this.addOne),this.listenTo(this.model.accounts,"create",this.addOne),this.listenTo(this.model.accounts,"reset",this.addAll),this.listenTo(this.model,"change",this.updateCount),this},events:{"click .addRegistrant":"newEntry"},newEntry:function(){this.$newEmail=jQuery(".addEmail"),this.$newEmail.val().trim()&&jQuery.ajax({context:this,url:ajaxUrl+"&glm_action=account&option=checkEmail",dataType:"json",data:"email="+this.$newEmail.val().trim()}).done(function(e){!0!==e.validEmail?alert("Must be a valid email address!"):!0!==e.valid?alert("No account matched that email address!"):void 0!==e.id&&void 0!==e.email&&(this.model.accounts.create({id:e.id,email:e.email,parent:this.model.id}),this.model.trigger("change"),this.$newEmail.val(""))}).fail(function(e){console.log("Fail: "+e)})},render:function(){return this.$el.html(this.template(this.model.toJSON())),this},updateCount:function(){return this.model.reg_count=this.model.accounts.length,console.log("Updating Count: "+this.model.reg_count),this.render,this},addOne:function(e){if(e.isValid()){var t=new app.Views.Front.Account({model:e});this.$el.append(t.render().el)}},addAll:function(){jQuery(".glm-reg-level").html("")}}),app.Views.Front.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)},render:function(){this.$el.html(this.template(this.model.toJSON()));var e=regEvent.classes.map(function(e){return new app.Views.Front.RegClass({model:e}).render().el});return this.$el.append(e),this}}),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.accounts,"add",this.addOne),this.listenTo(this.model.accounts,"create",this.addOne),this.listenTo(this.model.accounts,"reset",this.addAll),this.listenTo(this.model,"change",this.updateCount),this},events:{},render:function(){return this.$el.html(this.template(this.model.toJSON())),this},addOne:function(e){if(e.isValid()){var t=new app.Views.Admin.Account({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)},events:{"click .add-reg-level":"addLevel"},addLevel:function(){console.log("Add Level Called");var e=new app.Views.Admin.RegClass({model:new app.Models.Admin.RegClass});this.$el.append(e.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
index 30eb68d..6abc32a 100644 (file)
@@ -8,17 +8,18 @@ app.Views.Admin.RegClass = Backbone.View.extend({
     template: _.template( jQuery('#regClass-template').html() ),
 
     initialize: function(){
-        this.listenTo( this.model.accounts, 'add', this.addOne );
-        this.listenTo( this.model.accounts, 'create', this.addOne );
-        this.listenTo( this.model.accounts, 'reset', this.addAll );
         this.listenTo( this.model, 'change', this.updateCount );
-        //this.listenTo( this.model, 'change:accounts', this.render );
-
-        //this.model.accounts.fetch();
         return this;
     },
 
     events: {
+        'click .edit-level': 'editLevel'
+    },
+
+    editLevel: function(){
+        this.$('.class-edit-form').show();
+        this.$('.class-label').hide();
+        this.$('.class-name').focus();
     },
 
     render: function(){
index e48fc9c..cfec333 100644 (file)
@@ -20,7 +20,7 @@ app.Views.Admin.RegEvent = Backbone.View.extend({
 
     addLevel: function(){
         console.log( 'Add Level Called' );
-        // create a now view and model and add it to classes and call render.
+        // create a new view and model and add it to classes and call render.
         var view = new app.Views.Admin.RegClass({ model: new app.Models.Admin.RegClass });
         this.$el.append(view.render().el);
     },
index ba7cfc2..335e360 100644 (file)
@@ -22,7 +22,7 @@ app.Views.Front.Account = Backbone.View.extend({
 
     render: function(){
         this.$el.html( this.template( this.model.toJSON() ) );
-        this.$nameInput = this.$('.editName');
+        //this.$nameInput = this.$('.editName');
         this.$emailInput = this.$('.editEmail');
         return this;
     },
@@ -33,15 +33,15 @@ app.Views.Front.Account = Backbone.View.extend({
 
     edit: function(){
         this.$el.addClass( 'editing' );
-        this.$nameInput.focus();
+        this.$emailInput.focus();
     },
 
     close: function(){
-        var regname = this.$nameInput.val().trim();
+        //var regname = this.$nameInput.val().trim();
         var regemail = this.$emailInput.val().trim();
 
-        if ( regname && regemail ) {
-            this.model.save({ name: regname, email: regemail  });
+        if ( regemail ) {
+            this.model.save({ email: regemail  });
         } else {
             this.clear(); // NEW
         }
index 1c17294..8f949cc 100644 (file)
@@ -147,7 +147,7 @@ class GlmMembersAdmin_registrations_events extends GlmDataRegistrationsRegEvent
 // This obviously still needs work - not really updated since stolen from front-end code
                 $scripts = array(
                 'backbone-local' => 'js/lib/backbone.localStorage.min.js',
-                'regApp'         => 'js/regApp.js',
+                'regApp'         => 'js/adminRegApp.js',
                 );
                 foreach ( $scripts as $scriptName => $scriptPath ) {
                     wp_register_script(
index ff4be24..b8878ab 100644 (file)
@@ -39,7 +39,7 @@
     {
         $scripts = array(
             'backbone-local' => 'js/lib/backbone.localStorage.min.js',
-            'regApp'         => 'js/regApp.js',
+            'regApp'         => 'js/frontRegApp.js',
         );
         foreach ( $scripts as $scriptName => $scriptPath ) {
             wp_register_script(
index f2756a0..b9a6883 100644 (file)
@@ -27,7 +27,7 @@
     <script type="text/template" id="regEvent-template">
     <h2><%= event_name %></h2>
     <h3>Registration Levels</h3>
-    <button class="add-reg-level">Add Level</button>
+    <a class="add-reg-level">Add Level</a>
     </script>
     <script type="text/template" id="account-template">
     <a class="glm-reg-level-registrant-delete">Delete</a>
     </div>
     </script>
     <script type="text/template" id="regClass-template">
-    <button>Delete Level</button>
-    <h3><input type="text"
-        name="reg_name_<% if (id) { %><%- id %><% } else { %> new <% } %>"
-        value="<% if (name) { %><%- name %><% } %>"></h3>
-    <p><input type="text"
-        name="reg_descr_<% if (id) { %><%- id %><% } else { %> new <% } %>"
-        size="90"
-        value="<% if (descr) { %><%- descr %><% } %>"></p>
-    <button class="add-reg-rate">Add Reg Rate</button>
+    <a>Delete Level</a>
+    <a class="edit-level">Edit</a>
+    <div class="class-label">
+        <h3><%= name %></h3>
+        <%= descr %>
+    </div>
+    <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>
+    <a class="add-reg-rate">Add Reg Rate</a>
     </script>
     <script type="text/template" id="eventReg-account-login">
     <h4>Login</h4>