framework7.angular
Version:
Full Featured Mobile HTML Framework For Building iOS & Android Apps using Angularjs
1,061 lines (1,000 loc) • 38.2 kB
JavaScript
var myApp = {};
var mainView = {};
var rightView = {};
var $$ = Dom7;
angular.module("AngularApp", [])
.run(function() {
myApp = new Framework7({
modalTitle: 'Framework7',
material: true,
pushState: true,
angular: true
});
mainView = myApp.addView('.view-main', {});
})
.config(function() {
//landing screen
// mainView.router.loadPage("home.html")
window.location.hash = "#!/home.html";
})
.controller("RootCtrl", ["$scope", "$compile", "$rootScope", function($scope, $compile, $rootScope) {
$scope.title = "Framework7.angular";
$$('.panel-left').on('open', function() {
$$('.statusbar-overlay').addClass('with-panel-left');
});
$$('.panel-right').on('open', function() {
$$('.statusbar-overlay').addClass('with-panel-right');
});
$$('.panel-left, .panel-right').on('close', function() {
$$('.statusbar-overlay').removeClass('with-panel-left with-panel-right');
});
var dynamicPageIndex = 0;
$scope.createContentPage = function() {
mainView.router.loadContent(
' <!-- Page, data-page contains page name-->' +
' <div data-page="dynamic-content" class="page">' +
' <!-- Top Navbar-->' +
' <div class="navbar">' +
' <div class="navbar-inner">' +
' <div class="left"><a href="#" class="back link icon-only"><i class="icon icon-back"></i></a></div>' +
' <div class="center">Dynamic Page ' + (++dynamicPageIndex) + '</div>' +
' </div>' +
' </div>' +
' <!-- Scrollable page content-->' +
' <div class="page-content">' +
' <div class="content-block">' +
' <p>Here is a dynamic page created on ' + new Date() + ' !</p>' +
' <p>Go <a href="#" class="back">back</a> or generate <a href="#" class="ks-generate-page" ng-click="createContentPage()">one more page</a>.</p>' +
' </div>' +
' </div>' +
' </div>'
);
return;
}
}])
.controller("CalendarCtrl", ["$scope", function($scope) {
var calendarDefault = myApp.calendar({
input: '#ks-calendar-default',
});
// With custom date format
var calendarDateFormat = myApp.calendar({
input: '#ks-calendar-date-format',
dateFormat: 'DD, MM dd, yyyy'
});
// With multiple values
var calendarMultiple = myApp.calendar({
input: '#ks-calendar-multiple',
dateFormat: 'M dd yyyy',
multiple: true
});
// Range Picker
var calendarRange = myApp.calendar({
input: '#ks-calendar-range',
dateFormat: 'M dd yyyy',
rangePicker: true
});
// Inline with custom toolbar
var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var calendarInline = myApp.calendar({
container: '#ks-calendar-inline-container',
value: [new Date()],
weekHeader: false,
header: false,
footer: false,
toolbarTemplate: '<div class="toolbar calendar-custom-toolbar">' +
'<div class="toolbar-inner">' +
'<div class="left">' +
'<a href="#" class="link icon-only"><i class="icon icon-back"></i></a>' +
'</div>' +
'<div class="center"></div>' +
'<div class="right">' +
'<a href="#" class="link icon-only"><i class="icon icon-forward"></i></a>' +
'</div>' +
'</div>' +
'</div>',
onOpen: function(p) {
$$('.calendar-custom-toolbar .center').text(monthNames[p.currentMonth] + ', ' + p.currentYear);
$$('.calendar-custom-toolbar .left .link').on('click', function() {
calendarInline.prevMonth();
});
$$('.calendar-custom-toolbar .right .link').on('click', function() {
calendarInline.nextMonth();
});
},
onMonthYearChangeStart: function(p) {
$$('.calendar-custom-toolbar .center').text(monthNames[p.currentMonth] + ', ' + p.currentYear);
}
});
}])
.controller("InfiniteScroll", [function() {
// Loading trigger
var loading = false;
// Last loaded index, we need to pass it to script
var lastLoadedIndex = $$('.infinite-scroll .list-block li').length;
// Attach 'infinite' event handler
$$('.infinite-scroll').on('infinite', function() {
// Exit, if loading in progress
if (loading) return;
// Set loading trigger
loading = true;
// Request some file with data
$$.get('infinite-scroll-load.php', {
leftIndex: lastLoadedIndex + 1
}, function(data) {
loading = false;
if (data === '') {
// Nothing more to load, detach infinite scroll events to prevent unnecessary loadings
myApp.detachInfiniteScroll($$('.infinite-scroll'));
} else {
// Append loaded elements to list block
$$('.infinite-scroll .list-block ul').append(data);
// Update last loaded index
lastLoadedIndex = $$('.infinite-scroll .list-block li').length;
}
});
});
}])
.controller("ModalsCtrl", [function() {
$$('.demo-alert').on('click', function() {
myApp.alert('Hello!');
});
$$('.demo-confirm').on('click', function() {
myApp.confirm('Are you feel good today?', function() {
myApp.alert('Great!');
});
});
$$('.demo-prompt').on('click', function() {
myApp.prompt('What is your name?', function(data) {
// @data contains input value
myApp.confirm('Are you sure that your name is ' + data + '?', function() {
myApp.alert('Ok, your name is ' + data + ' ;)');
});
});
});
$$('.demo-login').on('click', function() {
myApp.modalLogin('Enter your username and password', function(username, password) {
myApp.alert('Thank you! Username: ' + username + ', password: ' + password);
});
});
$$('.demo-password').on('click', function() {
myApp.modalPassword('Enter your password', function(password) {
myApp.alert('Thank you! Password: ' + password);
});
});
$$('.demo-modals-stack').on('click', function() {
// Open 5 alerts
myApp.alert('Alert 1');
myApp.alert('Alert 2');
myApp.alert('Alert 3');
myApp.alert('Alert 4');
myApp.alert('Alert 5');
});
$$('.demo-picker-modal').on('click', function() {
myApp.pickerModal('.picker-modal-demo');
});
var actionSheetButtons = [
// First buttons group
[
// Group Label
{
text: 'Choose some action',
label: true
},
// First button
{
text: 'Alert',
onClick: function() {
myApp.alert('He Hoou!');
}
},
// Second button
{
text: 'Second Alert',
onClick: function() {
myApp.alert('Second Alert!');
}
},
// Another red button
{
text: 'Nice Red Button ',
color: 'red',
onClick: function() {
myApp.alert('You have clicked red button!');
}
},
],
// Second group
[{
text: 'Cancel'
}]
];
$$('.demo-actions').on('click', function(e) {
myApp.actions(actionSheetButtons);
});
$$('.demo-actions-popover').on('click', function(e) {
// We need to pass additional target parameter (this) for popover
myApp.actions(this, actionSheetButtons);
});
}])
.controller("MessageCtrl", [function() {
var conversationStarted = false;
var answers = [
'Yes!',
'No',
'Hm...',
'I am not sure',
'And what about you?',
'May be ;)',
'Lorem ipsum dolor sit amet, consectetur',
'What?',
'Are you sure?',
'Of course',
'Need to think about it',
'Amazing!!!',
];
var people = [{
name: 'Kate Johnson',
avatar: 'http://lorempixel.com/output/people-q-c-100-100-9.jpg'
}, {
name: 'Blue Ninja',
avatar: 'http://lorempixel.com/output/people-q-c-100-100-7.jpg'
},
];
var answerTimeout, isFocused;
// Initialize Messages
var myMessages = myApp.messages('.messages');
// Initialize Messagebar
var myMessagebar = myApp.messagebar('.messagebar');
$$('.messagebar a.send-message').on('touchstart mousedown', function() {
isFocused = document.activeElement && document.activeElement === myMessagebar.textarea[0];
});
$$('.messagebar a.send-message').on('click', function(e) {
// Keep focused messagebar's textarea if it was in focus before
if (isFocused) {
e.preventDefault();
myMessagebar.textarea[0].focus();
}
var messageText = myMessagebar.value();
if (messageText.length === 0) {
return;
}
// Clear messagebar
myMessagebar.clear();
// Add Message
myMessages.addMessage({
text: messageText,
avatar: 'http://lorempixel.com/output/people-q-c-200-200-6.jpg',
type: 'sent',
date: 'Now'
});
conversationStarted = true;
// Add answer after timeout
if (answerTimeout) clearTimeout(answerTimeout);
answerTimeout = setTimeout(function() {
var answerText = answers[Math.floor(Math.random() * answers.length)];
var person = people[Math.floor(Math.random() * people.length)];
myMessages.addMessage({
text: answers[Math.floor(Math.random() * answers.length)],
type: 'received',
name: person.name,
avatar: person.avatar,
date: 'Just now'
});
}, 2000);
});
}])
.controller("NotificationsCtrl", [function() {
$$('.ks-notification-1').on('click', function() {
myApp.addNotification({
message: 'Simple message'
});
});
$$('.ks-notification-2').on('click', function() {
myApp.addNotification({
message: 'Multi-line message. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc in magna nisi.',
});
});
$$('.ks-notification-3').on('click', function() {
myApp.addNotification({
message: 'Nice yellow button',
button: {
text: 'Click me',
color: 'yellow'
}
});
});
$$('.ks-notification-4').on('click', function() {
myApp.addNotification({
message: 'Close me to see Alert',
button: {
text: 'Close',
color: 'lightgreen'
},
onClose: function() {
myApp.alert('Notification closed');
}
});
});
}])
.controller("PhotoBrowser", [function() {
/* ===== Photo Browser Examples ===== */
// Create photoprobsers first:
var photoBrowserPhotos = [{
url: 'img/beach.jpg',
caption: 'Amazing beach in Goa, India'
},
'http://placekitten.com/1024/1024',
'img/lock.jpg', {
url: 'img/monkey.jpg',
caption: 'I met this monkey in Chinese mountains'
}, {
url: 'img/mountains.jpg',
caption: 'Beautiful mountains in Zhangjiajie, China'
}
];
var photoBrowserStandalone = myApp.photoBrowser({
photos: photoBrowserPhotos
});
var photoBrowserPopup = myApp.photoBrowser({
photos: photoBrowserPhotos,
type: 'popup'
});
var photoBrowserPage = myApp.photoBrowser({
photos: photoBrowserPhotos,
type: 'page'
});
var photoBrowserDark = myApp.photoBrowser({
photos: photoBrowserPhotos,
theme: 'dark'
});
var photoBrowserPopupDark = myApp.photoBrowser({
photos: photoBrowserPhotos,
theme: 'dark',
type: 'popup'
});
var photoBrowserLazy = myApp.photoBrowser({
photos: photoBrowserPhotos,
lazyLoading: true,
theme: 'dark'
});
$$('.ks-pb-standalone').on('click', function() {
photoBrowserStandalone.open();
});
$$('.ks-pb-popup').on('click', function() {
photoBrowserPopup.open();
});
$$('.ks-pb-page').on('click', function() {
photoBrowserPage.open();
});
$$('.ks-pb-popup-dark').on('click', function() {
photoBrowserPopupDark.open();
});
$$('.ks-pb-standalone-dark').on('click', function() {
photoBrowserDark.open();
});
$$('.ks-pb-lazy').on('click', function() {
photoBrowserLazy.open();
});
}])
.controller("PickerController", [function() {
var today = new Date();
// iOS Device picker
var pickerDevice = myApp.picker({
input: '#ks-picker-device',
cols: [{
textAlign: 'center',
values: ['iPhone 4', 'iPhone 4S', 'iPhone 5', 'iPhone 5S', 'iPhone 6', 'iPhone 6 Plus', 'iPad 2', 'iPad Retina', 'iPad Air', 'iPad mini', 'iPad mini 2', 'iPad mini 3']
}]
});
// Describe yourself picker
var pickerDescribe = myApp.picker({
input: '#ks-picker-describe',
rotateEffect: true,
cols: [{
textAlign: 'left',
values: ('Super Lex Amazing Bat Iron Rocket Lex Cool Beautiful Wonderful Raining Happy Amazing Funny Cool Hot').split(' ')
}, {
values: ('Man Luthor Woman Boy Girl Person Cutie Babe Raccoon').split(' ')
}, ]
});
// Dependent values
var carVendors = {
Japanese: ['Honda', 'Lexus', 'Mazda', 'Nissan', 'Toyota'],
German: ['Audi', 'BMW', 'Mercedes', 'Volkswagen', 'Volvo'],
American: ['Cadillac', 'Chrysler', 'Dodge', 'Ford']
};
var pickerDependent = myApp.picker({
input: '#ks-picker-dependent',
rotateEffect: true,
formatValue: function(picker, values) {
return values[1];
},
cols: [{
textAlign: 'left',
values: ['Japanese', 'German', 'American'],
onChange: function(picker, country) {
if (picker.cols[1].replaceValues) {
picker.cols[1].replaceValues(carVendors[country]);
}
}
}, {
values: carVendors.Japanese,
width: 160,
}, ]
});
// Custom Toolbar
var pickerCustomToolbar = myApp.picker({
input: '#ks-picker-custom-toolbar',
rotateEffect: true,
toolbarTemplate: '<div class="toolbar">' +
'<div class="toolbar-inner">' +
'<div class="left">' +
'<a href="#" class="link toolbar-randomize-link">Randomize</a>' +
'</div>' +
'<div class="right">' +
'<a href="#" class="link close-picker">That\'s me</a>' +
'</div>' +
'</div>' +
'</div>',
cols: [{
values: ['Mr', 'Ms'],
}, {
textAlign: 'left',
values: ('Super Lex Amazing Bat Iron Rocket Lex Cool Beautiful Wonderful Raining Happy Amazing Funny Cool Hot').split(' ')
}, {
values: ('Man Luthor Woman Boy Girl Person Cutie Babe Raccoon').split(' ')
}, ],
onOpen: function(picker) {
picker.container.find('.toolbar-randomize-link').on('click', function() {
var col0Values = picker.cols[0].values;
var col0Random = col0Values[Math.floor(Math.random() * col0Values.length)];
var col1Values = picker.cols[1].values;
var col1Random = col1Values[Math.floor(Math.random() * col1Values.length)];
var col2Values = picker.cols[2].values;
var col2Random = col2Values[Math.floor(Math.random() * col2Values.length)];
picker.setValue([col0Random, col1Random, col2Random]);
});
}
});
// Inline date-time
var pickerInline = myApp.picker({
input: '#ks-picker-date',
container: '#ks-picker-date-container',
toolbar: false,
rotateEffect: true,
value: [today.getMonth(), today.getDate(), today.getFullYear(), today.getHours(), (today.getMinutes() < 10 ? '0' + today.getMinutes() : today.getMinutes())],
onChange: function(picker, values, displayValues) {
var daysInMonth = new Date(picker.value[2], picker.value[0] * 1 + 1, 0).getDate();
if (values[1] > daysInMonth) {
picker.cols[1].setValue(daysInMonth);
}
},
formatValue: function(p, values, displayValues) {
return displayValues[0] + ' ' + values[1] + ', ' + values[2] + ' ' + values[3] + ':' + values[4];
},
cols: [
// Months
{
values: ('0 1 2 3 4 5 6 7 8 9 10 11').split(' '),
displayValues: ('January February March April May June July August September October November December').split(' '),
textAlign: 'left'
},
// Days
{
values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
},
// Years
{
values: (function() {
var arr = [];
for (var i = 1950; i <= 2030; i++) {
arr.push(i);
}
return arr;
})(),
},
// Space divider
{
divider: true,
content: ' '
},
// Hours
{
values: (function() {
var arr = [];
for (var i = 0; i <= 23; i++) {
arr.push(i);
}
return arr;
})(),
},
// Divider
{
divider: true,
content: ':'
},
// Minutes
{
values: (function() {
var arr = [];
for (var i = 0; i <= 59; i++) {
arr.push(i < 10 ? '0' + i : i);
}
return arr;
})(),
}
]
});
}])
.controller("PreloaderController", [function() {
$$('.demo-indicator').on('click', function() {
myApp.showIndicator();
setTimeout(function() {
myApp.hideIndicator();
}, 2000);
});
$$('.demo-preloader').on('click', function() {
myApp.showPreloader();
setTimeout(function() {
myApp.hidePreloader();
}, 2000);
});
$$('.demo-preloader-custom').on('click', function() {
myApp.showPreloader('My text...');
setTimeout(function() {
myApp.hidePreloader();
}, 2000);
});
}])
.controller("SwipeDeleteController", [function() {
$$('.demo-remove-callback').on('deleted', function() {
myApp.alert('Thanks, item removed!');
});
$$('.demo-reply').on('click', function() {
myApp.alert('Reply');
});
$$('.demo-mark').on('click', function() {
myApp.alert('Mark');
});
$$('.demo-forward').on('click', function() {
myApp.alert('Forward');
});
}])
.controller("MediaListController", [function() {
$$('.demo-remove-callback').on('deleted', function() {
myApp.alert('Thanks, item removed!');
});
$$('.demo-reply').on('click', function() {
myApp.alert('Reply');
});
$$('.demo-mark').on('click', function() {
myApp.alert('Mark');
});
$$('.demo-forward').on('click', function() {
myApp.alert('Forward');
});
}])
.controller("PullToRefresh", ["$element", function($element) {
// Dummy Content
var songs = ['Yellow Submarine', 'Don\'t Stop Me Now', 'Billie Jean', 'Californication'];
var authors = ['Beatles', 'Queen', 'Michael Jackson', 'Red Hot Chili Peppers'];
// Pull to refresh content
var ptrContent = $$($element).find('.pull-to-refresh-content');
// Add 'refresh' listener on it
ptrContent.on('refresh', function(e) {
// Emulate 2s loading
setTimeout(function() {
var picURL = 'http://lorempixel.com/88/88/abstract/' + Math.round(Math.random() * 10);
var song = songs[Math.floor(Math.random() * songs.length)];
var author = authors[Math.floor(Math.random() * authors.length)];
var linkHTML = '<li class="item-content">' +
'<div class="item-media"><img src="' + picURL + '" width="44"/></div>' +
'<div class="item-inner">' +
'<div class="item-title-row">' +
'<div class="item-title">' + song + '</div>' +
'</div>' +
'<div class="item-subtitle">' + author + '</div>' +
'</div>' +
'</li>';
ptrContent.find('ul').prepend(linkHTML);
// When loading done, we need to "close" it
myApp.pullToRefreshDone();
}, 2000);
});
}])
.controller("SortableList", [function() {
// Sortable toggler
$$('.list-block.sortable').on('open', function() {
$$('.toggle-sortable').text('Done');
});
$$('.list-block.sortable').on('close', function() {
$$('.toggle-sortable').text('Edit');
});
}])
.controller("LoginScreenEmbedded", ["$element", function($element) {
$$($element).find('.button').on('click', function() {
var username = $$($element).find('input[name="username"]').val();
var password = $$($element).find('input[name="password"]').val();
myApp.alert('Username: ' + username + ', password: ' + password, function() {
mainView.router.back();
});
});
$$('.login-screen').find('.button').on('click', function() {
var username = $$('.login-screen').find('input[name="username"]').val();
var password = $$('.login-screen').find('input[name="password"]').val();
myApp.alert('Username: ' + username + ', password: ' + password, function() {
myApp.closeModal('.login-screen');
});
});
}])
.controller("ColorThemes", ["$element", function($element) {
$$($element).find('.ks-color-theme').click(function() {
var classList = $$('body')[0].classList;
for (var i = 0; i < classList.length; i++) {
if (classList[i].indexOf('theme') === 0) classList.remove(classList[i]);
}
classList.add('theme-' + $$(this).attr('data-theme'));
});
$$($element).find('.ks-layout-theme').click(function() {
var classList = $$('body')[0].classList;
for (var i = 0; i < classList.length; i++) {
if (classList[i].indexOf('layout-') === 0) classList.remove(classList[i]);
}
classList.add('layout-' + $$(this).attr('data-theme'));
});
}])
.controller("VirtualList", ["$element", function($element) {
// Generate array with 10000 demo items:
var items = [];
for (var i = 0; i < 10000; i++) {
items.push({
title: 'Item ' + i,
subtitle: 'Subtitle ' + i
});
}
// Create virtual list
var virtualList = myApp.virtualList($$($element).find('.virtual-list'), {
// Pass array with items
items: items,
// Custom search function for searchbar
searchAll: function(query, items) {
var found = [];
for (var i = 0; i < items.length; i++) {
if (items[i].title.indexOf(query) >= 0 || query.trim() === '') found.push(i);
}
return found; //return array with mathced indexes
},
// List item Template7 template
template: '<li>' +
'<a href="#" class="item-link item-content">' +
'<div class="item-inner">' +
'<div class="item-title-row">' +
'<div class="item-title">{{title}}</div>' +
'</div>' +
'<div class="item-subtitle">{{subtitle}}</div>' +
'</div>' +
'</a>' +
'</li>',
// Item height
height: 73,
});
}])
.controller("SwiperGallery", [function() {
var swiperTop = myApp.swiper('.ks-swiper-gallery-top', {
nextButton: '.swiper-button-next',
prevButton: '.swiper-button-prev',
spaceBetween: 10
});
var swiperThumbs = myApp.swiper('.ks-swiper-gallery-thumbs', {
slidesPerView: 'auto',
spaceBetween: 10,
centeredSlides: true,
touchRatio: 0.2,
slideToClickedSlide: true
});
swiperTop.params.control = swiperThumbs;
swiperThumbs.params.control = swiperTop;
}])
.controller("Chips", ["$element", function($element) {
$$($element).find('.chip-delete').on('click', function(e) {
e.preventDefault();
var chip = $$(this).parents('.chip');
myApp.confirm('Do you want to delete this tiny demo Chip?', function() {
chip.remove();
});
});
}])
.controller("ProgressBar", [function() {
$$('.ks-demo-progressbar-inline .button').on('click', function() {
var progress = $$(this).attr('data-progress');
var progressbar = $$('.ks-demo-progressbar-inline .progressbar');
myApp.setProgressbar(progressbar, progress);
});
$$('.ks-demo-progressbar-load-hide .button').on('click', function() {
var container = $$('.ks-demo-progressbar-load-hide p:first-child');
if (container.children('.progressbar').length) return; //don't run all this if there is a current progressbar loading
myApp.showProgressbar(container, 0);
// Simluate Loading Something
var progress = 0;
function simulateLoading() {
setTimeout(function() {
var progressBefore = progress;
progress += Math.random() * 20;
myApp.setProgressbar(container, progress);
if (progressBefore < 100) {
simulateLoading(); //keep "loading"
} else myApp.hideProgressbar(container); //hide
}, Math.random() * 200 + 200);
}
simulateLoading();
});
$$('.ks-demo-progressbar-overlay .button').on('click', function() {
// Add Directly To Body
var container = $$('body');
if (container.children('.progressbar, .progressbar-infinite').length) return; //don't run all this if there is a current progressbar loading
myApp.showProgressbar(container, 0, 'yellow');
// Simluate Loading Something
var progress = 0;
function simulateLoading() {
setTimeout(function() {
var progressBefore = progress;
progress += Math.random() * 20;
myApp.setProgressbar(container, progress);
if (progressBefore < 100) {
simulateLoading(); //keep "loading"
} else myApp.hideProgressbar(container); //hide
}, Math.random() * 200 + 200);
}
simulateLoading();
});
$$('.ks-demo-progressbar-infinite-overlay .button').on('click', function() {
var container = $$('body');
if (container.children('.progressbar, .progressbar-infinite').length) return; //don't run all this if there is a current progressbar loading
myApp.showProgressbar(container, 'yellow');
setTimeout(function() {
myApp.hideProgressbar();
}, 5000);
});
$$('.ks-demo-progressbar-infinite-multi-overlay .button').on('click', function() {
var container = $$('body');
if (container.children('.progressbar, .progressbar-infinite').length) return; //don't run all this if there is a current progressbar loading
myApp.showProgressbar(container, 'multi');
setTimeout(function() {
myApp.hideProgressbar();
}, 5000);
});
}])
.controller("Autocomplete", [function() {
// Fruits data demo array
var fruits = ('Apple Apricot Avocado Banana Melon Orange Peach Pear Pineapple').split(' ');
// Simple Dropdown
var autocompleteDropdownSimple = myApp.autocomplete({
input: '#autocomplete-dropdown',
openIn: 'dropdown',
source: function(autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
}
});
// Dropdown with all values
var autocompleteDropdownAll = myApp.autocomplete({
input: '#autocomplete-dropdown-all',
openIn: 'dropdown',
source: function(autocomplete, query, render) {
var results = [];
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
}
});
// Dropdown with placeholder
var autocompleteDropdownPlaceholder = myApp.autocomplete({
input: '#autocomplete-dropdown-placeholder',
openIn: 'dropdown',
dropdownPlaceholderText: 'Try to type "Apple"',
source: function(autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
}
});
// Dropdown with ajax data
var autocompleteDropdownAjax = myApp.autocomplete({
input: '#autocomplete-dropdown-ajax',
openIn: 'dropdown',
preloader: true, //enable preloader
valueProperty: 'id', //object's "value" property name
textProperty: 'name', //object's "text" property name
limit: 20, //limit to 20 results
dropdownPlaceholderText: 'Try "JavaScript"',
source: function(autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Show Preloader
autocomplete.showPreloader();
// Do Ajax request to Autocomplete data
$$.ajax({
url: 'js/autocomplete-languages.json',
method: 'GET',
dataType: 'json',
//send "query" to server. Useful in case you generate response dynamically
data: {
query: query
},
success: function(data) {
// Find matched items
for (var i = 0; i < data.length; i++) {
if (data[i].name.toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(data[i]);
}
// Hide Preoloader
autocomplete.hidePreloader();
// Render items by passing array with result items
render(results);
}
});
}
});
// Simple Standalone
var autocompleteStandaloneSimple = myApp.autocomplete({
openIn: 'page', //open in page
opener: $$('#autocomplete-standalone'), //link that opens autocomplete
backOnSelect: true, //go back after we select something
source: function(autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
},
onChange: function(autocomplete, value) {
// Add item text value to item-after
$$('#autocomplete-standalone').find('.item-after').text(value[0]);
// Add item value to input value
$$('#autocomplete-standalone').find('input').val(value[0]);
}
});
// Standalone Popup
var autocompleteStandalonePopup = myApp.autocomplete({
openIn: 'popup', //open in page
opener: $$('#autocomplete-standalone-popup'), //link that opens autocomplete
backOnSelect: true, //go back after we select something
source: function(autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
},
onChange: function(autocomplete, value) {
// Add item text value to item-after
$$('#autocomplete-standalone-popup').find('.item-after').text(value[0]);
// Add item value to input value
$$('#autocomplete-standalone-popup').find('input').val(value[0]);
}
});
// Multiple Standalone
var autocompleteStandaloneMultiple = myApp.autocomplete({
openIn: 'page', //open in page
opener: $$('#autocomplete-standalone-multiple'), //link that opens autocomplete
multiple: true, //allow multiple values
source: function(autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
},
onChange: function(autocomplete, value) {
// Add item text value to item-after
$$('#autocomplete-standalone-multiple').find('.item-after').text(value.join(', '));
// Add item value to input value
$$('#autocomplete-standalone-multiple').find('input').val(value.join(', '));
}
});
// Standalone With Ajax
var autocompleteStandaloneAjax = myApp.autocomplete({
openIn: 'page', //open in page
opener: $$('#autocomplete-standalone-ajax'), //link that opens autocomplete
multiple: true, //allow multiple values
valueProperty: 'id', //object's "value" property name
textProperty: 'name', //object's "text" property name
limit: 50,
preloader: true, //enable preloader
preloaderColor: 'white', //preloader color
source: function(autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Show Preloader
autocomplete.showPreloader();
// Do Ajax request to Autocomplete data
$$.ajax({
url: 'js/autocomplete-languages.json',
method: 'GET',
dataType: 'json',
//send "query" to server. Useful in case you generate response dynamically
data: {
query: query
},
success: function(data) {
// Find matched items
for (var i = 0; i < data.length; i++) {
if (data[i].name.toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(data[i]);
}
// Hide Preoloader
autocomplete.hidePreloader();
// Render items by passing array with result items
render(results);
}
});
},
onChange: function(autocomplete, value) {
var itemText = [],
inputValue = [];
for (var i = 0; i < value.length; i++) {
itemText.push(value[i].name);
inputValue.push(value[i].id);
}
// Add item text value to item-after
$$('#autocomplete-standalone-ajax').find('.item-after').text(itemText.join(', '));
// Add item value to input value
$$('#autocomplete-standalone-ajax').find('input').val(inputValue.join(', '));
}
});
}])
.directive("panelLeft", function() {
return {
templateUrl: "panel-left.html"
}
})
.directive("panelRight", function() {
return {
templateUrl: "panel-right.html"
}
});
document.addEventListener("DOMContentLoaded", function(){
angular.bootstrap(document, ['AngularApp']);
});