package com.asayama.gwt.angular.resources.client.directive;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.asayama.gwt.angular.client.AbstractDirective;
import com.asayama.gwt.angular.client.Injector;
import com.asayama.gwt.angular.client.NGScope;
import com.asayama.gwt.angular.client.q.Promise;
import com.asayama.gwt.angular.client.q.Promise.Done;
import com.asayama.gwt.angular.client.q.Promise.Fail;
import com.asayama.gwt.angular.client.q.Q;
import com.asayama.gwt.jquery.client.JQElement;
import com.asayama.gwt.jsni.client.JSON;
import com.asayama.gwt.resources.client.HtmlResource;
import com.google.gwt.http.client.Response;
/**
* Equivalent to data-ng-include directive.
*
* @author kyoken74
*/
public class GwtHtmlResource extends AbstractDirective {
private static final String CLASS = GwtHtmlResource.class.getName();
private static final Logger LOG = Logger.getLogger(CLASS);
@Injector.Inject
private Q q;
/**
* Creates isolateScope and registers the following attribute definition.
* <ul>
* <li>{@code ImageResource} gwt-html-resource</li>
* </ul>
*/
@Override
public NGScope scope() {
NGScope scope = NGScope.create();
scope.put(getName(), "=");
return scope;
}
@Override
public void link(final NGScope scope, final JQElement element, JSON attrs) {
HtmlResource resource = scope.get(getName());
if (resource == null) {
LOG.log(Level.WARNING, "Mandatory attribute " + getName() + " value is mssing");
return;
}
String url = resource.getSafeUri().asString();
Promise<Response> promise = HttpUtils.get(q, url);
promise.then(new Done<Response>() {
@Override
public void call(Response value) {
String text = value.getText();
element.append(text);
}
}).then(new Fail() {
@Override
public void call(Throwable cause) {
LOG.log(Level.WARNING, "Failed to insert HtmlResource", cause);
}
});
return;
}
}