001// Licensed under the Apache License, Version 2.0 (the "License"); 002// you may not use this file except in compliance with the License. 003// You may obtain a copy of the License at 004// 005// http://www.apache.org/licenses/LICENSE-2.0 006// 007// Unless required by applicable law or agreed to in writing, software 008// distributed under the License is distributed on an "AS IS" BASIS, 009// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 010// See the License for the specific language governing permissions and 011// limitations under the License. 012 013package org.apache.tapestry5; 014 015import org.apache.tapestry5.corelib.base.AbstractField; 016import org.apache.tapestry5.corelib.components.AjaxFormLoop; 017import org.apache.tapestry5.corelib.components.BeanDisplay; 018import org.apache.tapestry5.corelib.components.BeanEditForm; 019import org.apache.tapestry5.corelib.components.BeanEditor; 020import org.apache.tapestry5.corelib.components.Errors; 021import org.apache.tapestry5.corelib.mixins.FormGroup; 022import org.apache.tapestry5.http.TapestryHttpSymbolConstants; 023import org.apache.tapestry5.http.services.BaseURLSource; 024import org.apache.tapestry5.internal.services.AssetDispatcher; 025import org.apache.tapestry5.internal.services.rest.DefaultOpenApiDescriptionGenerator; 026import org.apache.tapestry5.modules.NoBootstrapModule; 027import org.apache.tapestry5.services.Html5Support; 028import org.apache.tapestry5.services.assets.AssetPathConstructor; 029import org.apache.tapestry5.services.assets.ResourceMinimizer; 030import org.apache.tapestry5.services.compatibility.Trait; 031import org.apache.tapestry5.services.javascript.JavaScriptStack; 032import org.apache.tapestry5.services.rest.OpenApiDescriptionGenerator; 033 034/** 035 * Defines the names of symbols used to configure Tapestry. 036 * 037 * @see org.apache.tapestry5.ioc.services.SymbolSource 038 */ 039public class SymbolConstants 040{ 041 /** 042 * A comma separated list of execution modes used to control how the application is initialized. 043 * Each modes can contribute a list (comma separated) of Module classes to be loaded during startup, 044 * the order in which they appear is preserved. 045 * The default value is: <code>production</code>. 046 * This is an alias for {@link TapestryHttpSymbolConstants#EXECUTION_MODE}. 047 */ 048 public static final String EXECUTION_MODE = TapestryHttpSymbolConstants.EXECUTION_MODE; 049 /** 050 * Indicates whether Tapestry is running in production mode or developer mode. This affects a large 051 * number of Tapestry behaviors related to performance and security, including how exceptions are 052 * reported, whether far-future expire headers are emitted, whether JavaScript files may be combined, 053 * whether JSON is compressed, whether component field and parameter values are shadowed to instance 054 * variables (to assist with debugging), and more. 055 * 056 * This is an alias to {@link TapestryHttpSymbolConstants#PRODUCTION_MODE}. 057 */ 058 public static final String PRODUCTION_MODE = TapestryHttpSymbolConstants.PRODUCTION_MODE; 059 060 /** 061 * A version of {@link TapestryHttpSymbolConstants#PRODUCTION_MODE} as a symbol reference. This can be used as the default value 062 * of other symbols, to indicate that their default matches whatever PRODUCTION_MODE is set to, which is quite 063 * common. 064 * 065 * @since 5.2.0 066 */ 067 public static final String PRODUCTION_MODE_VALUE = String.format("${%s}", TapestryHttpSymbolConstants.PRODUCTION_MODE); 068 069 /** 070 * The list of locales supported by the application; locales identified in the incoming request are "narrowed" to 071 * one of these values. The first locale name in the list is the default locale used when no proper match can be 072 * found. 073 */ 074 public static final String SUPPORTED_LOCALES = "tapestry.supported-locales"; 075 076 /** 077 * Controls whether whitespace is compressed by default in templates, or left as is. The factory default is to 078 * compress whitespace. (This can also be overridden using the xml:space attribute inside template elements.) 079 */ 080 public static final String COMPRESS_WHITESPACE = "tapestry.compress-whitespace"; 081 082 /** 083 * Time interval defining how often Tapestry will check for updates to local files (including classes). 084 * Starting with 5.3, this is only used when not running in production mode. The default is "1 s" 085 * (one second), which is appropriate for development. With Tapestry 5.2 and earlier this number 086 * should be raised in a production environment. 087 */ 088 public static final String FILE_CHECK_INTERVAL = "tapestry.file-check-interval"; 089 090 /** 091 * Time interval that sets how long Tapestry will wait to obtain the exclusive lock needed to check local files. The 092 * default is "50 ms". Starting with 5.3, this is only used when not running in production mode. 093 */ 094 public static final String FILE_CHECK_UPDATE_TIMEOUT = "tapestry.file-check-update-timeout"; 095 096 /** 097 * The version number of the core Tapestry framework, or UNKNOWN if the version number is not available (which 098 * should only occur when developing Tapestry). 099 */ 100 public static final String TAPESTRY_VERSION = "tapestry.version"; 101 102 /** 103 * The location of the application-wide component messages catalog, relative to the web application context. This 104 * will normally be <code>WEB-INF/app.properties</code>. 105 */ 106 public static final String APPLICATION_CATALOG = "tapestry.app-catalog"; 107 108 /** 109 * The charset used when rendering page markup; the charset is also used as the request encoding when handling 110 * incoming requests. The default is "UTF-8". 111 * This is an alias for {@link TapestryHttpSymbolConstants#CHARSET} 112 */ 113 public static final String CHARSET = TapestryHttpSymbolConstants.CHARSET; 114 115 /** 116 * Used as the default for the Form's autofocus and clientValidation parameters. If overridden to "false", then 117 * Forms will not (unless explicitly specified) use client validation or autofocus, which in turn, means that most 118 * pages with Forms will not make use of the Tapestry JavaScript stack. 119 */ 120 public static final String FORM_CLIENT_LOGIC_ENABLED = "tapestry.form-client-logic-enabled"; 121 122 /** 123 * Name of page used to report exceptions; the page must implement 124 * {@link org.apache.tapestry5.services.ExceptionReporter}. 125 * This is used by the default exception report handler service. 126 */ 127 public static final String EXCEPTION_REPORT_PAGE = "tapestry.exception-report-page"; 128 129 /** 130 * Identifies the default persistence strategy for all pages that do not provide an override (using this value as 131 * {@link org.apache.tapestry5.annotations.Meta key}). 132 * 133 * @since 5.1.0.0 134 */ 135 public static final String PERSISTENCE_STRATEGY = "tapestry.persistence-strategy"; 136 137 /** 138 * Minimum output stream size, in bytes, before output is compressed using GZIP. Shorter streams are not compressed. 139 * Tapestry buffers this amount and switches to a GZIP output stream as needed. The default is "100". 140 * This is an alias to {@link TapestryHttpSymbolConstants#MIN_GZIP_SIZE}. 141 * 142 * @see TapestryHttpSymbolConstants#GZIP_COMPRESSION_ENABLED 143 * @since 5.1.0.0 144 */ 145 public static final String MIN_GZIP_SIZE = TapestryHttpSymbolConstants.MIN_GZIP_SIZE; 146 147 /** 148 * Version number of the application. Prior to 5.4, this version number was integrated into asset URLs. Starting 149 * with 5.4, a checksum of the individual asset's content is used instead, and this version number is only used 150 * for documentation purposes; it appears in the default exception report page, for example. 151 * 152 * The default value is "0.0.1". In 5.3 and earlier, the default value was a random hexadecimal string. 153 * 154 * This is an alias to {@link TapestryHttpSymbolConstants#APPLICATION_VERSION}. 155 * 156 * @see AssetDispatcher 157 * @see AssetPathConstructor 158 * @since 5.1.0.0 159 */ 160 public static final String APPLICATION_VERSION = TapestryHttpSymbolConstants.APPLICATION_VERSION; 161 162 /** 163 * Used to omit the normal Tapestry framework generator meta tag. The meta tag is rendered by default, but clients 164 * who do not wish to advertise their use of Tapestry may set this symbol to "true". 165 * 166 * @since 5.1.0.0 167 */ 168 public static final String OMIT_GENERATOR_META = "tapestry.omit-generator-meta"; 169 170 /** 171 * If "true" (the default) then GZip compression is enabled for dynamic requests and for static assets. If you are 172 * using a server that handles GZip compression for you, or you don't want to use the extra processing power 173 * necessary to GZIP requests, then override this to "false". 174 * This is an alias to {@link TapestryHttpSymbolConstants#GZIP_COMPRESSION_ENABLED}. 175 * 176 * @see TapestryHttpSymbolConstants#MIN_GZIP_SIZE 177 * @see org.apache.tapestry5.http.services.ResponseCompressionAnalyzer 178 * @see org.apache.tapestry5.http.services.CompressionAnalyzer 179 * @since 5.1.0.0 180 */ 181 public static final String GZIP_COMPRESSION_ENABLED = TapestryHttpSymbolConstants.GZIP_COMPRESSION_ENABLED; 182 183 /** 184 * If "true" (which itself defaults to production mode), then the {@link org.apache.tapestry5.annotations.Secure} 185 * annotation will be honored. If "false" (i.e., development mode), then the annotation and related HTTP/HTTPS 186 * logic is ignored. 187 * 188 * @since 5.1.0.1 189 */ 190 public static final String SECURE_ENABLED = "tapestry.secure-enabled"; 191 192 /** 193 * If "true" (the default), then the {@link org.apache.tapestry5.services.PersistentLocale} will be encoded into the 194 * {@link org.apache.tapestry5.http.Link} path by the {@link org.apache.tapestry5.services.ComponentEventLinkEncoder} 195 * service. If overridden to "false" this does not occur, but you should provide a 196 * {@link org.apache.tapestry5.services.LinkCreationListener2} (registered with the 197 * {@link org.apache.tapestry5.services.LinkCreationHub}) in order to add the locale as a query parameter (or 198 * provide some alternate means of persisting the locale between requests). 199 * 200 * @since 5.1.0.1 201 */ 202 public static final String ENCODE_LOCALE_INTO_PATH = "tapestry.encode-locale-into-path"; 203 204 /** 205 * If "true" then JavaScript files in a {@link JavaScriptStack} will be combined into a single virtual JavaScript 206 * file. Defaults to "true" in production mode. 207 * 208 * @since 5.1.0.2 209 */ 210 public static final String COMBINE_SCRIPTS = "tapestry.combine-scripts"; 211 212 213 /** 214 * The default time interval that cookies created by Tapestry will be kept in the client web browser. The default is 215 * "7 d" (that is, seven days). 216 * 217 * @since 5.2.0 218 */ 219 public static final String COOKIE_MAX_AGE = "tapestry.default-cookie-max-age"; 220 221 /** 222 * The logical name of the start page, the page that is rendered for the root URL. 223 * 224 * @since 5.2.0 225 */ 226 public static final String START_PAGE_NAME = "tapestry.start-page-name"; 227 228 /** 229 * The default stylesheet automatically inserted into every rendered HTML page when 230 * no Bootstrap version is enabled (i.e both {@link Trait#BOOTSTRAP_3} and {@link Trait#BOOTSTRAP_4} 231 * traits are disabled, something done by {@linkplain NoBootstrapModule}). 232 * 233 * It was deprecated in 5.4 with no replacement (the stylesheet is now associated with the core {@link JavaScriptStack}.), 234 * but undeprecated in 5.5.0 with the caveat described above. 235 * 236 * @see NoBootstrapModule 237 * @since 5.2.0 238 */ 239 public static final String DEFAULT_STYLESHEET = "tapestry.default-stylesheet"; 240 241 /** 242 * The Asset path to the embedded copy of script.aculo.us packaged with Tapestry. 243 * 244 * @since 5.2.0 245 */ 246 public static final String SCRIPTACULOUS = "tapestry.scriptaculous"; 247 248 /** 249 * The Asset path to the embedded datepicker. 250 * 251 * @since 5.2.0 252 */ 253 public static final String DATEPICKER = "tapestry.datepicker"; 254 255 /** 256 * If "true", then JSON page initialization content is compressed; if "false" 257 * then extra white space is added (pretty printing). Defaults to "true" in production mode. 258 * 259 * @since 5.2.0 260 */ 261 public static final String COMPACT_JSON = "tapestry.compact-json"; 262 263 /** 264 * If "true" and {@link TapestryHttpSymbolConstants#PRODUCTION_MODE} is off, comments will be rendered before and after the rendering of any 265 * component 266 * allowing more visibility into which components rendered which markup. Defaults to "false". Component render 267 * tracing may be 268 * enabled per-request by the presence of a request parameter "t:component-trace" with a value of "true". 269 * 270 * @since 5.2.5 271 */ 272 public static final String COMPONENT_RENDER_TRACING_ENABLED = "tapestry.component-render-tracing-enabled"; 273 274 /** 275 * The hostname that application should use when constructing an absolute URL. The default is "", i.e. an empty 276 * string, 277 * in which case system will use request.getServerName(). Not the same as environment variable HOSTNAME, but you can 278 * also 279 * contribute "$HOSTNAME" as the value to make it the same as the environment variable HOSTNAME. 280 * This is an alias to {@link TapestryHttpSymbolConstants#HOSTNAME}. 281 * 282 * @since 5.3 283 */ 284 public static final String HOSTNAME = TapestryHttpSymbolConstants.HOSTNAME; 285 286 /** 287 * The hostport that application should use when constructing an absolute URL. The default is "0", i.e. use the port 288 * value from 289 * the request. This is an alias to {@link TapestryHttpSymbolConstants#HOSTPORT}. 290 * 291 * @since 5.3 292 */ 293 public static final String HOSTPORT = TapestryHttpSymbolConstants.HOSTPORT; 294 295 /** 296 * The secure (https) hostport that application should use when constructing an absolute URL. The default is "0", 297 * i.e. use 298 * the value from the request. 299 * This is an alias to {@link TapestryHttpSymbolConstants#HOSTPORT_SECURE}. 300 * 301 * @since 5.3 302 */ 303 public static final String HOSTPORT_SECURE = TapestryHttpSymbolConstants.HOSTPORT_SECURE; 304 305 /** 306 * If "true", then resources (individually or when aggregated into stacks) will be minimized via the 307 * {@link ResourceMinimizer} service. If "false", then minification is disabled. Tracks production mode 308 * (minification is normally disabled in development mode). 309 * 310 * Note that Tapestry's default implementation of {@link ResourceMinimizer} does nothing; minification is provided 311 * by add-on libraries. 312 * 313 * @since 5.3 314 */ 315 public static final String MINIFICATION_ENABLED = "tapestry.enable-minification"; 316 317 /** 318 * If "true" then at the end of each request the 319 * {@link org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer} will be called on each session persisted 320 * object that was accessed during the request. 321 * 322 * This is provided as a performance enhancement for servers that do not use clustered sessions. 323 * 324 * The default is {@code true}, to preserve 5.2 behavior. For non-clustered applications (the majority), this value should be 325 * overridden to {@code false}. A future release of Tapestry may change the default. 326 * 327 * This is an alias to {@link TapestryHttpSymbolConstants#CLUSTERED_SESSIONS}. 328 * 329 * @since 5.3 330 */ 331 public static final String CLUSTERED_SESSIONS = TapestryHttpSymbolConstants.CLUSTERED_SESSIONS; 332 333 /** 334 * The name of a folder in which the Tapestry application executes. Prior to 5.3, a Tapestry application always responded to all 335 * URLs in the context under the context root; by setting this to the name of a folder, the T5 URLs will be inside that folder only, and should 336 * match a corresponding entry in the {@code web.xml} configuration file. This is useful when running multiple servlets within the same web application (such as when migrating 337 * from Tapestry 4 or some other framework, to Tapestry 5). 338 * Effectively, if this symbol is set to a value, that folder name will be placed after the context path 339 * (typically "/") and before the locale, page name, or other prefix. For example, if this symbol is set to "app", the {@code web.xml <url-pattern>} should be set to {@code /app/*}, and Tapestry will 340 * only be in invoked by the servlet container for requests inside the virtual {@code app} folder. 341 * 342 * This also affects the search for page templates (which are allowed within the web context). When set to a non-blank value, page templates are searched for in the folder, rather than in the root context. 343 * 344 * The default value is the empty string, which preserves Tapestry 5.2 behavior (and continues to be appropriate for most applications). 345 * 346 * Note that while Tapestry is case-insensitive, the servlet container is not, so the configured value must exactly match 347 * the folder name inside the {@code <url-parameter>} value, including case. 348 * 349 * @since 5.3 350 */ 351 public static final String APPLICATION_FOLDER = "tapestry.application-folder"; 352 353 /** 354 * Boolean value to indicate if every {@link org.apache.tapestry5.Asset} should be fully qualified or not. 355 * Default to <code>false</code> meaning no Asset URL will be fully qualified. 356 * 357 * @since 5.3 358 */ 359 public static final String ASSET_URL_FULL_QUALIFIED = "tapestry.asset-url-fully-qualified"; 360 361 /** 362 * Prefix to be used for all resource paths, used to recognize which requests are for assets. This value 363 * is appended to the context path and the (optional {@linkplain #APPLICATION_FOLDER application folder}. 364 * It may contain slashes, but should not begin or end with one. 365 * 366 * The default is "assets". 367 */ 368 public static final String ASSET_PATH_PREFIX = "tapestry.asset-path-prefix"; 369 370 371 /** 372 * Prefix used for all module resources. This may contain slashes, but should not being or end with one. 373 * Tapestry will create two {@link org.apache.tapestry5.http.services.Dispatcher}s from this: one for normal 374 * modules, the other for GZip compressed modules (by appending ".gz" to this value). 375 * 376 * The default is "modules". 377 * 378 * @since 5.4 379 */ 380 public static final String MODULE_PATH_PREFIX = "tapestry.module-path-prefix"; 381 382 /** 383 * Identifies the context path of the application, as determined from {@link javax.servlet.ServletContext#getContextPath()}. 384 * This is either a blank string or a string that starts with a slash but does not end with one. 385 * This is an alias to {@link TapestryHttpSymbolConstants#CONTEXT_PATH}. 386 * 387 * @since 5.4 388 */ 389 public static final String CONTEXT_PATH = TapestryHttpSymbolConstants.CONTEXT_PATH; 390 391 /** 392 * A passphrase used as the basis of hash-based message authentication (HMAC) for any object stream data stored on 393 * the client. The default phrase is the empty string, which will result in a logged runtime <em>error</em>. 394 * You should configure this to a reasonable value (longer is better) and ensure that all servers in your cluster 395 * share the same value (configuring this in code, rather than the command line, is preferred). 396 * 397 * @see org.apache.tapestry5.services.ClientDataEncoder 398 * @since 5.3.6 399 */ 400 public static final String HMAC_PASSPHRASE = "tapestry.hmac-passphrase"; 401 402 /** 403 * The root asset path for Twitter Bootstrap; if your application uses a modified version of Bootstrap, 404 * you can override this symbol to have Tapestry automatically use your version. The value should be a path 405 * to a folder (under "classpath:" or "context:") and should not include a trailing slash. 406 * 407 * @since 5.4 408 */ 409 public static final String BOOTSTRAP_ROOT = "tapestry.bootstrap-root"; 410 411 /** 412 * The root asset path for Font Awesome; if your application uses a modified version of it, 413 * you can override this symbol to have Tapestry automatically use your version. The value should be a path 414 * to a folder (under "classpath:" or "context:") and should not include a trailing slash. 415 * 416 * @since 5.5 417 */ 418 public static final String FONT_AWESOME_ROOT = "tapestry.font-awesome-root"; 419 420 /** 421 * Tapestry relies on an underlying client-side JavaScript infrastructure framework to handle DOM manipulation, 422 * event handling, and Ajax requests. Through Tapestry 5.3, the foundation was 423 * <a href="http://http://prototypejs.org/">Prototype</a>. In 5.4, support for 424 * <a href="http://jquery.org/">jQuery</a> has been added, and it is possible to add others. This symbol defines a value that is used to select 425 * a resource that is provided to the {@link org.apache.tapestry5.services.javascript.ModuleManager} service 426 * as a {@link org.apache.tapestry5.services.javascript.JavaScriptModuleConfiguration} to provide a specific implementation 427 * of the {@code t5/core/dom} module. Tapestry 5.4 directly supports "prototype" or "jquery". To support 428 * other foundation frameworks, override this symbol value and supply your own module configuration. 429 * 430 * In Tapestry 5.4, this defaults to "prototype" for compatibility with 5.3. This will likely change in 431 * 5.5 to default to "jquery". At some point in the future, Prototype support will no longer be present. 432 * 433 * @since 5.4 434 */ 435 public static final String JAVASCRIPT_INFRASTRUCTURE_PROVIDER = "tapestry.javascript-infrastructure-provider"; 436 437 /** 438 * If true (the default), then Tapestry will apply locking semantics around access to the {@link javax.servlet.http.HttpSession}. 439 * Reading attribute names occurs with a shared read lock; getting or setting an attribute upgrades to an exclusive write lock. 440 * This can tend to serialize threads when a number of simultaneous (Ajax) requests from the client arrive ... however, 441 * many implementations of HttpSession are not thread safe, and often mutable objects are stored in the session and shared 442 * between threads. Leaving this on the default will yield a more robust application; setting it to false may speed 443 * up processing for more Ajax intensive applications (but care should then be given to ensuring that objects shared inside 444 * the session are themselves immutable or thread-safe). 445 * 446 * This is an alias to {@link TapestryHttpSymbolConstants#SESSION_LOCKING_ENABLED}. 447 * 448 * @since 5.4 449 */ 450 public static final String SESSION_LOCKING_ENABLED = TapestryHttpSymbolConstants.SESSION_LOCKING_ENABLED; 451 452 /** 453 * If true (the default), then Tapestry will automatically include the "core" stack in all 454 * pages. 455 * 456 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2169">TAP5-2169</a> 457 * @since 5.4 458 */ 459 public static final String INCLUDE_CORE_STACK = "tapestry.include-core-stack"; 460 461 /** 462 * Defines the CSS class that will be given to HTML element (usually a div) <div> generated by 463 * the {@linkplain FormGroup} mixin and the 464 * {@linkplain BeanEditForm} and {@linkplain BeanEditor} 465 * components surrounding the label and the field. If the value isn't 466 * {@code form-group}, the div will have {@code class="form-group [value]}. 467 * The default value is <code>form-group</code>. 468 * 469 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2182">TAP5-2182</a> 470 * @since 5.4 471 */ 472 public static final String FORM_GROUP_WRAPPER_CSS_CLASS = "tapestry.form-group-wrapper-css-class"; 473 474 /** 475 * Defines the name of the HTML element that will surround the HTML form field generated by 476 * the {@linkplain FormGroup} mixin and the {@linkplain BeanEditForm} and {@linkplain BeanEditor}. 477 * If this symbol is null or an empty string, no element will be generated surrouding the 478 * form field. The default value is the empty string (no wrapping). 479 * 480 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2182">TAP5-2182</a> 481 * @see #FORM_GROUP_FORM_FIELD_WRAPPER_ELEMENT_CSS_CLASS 482 * @since 5.4 483 */ 484 public static final String FORM_GROUP_FORM_FIELD_WRAPPER_ELEMENT_NAME = "tapestry.form-group-form-field-wrapper-element-name"; 485 486 /** 487 * Defines the CSS class of the HTML element generated by 488 * the {@linkplain FormGroup} mixin and the {@linkplain BeanEditForm} and {@linkplain BeanEditor}. 489 * when {@linkplain #FORM_GROUP_FORM_FIELD_WRAPPER_ELEMENT_NAME} is not set to null or the empty string. 490 * The default value is the empty string (no CSS class added). 491 * 492 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2182">TAP5-2182</a> 493 * @since 5.4 494 */ 495 public static final String FORM_GROUP_FORM_FIELD_WRAPPER_ELEMENT_CSS_CLASS = "tapestry.form-group-form-field-wrapper-element-css-class"; 496 497 /** 498 * Defines the CSS class that will be given to <label> element generated by 499 * the {@linkplain FormGroup} mixin and the 500 * {@linkplain BeanEditForm} and {@linkplain BeanEditor} 501 * components. The default value is <code>control-label</code>. 502 * 503 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2182">TAP5-2182</a> 504 * @since 5.4 505 */ 506 public static final String FORM_GROUP_LABEL_CSS_CLASS = "tapestry.form-group-label-css-class"; 507 508 /** 509 * Defines the CSS class that will be given to form field components which are 510 * {@linkplain AbstractField} subclasses. The default value is <code>form-control</code>. 511 * 512 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2182">TAP5-2182</a> 513 * @since 5.4 514 */ 515 public static final String FORM_FIELD_CSS_CLASS = "tapestry.form-field-css-class"; 516 517 /** 518 * Defines the CSS class that will be given to the <dl> HTML element generated by 519 * {@linkplain BeanDisplay}. The default value is <code>well dl-horizontal</code>. 520 * 521 * @since 5.5 522 */ 523 public static final String BEAN_DISPLAY_CSS_CLASS = "tapestry.bean-display-css-class"; 524 525 /** 526 * Defines the CSS class that will be given to the <div> HTML element generated by 527 * {@linkplain BeanEditor}/{@linkplain BeanEditForm} for boolean properties. 528 * The default value is <code>input-group</code>. 529 * 530 * @since 5.5 531 */ 532 public static final String BEAN_EDITOR_BOOLEAN_PROPERTY_DIV_CSS_CLASS = "tapestry.bean-editor-boolean-property-div-css-class"; 533 534 /** 535 * Defines the CSS class that will be given to the HTML element generated by 536 * {@linkplain Error}. If the value isn't <code>help-block</code>, the class attribute 537 * will be <code>help-block [symbol value]</code> 538 * The default value is <code>help-block</code>. 539 * 540 * @since 5.5 541 */ 542 public static final String ERROR_CSS_CLASS = "tapestry.error-css-class"; 543 544 /** 545 * Defines the CSS class that will be given to the add row link generated by 546 * {@linkplain AjaxFormLoop}. The default value is <code>btn btn-default btn-sm</code>. 547 * 548 * @since 5.5 549 */ 550 public static final String AJAX_FORM_LOOP_ADD_ROW_LINK_CSS_CLASS = "tapestry.ajax-form-loop-add-row-link-css-class"; 551 552 /** 553 * Defines the prefix of the CSS class that will be given to the outer <div> element generated by 554 * {@linkplain Errors}. The value of {@linkplain Errors}'s <code>class</code> parameter appended 555 * after the prefix and a space character. The default value is <code>alert-dismissable</code>. 556 * 557 * @since 5.5 558 */ 559 public static final String ERRORS_BASE_CSS_CLASS = "tapestry.errors-base-css-class"; 560 561 /** 562 * Defines the default value of the {@linkplain Errors}'s <code>class</code> parameter. 563 * The default value for this symbol is <code>alert alert-danger</code>. 564 * 565 * @since 5.5 566 */ 567 public static final String ERRORS_DEFAULT_CLASS_PARAMETER_VALUE = "tapestry.errors-default-class-parameter-value"; 568 569 /** 570 * Defines the CSS class that will be given to the close <button> generated by 571 * {@linkplain Errors}. The default value is <code>close</code>. 572 * 573 * @since 5.5 574 */ 575 public static final String ERRORS_CLOSE_BUTTON_CSS_CLASS = "tapestry.errors-close-button-css-class"; 576 577 /** 578 * Defines whether {@link java.text.DateFormat} instances created by Tapestry should be 579 * lenient or not by default. The default value is <code>false</code>. 580 * 581 * @since 5.4 582 */ 583 public static final String LENIENT_DATE_FORMAT = "tapestry.lenient-date-format"; 584 585 /** 586 * The directory to which exception report files should be written. The default is appropriate 587 * for development: {@code build/exceptions}, and should be changed for production. 588 * 589 * @see org.apache.tapestry5.services.ExceptionReporter 590 * @since 5.4 591 */ 592 593 public static final String EXCEPTION_REPORTS_DIR = "tapestry.exception-reports-dir"; 594 595 /** 596 * Defines whether {@link org.apache.tapestry5.internal.services.assets.CSSURLRewriter} will throw an exception when a CSS file 597 * references an URL which doesn't exist. The default value is <code>false</code>. 598 * 599 * @since 5.4 600 */ 601 public static final String STRICT_CSS_URL_REWRITING = "tapestry.strict-css-url-rewriting"; 602 603 /** 604 * When an asset (typically, a JavaScript module) is streamed without an explicit expiration header, then 605 * this value is sent as the {@code Cache-Control} header; the default is "max-age=60, must-revalidate". Setting 606 * max-age to a value above zero significantly reduces the number of client requests for module content, as client 607 * browsers will then cache previously downloaded versions. For normal assets, which are immutable, and fingerprinted with 608 * a content hash, there is no need to set max age, and instead, a far-future expiration date is provided. 609 * 610 * @since 5.4 611 */ 612 public static final String OMIT_EXPIRATION_CACHE_CONTROL_HEADER = "tapestry.omit-expiration-cache-control-header"; 613 614 /** 615 * Defines whether HTML5 features should be used. Value used in the default implementation of 616 * {@link Html5Support#isHtml5SupportEnabled()}. Default value: <code>false</code>. 617 * 618 * @see Html5Support#isHtml5SupportEnabled() 619 * @since 5.4 620 */ 621 public static final String ENABLE_HTML5_SUPPORT = "tapestry.enable-html5-support"; 622 623 /** 624 * A general switch for restrictive environments, such as Google App Engine, which forbid some useful operations, 625 * such as creating files or directories. Defaults to false. 626 * 627 * @since 5.4 628 */ 629 public static final String RESTRICTIVE_ENVIRONMENT = "tapestry.restrictive-environment"; 630 631 /** 632 * If true, then when a page includes any JavaScript, a {@code script} block is added to insert 633 * a pageloader mask into the page; the pageloader mask ensure that the user can't interact with the page 634 * until after the page is fully initialized. 635 * 636 * @since 5.4 637 */ 638 public static final String ENABLE_PAGELOADING_MASK = "tapestry.enable-pageloading-mask"; 639 640 /** 641 * Controls in what environment page preloading should occur. By default, preloading only occurs 642 * in production. 643 * 644 * @see org.apache.tapestry5.services.pageload.PagePreloader 645 * @see org.apache.tapestry5.services.pageload.PreloaderMode 646 * @since 5.4 647 */ 648 public static final String PRELOADER_MODE = "tapestry.page-preload-mode"; 649 650 /** 651 * Defines the OpenAPI version to be used in the generated OpenAPI description. 652 * Default value is <code>3.0.0</code>. 653 * @see DefaultOpenApiDescriptionGenerator 654 * @see OpenApiDescriptionGenerator 655 * @since 5.8.0 656 */ 657 public static final String OPENAPI_VERSION = "tapestry.openapi-version"; 658 659 /** 660 * Defines the title of this application in the generated OpenAPI description. No default value is provided. 661 * @see DefaultOpenApiDescriptionGenerator 662 * @see OpenApiDescriptionGenerator 663 * @since 5.8.0 664 */ 665 public static final String OPENAPI_TITLE = "tapestry.openapi-title"; 666 667 /** 668 * Defines the description of this application in the generated OpenAPI description. 669 * No default value is provided. 670 * @see DefaultOpenApiDescriptionGenerator 671 * @see OpenApiDescriptionGenerator 672 * @since 5.8.0 673 */ 674 public static final String OPENAPI_DESCRIPTION = "tapestry.openapi-description"; 675 676 /** 677 * Defines the version of this application in the generated OpenAPI description (i.e. info/version). 678 * No default value is provided. 679 * @see DefaultOpenApiDescriptionGenerator 680 * @see OpenApiDescriptionGenerator 681 * @since 5.8.0 682 */ 683 public static final String OPENAPI_APPLICATION_VERSION = "tapestry.openapi-application-version"; 684 685 /** 686 * Defines whether the OpenAPI description file of this application's REST endpoints should be 687 * published or not. The default value is <code>false</code>. 688 * @see OpenApiDescriptionGenerator 689 * @see #OPENAPI_DESCRIPTION_PATH 690 * @since 5.8.0 691 */ 692 public static final String PUBLISH_OPENAPI_DEFINITON = "tapestry.publish-openapi-description"; 693 694 /** 695 * Defines the path the OpenAPI description file of this application's REST endpoints will be 696 * published. It should start with a slash. Default value is <code>/openapi.json</code>. 697 * The description will only be published if {{@link #PUBLISH_OPENAPI_DEFINITON} is set to 698 * <code>true</code>. 699 * @see OpenApiDescriptionGenerator 700 * @since 5.8.0 701 */ 702 public static final String OPENAPI_DESCRIPTION_PATH = "tapestry.openapi-description-path"; 703 704 /** 705 * Defines a base path to the generated OpenAPI description relative to the application 706 * URL as defined by {@link BaseURLSource#getBaseURL(boolean)}. It should be either 707 * the empty string, meaning there's no base path, or a string starting and ending 708 * with a slash. Default value is "/" (without the quotes) 709 * @see OpenApiDescriptionGenerator 710 * @since 5.8.0 711 */ 712 public static final String OPENAPI_BASE_PATH = "tapestry.openapi-base-path"; 713 714}