From 8f7709b6c4935b0985f9439868aa401982666056 Mon Sep 17 00:00:00 2001 From: Athou Date: Sun, 14 Apr 2013 08:45:24 +0200 Subject: [PATCH] use a cdn when possible --- pom.xml | 50 +- .../frontend/CommaFeedApplication.java | 136 +- .../commafeed/frontend/pages/BasePage.java | 5 +- .../commafeed/frontend/pages/HomePage.java | 7 - .../components/BootstrapFeedbackPanel.java | 7 +- .../references/angular/AngularReference.java | 9 +- .../angular/AngularResourceReference.java | 10 +- .../angular/AngularSanitizeReference.java | 10 +- .../angularui/AngularUIReference.java | 18 +- .../references/angularui/angular-ui.css | 50 - .../references/angularui/angular-ui.js | 1461 ------------- .../AngularUIBootstrapReference.java | 7 +- .../ui-bootstrap-tpls-0.2.0.js | 1818 ----------------- .../ui-bootstrap-tpls-0.2.0.min.js | 1 - .../bootstrap/BootstrapReference.java | 41 + .../codemirror/CodeMirrorCssReference.java | 9 +- .../codemirror/CodeMirrorReference.java | 16 +- .../references/jquery/JQueryReference.java | 22 + .../mousetrap/MouseTrapReference.java | 9 +- .../references/select2/Select2Reference.java | 31 - .../references/spinjs/SpinJSReference.java | 9 +- .../commafeed/frontend/utils/WicketUtils.java | 22 - .../utils/exception/DisplayExceptionPage.java | 4 +- src/main/webapp/css/app.css | 6 + src/main/webapp/templates/_subscribe.html | 2 +- 25 files changed, 140 insertions(+), 3620 deletions(-) delete mode 100644 src/main/java/com/commafeed/frontend/references/angularui/angular-ui.css delete mode 100644 src/main/java/com/commafeed/frontend/references/angularui/angular-ui.js delete mode 100644 src/main/java/com/commafeed/frontend/references/angularuibootstrap/ui-bootstrap-tpls-0.2.0.js delete mode 100644 src/main/java/com/commafeed/frontend/references/angularuibootstrap/ui-bootstrap-tpls-0.2.0.min.js create mode 100644 src/main/java/com/commafeed/frontend/references/bootstrap/BootstrapReference.java create mode 100644 src/main/java/com/commafeed/frontend/references/jquery/JQueryReference.java delete mode 100644 src/main/java/com/commafeed/frontend/references/select2/Select2Reference.java diff --git a/pom.xml b/pom.xml index 41a38c92..09cf0b8e 100644 --- a/pom.xml +++ b/pom.xml @@ -285,55 +285,7 @@ wicket-cdi 6.6.0 - - - org.jboss - jboss-vfs - 3.1.0.Final - - - de.agilecoders.wicket - wicket-bootstrap-core - 0.8.1 - - - dom4j - dom4j - - - - - de.agilecoders.wicket - wicket-bootstrap-extensions - 0.8.1 - - - - org.webjars - angularjs - 1.1.4 - - - org.webjars - select2 - 3.3.1 - - - org.webjars - spin-js - 1.2.7 - - - org.webjars - mousetrap - 1.3 - - - org.webjars - codemirror - 3.11 - - + junit junit diff --git a/src/main/java/com/commafeed/frontend/CommaFeedApplication.java b/src/main/java/com/commafeed/frontend/CommaFeedApplication.java index f65063bb..167d30c0 100644 --- a/src/main/java/com/commafeed/frontend/CommaFeedApplication.java +++ b/src/main/java/com/commafeed/frontend/CommaFeedApplication.java @@ -1,10 +1,5 @@ package com.commafeed.frontend; -import java.io.IOException; -import java.net.URL; -import java.util.List; -import java.util.jar.JarFile; - import javax.enterprise.inject.spi.BeanManager; import javax.naming.InitialContext; import javax.naming.NamingException; @@ -26,6 +21,9 @@ import org.apache.wicket.cdi.ConversationPropagation; import org.apache.wicket.core.request.handler.PageProvider; import org.apache.wicket.core.request.handler.RenderPageRequestHandler; import org.apache.wicket.core.request.handler.RenderPageRequestHandler.RedirectPolicy; +import org.apache.wicket.markup.head.IHeaderResponse; +import org.apache.wicket.markup.head.filter.JavaScriptFilteredIntoFooterHeaderResponse; +import org.apache.wicket.markup.html.IHeaderResponseDecorator; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.request.IRequestHandler; import org.apache.wicket.request.Request; @@ -33,13 +31,7 @@ import org.apache.wicket.request.Response; import org.apache.wicket.request.component.IRequestableComponent; import org.apache.wicket.request.cycle.AbstractRequestCycleListener; import org.apache.wicket.request.cycle.RequestCycle; -import org.apache.wicket.request.resource.JavaScriptResourceReference; import org.apache.wicket.util.cookies.CookieUtils; -import org.jboss.vfs.VirtualFile; -import org.reflections.ReflectionsException; -import org.reflections.vfs.SystemDir; -import org.reflections.vfs.Vfs; -import org.reflections.vfs.ZipDir; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,29 +42,7 @@ import com.commafeed.frontend.pages.HomePage; import com.commafeed.frontend.pages.LogoutPage; import com.commafeed.frontend.pages.TestRssPage; import com.commafeed.frontend.pages.WelcomePage; -import com.commafeed.frontend.references.angular.AngularReference; -import com.commafeed.frontend.references.angular.AngularResourceReference; -import com.commafeed.frontend.references.angular.AngularSanitizeReference; -import com.commafeed.frontend.references.angularui.AngularUIReference; -import com.commafeed.frontend.references.angularuibootstrap.AngularUIBootstrapReference; -import com.commafeed.frontend.references.angularuistate.AngularUIStateReference; -import com.commafeed.frontend.references.codemirror.CodeMirrorCssReference; -import com.commafeed.frontend.references.codemirror.CodeMirrorReference; -import com.commafeed.frontend.references.mousetrap.MouseTrapReference; -import com.commafeed.frontend.references.nggrid.NGGridReference; -import com.commafeed.frontend.references.nginfinitescroll.NGInfiniteScrollReference; -import com.commafeed.frontend.references.ngupload.NGUploadReference; -import com.commafeed.frontend.references.select2.Select2Reference; -import com.commafeed.frontend.references.spinjs.SpinJSReference; import com.commafeed.frontend.utils.exception.DisplayExceptionPage; -import com.google.api.client.util.Lists; -import com.google.javascript.jscomp.CompilationLevel; - -import de.agilecoders.wicket.Bootstrap; -import de.agilecoders.wicket.javascript.GoogleClosureJavaScriptCompressor; -import de.agilecoders.wicket.javascript.YuiCssCompressor; -import de.agilecoders.wicket.markup.html.RenderJavaScriptToFooterHeaderResponseDecorator; -import de.agilecoders.wicket.settings.BootstrapSettings; public class CommaFeedApplication extends AuthenticatedWebApplication { @@ -93,17 +63,18 @@ public class CommaFeedApplication extends AuthenticatedWebApplication { setupInjection(); setupSecurity(); - setupBootstrap(); - setupResourceBundles(); getMarkupSettings().setStripWicketTags(true); getMarkupSettings().setCompressWhitespace(true); getMarkupSettings().setDefaultMarkupEncoding("UTF-8"); - getResourceSettings().setJavaScriptCompressor( - new GoogleClosureJavaScriptCompressor( - CompilationLevel.SIMPLE_OPTIMIZATIONS)); - getResourceSettings().setCssCompressor(new YuiCssCompressor()); + setHeaderResponseDecorator(new IHeaderResponseDecorator() { + @Override + public IHeaderResponse decorate(IHeaderResponse response) { + return new JavaScriptFilteredIntoFooterHeaderResponse(response, + "footer-container"); + } + }); getRequestCycleListeners().add(new AbstractRequestCycleListener() { @Override @@ -119,42 +90,6 @@ public class CommaFeedApplication extends AuthenticatedWebApplication { }); } - private void setupResourceBundles() { - - List refs = Lists.newArrayList(); - - refs.add((JavaScriptResourceReference) getJavaScriptLibrarySettings() - .getJQueryReference()); - refs.add((JavaScriptResourceReference) Bootstrap.getSettings() - .getJsResourceReference()); - - refs.add(AngularReference.INSTANCE); - refs.add(AngularResourceReference.INSTANCE); - refs.add(AngularSanitizeReference.INSTANCE); - refs.add(AngularUIReference.INSTANCE); - refs.add(AngularUIBootstrapReference.INSTANCE); - refs.add(AngularUIStateReference.INSTANCE); - refs.add(NGUploadReference.INSTANCE); - refs.add(NGInfiniteScrollReference.INSTANCE); - refs.add(Select2Reference.INSTANCE); - refs.add(SpinJSReference.INSTANCE); - refs.add(MouseTrapReference.INSTANCE); - refs.add(NGGridReference.INSTANCE); - refs.add(CodeMirrorReference.INSTANCE); - refs.add(CodeMirrorCssReference.INSTANCE); - - getResourceBundles().addJavaScriptBundle(CommaFeedApplication.class, - "libs.js", refs.toArray(new JavaScriptResourceReference[0])); - - } - - private void setupBootstrap() { - BootstrapSettings settings = new BootstrapSettings(); - settings.setJsResourceFilterName("footer-container"); - Bootstrap.install(this, settings); - setHeaderResponseDecorator(new RenderJavaScriptToFooterHeaderResponseDecorator()); - } - private void setupSecurity() { getSecuritySettings().setAuthenticationStrategy( new DefaultAuthenticationStrategy("LoggedIn") { @@ -239,55 +174,4 @@ public class CommaFeedApplication extends AuthenticatedWebApplication { return (CommaFeedApplication) Application.get(); } - - /** - * Reflections fix for JbossAS7 - * - * https://code.google.com/p/reflections/wiki/JBossIntegration - */ - static { - - Vfs.addDefaultURLTypes(new Vfs.UrlType() { - public boolean matches(URL url) { - return url.getProtocol().equals("vfs"); - } - - public Vfs.Dir createDir(URL url) { - VirtualFile content; - try { - content = (VirtualFile) url.openConnection().getContent(); - } catch (Throwable e) { - throw new ReflectionsException( - "could not open url connection as VirtualFile [" - + url + "]", e); - } - - Vfs.Dir dir = null; - try { - dir = createDir(new java.io.File(content.getPhysicalFile() - .getParentFile(), content.getName())); - } catch (IOException e) { /* continue */ - } - if (dir == null) { - try { - dir = createDir(content.getPhysicalFile()); - } catch (IOException e) { /* continue */ - } - } - return dir; - } - - Vfs.Dir createDir(java.io.File file) { - try { - return file.exists() && file.canRead() ? file.isDirectory() ? new SystemDir( - file) : new ZipDir(new JarFile(file)) - : null; - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - }); - } - } diff --git a/src/main/java/com/commafeed/frontend/pages/BasePage.java b/src/main/java/com/commafeed/frontend/pages/BasePage.java index e5d79372..7c1923e8 100644 --- a/src/main/java/com/commafeed/frontend/pages/BasePage.java +++ b/src/main/java/com/commafeed/frontend/pages/BasePage.java @@ -14,8 +14,7 @@ import com.commafeed.backend.dao.FeedSubscriptionDAO; import com.commafeed.backend.dao.UserDAO; import com.commafeed.backend.dao.UserRoleDAO; import com.commafeed.backend.dao.UserSettingsDAO; - -import de.agilecoders.wicket.Bootstrap; +import com.commafeed.frontend.references.bootstrap.BootstrapReference; @SuppressWarnings("serial") public abstract class BasePage extends WebPage { @@ -51,6 +50,6 @@ public abstract class BasePage extends WebPage { @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); - Bootstrap.renderHead(response); + BootstrapReference.renderHead(response); } } diff --git a/src/main/java/com/commafeed/frontend/pages/HomePage.java b/src/main/java/com/commafeed/frontend/pages/HomePage.java index 51d61bed..f331a39c 100644 --- a/src/main/java/com/commafeed/frontend/pages/HomePage.java +++ b/src/main/java/com/commafeed/frontend/pages/HomePage.java @@ -24,11 +24,8 @@ import com.commafeed.frontend.references.mousetrap.MouseTrapReference; import com.commafeed.frontend.references.nggrid.NGGridReference; import com.commafeed.frontend.references.nginfinitescroll.NGInfiniteScrollReference; import com.commafeed.frontend.references.ngupload.NGUploadReference; -import com.commafeed.frontend.references.select2.Select2Reference; import com.commafeed.frontend.references.spinjs.SpinJSReference; -import de.agilecoders.wicket.markup.html.bootstrap.extensions.icon.OpenWebIconsCssReference; - @SuppressWarnings("serial") @SecurityCheck(Role.USER) public class HomePage extends BasePage { @@ -48,15 +45,11 @@ public class HomePage extends BasePage { AngularUIStateReference.renderHead(response); NGUploadReference.renderHead(response); NGInfiniteScrollReference.renderHead(response); - Select2Reference.renderHead(response); SpinJSReference.renderHead(response); MouseTrapReference.renderHead(response); NGGridReference.renderHead(response); CodeMirrorCssReference.renderHead(response); - response.render(CssHeaderItem.forReference(OpenWebIconsCssReference - .instance())); - response.render(JavaScriptHeaderItem.forUrl("js/main.js")); response.render(JavaScriptHeaderItem.forUrl("js/controllers.js")); response.render(JavaScriptHeaderItem.forUrl("js/directives.js")); diff --git a/src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.java b/src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.java index ed4665df..f583f9ed 100644 --- a/src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.java +++ b/src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.java @@ -7,10 +7,9 @@ import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.AbstractReadOnlyModel; +import com.commafeed.frontend.references.bootstrap.BootstrapReference; import com.commafeed.frontend.utils.WicketUtils; -import de.agilecoders.wicket.Bootstrap; - @SuppressWarnings("serial") public class BootstrapFeedbackPanel extends FeedbackPanel { @@ -45,7 +44,7 @@ public class BootstrapFeedbackPanel extends FeedbackPanel { get("feedbackul").add(new AttributeAppender("class", " unstyled")); } - + @Override protected void onComponentTag(ComponentTag tag) { tag.setName("div"); @@ -55,7 +54,7 @@ public class BootstrapFeedbackPanel extends FeedbackPanel { @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); - Bootstrap.renderHead(response); + BootstrapReference.renderHead(response); WicketUtils.loadCSS(response, BootstrapFeedbackPanel.class); } diff --git a/src/main/java/com/commafeed/frontend/references/angular/AngularReference.java b/src/main/java/com/commafeed/frontend/references/angular/AngularReference.java index 47a5e934..44652ade 100644 --- a/src/main/java/com/commafeed/frontend/references/angular/AngularReference.java +++ b/src/main/java/com/commafeed/frontend/references/angular/AngularReference.java @@ -2,16 +2,17 @@ package com.commafeed.frontend.references.angular; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; +import org.apache.wicket.request.Url; +import org.apache.wicket.request.resource.UrlResourceReference; -import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference; - -public class AngularReference extends WebjarsJavaScriptResourceReference { +public class AngularReference extends UrlResourceReference { private static final long serialVersionUID = 1L; public static final AngularReference INSTANCE = new AngularReference(); private AngularReference() { - super("/angularjs/current/angular.js"); + super( + Url.parse("https://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js")); } public static void renderHead(final IHeaderResponse response) { diff --git a/src/main/java/com/commafeed/frontend/references/angular/AngularResourceReference.java b/src/main/java/com/commafeed/frontend/references/angular/AngularResourceReference.java index 93d632d8..9662f648 100644 --- a/src/main/java/com/commafeed/frontend/references/angular/AngularResourceReference.java +++ b/src/main/java/com/commafeed/frontend/references/angular/AngularResourceReference.java @@ -5,17 +5,17 @@ import java.util.Arrays; import org.apache.wicket.markup.head.HeaderItem; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; +import org.apache.wicket.request.Url; +import org.apache.wicket.request.resource.UrlResourceReference; -import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference; - -public class AngularResourceReference extends - WebjarsJavaScriptResourceReference { +public class AngularResourceReference extends UrlResourceReference { private static final long serialVersionUID = 1L; public static final AngularResourceReference INSTANCE = new AngularResourceReference(); private AngularResourceReference() { - super("/angularjs/current/angular-resource.js"); + super( + Url.parse("https://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular-resource.min.js")); } @Override diff --git a/src/main/java/com/commafeed/frontend/references/angular/AngularSanitizeReference.java b/src/main/java/com/commafeed/frontend/references/angular/AngularSanitizeReference.java index 0e1de73d..251f8bd2 100644 --- a/src/main/java/com/commafeed/frontend/references/angular/AngularSanitizeReference.java +++ b/src/main/java/com/commafeed/frontend/references/angular/AngularSanitizeReference.java @@ -5,17 +5,17 @@ import java.util.Arrays; import org.apache.wicket.markup.head.HeaderItem; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; +import org.apache.wicket.request.Url; +import org.apache.wicket.request.resource.UrlResourceReference; -import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference; - -public class AngularSanitizeReference extends - WebjarsJavaScriptResourceReference { +public class AngularSanitizeReference extends UrlResourceReference { private static final long serialVersionUID = 1L; public static final AngularSanitizeReference INSTANCE = new AngularSanitizeReference(); private AngularSanitizeReference() { - super("/angularjs/current/angular-sanitize.js"); + super( + Url.parse("https://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular-sanitize.min.js")); } @Override diff --git a/src/main/java/com/commafeed/frontend/references/angularui/AngularUIReference.java b/src/main/java/com/commafeed/frontend/references/angularui/AngularUIReference.java index 54349770..acd6d699 100644 --- a/src/main/java/com/commafeed/frontend/references/angularui/AngularUIReference.java +++ b/src/main/java/com/commafeed/frontend/references/angularui/AngularUIReference.java @@ -6,27 +6,29 @@ import org.apache.wicket.markup.head.CssHeaderItem; import org.apache.wicket.markup.head.HeaderItem; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; -import org.apache.wicket.request.resource.CssResourceReference; -import org.apache.wicket.request.resource.JavaScriptResourceReference; +import org.apache.wicket.request.Url; +import org.apache.wicket.request.resource.UrlResourceReference; import com.commafeed.frontend.references.angular.AngularReference; -public class AngularUIReference extends JavaScriptResourceReference { +public class AngularUIReference extends UrlResourceReference { private static final long serialVersionUID = 1L; public static final AngularUIReference INSTANCE = new AngularUIReference(); private AngularUIReference() { - super(AngularUIReference.class, "angular-ui.js"); + super( + Url.parse("https://cdnjs.cloudflare.com/ajax/libs/angular-ui/0.4.0/angular-ui.min.js")); } @SuppressWarnings("unchecked") @Override public Iterable getDependencies() { - return Arrays.asList(JavaScriptHeaderItem - .forReference(AngularReference.INSTANCE), CssHeaderItem - .forReference(new CssResourceReference( - AngularUIReference.class, "angular-ui.css"))); + return Arrays + .asList(JavaScriptHeaderItem + .forReference(AngularReference.INSTANCE), + CssHeaderItem.forReference(new UrlResourceReference( + Url.parse("https://cdnjs.cloudflare.com/ajax/libs/angular-ui/0.4.0/angular-ui.min.css")))); } public static void renderHead(final IHeaderResponse response) { diff --git a/src/main/java/com/commafeed/frontend/references/angularui/angular-ui.css b/src/main/java/com/commafeed/frontend/references/angularui/angular-ui.css deleted file mode 100644 index eb02a8ed..00000000 --- a/src/main/java/com/commafeed/frontend/references/angularui/angular-ui.css +++ /dev/null @@ -1,50 +0,0 @@ -/** - * import components to builds angular-ui.css - */ - -/* ui-reset */ - -.ui-resetwrap { - position: relative; - display: inline-block; -} - -.ui-reset { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: none; - height: 100%; - cursor: pointer; -} - -.ui-resetwrap:hover .ui-reset { - display: block; -} - -/* ui-currency */ - -.ui-currency-pos { - color: green; -} - -.ui-currency-neg { - color: red; -} - -.ui-currency-zero { - color: blue; -} - -.ui-currency-pos.ui-bignum, -.ui-currency-neg.ui-smallnum { - font-size: 110%; -} - -/* highlight */ - -.ui-match { - background: yellow; -} - diff --git a/src/main/java/com/commafeed/frontend/references/angularui/angular-ui.js b/src/main/java/com/commafeed/frontend/references/angularui/angular-ui.js deleted file mode 100644 index e92b2cfc..00000000 --- a/src/main/java/com/commafeed/frontend/references/angularui/angular-ui.js +++ /dev/null @@ -1,1461 +0,0 @@ -/** - * AngularUI - The companion suite for AngularJS - * @version v0.4.0 - 2013-02-15 - * @link http://angular-ui.github.com - * @license MIT License, http://www.opensource.org/licenses/MIT - */ - - -angular.module('ui.config', []).value('ui.config', {}); -angular.module('ui.filters', ['ui.config']); -angular.module('ui.directives', ['ui.config']); -angular.module('ui', ['ui.filters', 'ui.directives', 'ui.config']); - -/** - * Animates the injection of new DOM elements by simply creating the DOM with a class and then immediately removing it - * Animations must be done using CSS3 transitions, but provide excellent flexibility - * - * @todo Add proper support for animating out - * @param [options] {mixed} Can be an object with multiple options, or a string with the animation class - * class {string} the CSS class(es) to use. For example, 'ui-hide' might be an excellent alternative class. - * @example
  • {{item}}
  • - */ -angular.module('ui.directives').directive('uiAnimate', ['ui.config', '$timeout', function (uiConfig, $timeout) { - var options = {}; - if (angular.isString(uiConfig.animate)) { - options['class'] = uiConfig.animate; - } else if (uiConfig.animate) { - options = uiConfig.animate; - } - return { - restrict: 'A', // supports using directive as element, attribute and class - link: function ($scope, element, attrs) { - var opts = {}; - if (attrs.uiAnimate) { - opts = $scope.$eval(attrs.uiAnimate); - if (angular.isString(opts)) { - opts = {'class': opts}; - } - } - opts = angular.extend({'class': 'ui-animate'}, options, opts); - - element.addClass(opts['class']); - $timeout(function () { - element.removeClass(opts['class']); - }, 20, false); - } - }; -}]); - - -/* -* AngularJs Fullcalendar Wrapper for the JQuery FullCalendar -* API @ http://arshaw.com/fullcalendar/ -* -* Angular Calendar Directive that takes in the [eventSources] nested array object as the ng-model and watches (eventSources.length + eventSources[i].length) for changes. -* Can also take in multiple event urls as a source object(s) and feed the events per view. -* The calendar will watch any eventSource array and update itself when a delta is created -* An equalsTracker attrs has been added for use cases that would render the overall length tracker the same even though the events have changed to force updates. -* -*/ - -angular.module('ui.directives').directive('uiCalendar',['ui.config', '$parse', function (uiConfig,$parse) { - uiConfig.uiCalendar = uiConfig.uiCalendar || {}; - //returns calendar - return { - require: 'ngModel', - restrict: 'A', - link: function(scope, elm, attrs, $timeout) { - var sources = scope.$eval(attrs.ngModel); - var tracker = 0; - /* returns the length of all source arrays plus the length of eventSource itself */ - var getSources = function () { - var equalsTracker = scope.$eval(attrs.equalsTracker); - tracker = 0; - angular.forEach(sources,function(value,key){ - if(angular.isArray(value)){ - tracker += value.length; - } - }); - if(angular.isNumber(equalsTracker)){ - return tracker + sources.length + equalsTracker; - }else{ - return tracker + sources.length; - } - }; - /* update the calendar with the correct options */ - function update() { - //calendar object exposed on scope - scope.calendar = elm.html(''); - var view = scope.calendar.fullCalendar('getView'); - if(view){ - view = view.name; //setting the default view to be whatever the current view is. This can be overwritten. - } - /* If the calendar has options added then render them */ - var expression, - options = { - defaultView : view, - eventSources: sources - }; - if (attrs.uiCalendar) { - expression = scope.$eval(attrs.uiCalendar); - } else { - expression = {}; - } - angular.extend(options, uiConfig.uiCalendar, expression); - scope.calendar.fullCalendar(options); - } - update(); - /* watches all eventSources */ - scope.$watch(getSources, function( newVal, oldVal ) - { - update(); - }); - } - }; -}]); -/*global angular, CodeMirror, Error*/ -/** - * Binds a CodeMirror widget to a