Skip to content

Instantly share code, notes, and snippets.

@russiann
Created February 4, 2016 14:12
Show Gist options
  • Save russiann/fb26ca9cab66dff9b859 to your computer and use it in GitHub Desktop.
Save russiann/fb26ca9cab66dff9b859 to your computer and use it in GitHub Desktop.
Framework7 Angular
(function() {
'use strict';
angular
.module('framework7', [])
.provider('$Framework7', Framework7)
.service('$AppBootloader', AppBootloader)
.factory('$View', View)
.factory('$Components', Components)
.factory('$Router', Router)
.factory('$Element', Element);
Framework7.$inject = [];
function Framework7 () {
var f7;
var views = {};
var MAIN_VIEW;
return {
init : init,
addView : addView,
$get: function () {
return {
view : view,
router : router,
getInstance : getInstance
};
}
};
// Configuration
function init (parameters) {
f7 = new window.Framework7(parameters);
}
function addView (name, selector, parameters, isMainView) {
if (!f7) throw Error('Framework7 not initialized.');
var view = f7.addView(selector, parameters);
views[name] = view;
if (isMainView) MAIN_VIEW = name;
}
// Application
function view(name) {
return views[name];
}
function router(_viewName) {
if (!_viewName && !MAIN_VIEW) throw Error('Default view not defined!');
if ( _viewName && !views[_viewName]) throw Error('No views defined!');
if (!_viewName && MAIN_VIEW) {
return views[MAIN_VIEW];
}
return views[_viewName];
}
function getInstance() {
return f7;
}
}
AppBootloader.$inject = ['$compile','$timeout']
function AppBootloader($compile, $timeout) {
return {
registerAngularCompiler : function(){
AngularCompiler();
}
}
function AngularCompiler(){
Dom7(document).on('pageBeforeInit', function (e) {
$timeout(function(){
var template = angular.element(Dom7(e.target));
var scope = template.scope();
$compile(template)(scope);
});
});
}
}
Components.$inject = ['$Framework7'];
function Components ($Framework7) {
return $Framework7.getInstance();
}
Router.$inject = ['$Framework7'];
function Router ($Framework7) {
var view;
function Route(viewName) {
if (!(this instanceof(Route))) return new Route(viewName);
view = $Framework7.router(viewName);
}
Route.prototype.state = function(pageName) {
var _url = pageName.toLowerCase()+'.view.html';
if (view.history.indexOf(_url) !== -1) {
view.router.back({
force: 'true',
pageName: pageName
});
} else {
view.router.loadPage(_url);
}
};
Route.prototype.back = function(options) {
return view.router.back(options);
};
Route.prototype.load = function(options) {
return view.router.load(options);
};
Route.prototype.loadContent = function(content) {
return view.router.loadContent(content);
};
Route.prototype.loadPage = function(url) {
return view.router.loadPage(url);
};
Route.prototype.refreshPage = function(url) {
return view.router.refreshPage(url);
};
Route.prototype.refreshPreviousPage = function(url) {
return view.router.refreshPreviousPage(url);
};
Route.prototype.reloadContent = function(content) {
return view.router.reloadContent(content);
};
Route.prototype.reloadPage = function(url) {
return view.router.reloadPage(url);
};
Route.prototype.reloadPreviousContent = function(content) {
return view.router.reloadPreviousContent(content);
};
Route.prototype.reloadPreviousPage = function(url) {
return view.router.reloadPreviousPage(url);
};
return Route;
}
View.$inject = ['$Framework7'];
function View ($Framework7) {
return $Framework7.router;
}
function Element (){
return Dom7;
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment