001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.wicket.markup.html;
018:
019: import org.apache.wicket.ResourceReference;
020: import org.apache.wicket.Response;
021:
022: /**
023: * Interface that is used to render header elements (usually javascript and CSS
024: * references).
025: *
026: * Implementation of this interface is responsible for filtering duplicate
027: * contributions (so that for example the same javascript is not loaded twice)
028: * during the same request.
029: *
030: * @author Matej Knopp
031: */
032: public interface IHeaderResponse {
033: /**
034: * Writes a javascript reference, if the specified reference hasn't been
035: * rendered yet.
036: *
037: * @param reference
038: * resource reference pointing to the javascript resource
039: */
040: public void renderJavascriptReference(ResourceReference reference);
041:
042: /**
043: * Writes a javascript reference, if the specified reference hasn't been
044: * rendered yet.
045: *
046: * @param url
047: * url of the the javascript resource
048: */
049: public void renderJavascriptReference(String url);
050:
051: /**
052: * Renders javascript code to the response, if the javascript has not
053: * already been rendered.
054: *
055: * the necessary surrounding <code>script</code> tags will be added to the
056: * output.
057: *
058: * @param javascript
059: * javacript content to be rendered.
060: *
061: * @param id
062: * unique id for the javascript element. This can be null,
063: * however in that case the ajax header contribution can't detect
064: * duplicate script fragments.
065: */
066: public void renderJavascript(CharSequence javascript, String id);
067:
068: /**
069: * Writes a CSS reference, if the specified reference hasn't been rendered
070: * yet.
071: *
072: * @param reference
073: * resource reference pointing to the CSS resource
074: */
075: public void renderCSSReference(ResourceReference reference);
076:
077: /**
078: * Writes a CSS reference, if the specified reference hasn't been rendered
079: * yet.
080: *
081: * @param url
082: * url of the CSS resource
083: */
084: public void renderCSSReference(String url);
085:
086: /**
087: * Writes a CSS reference, if the specified reference hasn't been rendered
088: * yet.
089: *
090: * @param reference
091: * resource reference pointing to the CSS resource
092: * @param media
093: * the media type for this CSS ("print", "screen", etc.)
094: */
095: public void renderCSSReference(ResourceReference reference,
096: String media);
097:
098: /**
099: * Writes a CSS reference, if the specified reference hasn't been rendered
100: * yet.
101: *
102: * @param url
103: * url of the CSS resource
104: * @param media
105: * the media type for this CSS ("print", "screen", etc.)
106: */
107: public void renderCSSReference(String url, String media);
108:
109: /**
110: * Renders an arbitrary string to the header. The string is only rendered if
111: * the same string hasn't been rendered before.
112: * <p>
113: * Note: This method is kind of dangerous as users are able to write to the
114: * output whatever they like.
115: *
116: * @param string
117: * string to be rendered to head
118: */
119: public void renderString(CharSequence string);
120:
121: /**
122: * Marks the given object as rendered. The object can be anything (string,
123: * resource reference, etc...). The purpose of this function is to allow
124: * user to manually keep track of rendered items. This can be useful for
125: * items that are expensive to generate (like interpolated text).
126: *
127: * @param object
128: * object to be marked as rendered.
129: */
130: public void markRendered(Object object);
131:
132: /**
133: * Returns whether the given object has been marked as rendered.
134: * <ul>
135: * <li>Methods <code>renderJavascriptReference</code> and
136: * <code>renderCSSReference</code> mark the specified
137: * {@link ResourceReference} as rendered.
138: * <li>Method <code>renderJavascript</code> marks List of two elements
139: * (first is javascript body CharSequence and second is id) as rendered.
140: * <li>Method <code>renderString</code> marks the whole string as
141: * rendered.
142: * <li>Method <code>markRendered</code> can be used to mark an arbitrary
143: * object as rendered
144: * </ul>
145: *
146: * @param object
147: * Object that is queried to be rendered
148: * @return Whether the object has been marked as rendered during the request
149: */
150: public boolean wasRendered(Object object);
151:
152: /**
153: * Returns the response that can be used to write arbitrary text to the head
154: * section.
155: * <p>
156: * Note: This method is kind of dangerous as users are able to write to the
157: * output whatever they like.
158: *
159: * @return Reponse
160: */
161: public Response getResponse();
162:
163: /**
164: * Renders javascript that is executed right after the DOM is built, before
165: * external resources (e.g. images) are loaded.
166: *
167: * @param javascript
168: */
169: public void renderOnDomReadyJavascript(String javascript);
170:
171: /**
172: * Renders javascript that is executed after the entire page is loaded.
173: *
174: * @param javascript
175: */
176: public void renderOnLoadJavascript(String javascript);
177:
178: /**
179: * Renders javascript that is executed before a page is unloaded.
180: *
181: * @param javascript
182: */
183: public void renderOnBeforeUnloadJavascript(String javascript);
184: }
|