Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tweaked ionBody, ionHeaderBar, ionPopup and ionPopover #278

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
8 changes: 4 additions & 4 deletions components/ionActionSheet/ionActionSheet.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,17 +76,17 @@ IonActionSheet = {
}
};

Template.ionActionSheet.rendered = function () {
Template.ionActionSheet.onRendered(function () {
$(window).on('keyup.ionActionSheet', function(event) {
if (event.which == 27) {
IonActionSheet.cancel();
}
});
};
});

Template.ionActionSheet.destroyed = function () {
Template.ionActionSheet.onDestroyed(function () {
$(window).off('keyup.ionActionSheet');
};
});

Template.ionActionSheet.events({
// Handle clicking the backdrop
Expand Down
43 changes: 38 additions & 5 deletions components/ionBody/ionBody.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,32 @@ Platform = {
return (!!navigator.userAgent.match(/iPad/i) || !!navigator.userAgent.match(/iPhone/i) || !!navigator.userAgent.match(/iPod/i))
|| Session.get('platformOverride') === 'iOS';
},

isAndroid: function () {
return navigator.userAgent.indexOf('Android') > 0
|| Session.get('platformOverride') === 'Android';
},
isWeb: function () {
return !Platform.isIOS() && !Platform.isAndroid();
},
set: function(platform) {
if (!_.contains(['android', 'ios', 'web'], platform)) return;
var $ionicBody = $('.ionic-body');
$ionicBody.removeClass('platform-web platform-cordova platform-ios platform-android');
if (platform === 'android') {
$ionicBody.addClass('platform-cordova platform-android');
}
if (platform === 'ios') {
$ionicBody.addClass('platform-cordova platform-ios');
}
if (platform === 'web') {
$ionicBody.addClass('platform-web');
}
},
get: function() {
var $ionicBody = $('.ionic-body');
if ($ionicBody.hasClass('platform-ios')) return 'ios';
if ($ionicBody.hasClass('platform-android')) return 'android';
return 'web';
}
};

Expand All @@ -18,6 +40,10 @@ Template.registerHelper('isAndroid', function () {
return Platform.isAndroid();
});

Template.registerHelper('isWeb', function () {
return Platform.isWeb();
});

Template.ionBody.helpers({
platformClasses: function () {
var classes = ['grade-a'];
Expand All @@ -39,13 +65,13 @@ Template.ionBody.helpers({
}
});

Template.ionBody.rendered = function () {
Template.ionBody.onRendered(function () {
window.addEventListener('statusTap', function() {
$('.content.overflow-scroll').animate({
scrollTop: 0
}, 500);
});
};
});

Template.ionBody.events({
'click [data-ion-modal]': function (event, template) {
Expand All @@ -59,8 +85,15 @@ Template.ionBody.events({
},

'click [data-nav-direction]': function (event, template) {
$('[data-nav-container]').addClass('nav-view-direction-' + $(event.target).data('nav-direction'));
$('[data-navbar-container]').addClass('nav-bar-direction-' + $(event.target).data('nav-direction'));
var direction = $(event.currentTarget).data('nav-direction');
$('[data-nav-container]').addClass('nav-view-direction-' + direction);
$('[data-navbar-container]').addClass('nav-bar-direction-' + direction);
if (!_.contains(['back', 'forward'], direction)) {
setTimeout(function() {
$('[data-nav-container]').removeClass('nav-view-direction-' + direction);
$('[data-navbar-container]').removeClass('nav-bar-direction-' + direction);
}, 500);
}
},

'click [data-ion-menu-toggle]': function (event, template) {
Expand Down
8 changes: 4 additions & 4 deletions components/ionFooterBar/ionFooterBar.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
Template.ionFooterBar.rendered = function () {
Template.ionFooterBar.onRendered(function () {
Session.set('hasFooter', true);
};
});

Template.ionFooterBar.destroyed = function () {
Template.ionFooterBar.onDestroyed(function () {
Session.set('hasFooter', false);
};
});

Template.ionFooterBar.helpers({
classes: function () {
Expand Down
41 changes: 18 additions & 23 deletions components/ionHeaderBar/ionHeaderBar.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,23 @@
IonHeaderBar = {
alignTitle: function () {
var align = this.alignTitle || 'center';
var $title = this.$('.title');

if (Platform.isAndroid() && !this.alignTitle) {
$title.addClass('title-left');
return;
}
var platform = Platform.get();
var platformAligns = {
android: 'left',
ios: 'center'
};
var align = this.data.alignTitle || platformAligns[platform] || 'center';
var titleClass = 'title-' + align;

var $title = this.$('.title');
$title.removeClass('title-left title-center title-right').addClass(titleClass);

if (align === 'center') {
$title.addClass('title-center');
} else if (align === 'left') {
$title.addClass('title-left');
} else if (align === 'right') {
$title.addClass('title-right');
}
},

positionTitle: function () {
var $title = this.$('.title');
var $leftButton = $('.button.pull-left');
var $rightButton = $('.button.pull-right');
var $leftButton = this.$('.button.pull-left');
var $rightButton = this.$('.button.pull-right');

// Find out which button is wider,
// use that to offset the title on both sides
Expand All @@ -45,30 +42,28 @@ IonHeaderBar = {
}
};

Template.ionHeaderBar.created = function () {
Template.ionHeaderBar.onCreated(function () {
this.data = this.data || {};
};
});

Template.ionHeaderBar.rendered = function () {
Template.ionHeaderBar.onRendered(function () {
Session.set('hasHeader', true);
IonHeaderBar.alignTitle.call(this);
IonHeaderBar.positionTitle.call(this);
};
});

Template.ionHeaderBar.destroyed = function () {
Template.ionHeaderBar.onDestroyed(function () {
Session.set('hasHeader', false);
};
});

Template.ionHeaderBar.helpers({
classes: function () {
var classes = ['bar', 'bar-header'];

if (this.class) {
classes.push(this.class);
} else {
classes.push('bar-stable');
}

return classes.join(' ');
}
});
85 changes: 55 additions & 30 deletions components/ionModal/ionModal.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,54 +42,79 @@ IonModal = {
delete this.templateClosed;

var view = (this.view[templateName] || []).slice(-1)[0];
if (!view) return;

var $modalBackdrop = $(view.firstNode());
var $modal = $('.modal', $modalBackdrop);
if (view) {
var $modalBackdrop = $(view.firstNode());
var $modal = $('.modal', $modalBackdrop);
} else {
var $modal = $('.modal');
var $modalBackdrop = $modal.parents('.modal-backdrop').get(0);
}

$modal.addClass(this.leaveClasses.join(' '));
Meteor.setTimeout(function () {
$modal.addClass(this.leaveActiveClass);
}.bind(this), 50);
if ($modal) {
$modal.addClass(this.leaveClasses.join(' '));
Meteor.setTimeout(function () {
$modal.addClass(this.leaveActiveClass);
}.bind(this), 50);
}

$modalBackdrop.fadeOut(500, function() {
$('body').removeClass('modal-open');
});
if ($modalBackdrop) {
$modalBackdrop.fadeOut(500, function() {
if ($('.modal-backdrop').length) return;
$('body').removeClass('modal-open');
});
}

}.bind(this), 0);

}
};

var isOpening = function($modal) {
return $modal.hasClass(IonModal.enterClasses.join(' ')) || $modal.hasClass(IonModal.enterActiveClasse);
};

var afterOpen = function($modal) {
$modal.removeClass(IonModal.enterClasses.join(' ')).removeClass(IonModal.enterActiveClass);
$('body').addClass('modal-open');
};

var isClosing = function($modal) {
return $modal.hasClass(IonModal.leaveClasses.join(' ')) || $modal.hasClass(IonModal.leaveActiveClasse);
};

var afterClose = function($modal, e) {
var firstChild = $modal.children().first();
var templateName = getElementModalTemplateName(firstChild);
IonModal.views = _.without(IonModal.views, templateName);
var view = IonModal.view[templateName].pop();
var $modalBackdrop = $(view.firstNode());
$modalBackdrop.removeClass('active');
$modal.removeClass(IonModal.leaveClasses.join(' ')).removeClass(IonModal.leaveActiveClass).off(IonModal.transitionEndEvent);
$('body').removeClass('modal-open');
$(e.target).parents('.modal-backdrop').remove();
Blaze.remove(view);
};

$(document).delegate('.modal', IonModal.transitionEndEvent, function(e) {
var $modal = $(e.currentTarget);
if ($modal.hasClass(IonModal.enterClasses.join(' ')) || $modal.hasClass(IonModal.enterActiveClasse)) {
$modal.removeClass(IonModal.enterClasses.join(' ')).removeClass(IonModal.enterActiveClass);
$('body').addClass('modal-open');
} else if ($modal.hasClass(IonModal.leaveClasses.join(' ')) || $modal.hasClass(IonModal.leaveActiveClasse)) {
var firstChild = $modal.children().first();
var templateName = getElementModalTemplateName(firstChild);
IonModal.views = _.without(IonModal.views, templateName);
var view = IonModal.view[templateName].pop();
var $modalBackdrop = $(view.firstNode());
$modalBackdrop.removeClass('active');
$modal.removeClass(IonModal.leaveClasses.join(' ')).removeClass(IonModal.leaveActiveClass).off(IonModal.transitionEndEvent);
$('body').removeClass('modal-open');
$(e.target).parents('.modal-backdrop').remove();
Blaze.remove(view);
if (isOpening($modal)) {
afterOpen($modal);
} else if (isClosing($modal)) {
afterClose($modal, e);
}
});

Template.ionModal.created = function () {
Template.ionModal.onCreated(function () {
this.data = this.data || {};
this.customTemplate = this.data.customTemplate || false;
this.title = this.data.title;
this.title = this.data.closeText;
this.focusFirstInput = _.isUndefined(this.data.focusFirstInput) ? true : this.data.focusFirstInput;
this.animation = this.data.animation || 'slide-in-up';
};
});

Template.ionModal.rendered = function () {
Template.ionModal.onRendered(function () {
if (this.focusFirstInput) {
Meteor.setTimeout(function () {
if (!this._domrange) return;
Expand All @@ -102,13 +127,13 @@ Template.ionModal.rendered = function () {
IonModal.close();
}
});
};
});

Template.ionModal.destroyed = function () {
Template.ionModal.onDestroyed(function () {
if (!IonModal.views.length) {
$(window).off('keyup.ionModal');
}
};
});

Template.ionModal.helpers({
barClass: function () {
Expand Down
8 changes: 4 additions & 4 deletions components/ionNavBackButton/ionNavBackButton.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ Template.ionNavBackButton.events({
}
});

Template.ionNavBackButton.created = function () {
Template.ionNavBackButton.onCreated(function () {
this.data = this.data || {};
};
});

Template.ionNavBackButton.rendered = function () {
Template.ionNavBackButton.onRendered(function () {
this.backUrl = null;

this.data = this.data || {};
Expand All @@ -39,7 +39,7 @@ Template.ionNavBackButton.rendered = function () {
this.backUrl = backRoute.path(Template.parentData(1));
}

};
});

Template.ionNavBackButton.helpers({
classes: function () {
Expand Down
12 changes: 6 additions & 6 deletions components/ionNavBar/ionNavBar.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Template.ionNavBar.created = function () {
Template.ionNavBar.onCreated(function () {
this.data = this.data || {};

if (Platform.isAndroid()) {
Expand All @@ -17,9 +17,9 @@ Template.ionNavBar.created = function () {
} else {
this.transitionDuration = 200;
}
};
});

Template.ionNavBar.rendered = function () {
Template.ionNavBar.onRendered(function () {
Session.set('hasHeader', true);

IonHeaderBar.alignTitle.call(this);
Expand Down Expand Up @@ -89,11 +89,11 @@ Template.ionNavBar.rendered = function () {
}
}
};
};
});

Template.ionNavBar.destroyed = function () {
Template.ionNavBar.onDestroyed(function () {
Session.set('hasHeader', false);
};
});

Template.ionNavBar.helpers({
classes: function () {
Expand Down
Loading