jQuery(function($) {
//editables on first profile page
$.fn.editable.defaults.mode = 'inline';
$.fn.editableform.loading = "
";
$.fn.editableform.buttons = ''+
'';
//editables
//text editable
$('#username')
.editable({
type: 'text',
name: 'username'
});
//select2 editable
var countries = [];
$.each({ "CA": "Canada", "IN": "India", "NL": "Netherlands", "TR": "Turkey", "US": "United States"}, function(k, v) {
countries.push({id: k, text: v});
});
var cities = [];
cities["CA"] = [];
$.each(["Toronto", "Ottawa", "Calgary", "Vancouver"] , function(k, v){
cities["CA"].push({id: v, text: v});
});
cities["IN"] = [];
$.each(["Delhi", "Mumbai", "Bangalore"] , function(k, v){
cities["IN"].push({id: v, text: v});
});
cities["NL"] = [];
$.each(["Amsterdam", "Rotterdam", "The Hague"] , function(k, v){
cities["NL"].push({id: v, text: v});
});
cities["TR"] = [];
$.each(["Ankara", "Istanbul", "Izmir"] , function(k, v){
cities["TR"].push({id: v, text: v});
});
cities["US"] = [];
$.each(["New York", "Miami", "Los Angeles", "Chicago", "Wysconsin"] , function(k, v){
cities["US"].push({id: v, text: v});
});
var currentValue = "NL";
$('#country').editable({
type: 'select2',
value : 'NL',
//onblur:'ignore',
source: countries,
select2: {
'width': 140
},
success: function(response, newValue) {
if(currentValue == newValue) return;
currentValue = newValue;
var new_source = (!newValue || newValue == "") ? [] : cities[newValue];
//the destroy method is causing errors in x-editable v1.4.6+
//it worked fine in v1.4.5
/**
$('#city').editable('destroy').editable({
type: 'select2',
source: new_source
}).editable('setValue', null);
*/
//so we remove it altogether and create a new element
var city = $('#city').removeAttr('id').get(0);
$(city).clone().attr('id', 'city').text('Select City').editable({
type: 'select2',
value : null,
//onblur:'ignore',
source: new_source,
select2: {
'width': 140
}
}).insertAfter(city);//insert it after previous instance
$(city).remove();//remove previous instance
}
});
$('#city').editable({
type: 'select2',
value : 'Amsterdam',
//onblur:'ignore',
source: cities[currentValue],
select2: {
'width': 140
}
});
//custom date editable
$('#signup').editable({
type: 'adate',
date: {
//datepicker plugin options
format: 'yyyy/mm/dd',
viewformat: 'yyyy/mm/dd',
weekStart: 1
//,nativeUI: true//if true and browser support input[type=date], native browser control will be used
//,format: 'yyyy-mm-dd',
//viewformat: 'yyyy-mm-dd'
}
})
$('#age').editable({
type: 'spinner',
name : 'age',
spinner : {
min : 16,
max : 99,
step: 1,
on_sides: true
//,nativeUI: true//if true and browser support input[type=number], native browser control will be used
}
});
$('#login').editable({
type: 'slider',
name : 'login',
slider : {
min : 1,
max: 50,
width: 100
//,nativeUI: true//if true and browser support input[type=range], native browser control will be used
},
success: function(response, newValue) {
if(parseInt(newValue) == 1)
$(this).html(newValue + " hour ago");
else $(this).html(newValue + " hours ago");
}
});
$('#about').editable({
mode: 'inline',
type: 'wysiwyg',
name : 'about',
wysiwyg : {
//css : {'max-width':'300px'}
},
success: function(response, newValue) {
}
});
// *** editable avatar *** //
try {//ie8 throws some harmless exceptions, so let's catch'em
//first let's add a fake appendChild method for Image element for browsers that have a problem with this
//because editable plugin calls appendChild, and it causes errors on IE at unpredicted points
try {
document.createElement('IMG').appendChild(document.createElement('B'));
} catch(e) {
Image.prototype.appendChild = function(el){}
}
var last_gritter
$('#avatar').editable({
type: 'image',
name: 'avatar',
value: null,
image: {
//specify ace file input plugin's options here
btn_choose: 'Change Avatar',
droppable: true,
maxSize: 110000,//~100Kb
//and a few extra ones here
name: 'avatar',//put the field name here as well, will be used inside the custom plugin
on_error : function(error_type) {//on_error function will be called when the selected file has a problem
if(last_gritter) $.gritter.remove(last_gritter);
if(error_type == 1) {//file format error
last_gritter = $.gritter.add({
title: 'File is not an image!',
text: 'Please choose a jpg|gif|png image!',
class_name: 'gritter-error gritter-center'
});
} else if(error_type == 2) {//file size rror
last_gritter = $.gritter.add({
title: 'File too big!',
text: 'Image size should not exceed 100Kb!',
class_name: 'gritter-error gritter-center'
});
}
else {//other error
}
},
on_success : function() {
$.gritter.removeAll();
}
},
url: function(params) {
// ***UPDATE AVATAR HERE*** //
//for a working upload example you can replace the contents of this function with
//examples/profile-avatar-update.js
var deferred = new $.Deferred
var value = $('#avatar').next().find('input[type=hidden]:eq(0)').val();
if(!value || value.length == 0) {
deferred.resolve();
return deferred.promise();
}
//dummy upload
setTimeout(function(){
if("FileReader" in window) {
//for browsers that have a thumbnail of selected image
var thumb = $('#avatar').next().find('img').data('thumb');
if(thumb) $('#avatar').get(0).src = thumb;
}
deferred.resolve({'status':'OK'});
if(last_gritter) $.gritter.remove(last_gritter);
last_gritter = $.gritter.add({
title: 'Avatar Updated!',
text: 'Uploading to server can be easily implemented. A working example is included with the template.',
class_name: 'gritter-info gritter-center'
});
} , parseInt(Math.random() * 800 + 800))
return deferred.promise();
// ***END OF UPDATE AVATAR HERE*** //
},
success: function(response, newValue) {
}
})
}catch(e) {}
/**
//let's display edit mode by default?
var blank_image = true;//somehow you determine if image is initially blank or not, or you just want to display file input at first
if(blank_image) {
$('#avatar').editable('show').on('hidden', function(e, reason) {
if(reason == 'onblur') {
$('#avatar').editable('show');
return;
}
$('#avatar').off('hidden');
})
}
*/
//another option is using modals
$('#avatar2').on('click', function(){
var modal =
'';
var modal = $(modal);
modal.modal("show").on("hidden", function(){
modal.remove();
});
var working = false;
var form = modal.find('form:eq(0)');
var file = form.find('input[type=file]').eq(0);
file.ace_file_input({
style:'well',
btn_choose:'Click to choose new avatar',
btn_change:null,
no_icon:'ace-icon fa fa-picture-o',
thumbnail:'small',
before_remove: function() {
//don't remove/reset files while being uploaded
return !working;
},
allowExt: ['jpg', 'jpeg', 'png', 'gif'],
allowMime: ['image/jpg', 'image/jpeg', 'image/png', 'image/gif']
});
form.on('submit', function(){
if(!file.data('ace_input_files')) return false;
file.ace_file_input('disable');
form.find('button').attr('disabled', 'disabled');
form.find('.modal-body').append("
");
var deferred = new $.Deferred;
working = true;
deferred.done(function() {
form.find('button').removeAttr('disabled');
form.find('input[type=file]').ace_file_input('enable');
form.find('.modal-body > :last-child').remove();
modal.modal("hide");
var thumb = file.next().find('img').data('thumb');
if(thumb) $('#avatar2').get(0).src = thumb;
working = false;
});
setTimeout(function(){
deferred.resolve();
} , parseInt(Math.random() * 800 + 800));
return false;
});
});
//////////////////////////////
$('#profile-feed-1').ace_scroll({
height: '250px',
mouseWheelLock: true,
alwaysVisible : true
});
$('a[ data-original-title]').tooltip();
$('.easy-pie-chart.percentage').each(function(){
var barColor = $(this).data('color') || '#555';
var trackColor = '#E2E2E2';
var size = parseInt($(this).data('size')) || 72;
$(this).easyPieChart({
barColor: barColor,
trackColor: trackColor,
scaleColor: false,
lineCap: 'butt',
lineWidth: parseInt(size/10),
animate:false,
size: size
}).css('color', barColor);
});
///////////////////////////////////////////
//right & left position
//show the user info on right or left depending on its position
$('#user-profile-2 .memberdiv').on('mouseenter touchstart', function(){
var $this = $(this);
var $parent = $this.closest('.tab-pane');
var off1 = $parent.offset();
var w1 = $parent.width();
var off2 = $this.offset();
var w2 = $this.width();
var place = 'left';
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) place = 'right';
$this.find('.popover').removeClass('right left').addClass(place);
}).on('click', function(e) {
e.preventDefault();
});
///////////////////////////////////////////
$('#user-profile-3')
.find('input[type=file]').ace_file_input({
style:'well',
btn_choose:'Change avatar',
btn_change:null,
no_icon:'ace-icon fa fa-picture-o',
thumbnail:'large',
droppable:true,
allowExt: ['jpg', 'jpeg', 'png', 'gif'],
allowMime: ['image/jpg', 'image/jpeg', 'image/png', 'image/gif']
})
.end().find('button[type=reset]').on(ace.click_event, function(){
$('#user-profile-3 input[type=file]').ace_file_input('reset_input');
})
.end().find('.date-picker').datepicker().next().on(ace.click_event, function(){
$(this).prev().focus();
})
$('.input-mask-phone').mask('(999) 999-9999');
$('#user-profile-3').find('input[type=file]').ace_file_input('show_file_list', [{type: 'image', name: $('#avatar').attr('src')}]);
////////////////////
//change profile
$('[data-toggle="buttons"] .btn').on('click', function(e){
var target = $(this).find('input[type=radio]');
var which = parseInt(target.val());
$('.user-profile').parent().addClass('hide');
$('#user-profile-'+which).parent().removeClass('hide');
});
/////////////////////////////////////
$(document).one('ajaxloadstart.page', function(e) {
//in ajax mode, remove remaining elements before leaving page
try {
$('.editable').editable('destroy');
} catch(e) {}
$('[class*=select2]').remove();
});
});