aboutsummaryrefslogtreecommitdiffstats
path: root/www/js/views
diff options
context:
space:
mode:
Diffstat (limited to 'www/js/views')
-rw-r--r--www/js/views/around.js409
-rw-r--r--www/js/views/details.js149
-rw-r--r--www/js/views/details_extra.js108
-rw-r--r--www/js/views/existing.js46
-rw-r--r--www/js/views/fms.js103
-rw-r--r--www/js/views/home.js40
-rw-r--r--www/js/views/locator.js64
-rw-r--r--www/js/views/login.js108
-rw-r--r--www/js/views/offline.js140
-rw-r--r--www/js/views/photo.js87
-rw-r--r--www/js/views/reports.js61
-rw-r--r--www/js/views/save_offline.js31
-rw-r--r--www/js/views/search.js81
-rw-r--r--www/js/views/sent.js36
-rw-r--r--www/js/views/submit.js405
15 files changed, 0 insertions, 1868 deletions
diff --git a/www/js/views/around.js b/www/js/views/around.js
deleted file mode 100644
index c2047d8..0000000
--- a/www/js/views/around.js
+++ /dev/null
@@ -1,409 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- AroundView: FMS.LocatorView.extend({
- template: 'around',
- id: 'around-page',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick #locate_cancel': 'goSearch',
- 'vclick #login-options': 'goLogin',
- 'vclick #view-my-reports': 'goReports',
- 'vclick #search': 'goSearch',
- 'vclick #relocate': 'centerMapOnPosition',
- 'vclick #cancel': 'onClickCancel',
- 'vclick #confirm': 'onClickReport',
- 'vclick #confirm-map': 'onClickReport',
- 'vclick #mark-here': 'onClickMark',
- 'vclick #reposition': 'onClickReposition',
- 'vclick a.address': 'goAddress',
- 'submit #postcodeForm': 'search'
- },
-
- render: function(){
- if ( !this.template ) {
- console.log('no template to render');
- return;
- }
- template = _.template( tpl.get( this.template ) );
- if ( this.model ) {
- this.$el.html(template({ model: this.model.toJSON(), user: FMS.currentUser.toJSON() }));
- } else {
- this.$el.html(template());
- }
- this.afterRender();
- return this;
- },
-
- beforeDisplay: function() {
- $('a[data-role="button"]').hide();
- $('#login-options').hide();
- $('#postcodeForm').hide();
- $('#cancel').hide();
- this.fixPageHeight();
- },
-
- afterDisplay: function() {
- if ( FMS.isOffline ) {
- this.navigate( 'offline' );
- } else if ( this.model && this.model.get('lat') ) {
- var modelInfo = { coordinates: { latitude: this.model.get('lat'), longitude: this.model.get('lon') } };
- this.setMapPosition(modelInfo);
- this.displayButtons(true);
- this.setReportPosition({ lat: this.model.get('lat'), lon: this.model.get('lon') }, true);
- this.listenTo(FMS.locator, 'gps_current_position', this.positionUpdate);
- FMS.locator.trackPosition();
- } else if ( FMS.currentPosition ) {
- var info = { coordinates: FMS.currentPosition };
- FMS.currentPosition = null;
- if ( !fixmystreet.map ) {
- this.setMapPosition(info);
- }
- this.displayButtons(false);
- this.listenTo(FMS.locator, 'gps_current_position', this.positionUpdate);
- FMS.locator.trackPosition();
- } else {
- this.locate();
- this.displayButtons(false);
- }
- },
-
- setMapPosition: function( info ) {
- var coords = info.coordinates;
- fixmystreet.latitude = coords.latitude;
- fixmystreet.longitude = coords.longitude;
-
- if ( !fixmystreet.map ) {
- show_map();
- } else {
- FMS.currentPosition = coords;
- var centre = this.projectCoords( coords );
- fixmystreet.map.panTo(centre);
- }
- },
-
- gotLocation: function( info ) {
- $('#relocate').show();
- this.finishedLocating();
-
- this.listenTo(FMS.locator, 'gps_current_position', this.positionUpdate);
-
- this.located = true;
- this.locateCount = 21;
-
- this.setMapPosition( info );
-
- FMS.locator.trackPosition();
- // FIXME: not sure why I need to do this
- fixmystreet.select_feature.deactivate();
- fixmystreet.select_feature.activate();
- fixmystreet.nav.activate();
- },
-
- positionUpdate: function( info ) {
- $('#relocate').show();
- FMS.currentPosition = info.coordinates;
- var centre = this.projectCoords( info.coordinates );
-
- var point = new OpenLayers.Geometry.Point( centre.lon, centre.lat );
-
- fixmystreet.location.removeAllFeatures();
- var x = new OpenLayers.Feature.Vector(
- point,
- {},
- {
- graphicZIndex: 3000,
- graphicName: 'circle',
- 'externalGraphic': 'images/gps-marker.svg',
- pointRadius: 16
- }
- );
- fixmystreet.location.addFeatures([ x ]);
- },
-
- centerMapOnPosition: function(e) {
- e.preventDefault();
- if ( !fixmystreet.map ) {
- return;
- }
-
- // if there isn't a currentPosition then something
- // is up so we probably should not recenter
- if ( FMS.currentPosition ) {
- fixmystreet.map.panTo(this.projectCoords( FMS.currentPosition ));
- }
- },
-
- failedLocation: function( details ) {
- this.finishedLocating();
- this.locateCount = 21;
- var msg = '';
- if ( details.msg ) {
- msg = details.msg;
- } else {
- msg = FMS.strings.location_problem;
- }
- if ( !fixmystreet.map ) {
- $('#relocate').hide();
- $('#mark-here').hide();
- }
- $('#front-howto').html('<p>' + msg + '</msg>');
- $('#front-howto').show();
- },
-
- displayButtons: function(isLocationSet) {
- if ( fixmystreet.map ) {
- fixmystreet.nav.activate();
- fixmystreet.actionafterdrag.activate();
- }
- if (isLocationSet) {
- $('#cancel').addClass('ui-btn-left').show();
- $('#confirm').addClass('ui-btn-right ui-btn-icon-right').show();
- $('#confirm-map').show();
- $('#view-my-reports').hide();
- $('#login-options').hide();
- $('#mark-here').hide();
- $('#postcodeForm').hide();
- if ( fixmystreet.map ) {
- fixmystreet.markers.setVisibility(false);
- fixmystreet.select_feature.deactivate();
- fixmystreet.bbox_strategy.deactivate();
- }
- } else {
- $('#cancel').hide().removeClass('ui-btn-left');
- $('#confirm').hide().removeClass('ui-btn-right ui-btn-icon-right');
- $('#confirm-map').hide();
- $('#view-my-reports').show();
- $('#login-options').show();
- $('#mark-here').show();
- $('#postcodeForm').show();
- $('#reposition').hide();
- if ( fixmystreet.map ) {
- fixmystreet.bbox_strategy.activate();
- fixmystreet.report_location.setVisibility(false);
- fixmystreet.markers.setVisibility(true);
- fixmystreet.select_feature.deactivate();
- fixmystreet.select_feature.activate();
- }
- }
- },
-
- setReportPosition: function(lonlat, convertPosition) {
- var markers = fms_markers_list( [ [ lonlat.lat, lonlat.lon, 'green', 'location', '', 'location' ] ], convertPosition );
- fixmystreet.report_location.removeAllFeatures();
- fixmystreet.report_location.addFeatures( markers );
- fixmystreet.report_location.setVisibility(true);
- },
-
- onClickMark: function(e) {
- e.preventDefault();
- this.displayButtons(true);
- $('#reposition').hide();
-
- var lonlat = this.getCrossHairPosition();
- this.setReportPosition(lonlat, true);
- },
-
- onClickCancel: function(e) {
- e.preventDefault();
- fixmystreet.markers.removeAllFeatures();
- fixmystreet_activate_drag();
- this.displayButtons(false);
- if ( this.model.isPartial() ) {
- FMS.clearCurrentDraft();
- } else {
- // it's not partial but we've created a draft anyway so
- // delete it
- if ( this.model.id ) {
- var del = FMS.removeDraft( this.model.id, true );
- var that = this;
- del.done( function() { that.decrementDraftCount(); } );
- }
- this.model.set('lat', null);
- this.model.set('lon', null);
- }
- },
-
- decrementDraftCount: function() {
- var counter = $('#view-my-reports .draft_count');
- var count = counter.text();
- count--;
- counter.text(count);
- },
-
- onClickReposition: function(e) {
- e.preventDefault();
- var lonlat = this.getCrossHairPosition();
- lonlat.transform(
- new OpenLayers.Projection("EPSG:4326"),
- fixmystreet.map.getProjectionObject()
- );
- fixmystreet.report_location.features[0].move(lonlat);
- $('#reposition').hide();
- },
-
- onClickReport: function(e) {
- e.preventDefault();
- var position = this.getMarkerPosition();
-
- if ( FMS.isOffline ) {
- this.stopListening(FMS.locator);
- FMS.locator.stopTracking();
- // these may be out of the area but lets just save them
- // for now and they can be checked when we are online.
- this.model.set('lat', position.lat );
- this.model.set('lon', position.lon );
- FMS.saveCurrentDraft();
- this.navigate( 'offline' );
- } else {
- this.listenTo(FMS.locator, 'gps_located', this.goPhoto);
- this.listenTo(FMS.locator, 'gps_failed', this.noMap );
- FMS.locator.check_location( { latitude: position.lat, longitude: position.lon } );
- }
- },
-
- search: function(e) {
- $('#pc').blur();
- // this is to stop form submission
- e.preventDefault();
- $('#front-howto').hide();
- this.clearValidationErrors();
- var pc = this.$('#pc').val();
- this.listenTo(FMS.locator, 'search_located', this.searchSuccess );
- this.listenTo(FMS.locator, 'search_failed', this.searchFail);
-
- FMS.locator.lookup(pc);
- },
-
- searchSuccess: function( info ) {
- this.stopListening(FMS.locator);
- var coords = info.coordinates;
- if ( fixmystreet.map ) {
- fixmystreet.map.panTo(this.projectCoords( coords ));
- } else {
- this.setMapPosition(info);
- this.displayButtons(false);
- }
- },
-
- goAddress: function(e) {
- $('#relocate').show();
- $('#front-howto').html('').hide();
- var t = $(e.target);
- var lat = t.attr('data-lat');
- var long = t.attr('data-long');
-
- var coords = { latitude: lat, longitude: long };
- if ( fixmystreet.map ) {
- fixmystreet.map.panTo(this.projectCoords( coords ));
- } else {
- this.setMapPosition({ coordinates: coords });
- }
- },
-
- searchFail: function( details ) {
- // this makes sure any onscreen keyboard is dismissed
- $('#submit').focus();
- this.stopListening(FMS.locator);
- if ( details.msg ) {
- this.validationError( 'pc', details.msg );
- } else if ( details.locations ) {
- var multiple = '';
- for ( var i = 0; i < details.locations.length; i++ ) {
- var loc = details.locations[i];
- var li = '<li><a class="address" id="location_' + i + '" data-lat="' + loc.lat + '" data-long="' + loc.long + '">' + loc.address + '</a></li>';
- multiple = multiple + li;
- }
- $('#front-howto').html('<p>Multiple matches found</p><ul data-role="listview" data-inset="true">' + multiple + '</ul>');
- $('.ui-page').trigger('create');
- $('#relocate').hide();
- $('#front-howto').show();
- } else {
- this.validationError( 'pc', FMS.strings.location_problem );
- }
- },
-
- pauseMap: function() {
- this.stopListening(FMS.locator);
- FMS.locator.stopTracking();
- if ( fixmystreet.map ) {
- fixmystreet.nav.deactivate();
- fixmystreet.actionafterdrag.deactivate();
- }
- },
-
- goPhoto: function(info) {
- this.pauseMap();
- this.model.set('lat', info.coordinates.latitude );
- this.model.set('lon', info.coordinates.longitude );
- this.model.set('categories', info.details.category );
- if ( info.details.title_list ) {
- this.model.set('title_list', info.details.title_list);
- }
- FMS.saveCurrentDraft();
-
- this.navigate( 'photo' );
- },
-
- goSearch: function(e) {
- e.preventDefault();
- if ( !fixmystreet.map ) {
- this.$('#mark-here').hide();
- this.$('#relocate').hide();
- $('#front-howto').html('<p>' + FMS.strings.locate_dismissed + '</msg>');
- $('#front-howto').show();
- }
- this.finishedLocating();
- },
-
- goLogin: function(e) {
- e.preventDefault();
- this.pauseMap();
- this.navigate( 'login' );
- },
-
- goReports: function(e) {
- e.preventDefault();
- this.pauseMap();
- this.navigate( 'reports' );
- },
-
- getCrossHairPosition: function() {
- var cross = fixmystreet.map.getControlsByClass(
- "OpenLayers.Control.Crosshairs");
-
- var position = cross[0].getMapPosition();
- position.transform(
- fixmystreet.map.getProjectionObject(),
- new OpenLayers.Projection("EPSG:4326")
- );
-
- return position;
- },
-
- getMarkerPosition: function() {
- var marker = fixmystreet.report_location.features[0].geometry;
-
- var position = new OpenLayers.LonLat( marker.x, marker.y );
- position.transform(
- fixmystreet.map.getProjectionObject(),
- new OpenLayers.Projection("EPSG:4326")
- );
-
- return position;
- },
-
- projectCoords: function( coords ) {
- var centre = new OpenLayers.LonLat( coords.longitude, coords.latitude );
- centre.transform(
- new OpenLayers.Projection("EPSG:4326"),
- fixmystreet.map.getProjectionObject()
- );
-
- return centre;
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/details.js b/www/js/views/details.js
deleted file mode 100644
index 90d1f76..0000000
--- a/www/js/views/details.js
+++ /dev/null
@@ -1,149 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- DetailsView: FMS.FMSView.extend({
- template: 'details',
- id: 'details-page',
- prev: 'photo',
- next: 'submit-start',
- bottomMargin: -20,
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick .ui-btn-right': 'onClickButtonNext',
- 'blur textarea': 'updateCurrentReport',
- 'change select': 'updateSelect',
- 'blur input': 'updateCurrentReport'
- },
-
- afterRender: function() {
- this.$('#form_category').attr('data-role', 'none');
-
- if ( this.model.get('category') ) {
- this.$('#form_category').val( this.model.get('category') );
- }
- this.setSelectClass();
-
- },
-
- beforeDisplay: function() {
- this.fixPageHeight();
- var header = this.$("div[data-role='header']:visible"),
- detail = this.$('#form_detail'),
- top = detail.position().top,
- viewHeight = $(window).height(),
- contentHeight = viewHeight - header.outerHeight() + 15;
-
- detail.height( contentHeight - top );
- },
-
- onClickButtonPrev: function(e) {
- e.preventDefault();
- this.updateCurrentReport();
- this.navigate( this.prev, true );
- },
-
- onClickButtonNext: function(e) {
- e.preventDefault();
- this.clearValidationErrors();
- var valid = 1;
-
- if ( !$('#form_title').val() ) {
- valid = 0;
- this.validationError( 'form_title', FMS.validationStrings.title );
- }
-
- if ( !$('#form_detail').val() ) {
- valid = 0;
- this.validationError( 'form_detail', FMS.validationStrings.detail );
- }
-
- var cat = $('#form_category').val();
- if ( cat == '-- Pick a category --' ) {
- valid = 0;
- this.validationError( 'form_category', FMS.validationStrings.category );
- }
-
- if ( valid ) {
- this.clearValidationErrors();
- this.updateCurrentReport();
- if ( FMS.isOffline ) {
- this.navigate( 'save_offline' );
- } else {
- var that = this;
- $.ajax( {
- url: CONFIG.FMS_URL + '/report/new/category_extras',
- type: 'POST',
- data: {
- category: this.model.get('category'),
- latitude: this.model.get('lat'),
- longitude: this.model.get('lon')
- },
- dataType: 'json',
- timeout: 30000,
- success: function( data, status ) {
- if ( data && data.category_extra && data.category_extra.length > 0 ) {
- that.model.set('category_extras', data.category_extra);
- that.navigate('details_extra');
- } else {
- that.navigate( that.next );
- }
- },
- error: function() {
- this.navigate( that.next );
- }
- } );
- }
- }
- },
-
- validationError: function(id, error) {
- var el_id = '#' + id;
- var el = $(el_id);
-
- el.addClass('error');
- if ( el.val() === '' ) {
- el.attr('orig-placeholder', el.attr('placeholder'));
- el.attr('placeholder', error);
- }
- },
-
- clearValidationErrors: function() {
- $('.error').removeClass('error');
- $('.error').each(function(el) { if ( el.attr('orig-placeholder') ) { el.attr('placeholder', el.attr('orig-placeholder') ); } } );
- },
-
- setSelectClass: function() {
- var cat = this.$('#form_category');
- if ( cat.val() !== "" && cat.val() !== '-- Pick a category --' ) {
- cat.removeClass('noselection');
- } else {
- cat.addClass('noselection');
- }
- },
-
- updateSelect: function() {
- this.updateCurrentReport();
- this.setSelectClass();
- },
-
- updateCurrentReport: function() {
- var category = $('#form_category').val();
- if ( category === '-- Pick a category --' ) {
- category = '';
- }
- if ( category && $('#form_title').val() && $('#form_detail').val() ) {
- $('#next').addClass('page_complete_btn');
- } else {
- $('#next').removeClass('page_complete_btn');
- }
- this.model.set('category', category);
- this.model.set('title', $('#form_title').val());
- this.model.set('details', $('#form_detail').val());
- FMS.saveCurrentDraft();
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/details_extra.js b/www/js/views/details_extra.js
deleted file mode 100644
index 7a96e8c..0000000
--- a/www/js/views/details_extra.js
+++ /dev/null
@@ -1,108 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- DetailsExtraView: FMS.FMSView.extend({
- template: 'details_extra',
- id: 'details-extra-page',
- prev: 'details',
- next: 'submit-start',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick .ui-btn-right': 'onClickButtonNext',
- 'blur textarea': 'updateCurrentReport',
- 'change select': 'updateCurrentReport',
- 'blur input': 'updateCurrentReport'
- },
-
- afterRender: function() {
- console.log(this.model);
- this.populateFields();
- },
-
- onClickButtonPrev: function() {
- this.updateCurrentReport();
- this.navigate( this.prev, true );
- },
-
- onClickButtonNext: function() {
- this.clearValidationErrors();
- var valid = 1;
- var that = this;
-
- var isRequired = function(index) {
- var el = $(this);
- if ( el.attr('required') && el.val() === '' ) {
- valid = 0;
- that.validationError(el.attr('id'), FMS.strings.required);
- }
- };
- // do validation
- $('input').each(isRequired);
- $('textarea').each(isRequired);
- $('select').each(isRequired);
-
- if ( valid ) {
- this.clearValidationErrors();
- this.updateCurrentReport();
- this.navigate( this.next );
- }
- },
-
- validationError: function(id, error) {
- var el_id = '#' + id;
- var el = $(el_id);
-
- el.addClass('error');
- if ( el.val() === '' ) {
- el.attr('orig-placeholder', el.attr('placeholder'));
- el.attr('placeholder', error);
- }
- },
-
- clearValidationErrors: function() {
- $('.error').removeClass('error');
- $('.error').each(function(el) { if ( el.attr('orig-placeholder') ) { el.attr('placeholder', el.attr('orig-placeholder') ); } } );
- },
-
- updateSelect: function() {
- this.updateCurrentReport();
- },
-
- updateCurrentReport: function() {
- var fields = [];
- var that = this;
- var update = function(index) {
- var el = $(this);
- if ( el.val() !== '' ) {
- that.model.set(el.attr('name'), el.val());
- fields.push(el.attr('name'));
- } else {
- that.model.set(el.attr('name'), '');
- }
-
- };
-
- $('input').each(update);
- $('select').each(update);
- $('textarea').each(update);
-
- this.model.set('extra_details', fields);
- FMS.saveCurrentDraft();
- },
-
- populateFields: function() {
- var that = this;
- var populate = function(index) {
- console.log(that.$(this).attr('name'));
- that.$(this).val(that.model.get(that.$(this).attr('name')));
- };
- this.$('input').each(populate);
- this.$('select').each(populate);
- this.$('textarea').each(populate);
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/existing.js b/www/js/views/existing.js
deleted file mode 100644
index 0d16760..0000000
--- a/www/js/views/existing.js
+++ /dev/null
@@ -1,46 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- ExistingView: FMS.FMSView.extend({
- template: 'existing',
- id: 'existing',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick #use_report': 'useReport',
- 'vclick #save_report': 'saveReport',
- 'vclick #discard': 'discardReport'
- },
-
- setHeight: function(content, height) {
- content.css( 'min-height', content + 'px');
- },
-
- useReport: function(e) {
- e.preventDefault();
- FMS.setCurrentDraft(this.model);
- this.navigate('around');
- },
-
- saveReport: function(e) {
- e.preventDefault();
- FMS.clearCurrentDraft();
- this.navigate('around');
- },
-
- discardReport: function(e) {
- e.preventDefault();
- var reset = FMS.removeDraft(this.model.id, true);
- var that = this;
- reset.done( function() { that.onDraftRemove(); } );
- reset.fail( function() { that.onDraftRemove(); } );
- },
-
- onDraftRemove: function() {
- FMS.clearCurrentDraft();
- this.navigate( 'around', 'left' );
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/fms.js b/www/js/views/fms.js
deleted file mode 100644
index 53cdc66..0000000
--- a/www/js/views/fms.js
+++ /dev/null
@@ -1,103 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- FMSView: Backbone.View.extend({
- tag: 'div',
- bottomMargin: 20,
- contentSelector: '[data-role="content"]',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick .ui-btn-right': 'onClickButtonNext'
- },
-
- render: function(){
- if ( !this.template ) {
- console.log('no template to render');
- return;
- }
- template = _.template( tpl.get( this.template ) );
- var args = null;
- if ( this.options.msg ) {
- args = { msg: this.options.msg };
- }
- if ( this.model ) {
- if ( args ) {
- args.model = this.model.toJSON();
- } else {
- args = this.model.toJSON();
- }
- }
- this.$el.html(template(args));
- this.afterRender();
- return this;
- },
-
- fixPageHeight: function() {
- var header = this.$("div[data-role='header']:visible"),
- content = this.$(this.contentSelector),
- top = content.position().top,
- viewHeight = $(window).height(),
- contentHeight = viewHeight - header.outerHeight() - this.bottomMargin;
-
- this.setHeight( content, contentHeight - top );
- },
-
- setHeight: function(content, height) {
- content.height(height);
- },
-
- afterRender: function() {},
-
- beforeDisplay: function() {
- this.fixPageHeight();
- },
-
- afterDisplay: function() {},
-
- navigate: function( route, reverse ) {
- if ( reverse ) {
- FMS.router.reverseTransition();
- }
-
- FMS.router.navigate( route, { trigger: true } );
- },
-
- onClickButtonPrev: function(e) {
- e.preventDefault();
- this.navigate( this.prev, true );
- },
-
- onClickButtonNext: function(e) {
- e.preventDefault();
- this.navigate( this.next );
- },
-
- displayError: function(msg) {
- alert(msg);
- },
-
- validationError: function( id, error ) {
- var el_id = '#' + id;
- var el = $(el_id);
- var err = '<div for="' + id + '" class="form-error">' + error + '</div>';
- if ( $('div[for='+id+']').length === 0 ) {
- el.before(err);
- el.addClass('form-error');
- }
- },
-
- clearValidationErrors: function() {
- $('div.form-error').remove();
- $('.form-error').removeClass('form-error');
- },
-
- destroy: function() { console.log('destory for ' + this.id); this._destroy(); this.remove(); },
-
- _destroy: function() {}
- })
- });
- _.extend( FMS.FMSView, Backbone.Events );
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/home.js b/www/js/views/home.js
deleted file mode 100644
index 998af1c..0000000
--- a/www/js/views/home.js
+++ /dev/null
@@ -1,40 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- HomeView: FMS.FMSView.extend({
- template: 'home',
- id: 'front-page',
-
- afterRender: function() {
- /*
- if ( !can_geolocate && ( !navigator.network || !navigator.network.connection ) ) {
- geocheck_count++;
- window.setTimeout( decide_front_page, 1000 );
- return;
- }
-
- // sometime onDeviceReady does not fire so set this here to be sure
- can_geolocate = true;
-
- geocheck_count = 0;
- */
-
- $('#locating').show();
-
- },
-
- afterDisplay: function() {
- $('#load-screen').hide();
- if ( FMS.isOffline ) {
- this.navigate( 'offline' );
- } else if ( FMS.currentDraft && (
- FMS.currentDraft.get('title') || FMS.currentDraft.get('lat') ||
- FMS.currentDraft.get('details') || FMS.currentDraft.get('file') )
- ) {
- this.navigate( 'existing' );
- } else {
- this.navigate( 'around' );
- }
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/locator.js b/www/js/views/locator.js
deleted file mode 100644
index 46ebcce..0000000
--- a/www/js/views/locator.js
+++ /dev/null
@@ -1,64 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- LocatorView: FMS.FMSView.extend({
- skipLocationCheck: false,
-
- locate: function() {
- $('#locating').show();
- this.listenTo(FMS.locator, 'gps_located', this.gotLocation);
- this.listenTo(FMS.locator, 'gps_failed', this.failedLocation);
- this.listenTo(FMS.locator, 'gps_locating', this.locationUpdate);
-
- FMS.locator.geolocate(CONFIG.ACCURACY, this.skipLocationCheck);
- this.startLocateProgress();
- },
-
- startLocateProgress: function() {
- this.located = false;
- this.locateCount = 1;
- var that = this;
- window.setTimeout( function() {that.showLocateProgress();}, 1000);
- },
-
- locationUpdate: function( accuracy ) {
- if ( accuracy && accuracy < 500 ) {
- $('#progress-bar').css( 'background-color', 'orange' );
- } else if ( accuracy && accuracy < 250 ) {
- $('#progress-bar').css( 'background-color', 'yellow' );
- } else {
- $('#progress-bar').css( 'background-color', 'grey' );
- }
-
- $('#accuracy').text(parseInt(accuracy, 10) + 'm');
- },
-
- showLocateProgress: function() {
- if ( !this.located && this.locateCount > 20 ) {
- FMS.searchMessage = FMS.strings.geolocation_failed;
- $('#locating').hide();
- return;
- }
- var percent = ( ( 20 - this.locateCount ) / 20 ) * 100;
- $('#progress-bar').css( 'width', percent + '%' );
- this.locateCount++;
- var that = this;
- window.setTimeout( function() {that.showLocateProgress();}, 1000);
- },
-
- finishedLocating: function() {
- this.stopListening(FMS.locator, 'gps_locating');
- this.stopListening(FMS.locator, 'gps_located');
- this.stopListening(FMS.locator, 'gps_failed');
- $('#locating').hide();
- },
-
- failedLocation: function(details) {
- this.finishedLocating();
- },
-
- gotLocation: function(info) {
- this.finishedLocating();
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/login.js b/www/js/views/login.js
deleted file mode 100644
index a24daa9..0000000
--- a/www/js/views/login.js
+++ /dev/null
@@ -1,108 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- LoginView: FMS.FMSView.extend({
- template: 'login',
- id: 'login',
- next: 'home',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick #login': 'onClickLogin',
- 'submit #signinForm': 'onClickLogin',
- 'vclick #logout': 'onClickLogout',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick .ui-btn-right': 'onClickButtonNext'
- },
-
- onClickLogin: function(e) {
- // prevent form submission from onscreen keyboard
- e.preventDefault();
- if ( this.validate() ) {
- var that = this;
- $.ajax( {
- url: CONFIG.FMS_URL + '/auth/ajax/sign_in',
- type: 'POST',
- data: {
- email: $('#form_email').val(),
- password_sign_in: $('#form_password').val(),
- remember_me: 1
- },
- dataType: 'json',
- timeout: 30000,
- success: function( data, status ) {
- if ( data.name ) {
- that.model.set('password', $('#form_password').val());
- that.model.set('email', $('#form_email').val());
- that.model.set('name', data.name);
- that.model.save();
- FMS.isLoggedIn = 1;
- that.$('#password_row').hide();
- that.$('#success_row').show();
- $('#logout').focus();
- } else {
- $('#login').focus();
- that.validationError('form_email', FMS.strings.login_details_error);
- }
- },
- error: function() {
- that.validationError('form_email', FMS.strings.login_error);
- }
- } );
- }
- },
-
- onClickLogout: function(e) {
- e.preventDefault();
- var that = this;
- $.ajax( {
- url: CONFIG.FMS_URL + '/auth/ajax/sign_out',
- type: 'GET',
- dataType: 'json',
- timeout: 30000,
- success: function( data, status ) {
- FMS.isLoggedIn = 0;
- that.model.set('password', '');
- that.model.save();
- that.$('#form_email').val('');
- that.$('#form_password').val('');
- that.$('#success_row').hide();
- that.$('#signed_in_row').hide();
- that.$('#password_row').show();
- },
- error: function() {
- that.validationError('err', FMS.strings.logout_error);
- }
- } );
- },
-
- validate: function() {
- this.clearValidationErrors();
- var isValid = 1;
-
- if ( !$('#form_password').val() ) {
- isValid = 0;
- this.validationError('form_password', FMS.validationStrings.password );
- }
-
- var email = $('#form_email').val();
- if ( !email ) {
- isValid = 0;
- this.validationError('form_email', FMS.validationStrings.email.required);
- // regexp stolen from jquery validate module
- } else if ( ! /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(email) ) {
- isValid = 0;
- this.validationError('form_email', FMS.validationStrings.email.email);
- }
-
- if ( !isValid ) {
- // this makes sure the onscreen keyboard is dismissed
- $('#login').focus();
- }
-
- return isValid;
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/offline.js b/www/js/views/offline.js
deleted file mode 100644
index 117c67e..0000000
--- a/www/js/views/offline.js
+++ /dev/null
@@ -1,140 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- OfflineView: FMS.LocatorView.extend({
- template: 'offline',
- id: 'offline',
- prev: 'home',
- next: 'reports',
- skipLocationCheck: true,
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'toggleNextButton',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick .ui-btn-right': 'onClickButtonNext',
- 'vclick #id_photo_button': 'takePhoto',
- 'vclick #id_existing': 'addPhoto',
- 'vclick #id_del_photo_button': 'deletePhoto',
- 'vclick #locate': 'locate',
- 'vclick #locate_cancel': 'onClickCancel',
- 'blur input': 'toggleNextButton',
- 'blur textarea': 'toggleNextButton'
- },
-
- draftHasContent: function() {
- var hasContent = false;
-
- if ( $('#form_title').val() || $('#form_detail').val() ||
- this.model.get('lat') || this.model.get('file') ) {
- hasContent = true;
- }
-
- return hasContent;
- },
-
- toggleNextButton: function() {
- if ( this.draftHasContent() ) {
- $('#offline-next-btn .ui-btn-text').text('Save');
- } else {
- $('#offline-next-btn .ui-btn-text').text('Skip');
- }
- },
-
- failedLocation: function(details) {
- this.finishedLocating();
- this.locateCount = 21;
-
- $('#locate_result').html('Could not get position');
- },
-
- gotLocation: function(info) {
- this.finishedLocating();
-
- this.model.set('lat', info.coordinates.latitude);
- this.model.set('lon', info.coordinates.longitude);
-
- $('#locate_result').html('Got position (' + info.coordinates.latitude.toFixed(2) + ', ' + info.coordinates.longitude.toFixed(2) + ')');
- },
-
- takePhoto: function() {
- var that = this;
- navigator.camera.getPicture( function(imgURI) { that.addPhotoSuccess(imgURI); }, function(error) { that.addPhotoFail(error); }, { saveToPhotoAlbum: true, quality: 49, destinationType: Camera.DestinationType.FILE_URI, sourceType: navigator.camera.PictureSourceType.CAMERA, correctOrientation: true });
- },
-
- addPhoto: function() {
- var that = this;
- navigator.camera.getPicture( function(imgURI) { that.addPhotoSuccess(imgURI); }, function(error) { that.addPhotoFail(error); }, { saveToPhotoAlbum: false, quality: 49, destinationType: Camera.DestinationType.FILE_URI, sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY, correctOrientation: true });
- },
-
- addPhotoSuccess: function(imgURI) {
- var move = FMS.files.moveURI( imgURI );
-
- var that = this;
- move.done( function( file ) {
- $('#photo').attr('src', file.toURL());
- that.model.set('file', file.toURL());
- FMS.saveCurrentDraft();
-
- $('#photo-next-btn .ui-btn-text').text('Next');
- $('#display_photo').show();
- $('#add_photo').hide();
- });
-
- move.fail( function() { that.addPhotoFail(); } );
- },
-
- addPhotoFail: function() {
- if ( message != 'no image selected' &&
- message != 'Selection cancelled.' &&
- message != 'Camera cancelled.' ) {
- this.displayError(FMS.strings.photo_failed);
- }
- },
-
- deletePhoto: function() {
- var that = this;
- var del = FMS.files.deleteURI( this.model.get('file') );
-
- del.done( function() {
- that.model.set('file', '');
- FMS.saveCurrentDraft();
- $('#photo').attr('src', '');
-
- $('#photo-next-btn .ui-btn-text').text('Skip');
- $('#display_photo').hide();
- $('#add_photo').show();
- });
- },
-
- onClickCancel: function() {
- this.finishedLocating();
- },
-
- onClickButtonNext: function() {
- this.updateCurrentReport();
- if ( !this.draftHasContent() && this.model.id ) {
- var del = FMS.removeDraft( this.model.id );
-
- var that = this;
- del.done( function() { that.draftDeleted(); } );
- del.fail( function() { that.draftDeleted(); } );
- } else {
- FMS.clearCurrentDraft();
- this.navigate( this.next, 'left' );
- }
- },
-
- draftDeleted: function() {
- FMS.clearCurrentDraft();
- this.navigate( this.next, 'left' );
- },
-
- updateCurrentReport: function() {
- this.model.set('title', $('#form_title').val());
- this.model.set('details', $('#form_detail').val());
- FMS.saveCurrentDraft();
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/photo.js b/www/js/views/photo.js
deleted file mode 100644
index 74f3933..0000000
--- a/www/js/views/photo.js
+++ /dev/null
@@ -1,87 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- PhotoView: FMS.FMSView.extend({
- template: 'photo',
- id: 'photo-page',
- prev: 'around',
- next: 'details',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick .ui-btn-right': 'onClickButtonNext',
- 'vclick #id_photo_button': 'takePhoto',
- 'vclick #id_existing': 'addPhoto',
- 'vclick #id_del_photo_button': 'deletePhoto'
- },
-
- beforeDisplay: function() {
- this.fixPageHeight();
- if ( this.model.get('file') ) {
- $('#id_photo_button').parents('.ui-btn').hide();
- $('#id_existing').parents('.ui-btn').hide();
- } else {
- this.$('#id_del_photo_button').parents('.ui-btn').hide();
- }
- },
-
- takePhoto: function(e) {
- e.preventDefault();
- var that = this;
- navigator.camera.getPicture( function(imgURI) { that.addPhotoSuccess(imgURI); }, function(error) { that.addPhotoFail(error); }, { saveToPhotoAlbum: true, quality: 49, destinationType: Camera.DestinationType.FILE_URI, sourceType: navigator.camera.PictureSourceType.CAMERA, correctOrientation: true });
- },
-
- addPhoto: function(e) {
- e.preventDefault();
- var that = this;
- navigator.camera.getPicture( function(imgURI) { that.addPhotoSuccess(imgURI); }, function(error) { that.addPhotoFail(error); }, { saveToPhotoAlbum: false, quality: 49, destinationType: Camera.DestinationType.FILE_URI, sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY, correctOrientation: true });
- },
-
- addPhotoSuccess: function(imgURI) {
- var move = FMS.files.moveURI( imgURI );
-
- var that = this;
- move.done( function( file ) {
- $('#photo').attr('src', file.toURL());
- that.model.set('file', file.toURL());
- FMS.saveCurrentDraft();
-
- $('#photo-next-btn .ui-btn-text').text('Next');
- $('#id_del_photo_button').parents('.ui-btn').show();
- $('#id_photo_button').parents('.ui-btn').hide();
- $('#id_existing').parents('.ui-btn').hide();
- });
-
- move.fail( function() { that.addPhotoFail(); } );
- },
-
- addPhotoFail: function() {
- if ( message != 'no image selected' &&
- message != 'Selection cancelled.' &&
- message != 'Camera cancelled.' ) {
- this.displayError(FMS.strings.photo_failed);
- }
- },
-
- deletePhoto: function(e) {
- e.preventDefault();
- var that = this;
- var del = FMS.files.deleteURI( this.model.get('file') );
-
- del.done( function() {
- that.model.set('file', '');
- FMS.saveCurrentDraft();
- $('#photo').attr('src', 'images/placeholder-photo.png');
-
- $('#photo-next-btn .ui-btn-text').text('Skip');
- $('#id_del_photo_button').parents('.ui-btn').hide();
- $('#id_photo_button').parents('.ui-btn').show();
- $('#id_existing').parents('.ui-btn').show();
- });
-
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/reports.js b/www/js/views/reports.js
deleted file mode 100644
index 4690fb2..0000000
--- a/www/js/views/reports.js
+++ /dev/null
@@ -1,61 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- ReportsView: FMS.FMSView.extend({
- template: 'reports',
- id: 'reports',
- next: 'home',
- contentSelector: '#drafts',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .del_report': 'deleteReport',
- 'vclick .use_report': 'useReport',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick .ui-btn-right': 'onClickButtonNext'
- },
-
- deleteReport: function(e) {
- e.preventDefault();
- var el = $(e.target);
- var id = el.parents('li').attr('id');
- var del = FMS.removeDraft( id, true );
- var that = this;
- del.done( function() { that.onRemoveDraft(el); } );
- del.fail( function() { that.onRemoveDraft(el); } );
- },
-
- setHeight: function(content, height) {
- content.css( 'min-height', content + 'px');
- },
-
- useReport: function(e) {
- e.preventDefault();
- var el = $(e.target);
- var id = el.parents('li').attr('id');
- FMS.currentDraft = FMS.allDrafts.get(id);
- this.navigate('around');
- },
-
- onRemoveDraft: function(el) {
- el.parents('li').remove();
- },
-
- render: function(){
- if ( !this.template ) {
- console.log('no template to render');
- return;
- }
- template = _.template( tpl.get( this.template ) );
- if ( this.model ) {
- this.$el.html(template({ model: this.model.toJSON(), drafts: FMS.allDrafts }));
- } else {
- this.$el.html(template());
- }
- this.afterRender();
- return this;
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/save_offline.js b/www/js/views/save_offline.js
deleted file mode 100644
index e9cedc8..0000000
--- a/www/js/views/save_offline.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- SaveOfflineView: FMS.FMSView.extend({
- template: 'save_offline',
- id: 'save_offline',
-
- events: {
- 'pagehide': 'destroy',
- 'pageshow': 'afterDisplay',
- 'vclick #save_report': 'saveReport',
- 'vclick #discard': 'discardReport'
- },
-
- saveReport: function() {
- FMS.clearCurrentDraft();
- this.navigate('reports');
- },
-
- discardReport: function() {
- var reset = FMS.removeDraft(FMS.currentDraft.id, true);
- var that = this;
- reset.done( function() { that.onDraftRemove(); } );
- reset.fail( function() { that.onDraftRemove(); } );
- },
-
- onDraftRemove: function() {
- this.navigate( 'around', 'left' );
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/search.js b/www/js/views/search.js
deleted file mode 100644
index 6930e2a..0000000
--- a/www/js/views/search.js
+++ /dev/null
@@ -1,81 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- SearchView: FMS.FMSView.extend({
- template: 'address_search',
- id: 'search-page',
-
- events: {
- 'vclick a.address': 'goAddress',
- 'vclick #submit': 'search',
- 'vclick #locate': 'goLocate',
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'submit #postcodeForm': 'search'
- },
-
- afterDisplay: function() {
- if ( FMS.isOffline ) {
- this.navigate('offline');
- }
- },
-
- search: function(e) {
- // this is to stop form submission
- e.preventDefault();
- this.clearValidationErrors();
- var pc = this.$('#pc').val();
- this.listenTo(FMS.locator, 'search_located', this.searchSuccess );
- this.listenTo(FMS.locator, 'search_failed', this.searchFail);
-
- FMS.locator.lookup(pc);
- },
-
- searchSuccess: function( info ) {
- this.stopListening(FMS.locator);
- var coords = info.coordinates;
- FMS.currentPosition = coords;
- this.navigate('around');
- },
-
- goAddress: function(e) {
- var t = $(e.target);
- var lat = t.attr('data-lat');
- var long = t.attr('data-long');
-
- FMS.currentPosition = { latitude: lat, longitude: long };
- this.navigate('around');
- },
-
- searchFail: function( details ) {
- // this makes sure any onscreen keyboard is dismissed
- $('#submit').focus();
- this.stopListening(FMS.locator);
- if ( details.msg ) {
- this.validationError( 'pc', details.msg );
- } else if ( details.locations ) {
- var multiple = '';
- for ( var i = 0; i < details.locations.length; i++ ) {
- var loc = details.locations[i];
- var li = '<li><a class="address" id="location_' + i + '" data-lat="' + loc.lat + '" data-long="' + loc.long + '">' + loc.address + '</a></li>';
- multiple = multiple + li;
- }
- $('#front-howto').html('<p>Multiple matches found</p><ul data-role="listview" data-inset="true">' + multiple + '</ul>');
- $('.ui-page').trigger('create');
- } else {
- this.validationError( 'pc', FMS.strings.location_problem );
- }
- },
-
- goLocate: function(e) {
- e.preventDefault();
- this.navigate( 'around' );
- },
-
- _destroy: function() {
- delete FMS.searchMessage;
- this.stopListening(FMS.locator);
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/sent.js b/www/js/views/sent.js
deleted file mode 100644
index d146db6..0000000
--- a/www/js/views/sent.js
+++ /dev/null
@@ -1,36 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- SentView: FMS.FMSView.extend({
- template: 'sent',
- id: 'sent-page',
- prev: 'around',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick #rate_app': 'onClickRateApp'
- },
-
- render: function(){
- if ( !this.template ) {
- console.log('no template to render');
- return;
- }
- template = _.template( tpl.get( this.template ) );
- this.$el.html(template(FMS.createdReport.toJSON()));
- this.afterRender();
- return this;
- },
-
- onClickRateApp: function(e) {
- e.preventDefault();
- var el = $('#rate_app');
- var href = el.attr('href');
- window.open(href, '_system');
- return false;
- }
- })
- });
-})(FMS, Backbone, _, $);
diff --git a/www/js/views/submit.js b/www/js/views/submit.js
deleted file mode 100644
index 5ba6e83..0000000
--- a/www/js/views/submit.js
+++ /dev/null
@@ -1,405 +0,0 @@
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- SubmitView: FMS.FMSView.extend({
- template: 'submit',
- id: 'submit-page',
- prev: 'details',
- nopassword: 0,
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick .ui-btn-right': 'onClickButtonNext',
- 'vclick #submit_signed_in': 'onClickSubmit',
- 'vclick #submit_sign_in': 'onClickSubmit',
- 'vclick #submit_register': 'onClickSubmit'
- },
-
- render: function(){
- if ( !this.template ) {
- console.log('no template to render');
- return;
- }
- template = _.template( tpl.get( this.template ) );
- if ( this.model ) {
- this.$el.html(template({ model: this.model.toJSON(), user: FMS.currentUser.toJSON(), nopassword: this.nopassword }));
- } else {
- this.$el.html(template());
- }
- this.afterRender();
- return this;
- },
-
- onClickSubmit: function(e) {
- // in case we are getting here from a form submission
- e.preventDefault();
- this.beforeSubmit();
-
- if ( this.validate() ) {
- this.model.set('user', FMS.currentUser);
- if ( FMS.isOffline ) {
- this.navigate( 'save_offline' );
- } else {
- this.report = new FMS.Report( this.model.toJSON() );
- this.listenTo( this.report, 'sync', this.onReportSync );
- this.listenTo( this.report, 'invalid', this.onReportInvalid );
- this.listenTo( this.report, 'error', this.onReportError );
- this.report.save();
- }
- }
- },
-
- onReportSync: function(model, resp, options) {
- this.stopListening();
- this.afterSubmit();
- if ( FMS.currentUser ) {
- FMS.currentUser.save();
- }
- if (resp.report) {
- this.report.set('site_id', resp.report);
- this.report.set('site_url', CONFIG.FMS_URL + '/report/' + resp.report);
- } else {
- this.report.set('email_confirm', 1);
- }
- var reset = FMS.removeDraft( model.id, true);
- var that = this;
- reset.done( function() { that.onRemoveDraft(); } );
- reset.fail( function() { that.onRemoveDraft(); } );
- },
-
- onRemoveDraft: function() {
- FMS.clearCurrentDraft();
- FMS.createdReport = this.report;
- this.navigate( 'sent' );
- },
-
- onReportInvalid: function(model, err, options) {
- var errors = err.errors;
- var errorList = '<ul><li class="plain">' + FMS.strings.invalid_report + '</li>';
- var validErrors = [ 'password', 'category', 'name' ];
- for ( var k in errors ) {
- if ( validErrors.indexOf(k) >= 0 || errors[k].match(/required/) ) {
- if ( k === 'password' ) {
- error = FMS.strings.password_problem;
- } else if ( k !== '') {
- error = errors[k];
- }
- errorList += '<li>' + error + '</li>';
- }
- }
- errorList += '</ul>';
- $('#errors').html(errorList).show();
- },
-
- onReportError: function(model, err, options) {
- if ( err.errors ) {
- alert( FMS.strings.sync_error + ': ' + err.errors);
- } else {
- alert( FMS.strings.unknown_sync_error );
- }
- },
-
- beforeSubmit: function() {},
- afterSubmit: function() {},
-
- _destroy: function() {
- this.stopListening();
- }
- })
- });
-})(FMS, Backbone, _, $);
-
-
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- SubmitEmailView: FMS.SubmitView.extend({
- template: 'submit_email',
- id: 'submit-email-page',
- prev: 'details',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick #set_password': 'onClickSetPassword',
- 'vclick #have_password': 'onClickPassword',
- 'vclick #email_confirm': 'onClickConfirm'
- },
-
- validate: function() {
- this.clearValidationErrors();
- var isValid = 1;
-
- var email = $('#form_email').val();
- if ( !email ) {
- isValid = 0;
- this.validationError('form_email', FMS.validationStrings.email.required);
- // regexp stolen from jquery validate module
- } else if ( ! /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(email) ) {
- isValid = 0;
- this.validationError('form_email', FMS.validationStrings.email.email);
- }
-
- return isValid;
- },
-
- onClickSetPassword: function(e) {
- e.preventDefault();
- if ( this.validate() ) {
- this.model.set('submit_clicked', 'submit_register');
- FMS.currentUser.set('email', $('#form_email').val());
- this.navigate( 'submit-set-password' );
- }
- },
-
- onClickPassword: function(e) {
- e.preventDefault();
- if ( this.validate() ) {
- FMS.currentUser.set('email', $('#form_email').val());
- this.navigate( 'submit-password' );
- }
- },
-
- onClickConfirm: function(e) {
- e.preventDefault();
- if ( this.validate() ) {
- FMS.currentUser.set('email', $('#form_email').val());
- this.navigate( 'submit-name' );
- }
- },
-
- _destroy: function() {}
- })
- });
-})(FMS, Backbone, _, $);
-
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- SubmitNameView: FMS.SubmitView.extend({
- template: 'submit_name',
- id: 'submit-name-page',
- prev: 'submit-email',
- nopassword: 1,
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick #send_confirm': 'onClickSubmit'
- },
-
- initialize: function() {
- console.log('submit name initalize');
- this.listenTo(this.model, 'sync', this.onReportSync );
- this.listenTo( this.model, 'error', this.onReportError );
- },
-
- validate: function() {
- this.clearValidationErrors();
- var isValid = 1;
-
- var name = $('#form_name').val();
- if ( !name ) {
- isValid = 0;
- this.validationError('form_name', FMS.validationStrings.name.required );
- } else {
- var validNamePat = /\ba\s*n+on+((y|o)mo?u?s)?(ly)?\b/i;
- if ( name.length < 6 || !name.match( /\S/ ) || name.match( validNamePat ) ) {
- isValid = 0;
- this.validationError('form_name', FMS.validationStrings.name.validName);
- }
- }
-
- if ( this.model.get('title_list') && this.model.get('title_list').length > 0 ) {
- if ( $('#form_title').val() === '' ) {
- this.validationError('form_title', FMS.strings.required);
- isValid = 0;
- }
- }
-
- return isValid;
- },
-
- beforeSubmit: function() {
- this.model.set('name', $('#form_name').val());
- this.model.set('phone', $('#form_phone').val());
- this.model.set('may_show_name', $('#form_may_show_name').val());
- if ( this.model.get('title_list') && this.model.get('title_list').length > 0 ) {
- FMS.currentUser.set('title', $('#form_title').val());
- }
- }
- })
- });
-})(FMS, Backbone, _, $);
-
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- SubmitNameSetPasswordView: FMS.SubmitNameView.extend({
- template: 'submit_name',
- id: 'submit-name-page-set-password',
- prev: 'submit-set-password',
- nopassword: 0
- })
- });
-})(FMS, Backbone, _, $);
-
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- SubmitPasswordView: FMS.SubmitView.extend({
- template: 'submit_password',
- id: 'submit-password-page',
- prev: 'submit-email',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick #report': 'onClickSubmit',
- 'vclick #confirm_name': 'onClickSubmit',
- 'submit #passwordForm': 'onClickSubmit'
- },
-
- initialize: function() {
- this.listenTo(this.model, 'sync', this.onReportSync );
- this.listenTo( this.model, 'error', this.onReportError );
- },
-
- validate: function() {
- var isValid = 1;
-
- if ( !$('#form_password').val() ) {
- isValid = 0;
- this.validationError('form_password', FMS.validationStrings.password );
- }
-
- return isValid;
- },
-
- beforeSubmit: function() {
- $('#report').focus();
- if ( $('#form_name').val() ) {
- this.model.set('submit_clicked', 'submit_register');
- this.model.set('phone', $('#form_phone').val());
- this.model.set('name', $('#form_name').val());
- this.model.set('may_show_name', $('#form_may_show_name').val());
- } else {
- // if this is set then we are registering a password
- if ( ! this.model.get('submit_clicked') ) {
- this.model.set('submit_clicked', 'submit_sign_in');
- }
- FMS.currentUser.set('password', $('#form_password').val());
- }
- },
-
- afterSubmit: function() {
- FMS.isLoggedIn = 1;
- },
-
- onReportError: function(model, err, options) {
- if ( err.check_name ) {
- $('#form_name').val(err.check_name);
- $('#password_row').hide();
- $('#check_name').show();
- $('#confirm_name').focus();
- } else {
- if ( err.errors && err.errors.password ) {
- this.validationError('form_password', err.errors.password );
- }
- $('#report').focus();
- }
- }
-
- })
- });
-})(FMS, Backbone, _, $);
-
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- SubmitSetPasswordView: FMS.SubmitPasswordView.extend({
- template: 'submit_set_password',
- id: 'submit-set-password-page',
- prev: 'submit-email',
- next: 'submit-name-set-password',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick #continue': 'onClickContinue',
- 'submit #passwordForm': 'onClickContinue'
- },
-
- onClickContinue: function(e) {
- e.preventDefault();
- $('#continue').focus();
- if ( ! this.model.get('submit_clicked') ) {
- this.model.set('submit_clicked', 'submit_sign_in');
- }
- FMS.currentUser.set('password', $('#form_password').val());
- this.navigate( this.next );
- }
- })
- });
-})(FMS, Backbone, _, $);
-
-(function (FMS, Backbone, _, $) {
- _.extend( FMS, {
- SubmitConfirmView: FMS.SubmitView.extend({
- template: 'submit_confirm',
- id: 'submit-confirm-page',
- prev: 'details',
-
- events: {
- 'pagehide': 'destroy',
- 'pagebeforeshow': 'beforeDisplay',
- 'pageshow': 'afterDisplay',
- 'vclick .ui-btn-left': 'onClickButtonPrev',
- 'vclick #report': 'onClickSubmit'
- },
-
- validate: function() {
- this.clearValidationErrors();
- var isValid = 1;
-
- var name = $('#form_name').val();
- if ( !name ) {
- isValid = 0;
- this.validationError('form_name', FMS.validationStrings.name.required );
- } else {
- var validNamePat = /\ba\s*n+on+((y|o)mo?u?s)?(ly)?\b/i;
- if ( name.length < 6 || !name.match( /\S/ ) || name.match( validNamePat ) ) {
- isValid = 0;
- this.validationError('form_name', FMS.validationStrings.name.validName);
- }
- }
-
- return isValid;
- },
-
- beforeSubmit: function() {
- this.model.set('name', $('#form_name').val());
- this.model.set('phone', $('#form_phone').val());
- this.model.set('may_show_name', $('#form_may_show_name').val());
- this.model.set('submit_clicked', 'submit_register');
- },
-
- onReportError: function(model, err, options) {
- // TODO: this is a temporary measure which should be replaced by a more
- // sensible login mechanism
- if ( err.check_name ) {
- this.onClickSubmit();
- } else {
- if ( err.errors && err.errors.password ) {
- this.validationError('form_password', err.errors.password );
- }
- }
- }
- })
- });
-})(FMS, Backbone, _, $);