diff --git a/.editorconfig b/.editorconfig
deleted file mode 100755
index 7bc72bb..0000000
--- a/.editorconfig
+++ /dev/null
@@ -1,15 +0,0 @@
-# editorconfig.org
-
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 4
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-[jquery-[1-9]*.js]
-indent_style = tab
-insert_final_newline = false
-trim_trailing_whitespace = false
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 9f11b75..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-.idea/
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 92eded0..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-language: groovy
-jdk:
-- openjdk7
-script: ./profiles/travis-build.sh
-env:
- global:
- - TERM=dumb
- - GIT_NAME="Graeme Rocher"
- - GIT_EMAIL="graeme.rocher@gmail.com"
- - secure: AL9fkFVvXqr3+ZM5O3+qnA0lpDskf/1jz4NrAsL/TCcDUsRZH4bdR3gwVUqHjt7+yr42/adwOliwCIvzwJzbW8eeEetcZcNen+WBf03lw04zTFACWW6Yes49vZ6qGTKxAVuVQ8bd1yQzJZUTta7/Nu4Aet+Eq1rZEyz9WvSF28U=
- - secure: KB9glHCgYfgR2uXxRBghB9Rp9TGth/KhfzdeNeNbXLrqcoZGXsjrFDLGs2eH3K+4oYKPwcOiIBDUCK3twSsMOx0hcSCVTA3q1cJx/Qhjsv/fneAkq4SFN6Yqsgeksw1hbZRGdtufhGFtOAsLnTEVYxjFCxIKQ9fAAt1mSzSFqpU=
- - secure: JJJSHR09fppZTNlhJ6Tk57rn4U9ldH/6Dwke90vUhcxMwzrMTM1mfyuQ9CKFgXtz2WXfhAPsOrKu6oEISbdu0PoNK4YBFd4xl4jQmR9NEJ7gi0XnkM/v0HmNtJe7kfHvu3nHv+LzOfFXPAE67kpNC728Yc3jXCCQyNbqVfkEv7o=
- - secure: dC5FCqAeVGrHzWN95D8r51bUiuCyvxIWnAT9jj4up9ohbjjSBb9bvVWUPlqlmQZ3QoTOqRJ9935npscmHuxxpYOCufZ8RcXY/fp3w20R45RXhfG1ve4CdPWrDnkO6e2i7S6kbSoD8+YN2eex2pEfWXXZxHeVJ7U1QTwZk+9ScjI=
- - secure: Y9k0Q1xxwNGG1JrBkJ01XmjQlwE77j3RFCe8GMoSEA2yfBn6n1wkhC5eI0d5uZCjS38pCW2fLtUoLxDdDCXk3FBNM5usW2VOoldVbkEarwFo1hn/g2LSz0pMbslQR9/MV6BGrvLcDw+jztN+S9aNhcfFGHANBaXvHVDDOxSCMr4=
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index ad410e1..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
\ No newline at end of file
diff --git a/README.md b/README.md
index 8228bf9..d98c013 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1 @@
*NOTE*: This repository is no longer used. Profiles now live in https://github.com/grails-profiles
-
-Grails Profiles
-=========================
-
-The Grails 3 profile repository - contains metadata for Grails profiles.
-
-A profile is a set of application templates and commands that enable distinct development environments for Grails framework.
diff --git a/profiles/.gitignore b/profiles/.gitignore
deleted file mode 100644
index ed8a3d8..0000000
--- a/profiles/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-build/
-.gradle/
-*.iml
-*.ipr
-*.iws
-.idea
diff --git a/profiles/angular/build.gradle b/profiles/angular/build.gradle
deleted file mode 100644
index fbd9ec7..0000000
--- a/profiles/angular/build.gradle
+++ /dev/null
@@ -1,3 +0,0 @@
-dependencies {
- runtime project(":rest-api")
-}
diff --git a/profiles/angular/commands/create-ng-component.groovy b/profiles/angular/commands/create-ng-component.groovy
deleted file mode 100644
index 76e5740..0000000
--- a/profiles/angular/commands/create-ng-component.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-import grails.util.*
-
-description( "Creates an Angular directive" ) {
- usage "grails create-ng-directive [NAME]"
- argument name:'Directive Name', description:"The name of the Angular directive to create", required:true
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-def model = model(args[0])
-boolean overwrite = flag('force')
-
-final String modulePath = model.packagePath ?: model.propertyName
-final String moduleName = model.packageName ?: model.propertyName
-final String assetPath = config.getProperty("grails.codegen.angular.assetDir", String) ?: "javascripts"
-final String basePath = "grails-app/assets/${assetPath}/${modulePath.replaceAll('\\\\', '/')}"
-
-if (!file("${basePath}/${moduleName}.js").exists()) {
- createNgModule(moduleName)
-}
-
-render template: template("tests/NgComponentSpec.js"),
- destination: file("src/test/javascripts/${modulePath}/directives/${model.propertyName}Spec.js"),
- model: [moduleName: moduleName,
- propertyName: model.propertyName,
- tagName: GrailsNameUtils.getScriptName(model.propertyName)],
- overwrite: overwrite
-
-render template: template("NgComponent.js"),
- destination: file("${basePath}/directives/${model.propertyName}.js"),
- model: [moduleName: moduleName,
- propertyName: model.propertyName,
- templatePath: model.packagePath?.replaceAll("\\\\", "/") ?: model.propertyName,
- controllerName: "${model.className}Controller"]
- overwrite: overwrite
-
-File htmlTemplate = file("${basePath}/templates/${model.propertyName}.tpl.html")
-if (!htmlTemplate.exists()) {
- htmlTemplate.getParentFile().mkdirs()
- htmlTemplate.createNewFile()
- addStatus "Created blank template at ${projectPath(htmlTemplate)}"
-}
diff --git a/profiles/angular/commands/create-ng-controller.groovy b/profiles/angular/commands/create-ng-controller.groovy
deleted file mode 100644
index 7daf889..0000000
--- a/profiles/angular/commands/create-ng-controller.groovy
+++ /dev/null
@@ -1,33 +0,0 @@
-import grails.util.*
-
-description( "Creates an Angular controller" ) {
- usage "grails create-ng-controller [NAME]"
- argument name:'Controller Name', description:"The name of the Angular controller to create", required:true
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-def model = model(args[0])
-boolean overwrite = flag('force')
-
-final String type = "Controller"
-final String modulePath = model.packagePath ?: model.propertyName
-final String moduleName = model.packageName ?: model.propertyName
-final String assetPath = config.getProperty("grails.codegen.angular.assetDir", String) ?: "javascripts"
-final String basePath = "grails-app/assets/${assetPath}/${modulePath}"
-
-if (!file("${basePath}/${moduleName}.js").exists()) {
- createNgModule(moduleName)
-}
-
-final String fileName = model.propertyName.endsWith(type) ? model.propertyName : "${model.propertyName}${type}"
-final String controllerName = model.className.endsWith(type) ? model.className : model.convention(type)
-
-render template: template('tests/NgControllerSpec.js'),
- destination: file("src/test/javascripts/${modulePath}/controllers/${fileName}Spec.js"),
- model: [moduleName: moduleName, name: controllerName],
- overwrite: overwrite
-
-render template: template('NgController.js'),
- destination: file("${basePath}/controllers/${fileName}.js"),
- model: [moduleName: moduleName, name: controllerName],
- overwrite: overwrite
diff --git a/profiles/angular/commands/create-ng-directive.groovy b/profiles/angular/commands/create-ng-directive.groovy
deleted file mode 100644
index da35623..0000000
--- a/profiles/angular/commands/create-ng-directive.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-import grails.util.*
-
-description( "Creates an Angular directive" ) {
- usage "grails create-ng-directive [NAME]"
- argument name:'Directive Name', description:"The name of the Angular directive to create", required:true
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-def model = model(args[0])
-boolean overwrite = flag('force')
-
-final String modulePath = model.packagePath ?: model.propertyName
-final String moduleName = model.packageName ?: model.propertyName
-final String assetPath = config.getProperty("grails.codegen.angular.assetDir", String) ?: "javascripts"
-final String basePath = "grails-app/assets/${assetPath}/${modulePath}"
-
-if (!file("${basePath}/${moduleName}.js").exists()) {
- createNgModule(moduleName)
-}
-
-render template: template("tests/NgDirectiveSpec.js"),
- destination: file("src/test/javascripts/${modulePath}/directives/${model.propertyName}Spec.js"),
- model: [moduleName: moduleName,
- propertyName: model.propertyName,
- tagName: GrailsNameUtils.getScriptName(model.propertyName)],
- overwrite: overwrite
-
-
-render template: template("NgDirective.js"),
- destination: file("${basePath}/directives/${model.propertyName}.js"),
- model: [moduleName: moduleName,
- propertyName: model.propertyName,
- templatePath: model.packagePath?.replaceAll("\\\\", "/") ?: model.propertyName]
- overwrite: overwrite
diff --git a/profiles/angular/commands/create-ng-domain.groovy b/profiles/angular/commands/create-ng-domain.groovy
deleted file mode 100644
index 363c7d5..0000000
--- a/profiles/angular/commands/create-ng-domain.groovy
+++ /dev/null
@@ -1,37 +0,0 @@
-import grails.util.*
-import groovy.io.FileType
-
-description( "Creates an Angular domain" ) {
- usage "grails create-ng-domain [NAME]"
- argument name:'Domain Name', description:"The name of the Angular domain to create", required:true
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-def model = model(args[0])
-boolean overwrite = flag('force')
-
-final String modulePath = model.packagePath ?: model.propertyName
-final String moduleName = model.packageName ?: model.propertyName
-final String assetPath = config.getProperty("grails.codegen.angular.assetDir", String) ?: "javascripts"
-final String basePath = "grails-app/assets/${assetPath}/${modulePath}"
-
-if (!file("${basePath}/${moduleName}.js").exists()) {
- createNgModule(moduleName)
-}
-
-render template: template("tests/NgDomainSpec.js"),
- destination: file("src/test/javascripts/${modulePath}/domain/${model.className}Spec.js"),
- model: [moduleName: moduleName,
- className: model.className]
- overwrite: overwrite
-
-final Boolean hasFactoryFile = file("${basePath}/core/services/DomainServiceFactory.js").exists()
-
-String templateName = hasFactoryFile ? 'NgDomainFactory.js' : 'NgDomain.js'
-
-render template: template(templateName),
- destination: file("${basePath}/domain/${model.className}.js"),
- model: [moduleName: moduleName,
- propertyName: model.propertyName,
- className: model.className]
- overwrite: overwrite
diff --git a/profiles/angular/commands/create-ng-module.groovy b/profiles/angular/commands/create-ng-module.groovy
deleted file mode 100644
index b49aecb..0000000
--- a/profiles/angular/commands/create-ng-module.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-import grails.util.*
-
-description( "Creates an Angular module" ) {
- usage "grails create-ng-module [NAME]"
- argument name:'Module Name', description:"The name of the Angular module to create", required:true
- flag name:'force', description:"Whether to overwrite existing files"
-}
-def model = model(args[0])
-
-boolean overwrite = flag('force')
-
-final String assetPath = config.getProperty("grails.codegen.angular.assetDir", String) ?: "javascripts"
-final String basePath = "grails-app/assets/${assetPath}"
-final String modulePath = "${model.packagePath}/${model.propertyName}"
-final String moduleName = "${model.packageName}.${model.propertyName}"
-
-
-Map dependencies = [:]
-
-if (file("${basePath}/${model.packagePath}/core/${model.packageName}.core.js").exists()) {
- String coreModuleName = "\"${model.packageName}.core\""
- String coreAssetPath = "/${model.packagePath.replaceAll('\\\\','/')}/core/${model.packageName}.core"
- dependencies[coreModuleName] = coreAssetPath
-}
-
-render template: template('tests/NgModuleSpec.js'),
- destination: file("src/test/javascripts/${modulePath}/${moduleName}Spec.js"),
- model: [fullName: moduleName],
- overwrite: overwrite
-
-render template: template('NgModule.js'),
- destination: file("${basePath}/${modulePath}/${moduleName}.js"),
- model: [fullName: moduleName, dependencies: dependencies],
- overwrite: overwrite
diff --git a/profiles/angular/commands/create-ng-service.groovy b/profiles/angular/commands/create-ng-service.groovy
deleted file mode 100644
index 20cb6f8..0000000
--- a/profiles/angular/commands/create-ng-service.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-import grails.util.*
-
-description( "Creates an Angular service" ) {
- usage "grails create-ng-service [NAME]"
- argument name:'Service Name', description:"The name of the Angular controller to create", required: true
- flag name:'type', description:"The type of service to create. Possible values are service, factory, value, provider, constant"
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-def model = model(args[0])
-boolean overwrite = flag('force')
-String typeFlag = flag('type') ?: "factory"
-
-if (!["service", "factory", "value", "provider", "constant"].contains(typeFlag)) {
- error "Service type \"${typeFlag}\" is not a valid option"
-} else {
- final String type = GrailsNameUtils.getClassName(typeFlag)
- String name = model.propertyName
-
- Map typeSuffixes = [service: "Service", factory: "Service", provider: "Provider"]
- if (typeSuffixes.containsKey(typeFlag) && !name.endsWith(typeSuffixes[typeFlag])) {
- name += typeSuffixes[typeFlag]
- }
-
- final String modulePath = model.packagePath ?: model.propertyName
- final String moduleName = model.packageName ?: model.propertyName
- final String assetPath = config.getProperty("grails.codegen.angular.assetDir", String) ?: "javascripts"
-
- final String basePath = "grails-app/assets/${assetPath}/${modulePath}"
- if (!file("${basePath}/${moduleName}.js").exists()) {
- createNgModule(moduleName)
- }
-
- render template: template("tests/NgServiceSpec.js"),
- destination: file("src/test/javascripts/${modulePath}/services/${name}Spec.js"),
- model: [moduleName: moduleName, name: name],
- overwrite: overwrite
-
- render template: template("services/Ng${type}.js"),
- destination: file("${basePath}/services/${name}.js"),
- model: [moduleName: moduleName, name: name],
- overwrite: overwrite
-}
-
diff --git a/profiles/angular/profile.yml b/profiles/angular/profile.yml
deleted file mode 100644
index e674971..0000000
--- a/profiles/angular/profile.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: A profile for creating applications using AngularJS
-features:
- defaults:
- - hibernate
- required:
- - json-views
- - asset-pipeline
-build:
- plugins:
- - org.grails.grails-gsp
- - com.craigburke.karma
- - com.craigburke.client-dependencies
-dependencies:
- compile:
- - "org.grails:grails-plugin-gsp"
- - "org.grails.plugins:angular-scaffolding:1.0.0.M1"
- build:
- - "com.bertramlabs.plugins:asset-pipeline-gradle:2.6.4"
- - "gradle.plugin.com.craigburke.gradle:karma-gradle:1.4.3"
- - "com.craigburke.gradle:client-dependencies:1.1.1"
- - "org.grails.plugins:angular-scaffolding:1.0.0.M1"
- assets:
- - "com.craigburke.angular:angular-template-asset-pipeline:2.3.0"
- - "com.craigburke.angular:angular-annotate-asset-pipeline:2.4.0"
- - "com.craigburke:js-closure-wrap-asset-pipeline:1.2.0"
diff --git a/profiles/angular/skeleton/build.gradle b/profiles/angular/skeleton/build.gradle
deleted file mode 100644
index 7a4d6a6..0000000
--- a/profiles/angular/skeleton/build.gradle
+++ /dev/null
@@ -1,36 +0,0 @@
-clientDependencies {
- npm {
- 'angular'('1.5.x', into: 'angular') {
- include 'angular.js'
- }
- 'angular-mocks'('1.5.x', into: 'angular') {
- include 'angular-mocks.js'
- }
- 'angular-resource'('1.5.x', into: 'angular') {
- include 'angular-resource.js'
- }
- 'angular-ui-bootstrap'('1.3.x', into: 'angular') {
- include 'ui-bootstrap-tpls.js'
- }
- 'angular-ui-router'('0.2.x', into: 'angular', from: 'release') {
- include 'angular-ui-router.js'
- }
- 'bootstrap'('3.3.x', into: 'bootstrap', from: 'dist/css') {
- include 'bootstrap.css'
- }
- }
-}
-
-karma {
- dependencies(['karma-wrap-preprocessor'])
-
- profile 'angularJS'
-
- preprocessors = [
- 'grails-app/assets/javascripts/**/*.js': ['wrap']
- ]
-
- wrapPreprocessor = [
- template: "(function () { 'use strict'; <%= contents %> })()"
- ]
-}
diff --git a/profiles/angular/skeleton/grails-app/assets/images/apple-touch-icon-retina.png b/profiles/angular/skeleton/grails-app/assets/images/apple-touch-icon-retina.png
deleted file mode 100644
index 5cc83ed..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/apple-touch-icon-retina.png and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/apple-touch-icon.png b/profiles/angular/skeleton/grails-app/assets/images/apple-touch-icon.png
deleted file mode 100644
index aba337f..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/apple-touch-icon.png and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/favicon.ico b/profiles/angular/skeleton/grails-app/assets/images/favicon.ico
deleted file mode 100644
index 3dfcb92..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/favicon.ico and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/grails-cupsonly-logo-white.svg b/profiles/angular/skeleton/grails-app/assets/images/grails-cupsonly-logo-white.svg
deleted file mode 100644
index d3fe882..0000000
--- a/profiles/angular/skeleton/grails-app/assets/images/grails-cupsonly-logo-white.svg
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/profiles/angular/skeleton/grails-app/assets/images/grails_logo.png b/profiles/angular/skeleton/grails-app/assets/images/grails_logo.png
deleted file mode 100644
index 9836b93..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/grails_logo.png and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/skin/database_add.png b/profiles/angular/skeleton/grails-app/assets/images/skin/database_add.png
deleted file mode 100644
index 802bd6c..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/skin/database_add.png and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/skin/database_delete.png b/profiles/angular/skeleton/grails-app/assets/images/skin/database_delete.png
deleted file mode 100644
index cce652e..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/skin/database_delete.png and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/skin/database_edit.png b/profiles/angular/skeleton/grails-app/assets/images/skin/database_edit.png
deleted file mode 100644
index e501b66..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/skin/database_edit.png and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/skin/database_save.png b/profiles/angular/skeleton/grails-app/assets/images/skin/database_save.png
deleted file mode 100644
index 44c06dd..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/skin/database_save.png and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/skin/database_table.png b/profiles/angular/skeleton/grails-app/assets/images/skin/database_table.png
deleted file mode 100644
index 693709c..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/skin/database_table.png and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/skin/exclamation.png b/profiles/angular/skeleton/grails-app/assets/images/skin/exclamation.png
deleted file mode 100644
index c37bd06..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/skin/exclamation.png and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/skin/house.png b/profiles/angular/skeleton/grails-app/assets/images/skin/house.png
deleted file mode 100644
index fed6221..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/skin/house.png and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/skin/information.png b/profiles/angular/skeleton/grails-app/assets/images/skin/information.png
deleted file mode 100644
index 12cd1ae..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/skin/information.png and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/skin/shadow.jpg b/profiles/angular/skeleton/grails-app/assets/images/skin/shadow.jpg
deleted file mode 100644
index b7ed44f..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/skin/shadow.jpg and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/skin/sorted_asc.gif b/profiles/angular/skeleton/grails-app/assets/images/skin/sorted_asc.gif
deleted file mode 100644
index 6b179c1..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/skin/sorted_asc.gif and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/skin/sorted_desc.gif b/profiles/angular/skeleton/grails-app/assets/images/skin/sorted_desc.gif
deleted file mode 100644
index 38b3a01..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/skin/sorted_desc.gif and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/images/spinner.gif b/profiles/angular/skeleton/grails-app/assets/images/spinner.gif
deleted file mode 100644
index 1ed786f..0000000
Binary files a/profiles/angular/skeleton/grails-app/assets/images/spinner.gif and /dev/null differ
diff --git a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/@grails.codegen.defaultPackage@.js b/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/@grails.codegen.defaultPackage@.js
deleted file mode 100644
index e5d16de..0000000
--- a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/@grails.codegen.defaultPackage@.js
+++ /dev/null
@@ -1,9 +0,0 @@
-//= wrapped
-//= require /angular/angular
-//= require /@grails.codegen.defaultPackage.path@/core/@grails.codegen.defaultPackage@.core
-//= require /@grails.codegen.defaultPackage.path@/index/@grails.codegen.defaultPackage@.index
-
-angular.module("@grails.codegen.defaultPackage@", [
- "@grails.codegen.defaultPackage@.core",
- "@grails.codegen.defaultPackage@.index"
- ]);
diff --git a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/core/@grails.codegen.defaultPackage@.core.js b/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/core/@grails.codegen.defaultPackage@.core.js
deleted file mode 100644
index 5fa9e30..0000000
--- a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/core/@grails.codegen.defaultPackage@.core.js
+++ /dev/null
@@ -1,52 +0,0 @@
-//= wrapped
-//= require /angular/angular
-//= require /angular/angular-resource
-//= require_self
-//= require_tree services
-//= require_tree controllers
-//= require_tree directives
-//= require_tree templates
-
-angular.module("@grails.codegen.defaultPackage@.core", ['ngResource'])
- .constant("contextPath", window.contextPath)
- .config(config);
-
-function config($httpProvider) {
- $httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
- $httpProvider.interceptors.push(httpRequestInterceptor);
-}
-
-
-function isIso8601(value) {
- return angular.isString(value) && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$/.test(value);
-}
-
-function convertToDate(input) {
- if (!angular.isObject(input)) {
- return input;
- }
-
- angular.forEach(input, function (value, key) {
- if (isIso8601(value)) {
- input[key] = new Date(value);
- } else if (angular.isObject(value)) {
- convertToDate(value);
- }
- });
-}
-
-function httpRequestInterceptor(contextPath) {
- return {
- request: function (config) {
- if (!config.url.indexOf("/") == 0 && contextPath && config.url.indexOf("uib/template") == -1) {
- config.url = contextPath + "/" + config.url;
- }
- return config;
- },
- response: function(response) {
- convertToDate(response.data);
- return response;
- }
- };
-}
-
diff --git a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/core/services/DomainServiceFactory.js b/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/core/services/DomainServiceFactory.js
deleted file mode 100644
index 59d40c1..0000000
--- a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/core/services/DomainServiceFactory.js
+++ /dev/null
@@ -1,25 +0,0 @@
-//= wrapped
-
-/*
- NOTE: This file is used by the create-ng-domain action.
- You can modify or extend the DomainServiceFactory but it is recommended that you not delete it.
-*/
-
-angular
- .module("@grails.codegen.defaultPackage@.core")
- .factory("domainServiceFactory", domainServiceFactory);
-
-function domainServiceFactory($resource) {
- return function(url, paramDefaults, actions, options) {
- var resourceActions = {"update": {method: "PUT"}, "list": {method: "GET", isArray: true}};
- angular.extend(resourceActions, actions);
-
- return $resource(
- url,
- paramDefaults || null,
- resourceActions,
- options || {}
- );
- }
-}
-
diff --git a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/@grails.codegen.defaultPackage@.index.js b/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/@grails.codegen.defaultPackage@.index.js
deleted file mode 100644
index e3259b5..0000000
--- a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/@grails.codegen.defaultPackage@.index.js
+++ /dev/null
@@ -1,27 +0,0 @@
-//= wrapped
-//= require /angular/angular
-//= require /angular/ui-bootstrap-tpls
-//= require /angular/angular-ui-router
-//= require_self
-//= require_tree services
-//= require_tree controllers
-//= require_tree directives
-//= require_tree templates
-
-angular.module("@grails.codegen.defaultPackage@.index", [
- "@grails.codegen.defaultPackage@.core",
- "ui.bootstrap.dropdown",
- "ui.bootstrap.collapse",
- "ui.router"
-])
-.config(config);
-
-function config($stateProvider, $urlRouterProvider) {
- $stateProvider
- .state('index', {
- url: "/",
- templateUrl: "/@grails.codegen.defaultPackage.path@/index/index.html"
- });
-
- $urlRouterProvider.otherwise('/');
-}
diff --git a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/controllers/indexController.js b/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/controllers/indexController.js
deleted file mode 100644
index 3a5d03e..0000000
--- a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/controllers/indexController.js
+++ /dev/null
@@ -1,20 +0,0 @@
-//= wrapped
-
-angular
- .module("@grails.codegen.defaultPackage@.index")
- .controller("IndexController", IndexController);
-
-function IndexController(applicationDataFactory, contextPath, $state) {
- var vm = this;
-
- vm.contextPath = contextPath;
-
- applicationDataFactory.get().then(function(response) {
- vm.applicationData = response.data;
- });
-
- vm.stateExists = function(name) {
- return $state.get(name) != null;
- };
-
-}
diff --git a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/services/applicationDataFactory.js b/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/services/applicationDataFactory.js
deleted file mode 100644
index 1ac5ddb..0000000
--- a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/services/applicationDataFactory.js
+++ /dev/null
@@ -1,14 +0,0 @@
-//= wrapped
-
-angular
- .module("@grails.codegen.defaultPackage@.index")
- .factory("applicationDataFactory", applicationDataFactory);
-
-function applicationDataFactory($http) {
- return {
- get: function() {
- return $http({method: "GET", url: "application/index"});
- }
- }
-}
-
diff --git a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/templates/index.tpl.html b/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/templates/index.tpl.html
deleted file mode 100644
index f43132a..0000000
--- a/profiles/angular/skeleton/grails-app/assets/javascripts/@grails.codegen.defaultPackage.path@/index/templates/index.tpl.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
- Welcome to Grails
-
-
- Congratulations, you have successfully started your first Grails application! At the moment
- this is the default page, feel free to modify it to either redirect to a controller or display
- whatever content you may choose. Below is a list of controllers that are currently deployed in
- this application, click on each to execute its default action:
-
-
-
-
Available Controllers:
-
-
-
-
diff --git a/profiles/angular/skeleton/grails-app/assets/stylesheets/application.css b/profiles/angular/skeleton/grails-app/assets/stylesheets/application.css
deleted file mode 100644
index b48d8e5..0000000
--- a/profiles/angular/skeleton/grails-app/assets/stylesheets/application.css
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-* This is a manifest file that'll be compiled into application.css, which will include all the files
-* listed below.
-*
-* Any CSS file within this directory can be referenced here using a relative path.
-*
-* You're free to add application-wide styles to this file and they'll appear at the top of the
-* compiled file, but it's generally better to create a new file per style scope.
-*
-*= require /bootstrap/bootstrap
-*= require grails
-*= require main
-*= require mobile
-*= require_self
-*/
diff --git a/profiles/angular/skeleton/grails-app/assets/stylesheets/errors.css b/profiles/angular/skeleton/grails-app/assets/stylesheets/errors.css
deleted file mode 100644
index 1c616d8..0000000
--- a/profiles/angular/skeleton/grails-app/assets/stylesheets/errors.css
+++ /dev/null
@@ -1,109 +0,0 @@
-h1, h2 {
- margin: 10px 25px 5px;
-}
-
-h2 {
- font-size: 1.1em;
-}
-
-.filename {
- font-style: italic;
-}
-
-.exceptionMessage {
- margin: 10px;
- border: 1px solid #000;
- padding: 5px;
- background-color: #E9E9E9;
-}
-
-.stack,
-.snippet {
- margin: 0 25px 10px;
-}
-
-.stack,
-.snippet {
- border: 1px solid #ccc;
- -mox-box-shadow: 0 0 2px rgba(0,0,0,0.2);
- -webkit-box-shadow: 0 0 2px rgba(0,0,0,0.2);
- box-shadow: 0 0 2px rgba(0,0,0,0.2);
-}
-
-/* error details */
-.error-details {
- border-top: 1px solid #FFAAAA;
- -mox-box-shadow: 0 0 2px rgba(0,0,0,0.2);
- -webkit-box-shadow: 0 0 2px rgba(0,0,0,0.2);
- box-shadow: 0 0 2px rgba(0,0,0,0.2);
- border-bottom: 1px solid #FFAAAA;
- -mox-box-shadow: 0 0 2px rgba(0,0,0,0.2);
- -webkit-box-shadow: 0 0 2px rgba(0,0,0,0.2);
- box-shadow: 0 0 2px rgba(0,0,0,0.2);
- background-color:#FFF3F3;
- line-height: 1.5;
- overflow: hidden;
- padding: 5px;
- padding-left:25px;
-}
-
-.error-details dt {
- clear: left;
- float: left;
- font-weight: bold;
- margin-right: 5px;
-}
-
-.error-details dt:after {
- content: ":";
-}
-
-.error-details dd {
- display: block;
-}
-
-/* stack trace */
-.stack {
- padding: 5px;
- overflow: auto;
- height: 150px;
-}
-
-/* code snippet */
-.snippet {
- background-color: #fff;
- font-family: monospace;
-}
-
-.snippet .line {
- display: block;
-}
-
-.snippet .lineNumber {
- background-color: #ddd;
- color: #999;
- display: inline-block;
- margin-right: 5px;
- padding: 0 3px;
- text-align: right;
- width: 3em;
-}
-
-.snippet .error {
- background-color: #fff3f3;
- font-weight: bold;
-}
-
-.snippet .error .lineNumber {
- background-color: #faa;
- color: #333;
- font-weight: bold;
-}
-
-.snippet .line:first-child .lineNumber {
- padding-top: 5px;
-}
-
-.snippet .line:last-child .lineNumber {
- padding-bottom: 5px;
-}
\ No newline at end of file
diff --git a/profiles/angular/skeleton/grails-app/assets/stylesheets/grails.css b/profiles/angular/skeleton/grails-app/assets/stylesheets/grails.css
deleted file mode 100644
index d943f0d..0000000
--- a/profiles/angular/skeleton/grails-app/assets/stylesheets/grails.css
+++ /dev/null
@@ -1,1059 +0,0 @@
-html, code, kbd, pre, samp {
- -ms-text-size-adjust: 100%;
- -webkit-text-size-adjust: 100%;
-}
-
-html, body {
- height: 100%;
- -webkit-overflow-scrolling: touch;
-}
-
-p, ul, pre, h1, h2, h3, h4, h5, h6, h7, h8 {
- margin: 1em 0;
-}
-
-p {
- display: block;
-}
-
-h1, h2, h3, h4, h5, h6, h7, h8 {
- font-weight: bold;
-}
-
-pre {
- border-radius: 0;
- border: 0;
- font-size: 14px;
-}
-
-/* customizing bootstrap nav bar */
-.navbar {
- margin-bottom: 0px;
- padding-right: 110px;
-}
-.navbar .container {
- margin: 10px;
-}
-.navbar-default a {
- color: #ffffff !important;
- font-size: 18px !important;
- text-decoration: none;
-}
-.grails-icon img {
- width: 40px;
-
-}
-.navbar-default, .navbar-static-top {
- background-color: #4D8618;
- border: 0px;
-}
-a.navbar-brand {
- color: white !important;
- font-size: 19px !important;
-}
-.navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:hover, .navbar-default .navbar-nav>.active>a:focus {
- background-color: transparent;
- color: white;
-}
-.navbar-nav>li.active>a {
- color: white !important;
-}
-.navbar-nav>li>a:hover {
- background-color: #db4800 !important;
- color: white !important;
-}
-.navbar-nav>li>a {
- color: #c0d3db;
-}
-.navbar-default .navbar-toggle .icon-bar {
- background-color: white;
-}
-.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {
- background-color: #db4800;
-}
-
-@media (min-width: 768px) {
- .container {
- width: auto;
- }
-}
-
-/* specific to index.html */
-
-@media (max-width: 999px) {
- #fork-me {
- display: none;
- }
-
- .navbar {
- padding-right: 0px;
- }
-}
-
-#fork-me{
- position: fixed;
- padding: 0px 50px 0px 50px;
- top: 40px;
- right: -60px;
- background-color: #a60000;
- color: #ffffff;
- font-size: 1em;
- z-index: 100;
- transform: rotate(+45deg);
- text-align: center;
- font-weight: bolder;
- border: #c14646;
- border-style: dashed;
- border-width: 1px;
-}
-
-#fork-me p {
- margin: 0em 0;
-}
-
-#band {
- /*grey =#808080*/
- background: #79B94C no-repeat 50% 30%;
- height: 400px;
-}
-
-.svg #band {
- background-image: url(../img/grails-cupsonly-logo-white.svg);
-}
-
-.no-svg #band {
- background-image: url(../img/groovy-logo-white.png);
-}
-
-@media (max-width: 1010px) {
- #band {
- background-size: 90%;
- height: 300px;
- }
-}
-
-@media (max-width: 690px) {
- #band {
- background-size: 80%;
- height: 200px;
- }
-}
-
-@media (max-width: 475px) {
- #band {
- background-size: 70%;
- height: 100px;
- }
-}
-
-#they-use-groovy {
- width: 100%;
- height: 450px;
- background-color: #db4800;
- margin-bottom: 20px;
- text-align: center;
-}
-
-#they-use-groovy .item {
- text-align: center;
- color: white;
-}
-
-#logos-holder {
- display: inline-block;
- padding: 0px;
- margin: 0px;
- text-align: center;
-}
-
-#logos-holder .logo {
- padding: 0px;
- margin: 0px;
- display: inline-block;
- width: 100px;
- height: 80px;
- background-size: 95%;
- background-repeat: no-repeat;
- background-position: 50% 50%;
-}
-
-@media (min-width: 330px) {
- #logos-holder {
- width: 320px;
- }
-
- #they-use-groovy {
- height: 1130px;
- }
-}
-
-@media (min-width: 475px) {
- #logos-holder {
- width: 420px;
- }
-
- #they-use-groovy {
- height: 900px;
- }
-}
-
-@media (min-width: 690px) {
- #logos-holder {
- width: 630px;
- }
-
- #they-use-groovy {
- height: 600px;
- }
-}
-
-@media (min-width: 1010px) {
- #logos-holder {
- width: 940px;
- }
-
- #they-use-groovy {
- height: 450px;
- }
-}
-
-.centered {
- text-align: center;
-}
-
-.event-img {
- margin: -20px -20px 20px -20px;
- background-repeat: no-repeat;
- background-position: 50% top;
- height: 180px;
-}
-
-.event-logo {
- height: 180px;
- float: right;
-}
-
-@media (max-width: 1010px) {
- .event-logo {
- height: ;
- }
-
-}
-
-@media (max-width: 690px) {
- .event-logo {
- height: 60px;
- }}
-
-@media (max-width: 475px) {
- .event-logo {
- display: none;
- }
-}
-
-article .content time {
- font-weight: bold;
-}
-
-.doc-embed {
- border: 0;
- width: 100%;
- min-height: 100%;
-}
-
-.download-table {
- width: 100%;
- text-align: center;
-}
-
-.download-table td {
- width: 20%;
-}
-
-#mc-embedded-subscribe {
- width: 200px;
- font-weight: bold;
-}
-
-#mc-embedded-subscribe:hover {
- background-color: #F2F2F2;
- font-weight: bold;
-}
-
-#footer .colset-3-footer .col-1 h1, #footer .colset-3-footer .col-2 h1, #footer .colset-3-footer .col-3 h1 {
- font-size: 15px !important;
-}
-
-.anchor-link:before {
- content: ' # ';
- color: lightgray;
-}
-
-.anchor-link:hover:before {
- color: orange;
-}
-
-code, kbd, pre, samp {
- font-family: "Source Code Pro", "Consolas", "Monaco", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;
-}
-
-#contribute-btn {
- position: absolute;
- right: 15px;
-}
-
-@media (max-width: 767px) {
- #contribute-btn {
- width: 100%;
- position: relative;
- margin-top: 30px;
- right: 0px;
- }
-
- #contribute-btn button {
- width: 100%;
- right: 15px;
- }
-}
-
-@media (min-width: 1200px) {
- #contribute-btn {
- top: 25px;
- right: 15px;
- }
-}
-
-#big-download-button {
- float: right;
- font-size: 30px;
- padding: 15px;
- margin: 10px 0px 10px 20px;
- border: 2px solid #db4800;
- border-radius: 6px;
- background-color: #db4800;
- color: white;
-}
-
-#big-download-button:hover {
- background-color: #e6e6e6;
- color: #db4800;
-}
-
-.colset-3-footer .col-1, .colset-3-footer .col-2, .colset-3-footer .col-3 {
- min-width: 180px;
- float: left;
-}
-
-.colset-3-footer .col-3 {
- min-width: 220px;
-}
-
-.colset-3-article article {
- float: left;
-}
-
-.col1, .col2 {
- min-width: 300px;
- float: left;
-}
-
-@media (max-width: 988px) {
- .col1, .col2 {
- width: 98% !important;
- max-width: 98%;
- }
-
- .colset-3-article article {
- width: 98% !important;
- max-width: 98%;
- }
-}
-
-body, html {
- font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
- padding: 0;
- margin: 0;
- background: #FFF;
- color: #343437;
- line-height: 25px;
- font-weight: normal;
- font-size: 14px;
-}
-
-a {
- color: #db4800;
- text-decoration: underline;
-}
-
-a:hover {
- color: #db4800;
- text-decoration: none
-}
-
-h1 {
- font-size: 2.125em;
- margin: .67em 0
-}
-
-h2 {
- font-size: 1.6875em;
- font-weight: bold;
-}
-
-h3, #toctitle, .sidebarblock > .content > .title {
- font-size: 1.375em;
- font-weight: bold;
-}
-
-h4 {
- font-size: 1.125em;
- font-weight: bold;
-}
-
-h5 {
- font-size: 1.125em;
- font-weight: bold;
- color: #db4800;
-}
-
-h6 {
- font-size: 1.08em;
- font-weight: normal;
- color: #db4800;
-}
-
-h7 {
- font-weight: bold;
- color: #245f78;
-}
-
-h8 {
- color: #245f78;
-}
-
-#footer {
- background: #f2f2f2;
- text-align: center;
- font-size: 14px;
- padding: 20px 0 30px;
- margin-top: 30px;
- color: #AAA
-}
-
-#footer .col-right {
- float: right;
- width: 300px;
- text-align: right;
- padding-top: 10px
-}
-
-#footer .colset-3-footer {
- color: #222;
- font-size: 14px
-}
-
-#footer .colset-3-footer:before, #footer .colset-3-footer:after {
- content: " ";
- display: table
-}
-
-#footer .colset-3-footer:after {
- clear: both
-}
-
-#footer .colset-3-footer .col-1, #footer .colset-3-footer .col-2, #footer .colset-3-footer .col-3 {
- width: 18%;
- padding: 20px 0 30px;
- padding-right: 3%;
- float: left;
- text-align: left
-}
-
-#footer .colset-3-footer .col-3 {
- width: 24%;
-}
-
-#footer .colset-3-footer .col-1 h1, #footer .colset-3-footer .col-2 h1, #footer .colset-3-footer .col-3 h1 {
- font-weight: 600;
- font-size: 15px;
- line-height: 30px;
- margin: 0
-}
-
-#footer .colset-3-footer .col-1 ul, #footer .colset-3-footer .col-2 ul, #footer .colset-3-footer .col-3 ul {
- list-style-type: none;
- margin: 0;
- padding: 0
-}
-
-#footer .colset-3-footer .col-1 ul li, #footer .colset-3-footer .col-2 ul li, #footer .colset-3-footer .col-3 ul li {
- margin: 0;
- padding: 0
-}
-
-#footer .colset-3-footer .col-1 ul li a, #footer .colset-3-footer .col-2 ul li a, #footer .colset-3-footer .col-3 ul li a {
- color: #343437;
- text-decoration: none
-}
-
-#footer .colset-3-footer .col-1 ul li a:hover, #footer .colset-3-footer .col-2 ul li a:hover, #footer .colset-3-footer .col-3 ul li a:hover {
- text-decoration: underline
-}
-
-#footer .second a {
- color: #db4800
-}
-
-.row {
- position: relative;
- max-width: 1400px;
- margin: 0 auto;
- padding: 0 5%
-}
-
-.row:before, .row:after {
- content: " ";
- display: table
-}
-
-.row:after {
- clear: both
-}
-
-.band {
- background: #4298b8;
- height: 400px;
- margin-bottom: 20px;
- color: white
-}
-
-.band .item {
- text-align: center
-}
-
-.band .item:before, .band .item:after {
- content: " ";
- display: table
-}
-
-.band .item:after {
- clear: both
-}
-
-#content {
- background: white
-}
-
-#content .row:before, #content .row:after {
- content: " ";
- display: table
-}
-
-#content .row:after {
- clear: both
-}
-
-#content .row > h1 {
- font-size: 34px;
- line-height: 40px;
- font-weight: 200;
- text-align: center;
- margin: 0;
- padding: 20px 0
-}
-
-#content hr.row, #content hr.divider {
- border: 0 none;
- border-top: 1px solid #EEE;
- margin: 0 5%;
- margin-top: 40px
-}
-
-#content hr.divider {
- margin: 0;
- margin-top: 40px;
- margin-bottom: 30px
-}
-
-#content .colset-2-its:before, #content .colset-2-its:after {
- content: " ";
- display: table
-}
-
-#content .colset-2-its:after {
- clear: both
-}
-
-#content .colset-2-its > h1 {
- padding-bottom: 15px;
- margin-top: 15px;
- margin-bottom: 0
-}
-
-#content .colset-2-its > p {
- margin-top: 0;
- padding-bottom: 5px;
- text-align: center;
- color: #222;
- font-size: 15px
-}
-
-#content .colset-2-its .col1, #content .colset-2-its .col2 {
- float: left;
- width: 48%;
- padding-right: 1%;
- padding-left: 1%;
-}
-
-#content .colset-2-its .col2 {
- padding-left: 1%;
- padding-right: 1%;
-}
-
-#content .colset-2-its article {
- padding: 10px 0
-}
-
-#content .colset-2-its article:before, #content .colset-2-its article:after {
- content: " ";
- display: table
-}
-
-#content .colset-2-its article:after {
- clear: both
-}
-
-#content .colset-2-its article .icon {
- display: block;
- width: 80px;
- height: 80px;
- background-image: url(../img/icons-colset-2-its.png);
- float: left;
- margin-top: 12px;
- margin-right: 15px
-}
-
-#content .colset-2-its article .icon.icon-1 {
- background-position: 0 0
-}
-
-#content .colset-2-its article .icon.icon-2 {
- background-position: 0 -80px
-}
-
-#content .colset-2-its article .icon.icon-3 {
- background-position: 0 -160px
-}
-
-#content .colset-2-its article .icon.icon-4 {
- background-position: 0 -240px
-}
-
-#content .colset-2-its article .icon.icon-5 {
- background-position: 0 -320px
-}
-
-#content .colset-2-its article .icon.icon-6 {
- background-position: 0 -400px
-}
-
-#content .colset-2-its article > h1 {
- font-size: 19px;
- font-weight: 600;
- margin-bottom: 0;
- line-height: 30px
-}
-
-#content .colset-2-its article p {
- margin: 0;
- line-height: 24px;
- font-size: 14px
-}
-
-#content .first-event-row {
- padding-top: 30px;
-}
-
-#content .last-event-row {
- padding-bottom: 30px
-}
-
-#content .colset-3-article > h1 {
- font-size: 24px
-}
-
-#content .colset-3-article div.content {
- padding: 20px;
- padding-bottom: 5px
-}
-
-#content .colset-3-article article {
- float: left;
- width: 29%;
- margin: 10px 2%;
- -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1)
-}
-
-#content .colset-3-article article .img {
- margin: -20px -20px 20px -20px;
- background-position: center top;
- height: 180px
-}
-
-#content .colset-3-article article h1 {
- margin: 0;
- font-size: 18px;
- font-weight: normal;
- line-height: 25px
-}
-
-#content .colset-3-article article h1 a {
- color: #343437;
- cursor: pointer
-}
-
-#content .colset-3-article article h1 a:hover {
- color: #46a5c8
-}
-
-#content .colset-3-article article p, #content .colset-3-article article time {
- font-size: 13px
-}
-
-#content .colset-3-article article .author a {
- color: #db4800
-}
-
-#content .colset-3-article article:first-child {
- padding-left: 0
-}
-
-#content .colset-3-article article:last-child {
- padding-right: 0
-}
-
-#content.page-1 .row {
- padding-top: 10px;
- padding-bottom: 10px
-}
-
-#content.page-1 .row h1 {
- text-align: left;
- font-size: 36px
-}
-
-#content.page-1 .row article {
- font-size: 14px
-}
-
-#content.page-1 .row article .desc {
- font-size: 16px
-}
-
-#content.page-1 .row article h1 {
- margin: 0;
- paddnig: 0;
- text-align: left;
- font-size: 26px
-}
-
-#content.page-1 .row article h2 {
- margin: 0;
- paddnig: 0
-}
-
-#content.page-1 .row article h3 {
- font-weight: bold
-}
-
-#content.page-1 .row article pre {
- display: block;
- background: #f2f2f2;
- padding: 12px 20px
-}
-
-ul.nav-sidebar {
- margin: 0;
- margin-top: 20px;
- padding: 5px 0;
- border: 1px solid #EEE;
- list-style-type: none
-}
-
-ul.nav-sidebar li a {
- display: block;
- cursor: pointer;
- padding: 5px 10px;
- font-weight: 400;
- text-decoration: none;
- color: #343437
-}
-
-ul.nav-sidebar li.active a:hover, ul.nav-sidebar li a:hover {
- color: white;
- background-color: #db4800;
-}
-
-ul.nav-sidebar li.active a {
- background-color: #f2f2f2
-}
-
-.table {
- margin: 20px 0
-}
-
-.table thead tr th {
- padding: 10px;
- font-weight: normal;
- font-size: 18px
-}
-
-.table tbody tr td {
- vertical-align: top;
- font-size: 12px;
- padding: 10px;
- border-top: 1px solid #EEE
-}
-
-*, *:after, *::before {
- -moz-box-sizing: border-box;
- box-sizing: border-box
-}
-
-body {
- background: #444
-}
-
-html.noScroll {
- overflow: hidden
-}
-
-html.noScroll body, html.noScroll .st-container, html.noScroll .st-pusher, html.noScroll .st-content {
- overflow: hidden
-}
-
-html, body, .st-container, .st-pusher, .st-content {
- overflow: auto
-}
-
-.sign-in-fa-icon:before {
- font-family: FontAwesome;
- content: '\f090';
- padding-right: 10px;
-}
-
-#st-container {
- height: 100%;
-}
-
-.st-content {
- background: white
-}
-
-.st-content, .st-content-inner {
- position: relative;
- height: 100%;
-}
-
-.st-container {
- position: relative;
- overflow: hidden
-}
-
-.st-pusher {
- position: relative;
- left: 0;
- z-index: 99;
- height: 100%;
- -webkit-transition: -webkit-transform .5s;
- transition: transform .5s
-}
-
-.st-pusher::after {
- position: absolute;
- top: 0;
- right: 0;
- width: 0;
- height: 0;
- background: rgba(0, 0, 0, 0.3);
- content: '';
- opacity: 0;
- -webkit-transition: opacity .5s, width .1s .5s, height .1s .5s;
- transition: opacity .5s, width .1s .5s, height .1s .5s
-}
-
-.st-menu-open .st-pusher::after {
- width: 100%;
- height: 100%;
- opacity: 1;
- -webkit-transition: opacity .5s;
- transition: opacity .5s
-}
-
-.st-menu {
- position: fixed;
- top: 0;
- left: auto;
- z-index: 100;
- visibility: hidden;
- width: 300px;
- height: 100%;
- background: #79B94C;
- -webkit-transition: all .5s;
- transition: all .5s;
- right: -600px
-}
-
-.st-menu::after {
- position: absolute;
- top: 0;
- right: 0;
- width: 100%;
- height: 100%;
- background: rgba(0, 0, 0, 0.2);
- content: '';
- opacity: 1;
- -webkit-transition: opacity .5s;
- transition: opacity .5s
-}
-
-.st-menu-open .st-menu::after {
- width: 0;
- height: 0;
- opacity: 0;
- -webkit-transition: opacity .5s, width .1s .5s, height .1s .5s;
- transition: opacity .5s, width .1s .5s, height .1s .5s
-}
-
-.st-menu ul {
- margin: 0;
- padding: 0;
- list-style: none
-}
-
-.st-menu h2 {
- margin: 0;
- padding: 1em;
- color: white;
- text-shadow: 0 0 1px rgba(0, 0, 0, 0.1);
- font-weight: 300;
- font-size: 2em
-}
-
-.st-menu ul li {
- display: block
-}
-
-.st-menu ul li a {
- display: block;
- position: relative;
- padding: 1em 1em 1em 45px;
- outline: 0;
- box-shadow: inset 0 -1px rgba(0, 0, 0, 0.2);
- color: #f3efe0;
- text-shadow: 0 0 1px rgba(255, 255, 255, 0.1);
- letter-spacing: 1px;
- font-weight: 400;
- text-decoration: none
-}
-
-.st-menu ul li a span.fa {
- display: block;
- position: absolute;
- left: 12px;
- top: 17px;
- font-size: 20px;
- width: 30px;
- text-align: center
-}
-
-.st-menu ul li a span.fa.fa-tasks, .st-menu ul li a span.fa.fa-envelope {
- top: 18px;
- font-size: 18px
-}
-
-.st-menu ul li:first-child a {
- box-shadow: inset 0 -1px rgba(0, 0, 0, 0.2), inset 0 1px rgba(0, 0, 0, 0.2)
-}
-
-.st-menu ul li a:hover {
- background: rgba(0, 0, 0, 0.2);
- box-shadow: inset 0 -1px rgba(0, 0, 0, 0);
- color: #fff
-}
-
-.st-effect-9.st-container {
- -webkit-perspective: 10000px;
- perspective: 10000px
-}
-
-.st-effect-9 .st-pusher {
- -webkit-transform-style: preserve-3d;
- transform-style: preserve-3d
-}
-
-.st-effect-9.st-menu-open .st-pusher {
- -webkit-transform: translate3d(0, 0, -300px);
- transform: translate3d(0, 0, -300px)
-}
-
-.st-effect-9.st-menu {
- right: -600px;
- opacity: 1;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0)
-}
-
-.st-effect-9.st-menu-open .st-effect-9.st-menu {
- visibility: visible;
- right: -300px
-}
-
-.st-effect-9.st-menu::after {
- display: none
-}
-
-/* Video from the learn page */
-.presentations {
- margin-top: 30px;
- margin-bottom: 30px;
-}
-
-.presentations img.screenshot {
- float: left;
- margin-right: 40px;
- margin-top: 1em;
- margin-bottom: 0px;
- width: 300px;
- height: auto;
-}
-
-.presentations .metadata {
- display: table-cell;
- min-width: 328px;
-}
-
-.presentations .title {
- margin-top: 1em !important;
- margin-bottom: 0.5em !important;
-}
-
-
-.presentations .speaker {
- color: #245f78;
- margin-bottom: 0.5em;
-}
-
-.presentations .summary {
- line-height: 1.3;
-}
-
-.presentations .urls {
-}
-
-@media screen and (max-width: 767px) {
- .presentations .img.screenshot, .video .metadata {
- float: none;
- }
-}
diff --git a/profiles/angular/skeleton/grails-app/assets/stylesheets/main.css b/profiles/angular/skeleton/grails-app/assets/stylesheets/main.css
deleted file mode 100644
index 46e52a9..0000000
--- a/profiles/angular/skeleton/grails-app/assets/stylesheets/main.css
+++ /dev/null
@@ -1,576 +0,0 @@
-/* FONT STACK */
-body,
-input, select, textarea {
- font-family: "Open Sans", "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
-}
-
-h1, h2, h3, h4, h5, h6 {
- line-height: 1.1;
-}
-
-/* BASE LAYOUT */
-
-html {
- background-color: #ddd;
- background-image: -moz-linear-gradient(center top, #aaa, #ddd);
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #aaa), color-stop(1, #ddd));
- background-image: linear-gradient(top, #aaa, #ddd);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr = '#aaaaaa', EndColorStr = '#dddddd');
- background-repeat: no-repeat;
- height: 100%;
- /* change the box model to exclude the padding from the calculation of 100% height (IE8+) */
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-html.no-cssgradients {
- background-color: #aaa;
-}
-
-html * {
- margin: 0;
-}
-
-body {
- background: #ffffff;
- color: #333333;
- overflow-x: hidden; /* prevents box-shadow causing a horizontal scrollbar in firefox when viewport < 960px wide */
- -moz-box-shadow: 0 0 0.3em #4D8618;
- -webkit-box-shadow: 0 0 0.3em #4D8618;
- box-shadow: 0 0 0.3em #4D8618;
-}
-
-#grailsLogo {
- background-color: #abbf78;
-}
-
-a:hover, a:active {
- outline: none; /* prevents outline in webkit on active links but retains it for tab focus */
-}
-
-h1, h2, h3 {
- font-weight: normal;
- font-size: 1.25em;
- margin: 0.8em 0 0.3em 0;
-}
-
-ul {
- padding: 0;
-}
-
-img {
- border: 0;
-}
-
-/* GENERAL */
-
-#grailsLogo a {
- display: inline-block;
- margin: 1em;
-}
-
-.content {
-}
-
-.content h1 {
- border-bottom: 1px solid #CCCCCC;
- margin: 0.8em 1em 0.3em;
- padding: 0 0.25em;
-}
-
-.scaffold-list h1 {
- border: none;
-}
-
-.footer {
- background: #48802c;
- color: #000;
- clear: both;
- font-size: 0.8em;
- margin-top: 1.5em;
- padding: 1em;
- min-height: 1em;
-}
-
-.footer a {
- color: #4D8618;
-}
-
-.spinner {
- background: url(spinner.gif) 50% 50% no-repeat transparent;
- height: 16px;
- width: 16px;
- padding: 0.5em;
- position: absolute;
- right: 0;
- top: 0;
- text-indent: -9999px;
-}
-
-/* NAVIGATION MENU */
-
-.nav {
- zoom: 1;
-}
-
-.nav ul {
- overflow: hidden;
- padding-left: 0;
- zoom: 1;
-}
-
-.nav li {
- display: block;
- float: left;
- list-style-type: none;
- margin-right: 0.5em;
- padding: 0;
-}
-
-.nav a {
- color: #666666;
- display: block;
- padding: 0.25em 0.7em;
- text-decoration: none;
- -moz-border-radius: 0.3em;
- -webkit-border-radius: 0.3em;
- border-radius: 0.3em;
-}
-
-.nav a:active, .nav a:visited {
- color: #666666;
-}
-
-.nav a:focus, .nav a:hover {
- background-color: #999999;
- color: #ffffff;
- outline: none;
- text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.8);
-}
-
-.no-borderradius .nav a:focus, .no-borderradius .nav a:hover {
- background-color: transparent;
- color: #444444;
- text-decoration: underline;
-}
-
-.nav a.home, .nav a.list, .nav a.create {
- background-position: 0.7em center;
- background-repeat: no-repeat;
- text-indent: 25px;
-}
-
-.nav a.home {
- background-image: url(skin/house.png);
-}
-
-.nav a.list {
- background-image: url(skin/database_table.png);
-}
-
-.nav a.create {
- background-image: url(skin/database_add.png);
-}
-
-.nav li.dropdown.open ul.dropdown-menu {
- background-color: #4D8618;
-}
-
-/* CREATE/EDIT FORMS AND SHOW PAGES */
-
-fieldset,
-.property-list {
- margin: 0.6em 1.25em 0 1.25em;
- padding: 0.3em 1.8em 1.25em;
- position: relative;
- zoom: 1;
- border: none;
-}
-
-.property-list .fieldcontain {
- list-style: none;
- overflow: hidden;
- zoom: 1;
-}
-
-.fieldcontain {
- margin-top: 1em;
-}
-
-.fieldcontain label,
-.fieldcontain .property-label {
- color: #666666;
- text-align: right;
- width: 25%;
-}
-
-.fieldcontain .property-label {
- float: left;
-}
-
-.fieldcontain .property-value {
- display: block;
- margin-left: 27%;
-}
-
-label {
- cursor: pointer;
- display: inline-block;
- margin: 0 0.25em 0 0;
-}
-
-input, select, textarea {
- background-color: #fcfcfc;
- border: 1px solid #cccccc;
- font-size: 1em;
- padding: 0.2em 0.4em;
-}
-
-select {
- padding: 0.2em 0.2em 0.2em 0;
-}
-
-select[multiple] {
- vertical-align: top;
-}
-
-textarea {
- width: 250px;
- height: 150px;
- overflow: auto; /* IE always renders vertical scrollbar without this */
- vertical-align: top;
-}
-
-input[type=checkbox], input[type=radio] {
- background-color: transparent;
- border: 0;
- padding: 0;
-}
-
-input:focus, select:focus, textarea:focus {
- background-color: #ffffff;
- border: 1px solid #eeeeee;
- outline: 0;
- -moz-box-shadow: 0 0 0.5em #ffffff;
- -webkit-box-shadow: 0 0 0.5em #ffffff;
- box-shadow: 0 0 0.5em #ffffff;
-}
-
-.required-indicator {
- color: #cc0000;
- display: inline-block;
- font-weight: bold;
- margin-left: 0.3em;
- position: relative;
- top: 0.1em;
-}
-
-ul.one-to-many {
- display: inline-block;
- list-style-position: inside;
- vertical-align: top;
-}
-
-ul.one-to-many li.add {
- list-style-type: none;
-}
-
-/* EMBEDDED PROPERTIES */
-
-fieldset.embedded {
- background-color: transparent;
- border: 1px solid #CCCCCC;
- margin-left: 0;
- margin-right: 0;
- padding-left: 0;
- padding-right: 0;
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-fieldset.embedded legend {
- margin: 0 1em;
- width: initial;
- border-bottom: none;
-}
-
-/* MESSAGES AND ERRORS */
-
-.errors,
-.message {
- font-size: 0.8em;
- line-height: 2;
- margin: 1em 2em;
- padding: 0.25em;
-}
-
-.message {
- background: #f3f3ff;
- border: 1px solid #b2d1ff;
- color: #006dba;
- -moz-box-shadow: 0 0 0.25em #b2d1ff;
- -webkit-box-shadow: 0 0 0.25em #b2d1ff;
- box-shadow: 0 0 0.25em #b2d1ff;
-}
-
-.errors {
- background: #fff3f3;
- border: 1px solid #ffaaaa;
- color: #cc0000;
- -moz-box-shadow: 0 0 0.25em #ff8888;
- -webkit-box-shadow: 0 0 0.25em #ff8888;
- box-shadow: 0 0 0.25em #ff8888;
-}
-
-.errors ul,
-.message {
- padding: 0;
-}
-
-.errors li {
- list-style: none;
- background: transparent url(skin/exclamation.png) 0.5em 50% no-repeat;
- text-indent: 2.2em;
-}
-
-.message {
- background: transparent url(skin/information.png) 0.5em 50% no-repeat;
- text-indent: 2.2em;
-}
-
-/* form fields with errors */
-
-.error input, .error select, .error textarea {
- background: #fff3f3;
- border-color: #ffaaaa;
- color: #cc0000;
-}
-
-.error input:focus, .error select:focus, .error textarea:focus {
- -moz-box-shadow: 0 0 0.5em #ffaaaa;
- -webkit-box-shadow: 0 0 0.5em #ffaaaa;
- box-shadow: 0 0 0.5em #ffaaaa;
-}
-
-/* same effects for browsers that support HTML5 client-side validation (these have to be specified separately or IE will ignore the entire rule) */
-
-input:invalid, select:invalid, textarea:invalid {
- background: #fff3f3;
- border-color: #ffaaaa;
- color: #cc0000;
-}
-
-input:invalid:focus, select:invalid:focus, textarea:invalid:focus {
- -moz-box-shadow: 0 0 0.5em #ffaaaa;
- -webkit-box-shadow: 0 0 0.5em #ffaaaa;
- box-shadow: 0 0 0.5em #ffaaaa;
-}
-
-/* TABLES */
-
-table {
- border-top: 1px solid #DFDFDF;
- border-collapse: collapse;
- width: 100%;
- margin-bottom: 1em;
-}
-
-tr {
- border: 0;
-}
-
-tr>td:first-child, tr>th:first-child {
- padding-left: 1.25em;
-}
-
-tr>td:last-child, tr>th:last-child {
- padding-right: 1.25em;
-}
-
-td, th {
- line-height: 1.5em;
- padding: 0.5em 0.6em;
- text-align: left;
- vertical-align: top;
-}
-
-th {
- background-color: #efefef;
- background-image: -moz-linear-gradient(top, #ffffff, #eaeaea);
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #ffffff), color-stop(1, #eaeaea));
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr = '#ffffff', EndColorStr = '#eaeaea');
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#eaeaea')";
- color: #666666;
- font-weight: bold;
- line-height: 1.7em;
- padding: 0.2em 0.6em;
-}
-
-thead th {
- white-space: nowrap;
-}
-
-th a {
- display: block;
- text-decoration: none;
-}
-
-th a:link, th a:visited {
- color: #666666;
-}
-
-th a:hover, th a:focus {
- color: #333333;
-}
-
-th.sortable a {
- background-position: right;
- background-repeat: no-repeat;
- padding-right: 1.1em;
-}
-
-th.asc a {
- background-image: url(skin/sorted_asc.gif);
-}
-
-th.desc a {
- background-image: url(skin/sorted_desc.gif);
-}
-
-.odd {
- background: #f7f7f7;
-}
-
-.even {
- background: #ffffff;
-}
-
-th:hover, tr:hover {
- background: #79b94c;
-}
-
-/* PAGINATION */
-
-.pagination {
- border-top: 0;
- margin: 0.8em 1em 0.3em;
- padding: 0.3em 0.2em;
- text-align: center;
- -moz-box-shadow: 0 0 3px 1px #AAAAAA;
- -webkit-box-shadow: 0 0 3px 1px #AAAAAA;
- box-shadow: 0 0 3px 1px #AAAAAA;
- background-color: #EFEFEF;
-}
-
-.pagination a,
-.pagination .currentStep {
- color: #666666;
- display: inline-block;
- margin: 0 0.1em;
- padding: 0.25em 0.7em;
- text-decoration: none;
- -moz-border-radius: 0.3em;
- -webkit-border-radius: 0.3em;
- border-radius: 0.3em;
-}
-
-.pagination a:hover, .pagination a:focus,
-.pagination .currentStep {
- background-color: #999999;
- color: #ffffff;
- outline: none;
- text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.8);
-}
-
-.no-borderradius .pagination a:hover, .no-borderradius .pagination a:focus,
-.no-borderradius .pagination .currentStep {
- background-color: transparent;
- color: #444444;
- text-decoration: underline;
-}
-
-/* ACTION BUTTONS */
-
-.buttons {
- background-color: #efefef;
- overflow: hidden;
- padding: 0.3em;
- -moz-box-shadow: 0 0 3px 1px #aaaaaa;
- -webkit-box-shadow: 0 0 3px 1px #aaaaaa;
- box-shadow: 0 0 3px 1px #aaaaaa;
- margin: 0.1em 0 0 0;
- border: none;
-}
-
-.buttons input,
-.buttons a {
- background-color: transparent;
- border: 0;
- color: #666666;
- cursor: pointer;
- display: inline-block;
- margin: 0 0.25em 0;
- overflow: visible;
- padding: 0.25em 0.7em;
- text-decoration: none;
-
- -moz-border-radius: 0.3em;
- -webkit-border-radius: 0.3em;
- border-radius: 0.3em;
-}
-
-.buttons input:hover, .buttons input:focus,
-.buttons a:hover, .buttons a:focus {
- background-color: #999999;
- color: #ffffff;
- outline: none;
- text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.8);
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-.no-borderradius .buttons input:hover, .no-borderradius .buttons input:focus,
-.no-borderradius .buttons a:hover, .no-borderradius .buttons a:focus {
- background-color: transparent;
- color: #444444;
- text-decoration: underline;
-}
-
-.buttons .delete, .buttons .edit, .buttons .save {
- background-position: 0.7em center;
- background-repeat: no-repeat;
- text-indent: 25px;
-}
-
-.buttons .delete {
- background-image: url(skin/database_delete.png);
-}
-
-.buttons .edit {
- background-image: url(skin/database_edit.png);
-}
-
-.buttons .save {
- background-image: url(skin/database_save.png);
-}
-
-a.skip {
- position: absolute;
- left: -9999px;
-}
-
-.grails-logo-container {
- background:#79b94c no-repeat 50% 30%;
- margin-bottom: 20px;
- color: white;
- height:300px;
- text-align:center;
-}
-
-img.grails-logo {
- height:340px;
- margin-top:-10px;
-}
diff --git a/profiles/angular/skeleton/grails-app/assets/stylesheets/mobile.css b/profiles/angular/skeleton/grails-app/assets/stylesheets/mobile.css
deleted file mode 100644
index 552abd9..0000000
--- a/profiles/angular/skeleton/grails-app/assets/stylesheets/mobile.css
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Styles for mobile devices */
-
-@media screen and (max-width: 480px) {
- .nav {
- padding: 0.5em;
- }
-
- .nav li {
- margin: 0 0.5em 0 0;
- padding: 0.25em;
- }
-
- /* Hide individual steps in pagination, just have next & previous */
- .pagination .step, .pagination .currentStep {
- display: none;
- }
-
- .pagination .prevLink {
- float: left;
- }
-
- .pagination .nextLink {
- float: right;
- }
-
- /* pagination needs to wrap around floated buttons */
- .pagination {
- overflow: hidden;
- }
-
- /* slightly smaller margin around content body */
- fieldset,
- .property-list {
- padding: 0.3em 1em 1em;
- }
-
- input, textarea {
- width: 100%;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- -ms-box-sizing: border-box;
- box-sizing: border-box;
- }
-
- select, input[type=checkbox], input[type=radio], input[type=submit], input[type=button], input[type=reset] {
- width: auto;
- }
-
- /* hide all but the first column of list tables */
- .scaffold-list td:not(:first-child),
- .scaffold-list th:not(:first-child) {
- display: none;
- }
-
- .scaffold-list thead th {
- text-align: center;
- }
-
- /* stack form elements */
- .fieldcontain {
- margin-top: 0.6em;
- }
-
- .fieldcontain label,
- .fieldcontain .property-label,
- .fieldcontain .property-value {
- display: block;
- float: none;
- margin: 0 0 0.25em 0;
- text-align: left;
- width: auto;
- }
-
- .errors ul,
- .message p {
- margin: 0.5em;
- }
-
- .error ul {
- margin-left: 0;
- }
-}
diff --git a/profiles/angular/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/UrlMappings.groovy b/profiles/angular/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/UrlMappings.groovy
deleted file mode 100644
index db8d199..0000000
--- a/profiles/angular/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/UrlMappings.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-package @grails.codegen.defaultPackage@
-
-class UrlMappings {
-
- static mappings = {
- "/$controller/$action?/$id?(.$format)?"{
- constraints {
- // apply constraints here
- }
- }
-
- "/"(view: '/index')
- "500"(view: '/error')
- "404"(view: '/notFound')
- }
-}
diff --git a/profiles/angular/skeleton/grails-app/views/index.gsp b/profiles/angular/skeleton/grails-app/views/index.gsp
deleted file mode 100644
index 93ededc..0000000
--- a/profiles/angular/skeleton/grails-app/views/index.gsp
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
- Welcome to Grails
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/profiles/angular/skeleton/src/test/javascripts/@grails.codegen.defaultPackage.path@/index/@grails.codegen.defaultPackage@.indexSpec.js b/profiles/angular/skeleton/src/test/javascripts/@grails.codegen.defaultPackage.path@/index/@grails.codegen.defaultPackage@.indexSpec.js
deleted file mode 100644
index ec4a397..0000000
--- a/profiles/angular/skeleton/src/test/javascripts/@grails.codegen.defaultPackage.path@/index/@grails.codegen.defaultPackage@.indexSpec.js
+++ /dev/null
@@ -1,35 +0,0 @@
-describe("@grails.codegen.defaultPackage@.index", function() {
- beforeEach(angular.mock.module('@grails.codegen.defaultPackage@.index', function($provide) {
- $provide.constant('contextPath', '/GrailsApp');
- }));
-
- describe('applicationDataFactory', function() {
- var applicationDataFactory, $httpBackend;
-
- beforeEach(angular.mock.inject(function(_applicationDataFactory_, _$httpBackend_) {
- $httpBackend = _$httpBackend_;
- applicationDataFactory = _applicationDataFactory_;
- }));
-
- afterEach(function() {
- $httpBackend.verifyNoOutstandingExpectation();
- $httpBackend.verifyNoOutstandingRequest();
- });
-
- it("should get application data on .get()", function() {
- function headerValidation(headers) {
- return headers["X-Requested-With"] == "XMLHttpRequest";
- }
- $httpBackend.expectGET("/GrailsApp/application/index", headerValidation).respond(200);
-
- var promise = applicationDataFactory.get();
-
- var successFunction = jasmine.createSpy('successFunction');
- promise.then(successFunction);
-
- $httpBackend.flush();
-
- expect(successFunction).toHaveBeenCalled();
- });
- });
-});
diff --git a/profiles/angular/skeleton/src/test/javascripts/@grails.codegen.defaultPackage.path@/index/controllers/indexControllerSpec.js b/profiles/angular/skeleton/src/test/javascripts/@grails.codegen.defaultPackage.path@/index/controllers/indexControllerSpec.js
deleted file mode 100644
index e2eee2d..0000000
--- a/profiles/angular/skeleton/src/test/javascripts/@grails.codegen.defaultPackage.path@/index/controllers/indexControllerSpec.js
+++ /dev/null
@@ -1,46 +0,0 @@
-describe('@grails.codegen.defaultPackage@.index module', function() {
-
- beforeEach(angular.mock.module('@grails.codegen.defaultPackage@.index', function() {
- }));
-
- describe("IndexController", function() {
- var controller, deferred, applicationDataFactory, scope;
-
- beforeEach(angular.mock.inject(function($q, $controller, $rootScope) {
-
- applicationDataFactory = {
- get: function() {
- deferred = $q.defer();
- return deferred.promise;
- }
- };
-
- spyOn(applicationDataFactory, 'get').and.callThrough();
-
- scope = $rootScope.$new();
- controller = $controller('IndexController', {$scope: scope, applicationDataFactory: applicationDataFactory, contextPath: "/GrailsApp"});
- }));
-
- beforeEach(function() {
- expect(applicationDataFactory.get.calls.count()).toEqual(1);
- });
-
- it("should assign the contextPath to a local variable on the vm", function() {
- expect(controller.contextPath).toEqual('/GrailsApp');
- });
-
- it("should call the applicationDataFactory and assign data on success", function() {
- deferred.resolve({data: "Hello"});
- scope.$digest();
- expect(controller.applicationData).toEqual("Hello");
- });
-
- it("should call the applicationDataFactory and do nothing on error", function() {
- deferred.reject();
- scope.$digest();
- expect(controller.applicationData).not.toBeDefined();
- });
-
- });
-
-});
diff --git a/profiles/angular/skeleton/src/test/javascripts/@grails.codegen.defaultPackage.path@/index/services/applicationDataFactorySpec.js b/profiles/angular/skeleton/src/test/javascripts/@grails.codegen.defaultPackage.path@/index/services/applicationDataFactorySpec.js
deleted file mode 100644
index eea4736..0000000
--- a/profiles/angular/skeleton/src/test/javascripts/@grails.codegen.defaultPackage.path@/index/services/applicationDataFactorySpec.js
+++ /dev/null
@@ -1,36 +0,0 @@
-describe("@grails.codegen.defaultPackage@.index module", function() {
-
- beforeEach(angular.mock.module('@grails.codegen.defaultPackage@.index', function($provide) {
- $provide.constant('contextPath', '/GrailsApp');
- }));
-
- describe('applicationDataFactory', function() {
- var applicationDataFactory, $httpBackend;
-
- beforeEach(angular.mock.inject(function(_applicationDataFactory_, _$httpBackend_) {
- $httpBackend = _$httpBackend_;
- applicationDataFactory = _applicationDataFactory_;
- }));
-
- afterEach(function() {
- $httpBackend.verifyNoOutstandingExpectation();
- $httpBackend.verifyNoOutstandingRequest();
- });
-
- it("should get application data on .get()", function() {
- function headerValidation(headers) {
- return headers["X-Requested-With"] == "XMLHttpRequest";
- }
- $httpBackend.expectGET("/GrailsApp/application/index", headerValidation).respond(200);
-
- var promise = applicationDataFactory.get();
-
- var successFunction = jasmine.createSpy('successFunction');
- promise.then(successFunction);
-
- $httpBackend.flush();
-
- expect(successFunction).toHaveBeenCalled();
- });
- });
-});
diff --git a/profiles/angular/templates/NgComponent.js b/profiles/angular/templates/NgComponent.js
deleted file mode 100644
index 4d36afe..0000000
--- a/profiles/angular/templates/NgComponent.js
+++ /dev/null
@@ -1,25 +0,0 @@
-//= wrapped
-
-angular
- .module("${moduleName}")
- .directive("${propertyName}", ${propertyName});
-
-function ${propertyName}() {
- var directive = {
- restrict: "E",
- templateUrl: "/${templatePath}/${propertyName}.html",
- controller: ${controllerName},
- controllerAs: "vm",
- transclude: true,
- scope: {},
- bindToController: {
- }
- };
-
- return directive;
-
- /*@ngInject*/
- function ${controllerName}() {
-
- }
-}
diff --git a/profiles/angular/templates/NgController.js b/profiles/angular/templates/NgController.js
deleted file mode 100644
index 5fad537..0000000
--- a/profiles/angular/templates/NgController.js
+++ /dev/null
@@ -1,9 +0,0 @@
-//= wrapped
-
-angular
- .module("${moduleName}")
- .controller("${name}", ${name});
-
-function ${name}() {
- var vm = this;
-}
diff --git a/profiles/angular/templates/NgDirective.js b/profiles/angular/templates/NgDirective.js
deleted file mode 100644
index 300b304..0000000
--- a/profiles/angular/templates/NgDirective.js
+++ /dev/null
@@ -1,19 +0,0 @@
-//= wrapped
-
-angular
- .module("${moduleName}")
- .directive("${propertyName}", ${propertyName});
-
-function ${propertyName}() {
- var directive = {
- link: link,
- template: "",
- scope: {}
- };
-
- return directive;
-
- function link(scope, element, attrs) {
-
- }
-}
\ No newline at end of file
diff --git a/profiles/angular/templates/NgDomain.js b/profiles/angular/templates/NgDomain.js
deleted file mode 100644
index 2f1d4ae..0000000
--- a/profiles/angular/templates/NgDomain.js
+++ /dev/null
@@ -1,14 +0,0 @@
-//= wrapped
-
-angular
- .module("${moduleName}")
- .factory("${className}", ${className});
-
-function ${className}(\$resource) {
- var ${className} = \$resource(
- "${propertyName}/:id",
- {"id": "@id"},
- {"update": {method: "PUT"}, "list": {method: "GET", isArray: true}}
- );
- return ${className};
-}
diff --git a/profiles/angular/templates/NgDomainFactory.js b/profiles/angular/templates/NgDomainFactory.js
deleted file mode 100644
index abe27c8..0000000
--- a/profiles/angular/templates/NgDomainFactory.js
+++ /dev/null
@@ -1,9 +0,0 @@
-//= wrapped
-
-angular
- .module("${moduleName}")
- .factory("${className}", ${className});
-
-function ${className}(DomainServiceFactory) {
- return DomainServiceFactory("${propertyName}/:id", {"id": "@id"});
-}
diff --git a/profiles/angular/templates/NgModule.js b/profiles/angular/templates/NgModule.js
deleted file mode 100644
index 0cf9147..0000000
--- a/profiles/angular/templates/NgModule.js
+++ /dev/null
@@ -1,11 +0,0 @@
-//= wrapped
-//= require /angular/angular ${dependencies.collect{ '\n//= require ' + it.value }.join('\n') }
-//= require_self
-//= require_tree services
-//= require_tree controllers
-//= require_tree directives
-//= require_tree domain
-//= require_tree templates
-
-angular.module("${fullName}", [${dependencies.collect{it.key}.join(', ')}]);
-
diff --git a/profiles/angular/templates/services/NgConstant.js b/profiles/angular/templates/services/NgConstant.js
deleted file mode 100644
index c7336e0..0000000
--- a/profiles/angular/templates/services/NgConstant.js
+++ /dev/null
@@ -1,5 +0,0 @@
-//= wrapped
-
-angular
- .module("${moduleName}")
- .constant("${name}", {});
diff --git a/profiles/angular/templates/services/NgFactory.js b/profiles/angular/templates/services/NgFactory.js
deleted file mode 100644
index 0c2d8ac..0000000
--- a/profiles/angular/templates/services/NgFactory.js
+++ /dev/null
@@ -1,11 +0,0 @@
-//= wrapped
-
-angular
- .module("${moduleName}")
- .factory("${name}", ${name});
-
-function ${name}() {
- /*return function() {
-
- };*/
-}
\ No newline at end of file
diff --git a/profiles/angular/templates/services/NgProvider.js b/profiles/angular/templates/services/NgProvider.js
deleted file mode 100644
index aa5cf61..0000000
--- a/profiles/angular/templates/services/NgProvider.js
+++ /dev/null
@@ -1,14 +0,0 @@
-//= wrapped
-
-angular
- .module("${moduleName}")
- .provider("${name}", ${name});
-
-function ${name}() {
- return {
- \$get: function() {
-
- }
- };
-}
-
diff --git a/profiles/angular/templates/services/NgService.js b/profiles/angular/templates/services/NgService.js
deleted file mode 100644
index 4bfe1ad..0000000
--- a/profiles/angular/templates/services/NgService.js
+++ /dev/null
@@ -1,11 +0,0 @@
-//= wrapped
-
-angular
- .module("${moduleName}")
- .service("${name}", ${name});
-
-function ${name}() {
- /*this.exampleFunction = function() {
-
- };*/
-}
\ No newline at end of file
diff --git a/profiles/angular/templates/services/NgValue.js b/profiles/angular/templates/services/NgValue.js
deleted file mode 100644
index 4e194c6..0000000
--- a/profiles/angular/templates/services/NgValue.js
+++ /dev/null
@@ -1,7 +0,0 @@
-//= wrapped
-
-angular
- .module("${moduleName}")
- .value("${name}", {});
-
-
diff --git a/profiles/angular/templates/tests/NgComponentSpec.js b/profiles/angular/templates/tests/NgComponentSpec.js
deleted file mode 100644
index 64c5a58..0000000
--- a/profiles/angular/templates/tests/NgComponentSpec.js
+++ /dev/null
@@ -1,26 +0,0 @@
-describe("${moduleName} module", function() {
- var scope;
-
- beforeEach(angular.mock.module("${moduleName}", function() {
- }));
-
- beforeEach(angular.mock.inject(function(\$rootScope) {
- scope = \$rootScope.\$new();
- }));
-
- describe("${propertyName} directive", function() {
- var element;
-
- beforeEach(angular.mock.inject(function (\$compile) {
- element = angular.element('<${tagName}>${tagName}>');
- \$compile(element)(scope);
- scope.\$digest();
- }));
-
- it("should be tested", function() {
- expect(true).toEqual(false);
- });
-
- });
-
-});
\ No newline at end of file
diff --git a/profiles/angular/templates/tests/NgControllerSpec.js b/profiles/angular/templates/tests/NgControllerSpec.js
deleted file mode 100644
index 1dbfeb2..0000000
--- a/profiles/angular/templates/tests/NgControllerSpec.js
+++ /dev/null
@@ -1,25 +0,0 @@
-describe("${moduleName} module", function() {
- var scope;
-
- beforeEach(angular.mock.module("${moduleName}", function() {
- }));
-
- beforeEach(angular.mock.inject(function(\$rootScope) {
- scope = \$rootScope.\$new();
- }));
-
- describe("${name}", function() {
-
- var ctrl;
-
- beforeEach(angular.mock.inject(function(\$controller) {
- ctrl = \$controller("${name}", {});
- }));
-
- it("should be tested", function() {
- expect(true).toEqual(false);
- });
-
- });
-
-});
diff --git a/profiles/angular/templates/tests/NgDirectiveSpec.js b/profiles/angular/templates/tests/NgDirectiveSpec.js
deleted file mode 100644
index 1eec9d8..0000000
--- a/profiles/angular/templates/tests/NgDirectiveSpec.js
+++ /dev/null
@@ -1,27 +0,0 @@
-describe("${moduleName} module", function() {
- var scope;
-
- beforeEach(angular.mock.module("${moduleName}", function() {
- }));
-
- beforeEach(angular.mock.inject(function(\$rootScope) {
- scope = \$rootScope.\$new();
- }));
-
- describe("${propertyName} directive", function() {
-
- var element;
-
- beforeEach(angular.mock.inject(function (\$compile) {
- element = angular.element('
');
- \$compile(element)(scope);
- scope.\$digest();
- }));
-
- it("should be tested", function() {
- expect(true).toEqual(false);
- });
-
- });
-
-});
\ No newline at end of file
diff --git a/profiles/angular/templates/tests/NgDomainSpec.js b/profiles/angular/templates/tests/NgDomainSpec.js
deleted file mode 100644
index 237c9f1..0000000
--- a/profiles/angular/templates/tests/NgDomainSpec.js
+++ /dev/null
@@ -1,30 +0,0 @@
-describe("${moduleName} module", function() {
- var \$httpBackend;
-
- beforeEach(angular.mock.module("${moduleName}", function() {
- }));
-
- beforeEach(angular.mock.inject(function(_\$httpBackend_) {
- \$httpBackend = _\$httpBackend_;
- }));
-
- afterEach(function() {
- \$httpBackend.verifyNoOutstandingExpectation();
- \$httpBackend.verifyNoOutstandingRequest();
- });
-
- describe("${className} domain", function() {
-
- var ${className};
-
- beforeEach(angular.mock.inject(function(_${className}_) {
- ${className} = _${className}_;
- }));
-
- it("should be tested", function() {
- expect(true).toEqual(false);
- });
-
- });
-
-});
diff --git a/profiles/angular/templates/tests/NgModuleSpec.js b/profiles/angular/templates/tests/NgModuleSpec.js
deleted file mode 100644
index dfa308d..0000000
--- a/profiles/angular/templates/tests/NgModuleSpec.js
+++ /dev/null
@@ -1,22 +0,0 @@
-describe("${fullName} module", function() {
-
- beforeEach(angular.mock.module("${fullName}", function() {
- }));
-
- describe("run", function() {
-
- it("should be tested", function() {
- expect(true).toEqual(false);
- });
-
- });
-
- describe("config", function() {
-
- it("should be tested", function() {
- expect(true).toEqual(false);
- });
-
- });
-
-});
diff --git a/profiles/angular/templates/tests/NgServiceSpec.js b/profiles/angular/templates/tests/NgServiceSpec.js
deleted file mode 100644
index e38f5ef..0000000
--- a/profiles/angular/templates/tests/NgServiceSpec.js
+++ /dev/null
@@ -1,20 +0,0 @@
-describe("${moduleName} module", function() {
-
- beforeEach(angular.mock.module("${moduleName}", function() {
- }));
-
- describe("${name}", function() {
-
- var ${name};
-
- beforeEach(angular.mock.inject(function(_${name}_) {
- ${name} = _${name}_;
- }));
-
- it("should be tested", function() {
- expect(true).toEqual(false);
- });
-
- });
-
-});
diff --git a/profiles/base/commands/assemble.groovy b/profiles/base/commands/assemble.groovy
deleted file mode 100644
index a9a7a2b..0000000
--- a/profiles/base/commands/assemble.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-description("Creates a JAR or WAR archive for production deployment") {
- usage "grails [ENV] assemble"
- synonyms 'war', 'package'
- flag name:'clean', description:"Execute 'clean' prior to creating WAR"
-}
-
-// configure environment to production if it is not specified
-if(!commandLine.isEnvironmentSet()) {
- System.setProperty('grails.env', 'production')
-} else {
- System.setProperty('grails.env', commandLine.environment)
-}
-
-def arguments = []
-commandLine.systemProperties.each { key, value ->
- arguments << "-D${key}=$value".toString()
-}
-
-gradle."assemble"(*arguments)
-
-buildPath = projectPath("${buildDir}/libs")
-addStatus "Built application to $buildPath using environment: ${grails.util.Environment.current.name}"
diff --git a/profiles/base/commands/bug-report.groovy b/profiles/base/commands/bug-report.groovy
deleted file mode 100644
index 255fecc..0000000
--- a/profiles/base/commands/bug-report.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-import java.text.*
-
-description( "Creates a zip file that can be attached to issue reports for the current project" ) {
- usage "grails bug-report"
-}
-
-String fileName = baseDir.name
-String date = new SimpleDateFormat("ddMMyyyy").format(new Date())
-String zipName = "${buildDir}/${fileName}-bug-report-${date}.zip"
-
-ant.zip(destfile: zipName, filesonly: true) {
- fileset(dir: baseDir.canonicalPath) {
- include name: 'grails-app/**'
- include name: 'src/**'
- include name: 'build.gradle'
- }
-}
-
-console.addStatus "Created bug report ZIP: ${projectPath(zipName)}"
diff --git a/profiles/base/commands/clean.yml b/profiles/base/commands/clean.yml
deleted file mode 100644
index 522684d..0000000
--- a/profiles/base/commands/clean.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: Cleans a Grails application's compiled sources
-minArguments: 0
-usage: |
- clean
-steps:
- - command: gradle
- tasks:
- - clean
diff --git a/profiles/base/commands/compile.yml b/profiles/base/commands/compile.yml
deleted file mode 100644
index 974a753..0000000
--- a/profiles/base/commands/compile.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: Compiles a Grails application
-minArguments: 0
-usage: |
- compile
-steps:
- - command: gradle
- tasks:
- - classes
diff --git a/profiles/base/commands/console.groovy b/profiles/base/commands/console.groovy
deleted file mode 100644
index 141587a..0000000
--- a/profiles/base/commands/console.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-description("Runs the Grails interactive console") {
- usage "grails console"
- flag name:'debug-jvm', description:"Starts the JVM in debug mode allowing attachment of a remote debugger"
- flag name:'verbose', description:"Show more output from the build during startup"
-}
-
-def isIm = org.grails.cli.GrailsCli.isInteractiveModeActive()
-def arguments = []
-
-def con = getConsole()
-if( !(flag('verbose') || con.verbose)) {
- arguments << '--quiet'
-}
-
-arguments.addAll commandLine.remainingArgs
-
-def g = isIm ? gradle.async : gradle
-con.updateStatus "Running console..."
-if(flag('debug-jvm')) {
- g."console --debug-jvm"(*arguments)
-}
-else {
- g."console"(*arguments)
-}
diff --git a/profiles/base/commands/create-domain-class.yml b/profiles/base/commands/create-domain-class.yml
deleted file mode 100644
index 48a7299..0000000
--- a/profiles/base/commands/create-domain-class.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description:
- - Creates a Domain Class
- - usage: 'create-domain-class [domain class name]'
- - argument: Domain Class Name
- description: The name of the domain class
- - flag: force
- description: Whether to override existing files
-steps:
- - command: render
- template: templates/artifacts/DomainClass.groovy
- destination: grails-app/domain/@artifact.package.path@/@artifact.name@.groovy
- - command: render
- template: templates/testing/DomainClass.groovy
- destination: src/test/groovy/@artifact.package.path@/@artifact.name@Spec.groovy
diff --git a/profiles/base/commands/create-script.groovy b/profiles/base/commands/create-script.groovy
deleted file mode 100644
index 77e9bee..0000000
--- a/profiles/base/commands/create-script.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-import grails.util.*
-
-description( "Creates a Grails script" ) {
- usage "grails create-script [SCRIPT NAME]"
- argument name:'Script Name', description:"The name of the script to create", required:true
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-def scriptName = GrailsNameUtils.getClassNameForLowerCaseHyphenSeparatedName(args[0])
-def model = model(scriptName)
-boolean overwrite = flag('force')
-
-render template: template('artifacts/Script.groovy'),
- destination: file("src/main/scripts/${model.lowerCaseName}.groovy"),
- model: model,
- overwrite: overwrite
diff --git a/profiles/base/commands/create-service.yml b/profiles/base/commands/create-service.yml
deleted file mode 100644
index 3e3b37e..0000000
--- a/profiles/base/commands/create-service.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description:
- - Creates a Service
- - usage: 'create-service [service name]'
- - completer: org.grails.cli.interactive.completers.DomainClassCompleter
- - argument: "Service Name"
- description: "The name of the service"
- - flag: force
- description: Whether to override existing files
-steps:
- - command: render
- template: templates/artifacts/Service.groovy
- destination: grails-app/services/@artifact.package.path@/@artifact.name@Service.groovy
- convention: Service
- - command: render
- template: templates/testing/Service.groovy
- destination: src/test/groovy/@artifact.package.path@/@artifact.name@ServiceSpec.groovy
- convention: Service
diff --git a/profiles/base/commands/create-unit-test.yml b/profiles/base/commands/create-unit-test.yml
deleted file mode 100644
index 4f25c85..0000000
--- a/profiles/base/commands/create-unit-test.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description:
- - Creates a unit test
- - usage: 'create-unit-test [test name]'
- - completer: org.grails.cli.interactive.completers.AllClassCompleter
- - argument: "Unit Test Name"
- description: "The name of the unit test"
- - flag: force
- description: Whether to override existing files
-steps:
- - command: render
- template: templates/testing/Generic.groovy
- destination: src/test/groovy/@artifact.package.path@/@artifact.name@Spec.groovy
diff --git a/profiles/base/commands/dependency-report.yml b/profiles/base/commands/dependency-report.yml
deleted file mode 100644
index ea0e5d4..0000000
--- a/profiles/base/commands/dependency-report.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: Prints out the Grails application's dependencies
-minArguments: 0
-usage: |
- dependency-report
-steps:
- - command: gradle
- tasks:
- - dependencies
diff --git a/profiles/base/commands/install.yml b/profiles/base/commands/install.yml
deleted file mode 100644
index 3e87042..0000000
--- a/profiles/base/commands/install.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: Installs a Grails application or plugin into the local Maven cache
-minArguments: 0
-usage: |
- install
-steps:
- - command: gradle
- tasks:
- - install
diff --git a/profiles/base/commands/list-plugins.groovy b/profiles/base/commands/list-plugins.groovy
deleted file mode 100644
index d47ccda..0000000
--- a/profiles/base/commands/list-plugins.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-description("Lists available plugins from the Plugin Repository") {
- usage "grails list-plugins"
-}
-
-try {
- console.addStatus "Available Plugins"
- def text = new URL('https://repo.grails.org/grails/plugins3/org/grails/plugins/').text
- text.eachMatch(/.+/) {
- console.log "* ${it[1]}"
- }
-}
-catch(Throwable e) {
- console.error "Failed to list plugins", e
- return false
-}
diff --git a/profiles/base/commands/package.yml b/profiles/base/commands/package.yml
deleted file mode 100644
index 5a35246..0000000
--- a/profiles/base/commands/package.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: Packages a Grails application
-minArguments: 0
-usage: |
- package
-steps:
- - command: gradle
- tasks:
- - assemble
diff --git a/profiles/base/commands/plugin-info.groovy b/profiles/base/commands/plugin-info.groovy
deleted file mode 100644
index 4db2d2b..0000000
--- a/profiles/base/commands/plugin-info.groovy
+++ /dev/null
@@ -1,71 +0,0 @@
-import groovy.xml.*
-
-description("Prints information about the given plugin") {
- usage "grails plugin-info [PLUGIN NAME]"
- argument name:"Plugin Name", description:"The name of the plugin"
- flag name:'snapshots', description:"Whether to list snapshot versions"
-}
-
-def pluginRepoURL = "https://repo.grails.org/grails/plugins3/org/grails/plugins"
-def pluginName = args[0]
-def includeSnapshots = flag('snapshots')
-try {
- console.addStatus "Plugin Info: ${pluginName}"
- def mavenMetadata = new XmlSlurper().parseText(new URL("${pluginRepoURL}/${pluginName}/maven-metadata.xml").text)
- def latestVersion = mavenMetadata.versioning.release.text()
- if(!latestVersion) {
- latestVersion = mavenMetadata.versioning.latest.text()
- }
- console.addStatus "Latest Version: ${latestVersion}"
- allVersions = mavenMetadata.versioning.versions.version*.text()
- if(!includeSnapshots) {
- allVersions = allVersions.findAll {
- !it?.endsWith('-SNAPSHOT')
- }
- }
- console.addStatus "All Versions: ${allVersions.join(',')}"
-
- def pluginInfo
- if(latestVersion.endsWith('-SNAPSHOT')) {
- def versionMetadata = new XmlSlurper().parseText(new URL("${pluginRepoURL}/${pluginName}/${latestVersion}/maven-metadata.xml").text)
- def snapshotVersion = versionMetadata.version.text()
- pluginInfo = new XmlSlurper().parseText(new URL("${pluginRepoURL}/${pluginName}/${latestVersion}/${pluginName}-${snapshotVersion}-plugin.xml").text)
- }
- else {
- pluginInfo = new XmlSlurper().parseText(new URL("${pluginRepoURL}/${pluginName}/${latestVersion}/${pluginName}-${latestVersion}-plugin.xml").text)
- }
-
- if(pluginInfo) {
- console.addStatus "Title: ${pluginInfo.title.text()}"
- def desc = pluginInfo.description.text()
- if(desc) {
- console.log('')
- console.log(desc)
- console.log('')
- }
-
- console.log "* License: ${pluginInfo.license.text()}"
-
- if(pluginInfo.documentation) {
- console.log "* Documentation: ${pluginInfo.documentation.text()}"
- }
- if(pluginInfo.issueManagement) {
- console.log "* Issue Tracker: ${pluginInfo.issueManagement.@url.text()}"
- }
- if(pluginInfo.scm) {
- console.log "* Source: ${pluginInfo.scm.@url.text()}"
- }
-
- console.log """* Definition:
-
-dependencies {
- compile "org.grails.plugins:${pluginName}:${latestVersion}"
-}
-
-"""
- }
-}
-catch(Throwable e) {
- console.error "Failed to display plugin info: ${e.message}", e
- return false
-}
diff --git a/profiles/base/commands/run-app.groovy b/profiles/base/commands/run-app.groovy
deleted file mode 100644
index 11fc87e..0000000
--- a/profiles/base/commands/run-app.groovy
+++ /dev/null
@@ -1,181 +0,0 @@
-
-
-description("Runs a Grails application") {
- usage "grails run-app"
- synonyms 'run'
- flag name:'debug-jvm', description:"Starts the JVM in debug mode allowing attachment of a remote debugger"
- flag name:'https', description:"Starts Grails in HTTPS mode on port 8443"
- flag name:'port', description:"Specifies the port which to start Grails on (defaults to 8080 or 8443 for HTTPS)"
- flag name:'host', description:"Specifies the host to bind to"
- flag name:'verbose', description:"Show more output from the build during startup"
-}
-
-if(!commandLine.isEnvironmentSet()) {
- System.setProperty('grails.env', 'dev')
-} else {
- System.setProperty('grails.env', commandLine.environment)
-}
-// add debug flag if present
-try {
-
- def arguments = []
-
- if( !(flag('verbose') || console.verbose)) {
- arguments << '--quiet'
- }
-
- arguments << '-Dgrails.endpoints.shutdown.enabled=true'
-
- arguments.addAll commandLine.remainingArgs
-
- Integer port = flag('port')?.toInteger() ?: config.getProperty('server.port', Integer)
- String host = flag('host') ?: config.getProperty('server.address', String)
-
- commandLine.systemProperties.each { key, value ->
- arguments << "-D${key}=$value".toString()
- }
-
- arguments << "-Dgrails.run.active=true"
-
- if(port) {
- arguments << "-Dgrails.server.port=$port"
- }
- if(host) {
- arguments << "-Dgrails.server.address=$host"
- }
-
- if(flag('https')) {
- if(!port) {
- arguments << "-Dgrails.server.port=8443"
- }
- if(!System.getProperty('grails.server.ssl.key-store')) {
- def keystoreDir = new File(buildDir, "ssl")
- def keystoreFile = new File(keystoreDir, 'keystore')
-
- boolean keyStoreParametersAvailable = false
- if(!keystoreFile.exists()) {
- console.updateStatus "Generating SSL certificate"
- if ( createSSLCertificate(keystoreDir) ) {
- keyStoreParametersAvailable = true
- console.updateStatus "Generated SSL certificate"
- }
- else {
- console.warn "Unable to automatically generate SSL certificate, manual configuration required. Set 'server.ssl.key-store' in application.yml"
- }
- }
- else {
- keyStoreParametersAvailable = true
- }
- if(keyStoreParametersAvailable) {
- arguments << "-Dgrails.server.ssl.key-store=${keystoreFile}"
- arguments << "-Dgrails.server.ssl.key-store-password=123456"
- arguments << "-Dgrails.server.ssl.key-password=123456"
- }
- }
- }
-
- console.updateStatus "Running application..."
- def future
- if(flag('debug-jvm')) {
- future = gradle.async."bootRun --debug-jvm"(*arguments)
- }
- else {
- future = gradle.async."bootRun"(*arguments)
- }
-
- while(!isServerAvailable(host ?: "localhost", port ?: 8080)) {
- if(future.done) {
- // the server exited for some reason, so break
- if(future.get() instanceof Throwable) {
- break
- }
- }
- }
-
- if(!org.grails.cli.GrailsCli.isInteractiveModeActive()) {
- // if interactive mode is not active, then block and don't exit
- return future.get()
- }
- else {
- System.setProperty("run-app.running", "true")
- if(!Boolean.getBoolean("run-app.shutdown.hook.registered")) {
- System.setProperty("run-app.shutdown.hook.registered", "true")
- addShutdownHook {
- if(Boolean.getBoolean("run-app.running")) {
- try {
- stopApp()
- }
- catch(e) {
- // ignore
- }
- }
- }
- isShutdownHookRegistered = true
- }
-
- sleep 500
- }
-
-}
-catch(org.gradle.tooling.BuildCancelledException e) {
- console.updateStatus("Application stopped")
- return true
-}
-catch(Throwable e) {
- console.error "Failed to start server", e
- return false
-}
-
-protected boolean createSSLCertificate(File keystoreDir) {
-
- if (!keystoreDir.exists() && !keystoreDir.mkdir()) {
- throw new RuntimeException("Unable to create keystore folder: $keystoreDir.canonicalPath")
- }
-
- def keyToolClass = getKeyToolClass()
- if(keyToolClass) {
- try {
- def keystoreFile = new File(keystoreDir, "keystore")
- keyToolClass.main(
- "-genkey",
- "-alias", "localhost",
- "-dname", "CN=localhost,OU=Test,O=Test,C=US",
- "-keyalg", "RSA",
- "-validity", "365",
- "-storepass", "key",
- "-keystore", keystoreFile.absolutePath,
- "-storepass", "123456",
- "-keypass", "123456")
- }
- catch(Throwable e) {
- return false
- }
-
- return true
- }
- else {
- return false
- }
-}
-
-protected Class getKeyToolClass() {
- try {
- try {
- // Sun JDK 8
- return Class.forName( 'sun.security.tools.keytool.Main' )
- }
- catch(ClassNotFoundException e1) {
- try {
- // Sun pre-JDK 8
- return Class.forName( 'sun.security.tools.KeyTool' )
- }
- catch (ClassNotFoundException e2) {
- // no try/catch for this one, if neither is found let it fail
- return Class.forName( 'com.ibm.crypto.tools.KeyTool' )
- }
- }
- }
- catch(Throwable e) {
- return null
- }
-}
diff --git a/profiles/base/commands/shell.groovy b/profiles/base/commands/shell.groovy
deleted file mode 100644
index fafade9..0000000
--- a/profiles/base/commands/shell.groovy
+++ /dev/null
@@ -1,7 +0,0 @@
-description("Runs the Grails interactive shell") {
- usage "grails shell"
- synonyms 'sh'
-}
-
-console.error "The Grails shell must be run from Gradle using 'gradle shell -q'"
-return false
diff --git a/profiles/base/commands/stats.groovy b/profiles/base/commands/stats.groovy
deleted file mode 100644
index 29c24ea..0000000
--- a/profiles/base/commands/stats.groovy
+++ /dev/null
@@ -1,85 +0,0 @@
-description( "Prints statistics about the project" ) {
- usage "grails stats"
-}
-
-def EMPTY = /^\s*$/
-def SLASH_SLASH = /^\s*\/\/.*/
-def SLASH_STAR_STAR_SLASH = /^(.*)\/\*(.*)\*\/(.*)$/
-
-// TODO - handle slash_star comments inside strings
-def DEFAULT_LOC_MATCHER = { file ->
- loc = 0
- comment = 0
- file.eachLine { line ->
- if (line ==~ EMPTY) return
- if (line ==~ SLASH_SLASH) return
- def m = line =~ SLASH_STAR_STAR_SLASH
- if (m.count && m[0][1] ==~ EMPTY && m[0][3] ==~ EMPTY) return
- int open = line.indexOf("/*")
- int close = line.indexOf("*/")
- if (open != -1 && (close-open) <= 1) comment++
- else if (close != -1 && comment) comment--
- if (!comment) loc++
- }
- loc
-}
-
-// maps file path to
-def pathToInfo = [
- [name: "Controllers", path: "^grails-app.controllers", filetype: ["Controller.groovy"]],
- [name: "URL Mappings", path: "^grails-app.controllers", filetype: ["UrlMappings.groovy"]],
- [name: "Interceptors", path: "^grails-app.controllers", filetype: ["Interceptor.groovy"]],
- [name: "Domain Classes", path: "^grails-app.domain", filetype: [".groovy"]],
- [name: "Jobs", path: "^grails-app.job", filetype: [".groovy"]],
- [name: "Services", path: "^grails-app.services", filetype: ["Service.groovy"]],
- [name: "Tag Libraries", path: "^grails-app.taglib", filetype: ["TagLib.groovy"]],
- [name: "Groovy Helpers", path: "^src.main.groovy", filetype: [".groovy"]],
- [name: "Unit Tests", path: "^src.test.groovy", filetype: [".groovy"]],
- [name: "Integration Tests", path: "^src.integration-test.groovy", filetype: [".groovy"]],
- [name: "Scripts", path: "^src.main.scripts", filetype: [".groovy"]],
-]
-
-// event("StatsStart", [pathToInfo])
-
-def baseDirFile = baseDir
-def baseDirPathLength = baseDirFile.path.size()+1
-baseDirFile.eachFileRecurse { file ->
- def match = pathToInfo.find { info ->
- file.path.substring(baseDirPathLength) =~ info.path &&
- info.filetype.any{ s -> file.path.endsWith(s) }
- }
- if (match && file.isFile()) {
- match.filecount = match.filecount ? match.filecount+1 : 1
- // strip whitespace
- loc = match.locmatcher ? match.locmatcher(file) : DEFAULT_LOC_MATCHER(file)
- match.loc = match.loc ? match.loc + loc : loc
- }
-}
-
-def totalFiles = 0
-def totalLOC = 0
-
-def sw = new StringWriter()
-def output = new PrintWriter(sw)
-
-output.println '''
-+----------------------+-------+-------+
-| Name | Files | LOC |
-+----------------------+-------+-------+'''
-
-pathToInfo.each { info ->
- if (info.filecount) {
- output.println "| " +
- info.name.padRight(20," ") + " | " +
- info.filecount.toString().padLeft(5, " ") + " | " +
- info.loc.toString().padLeft(5," ") + " | "
- totalFiles += info.filecount
- totalLOC += info.loc
- }
-}
-
-output.println "+----------------------+-------+-------+"
-output.println "| Totals | " + totalFiles.toString().padLeft(5, " ") + " | " + totalLOC.toString().padLeft(5, " ") + " | "
-output.println "+----------------------+-------+-------+\n"
-
-println sw.toString()
diff --git a/profiles/base/commands/stop-app.groovy b/profiles/base/commands/stop-app.groovy
deleted file mode 100644
index 787ba8e..0000000
--- a/profiles/base/commands/stop-app.groovy
+++ /dev/null
@@ -1,99 +0,0 @@
-import javax.management.remote.JMXServiceURL
-import javax.management.remote.JMXConnectorFactory
-import javax.management.ObjectName
-import org.grails.io.support.*
-
-description("Stops the running Grails application") {
- usage "grails stop-app"
- synonyms 'stop'
- flag name:'port', description:"Specifies the port which the Grails application is running on (defaults to 8080 or 8443 for HTTPS)"
- flag name:'host', description:"Specifies the host the Grails application is bound to"
-}
-System.setProperty("run-app.running", "false")
-def getJMXLocalConnectorAddresses = {->
- final applicationMainClassName = MainClassFinder.findMainClass()
-
- if(applicationMainClassName) {
- try {
- final String CONNECTOR_ADDRESS = "com.sun.management.jmxremote.localConnectorAddress"
- def VirtualMachine = getClass().classLoader.loadClass('com.sun.tools.attach.VirtualMachine')
- return VirtualMachine.list()
- .findAll {
- it.displayName() == applicationMainClassName
- }
- .collect { desc ->
- def vm = VirtualMachine.attach(desc.id())
- try {
- def connectorAddress = vm.agentProperties.getProperty(CONNECTOR_ADDRESS)
- if (connectorAddress == null) {
- // Trying to load agent
- def agent = [vm.systemProperties.getProperty("java.home"), "lib", "management-agent.jar"].join(File.separator)
- vm.loadAgent(agent)
-
- connectorAddress = vm.agentProperties.getProperty(CONNECTOR_ADDRESS)
- }
- if (connectorAddress) {
- return connectorAddress
- }
- } finally {
- vm.detach()
- }
- }.findAll { it }
-
- }
- catch(Throwable e) {
- // fallback to REST request if JMX not available
- }
- }
-}
-
-
-def addresses = getJMXLocalConnectorAddresses()
-if(addresses) {
- JMXServiceURL url = new JMXServiceURL(addresses[0])
- def connector = JMXConnectorFactory.connect(url)
-
- try {
- def server = connector.MBeanServerConnection
-
- def objectName = server.queryNames(null,null).find { it.canonicalName.contains('name=shutdownEndpoint,type=Endpoint') }
- def mbean = new GroovyMBean(server, objectName)
- console.addStatus "Shutting down application..."
- mbean.shutdown()
- console.addStatus "Application shutdown."
- return true
- }
- catch(e) {
- console.addStatus "Application not found via JMX, attempting remote shutdown."
- }
- finally {
- connector.close()
- }
-}
-
-
-Integer port = flag('port')?.toInteger() ?: config.getProperty('server.port', Integer) ?: 8080
-String host = flag('host') ?: config.getProperty('server.address', String) ?: "localhost"
-String path = config.getProperty('server.context-path') ?: config.getProperty('server.contextPath') ?: ""
-console.updateStatus "Shutting down application..."
-def url = new URL("http://$host:${port}${path}/shutdown")
-try {
- def connection = url.openConnection()
- connection.setRequestMethod("POST")
- connection.doOutput = true
- connection.connect()
- console.updateStatus connection.content.text
- while(isServerAvailable(host, port)) {
- sleep 100
- }
- console.updateStatus "Application shutdown."
- return true
-
-}
-catch (e) {
- console.error "Application not running."
- return false
-}
-
-
-
diff --git a/profiles/base/commands/test-app.groovy b/profiles/base/commands/test-app.groovy
deleted file mode 100644
index ab55670..0000000
--- a/profiles/base/commands/test-app.groovy
+++ /dev/null
@@ -1,97 +0,0 @@
-import org.grails.io.watch.*
-
-description("Runs the applications tests") {
- usage "grails test-app [TEST NAME]"
- completer TestsCompleter
- synonyms 'test'
- argument name:"Test Name", description:"The name of the test to run (optional)", required:false
- flag name:'debug-jvm', description:"Starts the JVM in debug mode allowing attachment of a remote debugger"
- flag name:'unit', description:"Run unit tests (test target)"
- flag name:'integration', description:"Run integration tests (integrationTest target)"
- flag name:'clean', description:"Re-run all tests (cleanTest cleanIntegrationTest target)"
- flag name:'continuous', description:"Monitor the project for changes and reruns tests automatically on each change"
-}
-
-// configure environment to test is not specified
-if(!commandLine.isEnvironmentSet()) {
- System.setProperty('grails.env', 'test')
-} else {
- System.setProperty('grails.env', commandLine.environment)
-}
-
-// add test.single argument if specified
-def testsFilter = commandLine.remainingArgs.collect { "--tests $it".toString() }.join(' ')?.trim()
-boolean debugJvm = flag('debug-jvm')
-
-def handleTestPhase = { targetName ->
- def args = []
- if(flag('clean')) {
- args << "clean${targetName.capitalize()}"
- }
- args << targetName
- if(testsFilter) {
- args << testsFilter
- }
- // add debug flag if present
- if(debugJvm) {
- args << "--debug-jvm"
- }
- args
-}
-
-def gradleArgs = []
-
-boolean executeUnitTests = flag('unit') || !flag('integration')
-if(executeUnitTests) {
- gradleArgs.addAll handleTestPhase('test')
-}
-
-boolean hasIntegrationTests = file("src/integration-test").isDirectory()
-boolean executeIntegrationTests = hasIntegrationTests && (flag('integration') || !flag('unit'))
-if(executeIntegrationTests) {
- gradleArgs.addAll handleTestPhase('integrationTest')
-}
-
-runTests = { List args ->
- def additionalArguments = []
- commandLine.systemProperties.each { key, value ->
- additionalArguments << "-D${key}=$value".toString()
- }
-
- additionalArguments << "-Dgrails.run.active=true"
-
- try {
- gradle."${args.join(' ')}"(*additionalArguments)
- addStatus "Tests PASSED"
- return true
- } catch(e) {
- console.error "Tests FAILED", "Test execution failed"
- return false
- }
-}
-
-if(flag('continuous')) {
- def watcher = new DirectoryWatcher()
- def ext = ['groovy', 'java']
- watcher.addWatchDirectory( file("grails-app"), ext)
- watcher.addWatchDirectory( file("src/main/groovy"), ext)
- watcher.addWatchDirectory( file("src/test/groovy"), ext)
- watcher.addWatchDirectory( file("src/integration-test/groovy"), ext)
- watcher.addListener( new FileExtensionFileChangeListener(ext) {
- void onChange(File file, List extensions) {
- console.addStatus "File ${projectPath(file)} changed. Running tests..."
- runTests(gradleArgs)
- }
- void onNew(File file, List extensions) {
- console.addStatus "File ${projectPath(file)} changed. Running tests..."
- runTests(gradleArgs)
- }
- })
-
- watcher.sleepTime = 0
- watcher.start()
- console.addStatus "Started continuous test runner. Monitoring files for changes..."
-}
-else {
- runTests(gradleArgs)
-}
diff --git a/profiles/base/features/asset-pipeline/feature.yml b/profiles/base/features/asset-pipeline/feature.yml
deleted file mode 100644
index 2849053..0000000
--- a/profiles/base/features/asset-pipeline/feature.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: Adds Asset Pipeline to a Grails project
-build:
- plugins:
- - asset-pipeline
-dependencies:
- build:
- - 'com.bertramlabs.plugins:asset-pipeline-gradle:2.8.2'
- runtime:
- - "com.bertramlabs.plugins:asset-pipeline-grails:2.8.2"
diff --git a/profiles/base/features/asset-pipeline/skeleton/build.gradle b/profiles/base/features/asset-pipeline/skeleton/build.gradle
deleted file mode 100644
index 22e6de9..0000000
--- a/profiles/base/features/asset-pipeline/skeleton/build.gradle
+++ /dev/null
@@ -1,5 +0,0 @@
-
-assets {
- minifyJs = true
- minifyCss = true
-}
diff --git a/profiles/base/features/hibernate/feature.yml b/profiles/base/features/hibernate/feature.yml
deleted file mode 100644
index 64e8ac3..0000000
--- a/profiles/base/features/hibernate/feature.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: Adds GORM for Hibernate to the project
-dependencies:
- build:
- - 'org.grails.plugins:hibernate4:5.0.6'
- compile:
- - "org.grails.plugins:hibernate4"
- - "org.hibernate:hibernate-ehcache"
- runtime:
- - "com.h2database:h2"
diff --git a/profiles/base/features/hibernate/skeleton/grails-app/conf/application.yml b/profiles/base/features/hibernate/skeleton/grails-app/conf/application.yml
deleted file mode 100644
index 7f2e6b1..0000000
--- a/profiles/base/features/hibernate/skeleton/grails-app/conf/application.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-hibernate:
- cache:
- queries: false
- use_second_level_cache: true
- use_query_cache: false
- region.factory_class: 'org.hibernate.cache.ehcache.EhCacheRegionFactory'
-
-dataSource:
- pooled: true
- jmxExport: true
- driverClassName: org.h2.Driver
- username: sa
- password:
-
-environments:
- development:
- dataSource:
- dbCreate: create-drop
- url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
- test:
- dataSource:
- dbCreate: update
- url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
- production:
- dataSource:
- dbCreate: update
- url: jdbc:h2:./prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
- properties:
- jmxEnabled: true
- initialSize: 5
- maxActive: 50
- minIdle: 5
- maxIdle: 25
- maxWait: 10000
- maxAge: 600000
- timeBetweenEvictionRunsMillis: 5000
- minEvictableIdleTimeMillis: 60000
- validationQuery: SELECT 1
- validationQueryTimeout: 3
- validationInterval: 15000
- testOnBorrow: true
- testWhileIdle: true
- testOnReturn: false
- jdbcInterceptors: ConnectionState
- defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED
diff --git a/profiles/base/features/json-views/feature.yml b/profiles/base/features/json-views/feature.yml
deleted file mode 100644
index aa06874..0000000
--- a/profiles/base/features/json-views/feature.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: Adds support for JSON Views to the project
-build:
- plugins:
- - org.grails.plugins.views-json
-dependencies:
- build:
- - "org.grails.plugins:views-gradle:1.1.0.M2"
- compile:
- - "org.grails.plugins:views-json"
- - "org.grails.plugins:views-json-templates"
diff --git a/profiles/base/features/less-asset-pipeline/feature.yml b/profiles/base/features/less-asset-pipeline/feature.yml
deleted file mode 100644
index 59e7b22..0000000
--- a/profiles/base/features/less-asset-pipeline/feature.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: Adds LESS Transpiler Asset Pipeline to a Grails project
-build:
- plugins:
- - asset-pipeline
-dependencies:
- build:
- - 'com.bertramlabs.plugins:asset-pipeline-gradle:2.8.1'
- runtime:
- - "org.grails.plugins:asset-pipeline"
- assets:
- - "com.bertramlabs.plugins:less-asset-pipeline:2.8.1"
diff --git a/profiles/base/features/less-asset-pipeline/skeleton/build.gradle b/profiles/base/features/less-asset-pipeline/skeleton/build.gradle
deleted file mode 100644
index f8a3dba..0000000
--- a/profiles/base/features/less-asset-pipeline/skeleton/build.gradle
+++ /dev/null
@@ -1,12 +0,0 @@
-
-assets {
- minifyJs = true
- minifyCss = true
- excludes = ['**/*.less']
- includes = ['application.less']
- configOptions = [
- less: [
- compiler: 'less4j' // or standard
- ]
- ]
-}
diff --git a/profiles/base/features/markup-views/feature.yml b/profiles/base/features/markup-views/feature.yml
deleted file mode 100644
index bbea9fb..0000000
--- a/profiles/base/features/markup-views/feature.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: Adds support for Markup Views to the project
-build:
- plugins:
- - org.grails.plugins.views-markup
-dependencies:
- build:
- - "org.grails.plugins:views-gradle:1.1.0.M2"
- compile:
- - "org.grails.plugins:views-markup"
diff --git a/profiles/base/features/mongodb/feature.yml b/profiles/base/features/mongodb/feature.yml
deleted file mode 100644
index 1b581c3..0000000
--- a/profiles/base/features/mongodb/feature.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-description: Adds GORM for MongoDB to the project
-dependencies:
- compile:
- - org.grails.plugins:mongodb
diff --git a/profiles/base/features/mongodb/skeleton/grails-app/conf/application.yml b/profiles/base/features/mongodb/skeleton/grails-app/conf/application.yml
deleted file mode 100644
index cdcd62c..0000000
--- a/profiles/base/features/mongodb/skeleton/grails-app/conf/application.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-grails:
- mongodb:
- host: localhost
- port: 27017
- username: ""
- password: ""
- databaseName: "@grails.app.name@"
diff --git a/profiles/base/features/neo4j/feature.yml b/profiles/base/features/neo4j/feature.yml
deleted file mode 100644
index 2f4bad8..0000000
--- a/profiles/base/features/neo4j/feature.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-description: Adds GORM for Neo4j to the project
-dependencies:
- compile:
- - org.grails.plugins:neo4j
diff --git a/profiles/base/features/neo4j/skeleton/grails-app/conf/application.yml b/profiles/base/features/neo4j/skeleton/grails-app/conf/application.yml
deleted file mode 100644
index a91db43..0000000
--- a/profiles/base/features/neo4j/skeleton/grails-app/conf/application.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-grails:
- neo4j:
- type: embedded
- location: data/neo4j
- options:
- cache_type: soft
- # username: ""
- # password: ""
\ No newline at end of file
diff --git a/profiles/base/features/rx-mongodb/feature.yml b/profiles/base/features/rx-mongodb/feature.yml
deleted file mode 100644
index 5d8f7b0..0000000
--- a/profiles/base/features/rx-mongodb/feature.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-description: Adds RxGORM for MongoDB to the project
-dependencies:
- compile:
- - org.grails.plugins:rx-mongodb
diff --git a/profiles/base/features/rx-mongodb/skeleton/grails-app/conf/application.yml b/profiles/base/features/rx-mongodb/skeleton/grails-app/conf/application.yml
deleted file mode 100644
index cdcd62c..0000000
--- a/profiles/base/features/rx-mongodb/skeleton/grails-app/conf/application.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-grails:
- mongodb:
- host: localhost
- port: 27017
- username: ""
- password: ""
- databaseName: "@grails.app.name@"
diff --git a/profiles/base/profile.yml b/profiles/base/profile.yml
deleted file mode 100644
index 1ff9a4e..0000000
--- a/profiles/base/profile.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: The base profile extended by other profiles
-repositories:
- - "https://repo.grails.org/grails/core"
-build:
- repositories:
- - "https://repo.grails.org/grails/core"
- plugins:
- - eclipse
- - idea
- - org.grails.grails-core
-dependencies:
- build:
- - "org.grails:grails-gradle-plugin:$grailsVersion"
- compile:
- - "org.springframework.boot:spring-boot-starter-logging"
- - "org.springframework.boot:spring-boot-autoconfigure"
- - "org.grails:grails-core"
- console:
- - "org.grails:grails-console"
diff --git a/profiles/base/skeleton/.gitignore b/profiles/base/skeleton/.gitignore
deleted file mode 100644
index 611ee88..0000000
--- a/profiles/base/skeleton/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-Thumbs.db
-.DS_Store
-.gradle
-build/
-.idea
-*.iml
-*.ipr
-*.iws
-.project
-.settings
-.classpath
diff --git a/profiles/base/skeleton/build.gradle b/profiles/base/skeleton/build.gradle
deleted file mode 100644
index 64b9740..0000000
--- a/profiles/base/skeleton/build.gradle
+++ /dev/null
@@ -1,34 +0,0 @@
-buildscript {
- repositories {
- mavenLocal()
-@buildRepositories@
- }
- dependencies {
-@buildDependencies@
- }
-}
-
-version "0.1"
-group "@grails.app.group@"
-
-@buildPlugins@
-
-repositories {
- mavenLocal()
-@repositories@
-}
-
-dependencyManagement {
- imports {
- mavenBom "org.grails:grails-bom:$grailsVersion"
- }
- applyMavenExclusions false
-}
-
-dependencies {
-@dependencies@
-}
-
-task wrapper(type: Wrapper) {
- gradleVersion = gradleWrapperVersion
-}
diff --git a/profiles/base/skeleton/gradle.properties b/profiles/base/skeleton/gradle.properties
deleted file mode 100644
index 0928653..0000000
--- a/profiles/base/skeleton/gradle.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-grailsVersion=@grails.version@
-gradleWrapperVersion=2.13
diff --git a/profiles/base/skeleton/gradle/wrapper/gradle-wrapper.jar b/profiles/base/skeleton/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 9411448..0000000
Binary files a/profiles/base/skeleton/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/profiles/base/skeleton/gradle/wrapper/gradle-wrapper.properties b/profiles/base/skeleton/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 8d130c8..0000000
--- a/profiles/base/skeleton/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Fri Nov 27 23:09:32 CET 2015
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-bin.zip
diff --git a/profiles/base/skeleton/gradlew b/profiles/base/skeleton/gradlew
deleted file mode 100755
index 9d82f78..0000000
--- a/profiles/base/skeleton/gradlew
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
- echo "$*"
-}
-
-die ( ) {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
-esac
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/profiles/base/skeleton/gradlew.bat b/profiles/base/skeleton/gradlew.bat
deleted file mode 100644
index aec9973..0000000
--- a/profiles/base/skeleton/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/profiles/base/skeleton/grails-app/conf/application.yml b/profiles/base/skeleton/grails-app/conf/application.yml
deleted file mode 100644
index fbb387e..0000000
--- a/profiles/base/skeleton/grails-app/conf/application.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-grails:
- profile: @grails.profile@
- codegen:
- defaultPackage: @grails.codegen.defaultPackage@
- spring:
- transactionManagement:
- proxies: false
-info:
- app:
- name: '@info.app.name@'
- version: '@info.app.version@'
- grailsVersion: '@info.app.grailsVersion@'
-spring:
-
- groovy:
- template:
- check-template-location: false
diff --git a/profiles/base/skeleton/grails-app/conf/logback.groovy b/profiles/base/skeleton/grails-app/conf/logback.groovy
deleted file mode 100644
index 2f7c41c..0000000
--- a/profiles/base/skeleton/grails-app/conf/logback.groovy
+++ /dev/null
@@ -1,23 +0,0 @@
-import grails.util.BuildSettings
-import grails.util.Environment
-
-// See http://logback.qos.ch/manual/groovy.html for details on configuration
-appender('STDOUT', ConsoleAppender) {
- encoder(PatternLayoutEncoder) {
- pattern = "%level %logger - %msg%n"
- }
-}
-
-root(ERROR, ['STDOUT'])
-
-def targetDir = BuildSettings.TARGET_DIR
-if (Environment.isDevelopmentMode() && targetDir) {
- appender("FULL_STACKTRACE", FileAppender) {
- file = "${targetDir}/stacktrace.log"
- append = true
- encoder(PatternLayoutEncoder) {
- pattern = "%level %logger - %msg%n"
- }
- }
- logger("StackTrace", ERROR, ['FULL_STACKTRACE'], false)
-}
diff --git a/profiles/base/skeleton/grails-app/conf/spring/resources.groovy b/profiles/base/skeleton/grails-app/conf/spring/resources.groovy
deleted file mode 100644
index fa95006..0000000
--- a/profiles/base/skeleton/grails-app/conf/spring/resources.groovy
+++ /dev/null
@@ -1,3 +0,0 @@
-// Place your Spring DSL code here
-beans = {
-}
diff --git a/profiles/base/skeleton/grails-app/i18n/messages.properties b/profiles/base/skeleton/grails-app/i18n/messages.properties
deleted file mode 100644
index b045136..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}]
-default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL
-default.invalid.creditCard.message=Property [{0}] of class [{1}] with value [{2}] is not a valid credit card number
-default.invalid.email.message=Property [{0}] of class [{1}] with value [{2}] is not a valid e-mail address
-default.invalid.range.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid range from [{3}] to [{4}]
-default.invalid.size.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid size range from [{3}] to [{4}]
-default.invalid.max.message=Property [{0}] of class [{1}] with value [{2}] exceeds maximum value [{3}]
-default.invalid.min.message=Property [{0}] of class [{1}] with value [{2}] is less than minimum value [{3}]
-default.invalid.max.size.message=Property [{0}] of class [{1}] with value [{2}] exceeds the maximum size of [{3}]
-default.invalid.min.size.message=Property [{0}] of class [{1}] with value [{2}] is less than the minimum size of [{3}]
-default.invalid.validator.message=Property [{0}] of class [{1}] with value [{2}] does not pass custom validation
-default.not.inlist.message=Property [{0}] of class [{1}] with value [{2}] is not contained within the list [{3}]
-default.blank.message=Property [{0}] of class [{1}] cannot be blank
-default.not.equal.message=Property [{0}] of class [{1}] with value [{2}] cannot equal [{3}]
-default.null.message=Property [{0}] of class [{1}] cannot be null
-default.not.unique.message=Property [{0}] of class [{1}] with value [{2}] must be unique
-
-default.paginate.prev=Previous
-default.paginate.next=Next
-default.boolean.true=True
-default.boolean.false=False
-default.date.format=yyyy-MM-dd HH:mm:ss z
-default.number.format=0
-
-default.created.message={0} {1} created
-default.updated.message={0} {1} updated
-default.deleted.message={0} {1} deleted
-default.not.deleted.message={0} {1} could not be deleted
-default.not.found.message={0} not found with id {1}
-default.optimistic.locking.failure=Another user has updated this {0} while you were editing
-
-default.home.label=Home
-default.list.label={0} List
-default.add.label=Add {0}
-default.new.label=New {0}
-default.create.label=Create {0}
-default.show.label=Show {0}
-default.edit.label=Edit {0}
-
-default.button.create.label=Create
-default.button.edit.label=Edit
-default.button.update.label=Update
-default.button.delete.label=Delete
-default.button.delete.confirm.message=Are you sure?
-
-# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
-typeMismatch.java.net.URL=Property {0} must be a valid URL
-typeMismatch.java.net.URI=Property {0} must be a valid URI
-typeMismatch.java.util.Date=Property {0} must be a valid Date
-typeMismatch.java.lang.Double=Property {0} must be a valid number
-typeMismatch.java.lang.Integer=Property {0} must be a valid number
-typeMismatch.java.lang.Long=Property {0} must be a valid number
-typeMismatch.java.lang.Short=Property {0} must be a valid number
-typeMismatch.java.math.BigDecimal=Property {0} must be a valid number
-typeMismatch.java.math.BigInteger=Property {0} must be a valid number
-typeMismatch=Property {0} is type-mismatched
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_cs_CZ.properties b/profiles/base/skeleton/grails-app/i18n/messages_cs_CZ.properties
deleted file mode 100644
index 7345531..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_cs_CZ.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-default.doesnt.match.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] neodpovídá požadovanému vzoru [{3}]
-default.invalid.url.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není validní URL
-default.invalid.creditCard.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není validní číslo kreditní karty
-default.invalid.email.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není validní emailová adresa
-default.invalid.range.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není v povoleném rozmezí od [{3}] do [{4}]
-default.invalid.size.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není v povoleném rozmezí od [{3}] do [{4}]
-default.invalid.max.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] překračuje maximální povolenou hodnotu [{3}]
-default.invalid.min.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] je menší než minimální povolená hodnota [{3}]
-default.invalid.max.size.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] překračuje maximální velikost [{3}]
-default.invalid.min.size.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] je menší než minimální velikost [{3}]
-default.invalid.validator.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] neprošla validací
-default.not.inlist.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není obsažena v seznamu [{3}]
-default.blank.message=Položka [{0}] třídy [{1}] nemůže být prázdná
-default.not.equal.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] nemůže být stejná jako [{3}]
-default.null.message=Položka [{0}] třídy [{1}] nemůže být prázdná
-default.not.unique.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] musí být unikátní
-
-default.paginate.prev=Předcházející
-default.paginate.next=Následující
-default.boolean.true=Pravda
-default.boolean.false=Nepravda
-default.date.format=dd. MM. yyyy HH:mm:ss z
-default.number.format=0
-
-default.created.message={0} {1} vytvořeno
-default.updated.message={0} {1} aktualizováno
-default.deleted.message={0} {1} smazáno
-default.not.deleted.message={0} {1} nelze smazat
-default.not.found.message={0} nenalezen s id {1}
-default.optimistic.locking.failure=Jiný uživatel aktualizoval záznam {0}, právě když byl vámi editován
-
-default.home.label=Domů
-default.list.label={0} Seznam
-default.add.label=Přidat {0}
-default.new.label=Nový {0}
-default.create.label=Vytvořit {0}
-default.show.label=Ukázat {0}
-default.edit.label=Editovat {0}
-
-default.button.create.label=Vytvoř
-default.button.edit.label=Edituj
-default.button.update.label=Aktualizuj
-default.button.delete.label=Smaž
-default.button.delete.confirm.message=Jste si jistý?
-
-# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
-typeMismatch.java.net.URL=Položka {0} musí být validní URL
-typeMismatch.java.net.URI=Položka {0} musí být validní URI
-typeMismatch.java.util.Date=Položka {0} musí být validní datum
-typeMismatch.java.lang.Double=Položka {0} musí být validní desetinné číslo
-typeMismatch.java.lang.Integer=Položka {0} musí být validní číslo
-typeMismatch.java.lang.Long=Položka {0} musí být validní číslo
-typeMismatch.java.lang.Short=Položka {0} musí být validní číslo
-typeMismatch.java.math.BigDecimal=Položka {0} musí být validní číslo
-typeMismatch.java.math.BigInteger=Položka {0} musí být validní číslo
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_da.properties b/profiles/base/skeleton/grails-app/i18n/messages_da.properties
deleted file mode 100644
index 858b229..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_da.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-default.doesnt.match.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overholder ikke mønsteret [{3}]
-default.invalid.url.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er ikke en gyldig URL
-default.invalid.creditCard.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er ikke et gyldigt kreditkortnummer
-default.invalid.email.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er ikke en gyldig e-mail adresse
-default.invalid.range.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] ligger ikke inden for intervallet fra [{3}] til [{4}]
-default.invalid.size.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] ligger ikke inden for størrelsen fra [{3}] til [{4}]
-default.invalid.max.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overstiger den maksimale værdi [{3}]
-default.invalid.min.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er under den minimale værdi [{3}]
-default.invalid.max.size.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overstiger den maksimale størrelse på [{3}]
-default.invalid.min.size.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er under den minimale størrelse på [{3}]
-default.invalid.validator.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overholder ikke den brugerdefinerede validering
-default.not.inlist.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] findes ikke i listen [{3}]
-default.blank.message=Feltet [{0}] i klassen [{1}] kan ikke være tom
-default.not.equal.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] må ikke være [{3}]
-default.null.message=Feltet [{0}] i klassen [{1}] kan ikke være null
-default.not.unique.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] skal være unik
-
-default.paginate.prev=Forrige
-default.paginate.next=Næste
-default.boolean.true=Sand
-default.boolean.false=Falsk
-default.date.format=yyyy-MM-dd HH:mm:ss z
-default.number.format=0
-
-default.created.message={0} {1} oprettet
-default.updated.message={0} {1} opdateret
-default.deleted.message={0} {1} slettet
-default.not.deleted.message={0} {1} kunne ikke slettes
-default.not.found.message={0} med id {1} er ikke fundet
-default.optimistic.locking.failure=En anden bruger har opdateret denne {0} imens du har lavet rettelser
-
-default.home.label=Hjem
-default.list.label={0} Liste
-default.add.label=Tilføj {0}
-default.new.label=Ny {0}
-default.create.label=Opret {0}
-default.show.label=Vis {0}
-default.edit.label=Ret {0}
-
-default.button.create.label=Opret
-default.button.edit.label=Ret
-default.button.update.label=Opdater
-default.button.delete.label=Slet
-default.button.delete.confirm.message=Er du sikker?
-
-# Databindingsfejl. Brug "typeMismatch.$className.$propertyName for at passe til en given klasse (f.eks typeMismatch.Book.author)
-typeMismatch.java.net.URL=Feltet {0} skal være en valid URL
-typeMismatch.java.net.URI=Feltet {0} skal være en valid URI
-typeMismatch.java.util.Date=Feltet {0} skal være en valid Dato
-typeMismatch.java.lang.Double=Feltet {0} skal være et valid tal
-typeMismatch.java.lang.Integer=Feltet {0} skal være et valid tal
-typeMismatch.java.lang.Long=Feltet {0} skal være et valid tal
-typeMismatch.java.lang.Short=Feltet {0} skal være et valid tal
-typeMismatch.java.math.BigDecimal=Feltet {0} skal være et valid tal
-typeMismatch.java.math.BigInteger=Feltet {0} skal være et valid tal
-
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_de.properties b/profiles/base/skeleton/grails-app/i18n/messages_de.properties
deleted file mode 100644
index 0f7bfe9..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_de.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-default.doesnt.match.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] entspricht nicht dem vorgegebenen Muster [{3}]
-default.invalid.url.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gültige URL
-default.invalid.creditCard.message=Das Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gültige Kreditkartennummer
-default.invalid.email.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gültige E-Mail Adresse
-default.invalid.range.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht im Wertebereich von [{3}] bis [{4}]
-default.invalid.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht im Wertebereich von [{3}] bis [{4}]
-default.invalid.max.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist größer als der Höchstwert von [{3}]
-default.invalid.min.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist kleiner als der Mindestwert von [{3}]
-default.invalid.max.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] übersteigt den Höchstwert von [{3}]
-default.invalid.min.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] unterschreitet den Mindestwert von [{3}]
-default.invalid.validator.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist ungültig
-default.not.inlist.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht in der Liste [{3}] enthalten.
-default.blank.message=Die Eigenschaft [{0}] des Typs [{1}] darf nicht leer sein
-default.not.equal.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] darf nicht gleich [{3}] sein
-default.null.message=Die Eigenschaft [{0}] des Typs [{1}] darf nicht null sein
-default.not.unique.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] darf nur einmal vorkommen
-
-default.paginate.prev=Vorherige
-default.paginate.next=Nächste
-default.boolean.true=Wahr
-default.boolean.false=Falsch
-default.date.format=dd.MM.yyyy HH:mm:ss z
-default.number.format=0
-
-default.created.message={0} {1} wurde angelegt
-default.updated.message={0} {1} wurde geändert
-default.deleted.message={0} {1} wurde gelöscht
-default.not.deleted.message={0} {1} konnte nicht gelöscht werden
-default.not.found.message={0} mit der id {1} wurde nicht gefunden
-default.optimistic.locking.failure=Ein anderer Benutzer hat das {0} Object geändert während Sie es bearbeitet haben
-
-default.home.label=Home
-default.list.label={0} Liste
-default.add.label={0} hinzufügen
-default.new.label={0} anlegen
-default.create.label={0} anlegen
-default.show.label={0} anzeigen
-default.edit.label={0} bearbeiten
-
-default.button.create.label=Anlegen
-default.button.edit.label=Bearbeiten
-default.button.update.label=Aktualisieren
-default.button.delete.label=Löschen
-default.button.delete.confirm.message=Sind Sie sicher?
-
-# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
-typeMismatch.java.net.URL=Die Eigenschaft {0} muss eine gültige URL sein
-typeMismatch.java.net.URI=Die Eigenschaft {0} muss eine gültige URI sein
-typeMismatch.java.util.Date=Die Eigenschaft {0} muss ein gültiges Datum sein
-typeMismatch.java.lang.Double=Die Eigenschaft {0} muss eine gültige Zahl sein
-typeMismatch.java.lang.Integer=Die Eigenschaft {0} muss eine gültige Zahl sein
-typeMismatch.java.lang.Long=Die Eigenschaft {0} muss eine gültige Zahl sein
-typeMismatch.java.lang.Short=Die Eigenschaft {0} muss eine gültige Zahl sein
-typeMismatch.java.math.BigDecimal=Die Eigenschaft {0} muss eine gültige Zahl sein
-typeMismatch.java.math.BigInteger=Die Eigenschaft {0} muss eine gültige Zahl sein
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_es.properties b/profiles/base/skeleton/grails-app/i18n/messages_es.properties
deleted file mode 100644
index f0ede53..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_es.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-default.doesnt.match.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no corresponde al patrón [{3}]
-default.invalid.url.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es una URL válida
-default.invalid.creditCard.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es un número de tarjeta de crédito válida
-default.invalid.email.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es una dirección de correo electrónico válida
-default.invalid.range.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no entra en el rango válido de [{3}] a [{4}]
-default.invalid.size.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no entra en el tamaño válido de [{3}] a [{4}]
-default.invalid.max.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] excede el valor máximo [{3}]
-default.invalid.min.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] es menos que el valor mínimo [{3}]
-default.invalid.max.size.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] excede el tamaño máximo de [{3}]
-default.invalid.min.size.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] es menor que el tamaño mínimo de [{3}]
-default.invalid.validator.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es válido
-default.not.inlist.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no esta contenido dentro de la lista [{3}]
-default.blank.message=La propiedad [{0}] de la clase [{1}] no puede ser vacía
-default.not.equal.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no puede igualar a [{3}]
-default.null.message=La propiedad [{0}] de la clase [{1}] no puede ser nulo
-default.not.unique.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] debe ser única
-
-default.paginate.prev=Anterior
-default.paginate.next=Siguiente
-default.boolean.true=Verdadero
-default.boolean.false=Falso
-default.date.format=yyyy-MM-dd HH:mm:ss z
-default.number.format=0
-
-default.created.message={0} {1} creado
-default.updated.message={0} {1} actualizado
-default.deleted.message={0} {1} eliminado
-default.not.deleted.message={0} {1} no puede eliminarse
-default.not.found.message=No se encuentra {0} con id {1}
-default.optimistic.locking.failure=Mientras usted editaba, otro usuario ha actualizado su {0}
-
-default.home.label=Principal
-default.list.label={0} Lista
-default.add.label=Agregar {0}
-default.new.label=Nuevo {0}
-default.create.label=Crear {0}
-default.show.label=Mostrar {0}
-default.edit.label=Editar {0}
-
-default.button.create.label=Crear
-default.button.edit.label=Editar
-default.button.update.label=Actualizar
-default.button.delete.label=Eliminar
-default.button.delete.confirm.message=¿Está usted seguro?
-
-# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
-typeMismatch.java.net.URL=La propiedad {0} debe ser una URL válida
-typeMismatch.java.net.URI=La propiedad {0} debe ser una URI válida
-typeMismatch.java.util.Date=La propiedad {0} debe ser una fecha válida
-typeMismatch.java.lang.Double=La propiedad {0} debe ser un número válido
-typeMismatch.java.lang.Integer=La propiedad {0} debe ser un número válido
-typeMismatch.java.lang.Long=La propiedad {0} debe ser un número válido
-typeMismatch.java.lang.Short=La propiedad {0} debe ser un número válido
-typeMismatch.java.math.BigDecimal=La propiedad {0} debe ser un número válido
-typeMismatch.java.math.BigInteger=La propiedad {0} debe ser un número válido
\ No newline at end of file
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_fr.properties b/profiles/base/skeleton/grails-app/i18n/messages_fr.properties
deleted file mode 100644
index 5572164..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_fr.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-default.doesnt.match.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne correspond pas au pattern [{3}]
-default.invalid.url.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas une URL valide
-default.invalid.creditCard.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas un numéro de carte de crédit valide
-default.invalid.email.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas une adresse e-mail valide
-default.invalid.range.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas contenue dans l'intervalle [{3}] à [{4}]
-default.invalid.size.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas contenue dans l'intervalle [{3}] à [{4}]
-default.invalid.max.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est supérieure à la valeur maximum [{3}]
-default.invalid.min.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est inférieure à la valeur minimum [{3}]
-default.invalid.max.size.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est supérieure à la valeur maximum [{3}]
-default.invalid.min.size.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est inférieure à la valeur minimum [{3}]
-default.invalid.validator.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas valide
-default.not.inlist.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne fait pas partie de la liste [{3}]
-default.blank.message=La propriété [{0}] de la classe [{1}] ne peut pas être vide
-default.not.equal.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne peut pas être égale à [{3}]
-default.null.message=La propriété [{0}] de la classe [{1}] ne peut pas être nulle
-default.not.unique.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] doit être unique
-
-default.paginate.prev=Précédent
-default.paginate.next=Suivant
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_it.properties b/profiles/base/skeleton/grails-app/i18n/messages_it.properties
deleted file mode 100644
index a90f1c7..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_it.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-default.doesnt.match.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non corrisponde al pattern [{3}]
-default.invalid.url.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un URL valido
-default.invalid.creditCard.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un numero di carta di credito valido
-default.invalid.email.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un indirizzo email valido
-default.invalid.range.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non rientra nell'intervallo valido da [{3}] a [{4}]
-default.invalid.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non rientra nell'intervallo di dimensioni valide da [{3}] a [{4}]
-default.invalid.max.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è maggiore di [{3}]
-default.invalid.min.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è minore di [{3}]
-default.invalid.max.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è maggiore di [{3}]
-default.invalid.min.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è minore di [{3}]
-default.invalid.validator.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è valida
-default.not.inlist.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è contenuta nella lista [{3}]
-default.blank.message=La proprietà [{0}] della classe [{1}] non può essere vuota
-default.not.equal.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non può essere uguale a [{3}]
-default.null.message=La proprietà [{0}] della classe [{1}] non può essere null
-default.not.unique.message=La proprietà [{0}] della classe [{1}] con valore [{2}] deve essere unica
-
-default.paginate.prev=Precedente
-default.paginate.next=Successivo
-default.boolean.true=Vero
-default.boolean.false=Falso
-default.date.format=dd/MM/yyyy HH:mm:ss z
-default.number.format=0
-
-default.created.message={0} {1} creato
-default.updated.message={0} {1} aggiornato
-default.deleted.message={0} {1} eliminato
-default.not.deleted.message={0} {1} non può essere eliminato
-default.not.found.message={0} non trovato con id {1}
-default.optimistic.locking.failure=Un altro utente ha aggiornato questo {0} mentre si era in modifica
-
-default.home.label=Home
-default.list.label={0} Elenco
-default.add.label=Aggiungi {0}
-default.new.label=Nuovo {0}
-default.create.label=Crea {0}
-default.show.label=Mostra {0}
-default.edit.label=Modifica {0}
-
-default.button.create.label=Crea
-default.button.edit.label=Modifica
-default.button.update.label=Aggiorna
-default.button.delete.label=Elimina
-default.button.delete.confirm.message=Si è sicuri?
-
-# Data binding errors. Usa "typeMismatch.$className.$propertyName per la personalizzazione (es typeMismatch.Book.author)
-typeMismatch.java.net.URL=La proprietà {0} deve essere un URL valido
-typeMismatch.java.net.URI=La proprietà {0} deve essere un URI valido
-typeMismatch.java.util.Date=La proprietà {0} deve essere una data valida
-typeMismatch.java.lang.Double=La proprietà {0} deve essere un numero valido
-typeMismatch.java.lang.Integer=La proprietà {0} deve essere un numero valido
-typeMismatch.java.lang.Long=La proprietà {0} deve essere un numero valido
-typeMismatch.java.lang.Short=La proprietà {0} deve essere un numero valido
-typeMismatch.java.math.BigDecimal=La proprietà {0} deve essere un numero valido
-typeMismatch.java.math.BigInteger=La proprietà {0} deve essere un numero valido
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_ja.properties b/profiles/base/skeleton/grails-app/i18n/messages_ja.properties
deleted file mode 100644
index d9e9b78..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_ja.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-default.doesnt.match.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]パターンと一致していません。
-default.invalid.url.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、有効なURLではありません。
-default.invalid.creditCard.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、有効なクレジットカード番号ではありません。
-default.invalid.email.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、有効なメールアドレスではありません。
-default.invalid.range.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]から[{4}]範囲内を指定してください。
-default.invalid.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]から[{4}]以内を指定してください。
-default.invalid.max.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最大値[{3}]より大きいです。
-default.invalid.min.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最小値[{3}]より小さいです。
-default.invalid.max.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最大値[{3}]より大きいです。
-default.invalid.min.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最小値[{3}]より小さいです。
-default.invalid.validator.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、カスタムバリデーションを通過できません。
-default.not.inlist.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]リスト内に存在しません。
-default.blank.message=[{1}]クラスのプロパティ[{0}]の空白は許可されません。
-default.not.equal.message=クラス[{1}]プロパティ[{0}]の値[{2}]に[{3}]は許可されません。
-default.null.message=[{1}]クラスのプロパティ[{0}]にnullは許可されません。
-default.not.unique.message=クラス[{1}]プロパティ[{0}]の値[{2}]は既に使用されています。
-
-default.paginate.prev=戻る
-default.paginate.next=次へ
-default.boolean.true=はい
-default.boolean.false=いいえ
-default.date.format=yyyy/MM/dd HH:mm:ss z
-default.number.format=0
-
-default.created.message={0}(id:{1})を作成しました。
-default.updated.message={0}(id:{1})を更新しました。
-default.deleted.message={0}(id:{1})を削除しました。
-default.not.deleted.message={0}(id:{1})は削除できませんでした。
-default.not.found.message={0}(id:{1})は見つかりませんでした。
-default.optimistic.locking.failure=この{0}は編集中に他のユーザによって先に更新されています。
-
-default.home.label=ホーム
-default.list.label={0}リスト
-default.add.label={0}を追加
-default.new.label={0}を新規作成
-default.create.label={0}を作成
-default.show.label={0}詳細
-default.edit.label={0}を編集
-
-default.button.create.label=作成
-default.button.edit.label=編集
-default.button.update.label=更新
-default.button.delete.label=削除
-default.button.delete.confirm.message=本当に削除してよろしいですか?
-
-# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
-typeMismatch.java.net.URL={0}は有効なURLでなければなりません。
-typeMismatch.java.net.URI={0}は有効なURIでなければなりません。
-typeMismatch.java.util.Date={0}は有効な日付でなければなりません。
-typeMismatch.java.lang.Double={0}は有効な数値でなければなりません。
-typeMismatch.java.lang.Integer={0}は有効な数値でなければなりません。
-typeMismatch.java.lang.Long={0}は有効な数値でなければなりません。
-typeMismatch.java.lang.Short={0}は有効な数値でなければなりません。
-typeMismatch.java.math.BigDecimal={0}は有効な数値でなければなりません。
-typeMismatch.java.math.BigInteger={0}は有効な数値でなければなりません。
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_nb.properties b/profiles/base/skeleton/grails-app/i18n/messages_nb.properties
deleted file mode 100644
index 47a8a1a..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_nb.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-default.doesnt.match.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overholder ikke mønsteret [{3}]
-default.invalid.url.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke en gyldig URL
-default.invalid.creditCard.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke et gyldig kredittkortnummer
-default.invalid.email.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke en gyldig epostadresse
-default.invalid.range.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke innenfor intervallet [{3}] til [{4}]
-default.invalid.size.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke innenfor intervallet [{3}] til [{4}]
-default.invalid.max.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overstiger maksimumsverdien på [{3}]
-default.invalid.min.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er under minimumsverdien på [{3}]
-default.invalid.max.size.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overstiger maksimumslengden på [{3}]
-default.invalid.min.size.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er kortere enn minimumslengden på [{3}]
-default.invalid.validator.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overholder ikke den brukerdefinerte valideringen
-default.not.inlist.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] finnes ikke i listen [{3}]
-default.blank.message=Feltet [{0}] i klassen [{1}] kan ikke være tom
-default.not.equal.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] kan ikke være [{3}]
-default.null.message=Feltet [{0}] i klassen [{1}] kan ikke være null
-default.not.unique.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] må være unik
-
-default.paginate.prev=Forrige
-default.paginate.next=Neste
-default.boolean.true=Ja
-default.boolean.false=Nei
-default.date.format=dd.MM.yyyy HH:mm:ss z
-default.number.format=0
-
-default.created.message={0} {1} opprettet
-default.updated.message={0} {1} oppdatert
-default.deleted.message={0} {1} slettet
-default.not.deleted.message={0} {1} kunne ikke slettes
-default.not.found.message={0} med id {1} ble ikke funnet
-default.optimistic.locking.failure=En annen bruker har oppdatert denne {0} mens du redigerte
-
-default.home.label=Hjem
-default.list.label={0}liste
-default.add.label=Legg til {0}
-default.new.label=Ny {0}
-default.create.label=Opprett {0}
-default.show.label=Vis {0}
-default.edit.label=Endre {0}
-
-default.button.create.label=Opprett
-default.button.edit.label=Endre
-default.button.update.label=Oppdater
-default.button.delete.label=Slett
-default.button.delete.confirm.message=Er du sikker?
-
-# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
-typeMismatch.java.net.URL=Feltet {0} må være en gyldig URL
-typeMismatch.java.net.URI=Feltet {0} må være en gyldig URI
-typeMismatch.java.util.Date=Feltet {0} må være en gyldig dato
-typeMismatch.java.lang.Double=Feltet {0} må være et gyldig tall
-typeMismatch.java.lang.Integer=Feltet {0} må være et gyldig heltall
-typeMismatch.java.lang.Long=Feltet {0} må være et gyldig heltall
-typeMismatch.java.lang.Short=Feltet {0} må være et gyldig heltall
-typeMismatch.java.math.BigDecimal=Feltet {0} må være et gyldig tall
-typeMismatch.java.math.BigInteger=Feltet {0} må være et gyldig heltall
-
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_nl.properties b/profiles/base/skeleton/grails-app/i18n/messages_nl.properties
deleted file mode 100644
index cd5cc94..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_nl.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-default.doesnt.match.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] komt niet overeen met het vereiste patroon [{3}]
-default.invalid.url.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldige URL
-default.invalid.creditCard.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldig credit card nummer
-default.invalid.email.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldig e-mailadres
-default.invalid.range.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] valt niet in de geldige waardenreeks van [{3}] tot [{4}]
-default.invalid.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] valt niet in de geldige grootte van [{3}] tot [{4}]
-default.invalid.max.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] overschrijdt de maximumwaarde [{3}]
-default.invalid.min.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is minder dan de minimumwaarde [{3}]
-default.invalid.max.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] overschrijdt de maximumgrootte van [{3}]
-default.invalid.min.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is minder dan minimumgrootte van [{3}]
-default.invalid.validator.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is niet geldig
-default.not.inlist.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] komt niet voor in de lijst [{3}]
-default.blank.message=Attribuut [{0}] van entiteit [{1}] mag niet leeg zijn
-default.not.equal.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] mag niet gelijk zijn aan [{3}]
-default.null.message=Attribuut [{0}] van entiteit [{1}] mag niet leeg zijn
-default.not.unique.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] moet uniek zijn
-
-default.paginate.prev=Vorige
-default.paginate.next=Volgende
-default.boolean.true=Ja
-default.boolean.false=Nee
-default.date.format=dd-MM-yyyy HH:mm:ss z
-default.number.format=0
-
-default.created.message={0} {1} ingevoerd
-default.updated.message={0} {1} gewijzigd
-default.deleted.message={0} {1} verwijderd
-default.not.deleted.message={0} {1} kon niet worden verwijderd
-default.not.found.message={0} met id {1} kon niet worden gevonden
-default.optimistic.locking.failure=Een andere gebruiker heeft deze {0} al gewijzigd
-
-default.home.label=Home
-default.list.label={0} Overzicht
-default.add.label=Toevoegen {0}
-default.new.label=Invoeren {0}
-default.create.label=Invoeren {0}
-default.show.label=Details {0}
-default.edit.label=Wijzigen {0}
-
-default.button.create.label=Invoeren
-default.button.edit.label=Wijzigen
-default.button.update.label=Opslaan
-default.button.delete.label=Verwijderen
-default.button.delete.confirm.message=Weet je het zeker?
-
-# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
-typeMismatch.java.net.URL=Attribuut {0} is geen geldige URL
-typeMismatch.java.net.URI=Attribuut {0} is geen geldige URI
-typeMismatch.java.util.Date=Attribuut {0} is geen geldige datum
-typeMismatch.java.lang.Double=Attribuut {0} is geen geldig nummer
-typeMismatch.java.lang.Integer=Attribuut {0} is geen geldig nummer
-typeMismatch.java.lang.Long=Attribuut {0} is geen geldig nummer
-typeMismatch.java.lang.Short=Attribuut {0} is geen geldig nummer
-typeMismatch.java.math.BigDecimal=Attribuut {0} is geen geldig nummer
-typeMismatch.java.math.BigInteger=Attribuut {0} is geen geldig nummer
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_pl.properties b/profiles/base/skeleton/grails-app/i18n/messages_pl.properties
deleted file mode 100644
index 959296c..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_pl.properties
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Translated by Matthias Hryniszak - padcom@gmail.com
-#
-
-default.doesnt.match.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie pasuje do wymaganego wzorca [{3}]
-default.invalid.url.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] jest niepoprawnym adresem URL
-default.invalid.creditCard.message=Właściwość [{0}] klasy [{1}] with value [{2}] nie jest poprawnym numerem karty kredytowej
-default.invalid.email.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie jest poprawnym adresem e-mail
-default.invalid.range.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie zawiera się zakładanym zakresie od [{3}] do [{4}]
-default.invalid.size.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie zawiera się w zakładanym zakresie rozmiarów od [{3}] do [{4}]
-default.invalid.max.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] przekracza maksymalną wartość [{3}]
-default.invalid.min.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] jest mniejsza niż minimalna wartość [{3}]
-default.invalid.max.size.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] przekracza maksymalny rozmiar [{3}]
-default.invalid.min.size.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] jest mniejsza niż minimalny rozmiar [{3}]
-default.invalid.validator.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie spełnia założonych niestandardowych warunków
-default.not.inlist.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie zawiera się w liście [{3}]
-default.blank.message=Właściwość [{0}] klasy [{1}] nie może być pusta
-default.not.equal.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie może równać się [{3}]
-default.null.message=Właściwość [{0}] klasy [{1}] nie może być null
-default.not.unique.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] musi być unikalna
-
-default.paginate.prev=Poprzedni
-default.paginate.next=Następny
-default.boolean.true=Prawda
-default.boolean.false=Fałsz
-default.date.format=yyyy-MM-dd HH:mm:ss z
-default.number.format=0
-
-default.created.message=Utworzono {0} {1}
-default.updated.message=Zaktualizowano {0} {1}
-default.deleted.message=Usunięto {0} {1}
-default.not.deleted.message={0} {1} nie mógł zostać usunięty
-default.not.found.message=Nie znaleziono {0} o id {1}
-default.optimistic.locking.failure=Inny użytkownik zaktualizował ten obiekt {0} w trakcie twoich zmian
-
-default.home.label=Strona domowa
-default.list.label=Lista {0}
-default.add.label=Dodaj {0}
-default.new.label=Utwórz {0}
-default.create.label=Utwórz {0}
-default.show.label=Pokaż {0}
-default.edit.label=Edytuj {0}
-
-default.button.create.label=Utwórz
-default.button.edit.label=Edytuj
-default.button.update.label=Zaktualizuj
-default.button.delete.label=Usuń
-default.button.delete.confirm.message=Czy jesteś pewien?
-
-# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
-typeMismatch.java.net.URL=Właściwość {0} musi być poprawnym adresem URL
-typeMismatch.java.net.URI=Właściwość {0} musi być poprawnym adresem URI
-typeMismatch.java.util.Date=Właściwość {0} musi być poprawną datą
-typeMismatch.java.lang.Double=Właściwość {0} musi być poprawnyą liczbą
-typeMismatch.java.lang.Integer=Właściwość {0} musi być poprawnyą liczbą
-typeMismatch.java.lang.Long=Właściwość {0} musi być poprawnyą liczbą
-typeMismatch.java.lang.Short=Właściwość {0} musi być poprawnyą liczbą
-typeMismatch.java.math.BigDecimal=Właściwość {0} musi być poprawnyą liczbą
-typeMismatch.java.math.BigInteger=Właściwość {0} musi być poprawnyą liczbą
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_pt_BR.properties b/profiles/base/skeleton/grails-app/i18n/messages_pt_BR.properties
deleted file mode 100644
index b5044e2..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_pt_BR.properties
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Translated by Lucas Teixeira - lucastex@gmail.com
-#
-
-default.doesnt.match.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atende ao padrão definido [{3}]
-default.invalid.url.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é uma URL válida
-default.invalid.creditCard.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um número válido de cartão de crédito
-default.invalid.email.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um endereço de email válido.
-default.invalid.range.message=O campo [{0}] da classe [{1}] com o valor [{2}] não está entre a faixa de valores válida de [{3}] até [{4}]
-default.invalid.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] não está na faixa de tamanho válida de [{3}] até [{4}]
-default.invalid.max.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o valor máximo [{3}]
-default.invalid.min.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o valor mínimo [{3}]
-default.invalid.max.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o tamanho máximo de [{3}]
-default.invalid.min.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o tamanho mínimo de [{3}]
-default.invalid.validator.message=O campo [{0}] da classe [{1}] com o valor [{2}] não passou na validação
-default.not.inlist.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um valor dentre os permitidos na lista [{3}]
-default.blank.message=O campo [{0}] da classe [{1}] não pode ficar em branco
-default.not.equal.message=O campo [{0}] da classe [{1}] com o valor [{2}] não pode ser igual a [{3}]
-default.null.message=O campo [{0}] da classe [{1}] não pode ser vazio
-default.not.unique.message=O campo [{0}] da classe [{1}] com o valor [{2}] deve ser único
-
-default.paginate.prev=Anterior
-default.paginate.next=Próximo
-default.boolean.true=Sim
-default.boolean.false=Não
-default.date.format=dd/MM/yyyy HH:mm:ss z
-default.number.format=0
-
-default.created.message={0} {1} criado
-default.updated.message={0} {1} atualizado
-default.deleted.message={0} {1} removido
-default.not.deleted.message={0} {1} não pode ser removido
-default.not.found.message={0} não foi encontrado com o id {1}
-default.optimistic.locking.failure=Outro usuário atualizou este [{0}] enquanto você tentou salvá-lo
-
-default.home.label=Principal
-default.list.label={0} Listagem
-default.add.label=Adicionar {0}
-default.new.label=Novo {0}
-default.create.label=Criar {0}
-default.show.label=Ver {0}
-default.edit.label=Editar {0}
-
-default.button.create.label=Criar
-default.button.edit.label=Editar
-default.button.update.label=Alterar
-default.button.delete.label=Remover
-default.button.delete.confirm.message=Tem certeza?
-
-# Mensagens de erro em atribuição de valores. Use "typeMismatch.$className.$propertyName" para customizar (eg typeMismatch.Book.author)
-typeMismatch.java.net.URL=O campo {0} deve ser uma URL válida.
-typeMismatch.java.net.URI=O campo {0} deve ser uma URI válida.
-typeMismatch.java.util.Date=O campo {0} deve ser uma data válida
-typeMismatch.java.lang.Double=O campo {0} deve ser um número válido.
-typeMismatch.java.lang.Integer=O campo {0} deve ser um número válido.
-typeMismatch.java.lang.Long=O campo {0} deve ser um número válido.
-typeMismatch.java.lang.Short=O campo {0} deve ser um número válido.
-typeMismatch.java.math.BigDecimal=O campo {0} deve ser um número válido.
-typeMismatch.java.math.BigInteger=O campo {0} deve ser um número válido.
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_pt_PT.properties b/profiles/base/skeleton/grails-app/i18n/messages_pt_PT.properties
deleted file mode 100644
index a386070..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_pt_PT.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# translation by miguel.ping@gmail.com, based on pt_BR translation by Lucas Teixeira - lucastex@gmail.com
-#
-
-default.doesnt.match.message=O campo [{0}] da classe [{1}] com o valor [{2}] não corresponde ao padrão definido [{3}]
-default.invalid.url.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um URL válido
-default.invalid.creditCard.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um número válido de cartão de crédito
-default.invalid.email.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um endereço de email válido.
-default.invalid.range.message=O campo [{0}] da classe [{1}] com o valor [{2}] não está dentro dos limites de valores válidos de [{3}] a [{4}]
-default.invalid.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] está fora dos limites de tamanho válido de [{3}] a [{4}]
-default.invalid.max.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o valor máximo [{3}]
-default.invalid.min.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o valor mínimo [{3}]
-default.invalid.max.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o tamanho máximo de [{3}]
-default.invalid.min.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o tamanho mínimo de [{3}]
-default.invalid.validator.message=O campo [{0}] da classe [{1}] com o valor [{2}] não passou na validação
-default.not.inlist.message=O campo [{0}] da classe [{1}] com o valor [{2}] não se encontra nos valores permitidos da lista [{3}]
-default.blank.message=O campo [{0}] da classe [{1}] não pode ser vazio
-default.not.equal.message=O campo [{0}] da classe [{1}] com o valor [{2}] não pode ser igual a [{3}]
-default.null.message=O campo [{0}] da classe [{1}] não pode ser vazio
-default.not.unique.message=O campo [{0}] da classe [{1}] com o valor [{2}] deve ser único
-
-default.paginate.prev=Anterior
-default.paginate.next=Próximo
-
-# Mensagens de erro em atribuição de valores. Use "typeMismatch.$className.$propertyName" para personalizar(eg typeMismatch.Book.author)
-typeMismatch.java.net.URL=O campo {0} deve ser um URL válido.
-typeMismatch.java.net.URI=O campo {0} deve ser um URI válido.
-typeMismatch.java.util.Date=O campo {0} deve ser uma data válida
-typeMismatch.java.lang.Double=O campo {0} deve ser um número válido.
-typeMismatch.java.lang.Integer=O campo {0} deve ser um número válido.
-typeMismatch.java.lang.Long=O campo {0} deve ser um número valido.
-typeMismatch.java.lang.Short=O campo {0} deve ser um número válido.
-typeMismatch.java.math.BigDecimal=O campo {0} deve ser um número válido.
-typeMismatch.java.math.BigInteger=O campo {0} deve ser um número válido.
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_ru.properties b/profiles/base/skeleton/grails-app/i18n/messages_ru.properties
deleted file mode 100644
index 53a4bdc..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_ru.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-default.doesnt.match.message=Значение [{2}] поля [{0}] класса [{1}] не соответствует образцу [{3}]
-default.invalid.url.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым URL-адресом
-default.invalid.creditCard.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым номером кредитной карты
-default.invalid.email.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым e-mail адресом
-default.invalid.range.message=Значение [{2}] поля [{0}] класса [{1}] не попадает в допустимый интервал от [{3}] до [{4}]
-default.invalid.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) не попадает в допустимый интервал от [{3}] до [{4}]
-default.invalid.max.message=Значение [{2}] поля [{0}] класса [{1}] больше чем максимально допустимое значение [{3}]
-default.invalid.min.message=Значение [{2}] поля [{0}] класса [{1}] меньше чем минимально допустимое значение [{3}]
-default.invalid.max.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) больше чем максимально допустимый размер [{3}]
-default.invalid.min.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) меньше чем минимально допустимый размер [{3}]
-default.invalid.validator.message=Значение [{2}] поля [{0}] класса [{1}] не допустимо
-default.not.inlist.message=Значение [{2}] поля [{0}] класса [{1}] не попадает в список допустимых значений [{3}]
-default.blank.message=Поле [{0}] класса [{1}] не может быть пустым
-default.not.equal.message=Значение [{2}] поля [{0}] класса [{1}] не может быть равно [{3}]
-default.null.message=Поле [{0}] класса [{1}] не может иметь значение null
-default.not.unique.message=Значение [{2}] поля [{0}] класса [{1}] должно быть уникальным
-
-default.paginate.prev=Предыдушая страница
-default.paginate.next=Следующая страница
-
-# Ошибки при присвоении данных. Для точной настройки для полей классов используйте
-# формат "typeMismatch.$className.$propertyName" (например, typeMismatch.Book.author)
-typeMismatch.java.net.URL=Значение поля {0} не является допустимым URL
-typeMismatch.java.net.URI=Значение поля {0} не является допустимым URI
-typeMismatch.java.util.Date=Значение поля {0} не является допустимой датой
-typeMismatch.java.lang.Double=Значение поля {0} не является допустимым числом
-typeMismatch.java.lang.Integer=Значение поля {0} не является допустимым числом
-typeMismatch.java.lang.Long=Значение поля {0} не является допустимым числом
-typeMismatch.java.lang.Short=Значение поля {0} не является допустимым числом
-typeMismatch.java.math.BigDecimal=Значение поля {0} не является допустимым числом
-typeMismatch.java.math.BigInteger=Значение поля {0} не является допустимым числом
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_sv.properties b/profiles/base/skeleton/grails-app/i18n/messages_sv.properties
deleted file mode 100644
index 61899d7..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_sv.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-default.doesnt.match.message=Attributet [{0}] för klassen [{1}] med värde [{2}] matchar inte mot uttrycket [{3}]
-default.invalid.url.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte en giltig URL
-default.invalid.creditCard.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte ett giltigt kreditkortsnummer
-default.invalid.email.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte en giltig e-postadress
-default.invalid.range.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte inom intervallet [{3}] till [{4}]
-default.invalid.size.message=Attributet [{0}] för klassen [{1}] med värde [{2}] har en storlek som inte är inom [{3}] till [{4}]
-default.invalid.max.message=Attributet [{0}] för klassen [{1}] med värde [{2}] överskrider maxvärdet [{3}]
-default.invalid.min.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är mindre än minimivärdet [{3}]
-default.invalid.max.size.message=Attributet [{0}] för klassen [{1}] med värde [{2}] överskrider maxstorleken [{3}]
-default.invalid.min.size.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är mindre än minimistorleken [{3}]
-default.invalid.validator.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte giltigt enligt anpassad regel
-default.not.inlist.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte giltigt, måste vara ett av [{3}]
-default.blank.message=Attributet [{0}] för klassen [{1}] får inte vara tomt
-default.not.equal.message=Attributet [{0}] för klassen [{1}] med värde [{2}] får inte vara lika med [{3}]
-default.null.message=Attributet [{0}] för klassen [{1}] får inte vara tomt
-default.not.unique.message=Attributet [{0}] för klassen [{1}] med värde [{2}] måste vara unikt
-
-default.paginate.prev=Föregående
-default.paginate.next=Nästa
-default.boolean.true=Sant
-default.boolean.false=Falskt
-default.date.format=yyyy-MM-dd HH:mm:ss z
-default.number.format=0
-
-default.created.message={0} {1} skapades
-default.updated.message={0} {1} uppdaterades
-default.deleted.message={0} {1} borttagen
-default.not.deleted.message={0} {1} kunde inte tas bort
-default.not.found.message={0} med id {1} kunde inte hittas
-default.optimistic.locking.failure=En annan användare har uppdaterat det här {0} objektet medan du redigerade det
-
-default.home.label=Hem
-default.list.label= {0} - Lista
-default.add.label=Lägg till {0}
-default.new.label=Skapa {0}
-default.create.label=Skapa {0}
-default.show.label=Visa {0}
-default.edit.label=Ändra {0}
-
-default.button.create.label=Skapa
-default.button.edit.label=Ändra
-default.button.update.label=Uppdatera
-default.button.delete.label=Ta bort
-default.button.delete.confirm.message=Är du säker?
-
-# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
-typeMismatch.java.net.URL=Värdet för {0} måste vara en giltig URL
-typeMismatch.java.net.URI=Värdet för {0} måste vara en giltig URI
-typeMismatch.java.util.Date=Värdet {0} måste vara ett giltigt datum
-typeMismatch.java.lang.Double=Värdet {0} måste vara ett giltigt nummer
-typeMismatch.java.lang.Integer=Värdet {0} måste vara ett giltigt heltal
-typeMismatch.java.lang.Long=Värdet {0} måste vara ett giltigt heltal
-typeMismatch.java.lang.Short=Värdet {0} måste vara ett giltigt heltal
-typeMismatch.java.math.BigDecimal=Värdet {0} måste vara ett giltigt nummer
-typeMismatch.java.math.BigInteger=Värdet {0} måste vara ett giltigt heltal
\ No newline at end of file
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_th.properties b/profiles/base/skeleton/grails-app/i18n/messages_th.properties
deleted file mode 100644
index fd0dbb6..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_th.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-default.doesnt.match.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบที่กำหนดไว้ใน [{3}]
-default.invalid.url.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบ URL
-default.invalid.creditCard.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบหมายเลขบัตรเครดิต
-default.invalid.email.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบอีเมล์
-default.invalid.range.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้มีค่าที่ถูกต้องในช่วงจาก [{3}] ถึง [{4}]
-default.invalid.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้มีขนาดที่ถูกต้องในช่วงจาก [{3}] ถึง [{4}]
-default.invalid.max.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีค่าเกิดกว่าค่ามากสุด [{3}]
-default.invalid.min.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีค่าน้อยกว่าค่าต่ำสุด [{3}]
-default.invalid.max.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีขนาดเกินกว่าขนาดมากสุดของ [{3}]
-default.invalid.min.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีขนาดต่ำกว่าขนาดต่ำสุดของ [{3}]
-default.invalid.validator.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ผ่านการทวนสอบค่าที่ตั้งขึ้น
-default.not.inlist.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้อยู่ในรายการต่อไปนี้ [{3}]
-default.blank.message=คุณสมบัติ [{0}] ของคลาส [{1}] ไม่สามารถเป็นค่าว่างได้
-default.not.equal.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่สามารถเท่ากับ [{3}] ได้
-default.null.message=คุณสมบัติ [{0}] ของคลาส [{1}] ไม่สามารถเป็น null ได้
-default.not.unique.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] จะต้องไม่ซ้ำ (unique)
-
-default.paginate.prev=ก่อนหน้า
-default.paginate.next=ถัดไป
-default.boolean.true=จริง
-default.boolean.false=เท็จ
-default.date.format=dd-MM-yyyy HH:mm:ss z
-default.number.format=0
-
-default.created.message=สร้าง {0} {1} เรียบร้อยแล้ว
-default.updated.message=ปรับปรุง {0} {1} เรียบร้อยแล้ว
-default.deleted.message=ลบ {0} {1} เรียบร้อยแล้ว
-default.not.deleted.message=ไม่สามารถลบ {0} {1}
-default.not.found.message=ไม่พบ {0} ด้วย id {1} นี้
-default.optimistic.locking.failure=มีผู้ใช้ท่านอื่นปรับปรุง {0} ขณะที่คุณกำลังแก้ไขข้อมูลอยู่
-
-default.home.label=หน้าแรก
-default.list.label=รายการ {0}
-default.add.label=เพิ่ม {0}
-default.new.label=สร้าง {0} ใหม่
-default.create.label=สร้าง {0}
-default.show.label=แสดง {0}
-default.edit.label=แก้ไข {0}
-
-default.button.create.label=สร้าง
-default.button.edit.label=แก้ไข
-default.button.update.label=ปรับปรุง
-default.button.delete.label=ลบ
-default.button.delete.confirm.message=คุณแน่ใจหรือไม่ ?
-
-# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
-typeMismatch.java.net.URL=คุณสมบัติ '{0}' จะต้องเป็นค่า URL ที่ถูกต้อง
-typeMismatch.java.net.URI=คุณสมบัติ '{0}' จะต้องเป็นค่า URI ที่ถูกต้อง
-typeMismatch.java.util.Date=คุณสมบัติ '{0}' จะต้องมีค่าเป็นวันที่
-typeMismatch.java.lang.Double=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Double
-typeMismatch.java.lang.Integer=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Integer
-typeMismatch.java.lang.Long=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Long
-typeMismatch.java.lang.Short=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Short
-typeMismatch.java.math.BigDecimal=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท BigDecimal
-typeMismatch.java.math.BigInteger=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท BigInteger
diff --git a/profiles/base/skeleton/grails-app/i18n/messages_zh_CN.properties b/profiles/base/skeleton/grails-app/i18n/messages_zh_CN.properties
deleted file mode 100644
index b89bc93..0000000
--- a/profiles/base/skeleton/grails-app/i18n/messages_zh_CN.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-default.blank.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3A\u7A7A
-default.doesnt.match.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E\u5B9A\u4E49\u7684\u6A21\u5F0F [{3}]\u4E0D\u5339\u914D
-default.invalid.creditCard.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u4FE1\u7528\u5361\u53F7
-default.invalid.email.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u5408\u6CD5\u7684\u7535\u5B50\u90AE\u4EF6\u5730\u5740
-default.invalid.max.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5927\u503C [{3}]\u8FD8\u5927
-default.invalid.max.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u6BD4\u6700\u5927\u503C [{3}]\u8FD8\u5927
-default.invalid.min.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5C0F\u503C [{3}]\u8FD8\u5C0F
-default.invalid.min.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u6BD4\u6700\u5C0F\u503C [{3}]\u8FD8\u5C0F
-default.invalid.range.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5408\u6CD5\u7684\u8303\u56F4\u5185( [{3}] \uFF5E [{4}] )
-default.invalid.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u4E0D\u5728\u5408\u6CD5\u7684\u8303\u56F4\u5185( [{3}] \uFF5E [{4}] )
-default.invalid.url.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u5408\u6CD5\u7684URL
-default.invalid.validator.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u672A\u80FD\u901A\u8FC7\u81EA\u5B9A\u4E49\u7684\u9A8C\u8BC1
-default.not.equal.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E[{3}]\u4E0D\u76F8\u7B49
-default.not.inlist.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5217\u8868\u7684\u53D6\u503C\u8303\u56F4\u5185
-default.not.unique.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u5FC5\u987B\u662F\u552F\u4E00\u7684
-default.null.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3Anull
-default.paginate.next=\u4E0B\u9875
-default.paginate.prev=\u4E0A\u9875
diff --git a/profiles/base/skeleton/grails-app/init/@grails.codegen.defaultPackage.path@/Application.groovy b/profiles/base/skeleton/grails-app/init/@grails.codegen.defaultPackage.path@/Application.groovy
deleted file mode 100644
index 65af938..0000000
--- a/profiles/base/skeleton/grails-app/init/@grails.codegen.defaultPackage.path@/Application.groovy
+++ /dev/null
@@ -1,10 +0,0 @@
-package @grails.codegen.defaultPackage@
-
-import grails.boot.GrailsApp
-import grails.boot.config.GrailsAutoConfiguration
-
-class Application extends GrailsAutoConfiguration {
- static void main(String[] args) {
- GrailsApp.run(Application, args)
- }
-}
\ No newline at end of file
diff --git a/profiles/base/skeleton/grails-app/init/BootStrap.groovy b/profiles/base/skeleton/grails-app/init/BootStrap.groovy
deleted file mode 100644
index 1287dae..0000000
--- a/profiles/base/skeleton/grails-app/init/BootStrap.groovy
+++ /dev/null
@@ -1,7 +0,0 @@
-class BootStrap {
-
- def init = { servletContext ->
- }
- def destroy = {
- }
-}
diff --git a/profiles/base/skeleton/src/integration-test/groovy/.gitkeep b/profiles/base/skeleton/src/integration-test/groovy/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/base/skeleton/src/main/groovy/.gitkeep b/profiles/base/skeleton/src/main/groovy/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/base/skeleton/src/test/groovy/.gitkeep b/profiles/base/skeleton/src/test/groovy/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/base/templates/artifacts/DomainClass.groovy b/profiles/base/templates/artifacts/DomainClass.groovy
deleted file mode 100644
index fd6bd90..0000000
--- a/profiles/base/templates/artifacts/DomainClass.groovy
+++ /dev/null
@@ -1,6 +0,0 @@
-@artifact.package@
-class @artifact.name@ {
-
- static constraints = {
- }
-}
diff --git a/profiles/base/templates/artifacts/Script.groovy b/profiles/base/templates/artifacts/Script.groovy
deleted file mode 100644
index 856b6ef..0000000
--- a/profiles/base/templates/artifacts/Script.groovy
+++ /dev/null
@@ -1,3 +0,0 @@
-description "Example description", "grails example-usage"
-
-println "Example Script"
\ No newline at end of file
diff --git a/profiles/base/templates/artifacts/Service.groovy b/profiles/base/templates/artifacts/Service.groovy
deleted file mode 100644
index 9685f27..0000000
--- a/profiles/base/templates/artifacts/Service.groovy
+++ /dev/null
@@ -1,10 +0,0 @@
-@artifact.package@
-import grails.transaction.Transactional
-
-@Transactional
-class @artifact.name@Service {
-
- def serviceMethod() {
-
- }
-}
diff --git a/profiles/base/templates/testing/DomainClass.groovy b/profiles/base/templates/testing/DomainClass.groovy
deleted file mode 100644
index 7b72b9b..0000000
--- a/profiles/base/templates/testing/DomainClass.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-@artifact.package@
-import grails.test.mixin.TestFor
-import spock.lang.Specification
-
-/**
- * See the API for {@link grails.test.mixin.domain.DomainClassUnitTestMixin} for usage instructions
- */
-@TestFor(@artifact.name@)
-class @artifact.name@Spec extends Specification {
-
- def setup() {
- }
-
- def cleanup() {
- }
-
- void "test something"() {
- expect:"fix me"
- true == false
- }
-}
diff --git a/profiles/base/templates/testing/Generic.groovy b/profiles/base/templates/testing/Generic.groovy
deleted file mode 100644
index 7802047..0000000
--- a/profiles/base/templates/testing/Generic.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-@artifact.package@
-import grails.test.mixin.TestMixin
-import grails.test.mixin.support.GrailsUnitTestMixin
-import spock.lang.*
-
-/**
- * See the API for {@link grails.test.mixin.support.GrailsUnitTestMixin} for usage instructions
- */
-@TestMixin(GrailsUnitTestMixin)
-class @artifact.name@Spec extends Specification {
-
- def setup() {
- }
-
- def cleanup() {
- }
-
- void "test something"() {
- expect:"fix me"
- true == false
- }
-}
\ No newline at end of file
diff --git a/profiles/base/templates/testing/Service.groovy b/profiles/base/templates/testing/Service.groovy
deleted file mode 100644
index 8fd7b9d..0000000
--- a/profiles/base/templates/testing/Service.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-@artifact.package@
-import grails.test.mixin.TestFor
-import spock.lang.Specification
-
-/**
- * See the API for {@link grails.test.mixin.services.ServiceUnitTestMixin} for usage instructions
- */
-@TestFor(@artifact.name@Service)
-class @artifact.name@ServiceSpec extends Specification {
-
- def setup() {
- }
-
- def cleanup() {
- }
-
- void "test something"() {
- expect:"fix me"
- true == false
- }
-}
diff --git a/profiles/base/templates/testing/UnitTest.groovy b/profiles/base/templates/testing/UnitTest.groovy
deleted file mode 100644
index f04a234..0000000
--- a/profiles/base/templates/testing/UnitTest.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-@artifact.package@
-import grails.test.mixin.TestMixin
-import grails.test.mixin.support.GrailsUnitTestMixin
-import spock.lang.Specification
-
-/**
- * See the API for {@link grails.test.mixin.support.GrailsUnitTestMixin} for usage instructions
- */
-@TestMixin(GrailsUnitTestMixin)
-class @artifact.name@Spec extends Specification {
-
- def setup() {
- }
-
- def cleanup() {
- }
-
- void "test something"() {
- expect:"fix me"
- true == false
- }
-}
diff --git a/profiles/build.gradle b/profiles/build.gradle
deleted file mode 100644
index 7b7e5bb..0000000
--- a/profiles/build.gradle
+++ /dev/null
@@ -1,37 +0,0 @@
-buildscript {
- repositories {
- mavenLocal()
- maven { url "https://repo.grails.org/grails/core" }
- }
- dependencies {
- classpath "org.grails:grails-gradle-plugin:$grailsVersion"
- }
-}
-
-allprojects {
- apply plugin: "idea"
-}
-
-subprojects {
- apply plugin: "org.grails.grails-profile"
- apply plugin: "org.grails.grails-profile-publish"
-
- group 'org.grails.profiles'
- version project.grailsVersion
-
- grailsPublish {
- userOrg = 'grails'
- githubSlug = 'grails/grails-profile-repository'
- license = 'Apache-2.0'
- title = "Grails Profiles"
- desc = "A collection of profiles that extend Grails and provide additional development environment functionality"
- developers = [graemerocher:'Graeme Rocher']
- }
-
- bintray {
- pkg {
- desc = "Grails Core Profiles"
- name = 'grails-core'
- }
- }
-}
diff --git a/profiles/gradle.properties b/profiles/gradle.properties
deleted file mode 100644
index a5e4697..0000000
--- a/profiles/gradle.properties
+++ /dev/null
@@ -1 +0,0 @@
-grailsVersion=3.2.0.M2
diff --git a/profiles/gradle/wrapper/gradle-wrapper.jar b/profiles/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 9411448..0000000
Binary files a/profiles/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/profiles/gradle/wrapper/gradle-wrapper.properties b/profiles/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 8d130c8..0000000
--- a/profiles/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Fri Nov 27 23:09:32 CET 2015
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-bin.zip
diff --git a/profiles/gradlew b/profiles/gradlew
deleted file mode 100755
index 9d82f78..0000000
--- a/profiles/gradlew
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
- echo "$*"
-}
-
-die ( ) {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
-esac
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/profiles/gradlew.bat b/profiles/gradlew.bat
deleted file mode 100644
index 8a0b282..0000000
--- a/profiles/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/profiles/plugin/build.gradle b/profiles/plugin/build.gradle
deleted file mode 100644
index 4a8b48c..0000000
--- a/profiles/plugin/build.gradle
+++ /dev/null
@@ -1,3 +0,0 @@
-dependencies {
- runtime project(":base")
-}
\ No newline at end of file
diff --git a/profiles/plugin/commands/create-command.yml b/profiles/plugin/commands/create-command.yml
deleted file mode 100644
index 00ebf46..0000000
--- a/profiles/plugin/commands/create-command.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description:
- - Creates an Application Command
- - usage: 'create-command [Command Name]'
- - argument: Command Name
- description: The name of the command
- - flag: force
- description: Whether to override existing files
-steps:
- - command: render
- template: templates/artifacts/Command.groovy
- destination: grails-app/commands/@artifact.package.path@/@artifact.name@Command.groovy
- convention: Command
diff --git a/profiles/plugin/commands/package-plugin.yml b/profiles/plugin/commands/package-plugin.yml
deleted file mode 100644
index cef663d..0000000
--- a/profiles/plugin/commands/package-plugin.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: Packages the plugin into a JAR file
-minArguments: 0
-usage: |
- package-plugin
-steps:
- - command: gradle
- tasks:
- - jar
diff --git a/profiles/plugin/commands/publish-plugin.yml b/profiles/plugin/commands/publish-plugin.yml
deleted file mode 100644
index 77be903..0000000
--- a/profiles/plugin/commands/publish-plugin.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: Publishes the plugin to the Grails central repository
-minArguments: 0
-usage: |
- publish-plugin
-steps:
- - command: gradle
- tasks:
- - publish
diff --git a/profiles/plugin/features/asset-pipeline-plugin/feature.yml b/profiles/plugin/features/asset-pipeline-plugin/feature.yml
deleted file mode 100644
index 932fa0d..0000000
--- a/profiles/plugin/features/asset-pipeline-plugin/feature.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: Adds Asset Pipeline to a Grails Plugin for packaging
-build:
- plugins:
- - asset-pipeline
-dependencies:
- build:
- - 'com.bertramlabs.plugins:asset-pipeline-gradle:2.8.2'
- runtime:
- - "com.bertramlabs.plugins:asset-pipeline-grails:2.8.2"
diff --git a/profiles/plugin/features/asset-pipeline-plugin/skeleton/build.gradle b/profiles/plugin/features/asset-pipeline-plugin/skeleton/build.gradle
deleted file mode 100644
index 5263525..0000000
--- a/profiles/plugin/features/asset-pipeline-plugin/skeleton/build.gradle
+++ /dev/null
@@ -1,4 +0,0 @@
-
-assets {
- packagePlugin = true
-}
diff --git a/profiles/plugin/profile.yml b/profiles/plugin/profile.yml
deleted file mode 100644
index efb08ff..0000000
--- a/profiles/plugin/profile.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: Profile for plugins designed to work across all profiles
-build:
- plugins:
- - org.grails.grails-plugin
- - org.grails.grails-plugin-publish
- excludes:
- - org.grails.grails-core
-dependencies:
- provided:
- - "org.grails:grails-plugin-services"
- - "org.grails:grails-plugin-domain-class"
- testCompile:
- - "org.grails:grails-plugin-testing"
-
-
diff --git a/profiles/plugin/skeleton/.gitignore b/profiles/plugin/skeleton/.gitignore
deleted file mode 100644
index 907e073..0000000
--- a/profiles/plugin/skeleton/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-.DS_Store
-/build
-/.gradle
-*.log
-cobertura.ser
-*.idea/**
-*.iml
-*.ipr
-*.iws
-.classpath
-.project
-.settings/
-bin/
\ No newline at end of file
diff --git a/profiles/plugin/skeleton/.gitkeep b/profiles/plugin/skeleton/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/plugin/skeleton/build.gradle b/profiles/plugin/skeleton/build.gradle
deleted file mode 100644
index 7b1e99c..0000000
--- a/profiles/plugin/skeleton/build.gradle
+++ /dev/null
@@ -1,14 +0,0 @@
-grailsPublish {
- // TODO: Provide values here
- user = 'user'
- key = 'key'
- githubSlug = 'foo/bar'
- license {
- name = 'Apache-2.0'
- }
- title = "My Plugin"
- desc = "Full plugin description"
- developers = [johndoe:"John Doe"]
- portalUser = ""
- portalPassword = ""
-}
diff --git a/profiles/plugin/skeleton/grails-app/.gitkeep b/profiles/plugin/skeleton/grails-app/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/plugin/skeleton/grails-app/controllers/.gitkeep b/profiles/plugin/skeleton/grails-app/controllers/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/plugin/skeleton/grails-app/domain/.gitkeep b/profiles/plugin/skeleton/grails-app/domain/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/plugin/skeleton/grails-app/i18n/.gitkeep b/profiles/plugin/skeleton/grails-app/i18n/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/plugin/skeleton/grails-app/init/@grails.codegen.defaultPackage.path@/Application.groovy b/profiles/plugin/skeleton/grails-app/init/@grails.codegen.defaultPackage.path@/Application.groovy
deleted file mode 100644
index 08c9b83..0000000
--- a/profiles/plugin/skeleton/grails-app/init/@grails.codegen.defaultPackage.path@/Application.groovy
+++ /dev/null
@@ -1,12 +0,0 @@
-package @grails.codegen.defaultPackage@
-
-import grails.boot.*
-import grails.boot.config.GrailsAutoConfiguration
-import grails.plugins.metadata.*
-
-@PluginSource
-class Application extends GrailsAutoConfiguration {
- static void main(String[] args) {
- GrailsApp.run(Application, args)
- }
-}
\ No newline at end of file
diff --git a/profiles/plugin/skeleton/grails-app/services/.gitkeep b/profiles/plugin/skeleton/grails-app/services/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/plugin/skeleton/grails-app/taglib/.gitkeep b/profiles/plugin/skeleton/grails-app/taglib/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/plugin/skeleton/src/main/groovy/.gitkeep b/profiles/plugin/skeleton/src/main/groovy/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/plugin/skeleton/src/main/groovy/@grails.codegen.defaultPackage.path@/@grails.codegen.projectClassName@GrailsPlugin.groovy b/profiles/plugin/skeleton/src/main/groovy/@grails.codegen.defaultPackage.path@/@grails.codegen.projectClassName@GrailsPlugin.groovy
deleted file mode 100644
index 5cadc03..0000000
--- a/profiles/plugin/skeleton/src/main/groovy/@grails.codegen.defaultPackage.path@/@grails.codegen.projectClassName@GrailsPlugin.groovy
+++ /dev/null
@@ -1,69 +0,0 @@
-package @grails.codegen.defaultPackage@
-
-import grails.plugins.*
-
-class @grails.codegen.projectClassName@GrailsPlugin extends Plugin {
-
- // the version or versions of Grails the plugin is designed for
- def grailsVersion = "@grails.version@ > *"
- // resources that are excluded from plugin packaging
- def pluginExcludes = [
- "grails-app/views/error.gsp"
- ]
-
- // TODO Fill in these fields
- def title = "@grails.codegen.projectNaturalName@" // Headline display name of the plugin
- def author = "Your name"
- def authorEmail = ""
- def description = '''\
-Brief summary/description of the plugin.
-'''
-
- // URL to the plugin's documentation
- def documentation = "http://grails.org/plugin/@grails.codegen.projectName@"
-
- // Extra (optional) plugin metadata
-
- // License: one of 'APACHE', 'GPL2', 'GPL3'
-// def license = "APACHE"
-
- // Details of company behind the plugin (if there is one)
-// def organization = [ name: "My Company", url: "http://www.my-company.com/" ]
-
- // Any additional developers beyond the author specified above.
-// def developers = [ [ name: "Joe Bloggs", email: "joe@bloggs.net" ]]
-
- // Location of the plugin's issue tracker.
-// def issueManagement = [ system: "JIRA", url: "http://jira.grails.org/browse/GPMYPLUGIN" ]
-
- // Online location of the plugin's browseable source code.
-// def scm = [ url: "http://svn.codehaus.org/grails-plugins/" ]
-
- Closure doWithSpring() { {->
- // TODO Implement runtime spring config (optional)
- }
- }
-
- void doWithDynamicMethods() {
- // TODO Implement registering dynamic methods to classes (optional)
- }
-
- void doWithApplicationContext() {
- // TODO Implement post initialization spring config (optional)
- }
-
- void onChange(Map event) {
- // TODO Implement code that is executed when any artefact that this plugin is
- // watching is modified and reloaded. The event contains: event.source,
- // event.application, event.manager, event.ctx, and event.plugin.
- }
-
- void onConfigChange(Map event) {
- // TODO Implement code that is executed when the project configuration changes.
- // The event is the same as for 'onChange'.
- }
-
- void onShutdown(Map event) {
- // TODO Implement code that is executed when the application shuts down (optional)
- }
-}
diff --git a/profiles/plugin/skeleton/src/test/groovy/.gitkeep b/profiles/plugin/skeleton/src/test/groovy/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/plugin/templates/Plugin.groovy b/profiles/plugin/templates/Plugin.groovy
deleted file mode 100644
index c6aba9e..0000000
--- a/profiles/plugin/templates/Plugin.groovy
+++ /dev/null
@@ -1,72 +0,0 @@
-@artifact.package@
-
-class @artifact.name@GrailsPlugin {
-
- // the plugin version
- def version = "@plugin.version@"
- // the version or versions of Grails the plugin is designed for
- def grailsVersion = "@grails.version@ > *"
- // resources that are excluded from plugin packaging
- def pluginExcludes = [
- "grails-app/views/error.gsp"
- ]
-
- // TODO Fill in these fields
- def title = "@plugin.title@" // Headline display name of the plugin
- def author = "Your name"
- def authorEmail = ""
- def description = '''\
-Brief summary/description of the plugin.
-'''
-
- // URL to the plugin's documentation
- def documentation = "http://grails.org/plugin/@plugin.short.name@"
-
- // Extra (optional) plugin metadata
-
- // License: one of 'APACHE', 'GPL2', 'GPL3'
-// def license = "APACHE"
-
- // Details of company behind the plugin (if there is one)
-// def organization = [ name: "My Company", url: "http://www.my-company.com/" ]
-
- // Any additional developers beyond the author specified above.
-// def developers = [ [ name: "Joe Bloggs", email: "joe@bloggs.net" ]]
-
- // Location of the plugin's issue tracker.
-// def issueManagement = [ system: "JIRA", url: "http://jira.grails.org/browse/GPMYPLUGIN" ]
-
- // Online location of the plugin's browseable source code.
-// def scm = [ url: "http://svn.codehaus.org/grails-plugins/" ]
-
- def doWithWebDescriptor = { xml ->
- // TODO Implement additions to web.xml (optional), this event occurs before
- }
-
- def doWithSpring = {
- // TODO Implement runtime spring config (optional)
- }
-
- def doWithDynamicMethods = { ctx ->
- // TODO Implement registering dynamic methods to classes (optional)
- }
-
- def doWithApplicationContext = { ctx ->
- // TODO Implement post initialization spring config (optional)
- }
-
- def onChange = { event ->
- // TODO Implement code that is executed when any artefact that this plugin is
- // watching is modified and reloaded. The event contains: event.source,
- // event.application, event.manager, event.ctx, and event.plugin.
- }
-
- def onConfigChange = { event ->
- // TODO Implement code that is executed when the project configuration changes.
- // The event is the same as for 'onChange'.
- }
-
- def onShutdown = { event ->
- // TODO Implement code that is executed when the application shuts down (optional)
- }
-}
diff --git a/profiles/plugin/templates/artifacts/Command.groovy b/profiles/plugin/templates/artifacts/Command.groovy
deleted file mode 100644
index a30737e..0000000
--- a/profiles/plugin/templates/artifacts/Command.groovy
+++ /dev/null
@@ -1,10 +0,0 @@
-@artifact.package@
-
-import grails.dev.commands.*
-
-class @artifact.name@Command implements ApplicationCommand {
-
- boolean handle(ExecutionContext ctx) {
- return false
- }
-}
diff --git a/profiles/plugin/templates/bintrayPublishing.gradle b/profiles/plugin/templates/bintrayPublishing.gradle
deleted file mode 100644
index a9741c8..0000000
--- a/profiles/plugin/templates/bintrayPublishing.gradle
+++ /dev/null
@@ -1,30 +0,0 @@
-bintray {
- user = System.getenv("BINTRAY_USER") ?: project.hasProperty("bintrayUser") ? project.bintrayUser : ''
- key = System.getenv("BINTRAY_KEY") ?: project.hasProperty("bintrayKey") ? project.bintrayKey : ''
- publications = ['maven']
- publish = true
- pkg {
- repo = project.hasProperty('repo') ? project.repo : 'plugins'
- userOrg = project.hasProperty('userOrg') ? project.userOrg : 'grails'
- name = "$project.name"
- desc = project.hasProperty('desc') ? project.desc : "Grails $project.name plugin"
- websiteUrl = project.hasProperty('websiteUrl') ? project.websiteUrl : "http://grails.org/plugin/$project.name"
- issueTrackerUrl = project.hasProperty('issueTrackerUrl') ? project.issueTrackerUrl : "https://github.com/grails3-plugins/$project.name/issues"
- vcsUrl = project.hasProperty('vcsUrl') ? project.vcsUrl : "https://github.com/grails3-plugins/$project.name"
- licenses = project.hasProperty('license') ? [project.license] : ['Apache-2.0']
- publicDownloadNumbers = true
- version {
- attributes = ['grails-plugin': "$project.group:$project.name"]
- name = project.version
- gpg {
- sign = false
- passphrase = System.getenv("SIGNING_PASSPHRASE") ?: project.hasProperty("signingPassphrase") ? project.signingPassphrase : ''
- }
- mavenCentralSync {
- sync = false
- user = System.getenv("SONATYPE_USERNAME") ?: project.hasProperty("sonatypeOssUsername") ? project.sonatypeOssUsername : ''
- password = System.getenv("SONATYPE_PASSWORD") ?: project.hasProperty("sonatypeOssPassword") ? project.sonatypeOssPassword : ''
- }
- }
- }
-}
diff --git a/profiles/plugin/templates/grailsCentralPublishing.gradle b/profiles/plugin/templates/grailsCentralPublishing.gradle
deleted file mode 100644
index e9f5c8c..0000000
--- a/profiles/plugin/templates/grailsCentralPublishing.gradle
+++ /dev/null
@@ -1,41 +0,0 @@
-publishing {
- publications {
- maven(MavenPublication) {
- pom.withXml {
- def pomNode = asNode()
- pomNode.dependencyManagement.replaceNode {}
-
- // simply remove dependencies without a version
- // version-less dependencies are handled with dependencyManagement
- // see https://github.com/spring-gradle-plugins/dependency-management-plugin/issues/8 for more complete solutions
- pomNode.dependencies.dependency.findAll {
- it.version.text().isEmpty()
- }.each {
- it.replaceNode {}
- }
- }
- artifactId project.name
- from components.java
- artifact sourcesJar
- artifact javadocJar
- artifact source:"${sourceSets.main.output.classesDir}/META-INF/grails-plugin.xml",
- classifier:"plugin",
- extension:'xml'
- }
- }
-
- repositories {
- maven {
- credentials {
- username System.getenv('GRAILS_CENTRAL_USERNAME') ?: project.properties.get('grailsPluginsUsername')
- password System.getenv("GRAILS_CENTRAL_PASSWORD") ?: project.properties.get('grailsPluginsPassword')
- }
-
- if(version.endsWith('-SNAPSHOT')) {
- url "https://repo.grails.org/grails/plugins3-snapshots-local"
- }
- }
- }
-}
-
-task install(dependsOn: project.tasks.withType(PublishToMavenLocal))
diff --git a/profiles/profile/commands/create-command.groovy b/profiles/profile/commands/create-command.groovy
deleted file mode 100644
index 45f3043..0000000
--- a/profiles/profile/commands/create-command.groovy
+++ /dev/null
@@ -1,18 +0,0 @@
-description( "Creates a new command for the profile" ) {
- usage "grails create-command [COMMAND NAME]"
- argument name:'Command Name', description:"The name of the command", required:true
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-if(args) {
- def scriptName = GrailsNameUtils.getClassNameForLowerCaseHyphenSeparatedName(args[0])
- def model = model( scriptName )
- render template:'commands/Command.groovy',
- destination:file("commands/${model.lowerCaseName}.groovy"),
- model: model,
- overwrite: flag('force')
-
-}
-else {
- error "No command name specified"
-}
diff --git a/profiles/profile/commands/create-creator-command.groovy b/profiles/profile/commands/create-creator-command.groovy
deleted file mode 100644
index 09a1017..0000000
--- a/profiles/profile/commands/create-creator-command.groovy
+++ /dev/null
@@ -1,30 +0,0 @@
-description( "Creates a new create-* command for the profile" ) {
- usage """grails create-creator-command [Command Name] [Target Dir] [Convention]
-
-Example: grails create-creator-command Controller controllers"""
- argument name:'Command Name', description:"The name of the command", required:true
- argument name:'Target Directory', description:"The target directory", required:true
- argument name:'Convention', description:"The convention to use for file names, defaults to command name", required:false
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-if(args) {
- def scriptName = GrailsNameUtils.getClassNameForLowerCaseHyphenSeparatedName(args[0])
- def model = model( scriptName ).asMap()
- model.put('targetDirectory', args[1])
- model.put('convention', args.size() == 3 ? args[2] : model.simpleName)
-
-
- render template:'commands/CreatorCommand.groovy',
- destination:file("commands/create-${model.lowerCaseName}.groovy"),
- model: model,
- overwrite: flag('force')
-
- render template:'templates/GeneratorTemplate.groovy',
- destination:file("templates/${args[1]}/${model.simpleName}.groovy"),
- model: model,
- overwrite: flag('force')
-}
-else {
- error "No command name specified"
-}
diff --git a/profiles/profile/commands/create-feature.groovy b/profiles/profile/commands/create-feature.groovy
deleted file mode 100644
index 66eaec6..0000000
--- a/profiles/profile/commands/create-feature.groovy
+++ /dev/null
@@ -1,27 +0,0 @@
-description( "Creates a new profile feature" ) {
- usage "grails create-feature [Feature Name NAME]"
- argument name:'Feature Name', description:"The name of the feature", required:true
-}
-
-if(args) {
- def fn = args[0].trim()
- def dir = file("features/${fn}").canonicalPath
- render( '''
-# customize configuration here
-# my:
-# setting: true
-#''', file("features/${fn}/skeleton/grails-app/conf/application.yml"))
-
- render( '''
-description: Description of the feature
-# customize versions here
-# dependencies:
-# compile:
-# - "org.grails.plugins:myplugin:1.0"
-#''', file("features/${fn}/feature.yml") )
-
- console.addStatus "Feature created at ${projectPath(dir)}"
-}
-else {
- error "No command name specified"
-}
diff --git a/profiles/profile/commands/create-generator-command.groovy b/profiles/profile/commands/create-generator-command.groovy
deleted file mode 100644
index 8c9315f..0000000
--- a/profiles/profile/commands/create-generator-command.groovy
+++ /dev/null
@@ -1,30 +0,0 @@
-description( "Creates a new generate-* command for the profile" ) {
- usage """grails create-generator-command [Command Name] [Target Dir] [Convention]
-
-Example: grails create-generator-command Controller controllers"""
- argument name:'Command Name', description:"The name of the command", required:true
- argument name:'Target Directory', description:"The target directory", required:true
- argument name:'Convention', description:"The convention to use for file names, defaults to command name", required:false
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-if(args) {
- def scriptName = GrailsNameUtils.getClassNameForLowerCaseHyphenSeparatedName(args[0])
- def model = model( scriptName ).asMap()
- model.put('targetDirectory', args[1])
- model.put('convention', args.size() == 3 ? args[2] : model.simpleName)
-
-
- render template:'commands/GeneratorCommand.groovy',
- destination:file("commands/generate-${model.lowerCaseName}.groovy"),
- model: model,
- overwrite: flag('force')
-
- render template:'templates/GeneratorTemplate.groovy',
- destination:file("templates/${args[1]}/${model.simpleName}.groovy"),
- model: model,
- overwrite: flag('force')
-}
-else {
- error "No command name specified"
-}
diff --git a/profiles/profile/commands/create-gradle-command.groovy b/profiles/profile/commands/create-gradle-command.groovy
deleted file mode 100644
index 12d5818..0000000
--- a/profiles/profile/commands/create-gradle-command.groovy
+++ /dev/null
@@ -1,20 +0,0 @@
-description( "Creates a new command that invokes Gradle for the profile" ) {
- usage "grails create-gradle-command [COMMAND NAME]"
- argument name:'Command Name', description:"The name of the command", required:true
- argument name:'Task Name', description:"The name of Gradle the task", required:true
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-if(args) {
- def scriptName = GrailsNameUtils.getClassNameForLowerCaseHyphenSeparatedName(args[0])
- def model = model( scriptName ).asMap()
- model.taskName = args[1]
- render template:'commands/GradleCommand.groovy',
- destination:file("commands/${model.lowerCaseName}.groovy"),
- model: model,
- overwrite: flag('force')
-
-}
-else {
- error "No command name specified"
-}
diff --git a/profiles/profile/commands/create-template.groovy b/profiles/profile/commands/create-template.groovy
deleted file mode 100644
index d88ff43..0000000
--- a/profiles/profile/commands/create-template.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-description( "Creates a new template for the profile" ) {
- usage "grails create-template [Template Name]"
- argument name:'Template Name', description:"The name of the template", required:true
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-if(args) {
- def model = model( args[0] )
- render template:'templates/GeneratorTemplate.groovy',
- destination:file("templates/${model.packagePath}/${model.simpleName}.groovy"),
- model: model,
- overwrite: flag('force')
-
-}
-else {
- error "No command name specified"
-}
diff --git a/profiles/profile/profile.yml b/profiles/profile/profile.yml
deleted file mode 100644
index 5bcc965..0000000
--- a/profiles/profile/profile.yml
+++ /dev/null
@@ -1 +0,0 @@
-description: A profile for creating new Grails profiles
\ No newline at end of file
diff --git a/profiles/profile/skeleton/build.gradle b/profiles/profile/skeleton/build.gradle
deleted file mode 100644
index 8ad8f66..0000000
--- a/profiles/profile/skeleton/build.gradle
+++ /dev/null
@@ -1,37 +0,0 @@
-buildscript {
- repositories {
- mavenLocal()
- maven { url "https://repo.grails.org/grails/core" }
- }
- dependencies {
- classpath "org.grails:grails-gradle-plugin:${project.grailsVersion}"
- }
-}
-
-apply plugin: "org.grails.grails-profile"
-apply plugin: "org.grails.grails-profile-publish"
-
-group 'org.grails.profiles'
-version '1.0.0-SNAPSHOT'
-
-grailsPublish {
- // TODO: Provide values here
- user = 'user'
- key = 'key'
- githubSlug = 'foo/bar'
- license {
- name = 'Apache-2.0'
- }
- title = "My Profile"
- desc = "Full profile description"
- developers = [johndoe:"John Doe"]
-}
-
-repositories {
- mavenLocal()
- maven { url "https://repo.grails.org/grails/core" }
-}
-
-dependencies {
- runtime "org.grails.profiles:base:${project.grailsVersion}"
-}
diff --git a/profiles/profile/skeleton/commands/.gitkeep b/profiles/profile/skeleton/commands/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/profile/skeleton/gradle.properties b/profiles/profile/skeleton/gradle.properties
deleted file mode 100644
index 0928653..0000000
--- a/profiles/profile/skeleton/gradle.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-grailsVersion=@grails.version@
-gradleWrapperVersion=2.13
diff --git a/profiles/profile/skeleton/profile.yml b/profiles/profile/skeleton/profile.yml
deleted file mode 100644
index 7473ad6..0000000
--- a/profiles/profile/skeleton/profile.yml
+++ /dev/null
@@ -1 +0,0 @@
-description: TODO - Describe your profile
\ No newline at end of file
diff --git a/profiles/profile/skeleton/skeleton/grails-app/conf/application.yml b/profiles/profile/skeleton/skeleton/grails-app/conf/application.yml
deleted file mode 100644
index 8eebfe6..0000000
--- a/profiles/profile/skeleton/skeleton/grails-app/conf/application.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-# TODO: profile custom configuration
-foo:
- bar: mysetting
\ No newline at end of file
diff --git a/profiles/profile/skeleton/skeleton/grails-app/controllers/.gitkeep b/profiles/profile/skeleton/skeleton/grails-app/controllers/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/profile/skeleton/skeleton/grails-app/domain/.gitkeep b/profiles/profile/skeleton/skeleton/grails-app/domain/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/profile/skeleton/skeleton/grails-app/init/.gitkeep b/profiles/profile/skeleton/skeleton/grails-app/init/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/profile/skeleton/skeleton/grails-app/services/.gitkeep b/profiles/profile/skeleton/skeleton/grails-app/services/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/profile/skeleton/templates/.gitkeep b/profiles/profile/skeleton/templates/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/profile/templates/commands/Command.groovy b/profiles/profile/templates/commands/Command.groovy
deleted file mode 100644
index 7246432..0000000
--- a/profiles/profile/templates/commands/Command.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-description( "TODO: command description" ) {
- usage "grails ${lowerCaseName}"
-
- // TODO: populate arguments
- argument name:'arg1', description:"arg1 description", required:true
-
- // TODO: populate flags
- flag name:'flag1', description:"flag1 description"
-}
-
-if(args) {
- // TODO: implement command
-
-}
-else {
- error "No argument specified"
-}
diff --git a/profiles/profile/templates/commands/CreatorCommand.groovy b/profiles/profile/templates/commands/CreatorCommand.groovy
deleted file mode 100644
index 777a249..0000000
--- a/profiles/profile/templates/commands/CreatorCommand.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-import grails.util.*
-
-description( "Creates a ${simpleName}" ) {
- usage "grails create-${lowerCaseName} [NAME]"
- argument name:'${simpleName} Name', description:"The name of the ${simpleName} to create", required:true
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-def model = model(args[0])
-boolean overwrite = flag('force')
-
-render template: template('${targetDirectory}/${simpleName}.groovy'),
- destination: file("grails-app/${targetDirectory}/\${model.packagePath}/\${model.simpleName}.groovy"),
- model: model,
- overwrite: overwrite
diff --git a/profiles/profile/templates/commands/GeneratorCommand.groovy b/profiles/profile/templates/commands/GeneratorCommand.groovy
deleted file mode 100644
index e977e81..0000000
--- a/profiles/profile/templates/commands/GeneratorCommand.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-import org.grails.cli.interactive.completers.DomainClassCompleter
-
-description( "Generates a ${simpleName}" ) {
- usage "grails generate-${lowerCaseName} [DOMAIN CLASS]"
- argument name:'Domain Class', description:"The name of the domain class", required:true
- completer DomainClassCompleter
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-if(args) {
- def classNames = args
- if(args[0] == '*') {
- classNames = resources("file:grails-app/domain/**/*.groovy").collect { className(it) }
- }
- for(arg in classNames) {
- def sourceClass = source(arg)
- boolean overwrite = flag('force')
- if(sourceClass) {
- def model = model(sourceClass)
- render template: template('${targetDirectory}/${simpleName}.groovy'),
- destination: file("grails-app/${targetDirectory}/\${model.packagePath}/\${model.convention('${convention}')}.groovy"),
- model: model,
- overwrite: overwrite
-
- addStatus "Generation completed for \${projectPath(sourceClass)}"
- }
- else {
- error "Domain class not found for name \$arg"
- }
- }
-}
-else {
- error "No domain class specified"
-}
diff --git a/profiles/profile/templates/commands/GradleCommand.groovy b/profiles/profile/templates/commands/GradleCommand.groovy
deleted file mode 100644
index 2c56532..0000000
--- a/profiles/profile/templates/commands/GradleCommand.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-description( "TODO: command description" ) {
- usage "grails ${lowerCaseName}"
-
- // TODO: populate arguments
- argument name:'arg1', description:"arg1 description", required:true
-
- // TODO: populate flags
- flag name:'flag1', description:"flag1 description"
-}
-
-if(args) {
- // TODO: implement command
- gradle.${taskName}()
-}
-else {
- error "No argument specified"
-}
diff --git a/profiles/profile/templates/templates/GeneratorTemplate.groovy b/profiles/profile/templates/templates/GeneratorTemplate.groovy
deleted file mode 100644
index 2695874..0000000
--- a/profiles/profile/templates/templates/GeneratorTemplate.groovy
+++ /dev/null
@@ -1,5 +0,0 @@
-package \${packageName}
-
-class \${className} {
- // TODO: Implement template
-}
diff --git a/profiles/rest-api-plugin/build.gradle b/profiles/rest-api-plugin/build.gradle
deleted file mode 100644
index a8be9c6..0000000
--- a/profiles/rest-api-plugin/build.gradle
+++ /dev/null
@@ -1,4 +0,0 @@
-dependencies {
- runtime project(":plugin")
- runtime project(":rest-api")
-}
\ No newline at end of file
diff --git a/profiles/rest-api-plugin/profile.yml b/profiles/rest-api-plugin/profile.yml
deleted file mode 100644
index 5367606..0000000
--- a/profiles/rest-api-plugin/profile.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-description: Profile for REST API plugins
-skeleton:
- excludes:
- - grails-app/controllers/**/*.*
- - grails-app/views/**/*.*
- - grails-app/i18n/**/*.*
-features:
- defaults:
- - hibernate
- required:
- - json-views
-build:
- plugins:
- - org.grails.grails-plugin
- - org.grails.grails-plugin-publish
- excludes:
- - org.grails.grails-core
- - org.grails.grails-web
- - war
-dependencies:
- provided:
- - "org.springframework.boot:spring-boot-starter-tomcat"
- compile:
- - "org.grails:grails-plugin-url-mappings"
- - "org.grails:grails-plugin-rest"
- - "org.grails:grails-plugin-codecs"
- - "org.grails:grails-plugin-interceptors"
- - "org.grails:grails-plugin-services"
- - "org.grails:grails-plugin-datasource"
- - "org.grails:grails-plugin-databinding"
- - "org.grails:grails-plugin-async"
- - "org.grails:grails-web-boot"
- - "org.grails:grails-logging"
- testCompile:
- - "org.grails:grails-plugin-testing"
- - "org.grails.plugins:geb"
- - "org.grails:grails-datastore-rest-client"
- testRuntime:
- - 'org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1'
- - 'net.sourceforge.htmlunit:htmlunit:2.18'
-
-
-
-
diff --git a/profiles/rest-api-plugin/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/UrlMappings.groovy b/profiles/rest-api-plugin/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/UrlMappings.groovy
deleted file mode 100644
index 7e94293..0000000
--- a/profiles/rest-api-plugin/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/UrlMappings.groovy
+++ /dev/null
@@ -1,8 +0,0 @@
-package @grails.codegen.defaultPackage@
-
-class UrlMappings {
-
- static mappings = {
- // provide plugin url mappings here
- }
-}
diff --git a/profiles/rest-api/build.gradle b/profiles/rest-api/build.gradle
deleted file mode 100644
index 4a8b48c..0000000
--- a/profiles/rest-api/build.gradle
+++ /dev/null
@@ -1,3 +0,0 @@
-dependencies {
- runtime project(":base")
-}
\ No newline at end of file
diff --git a/profiles/rest-api/commands/create-controller.yml b/profiles/rest-api/commands/create-controller.yml
deleted file mode 100644
index a67d09c..0000000
--- a/profiles/rest-api/commands/create-controller.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description:
- - Creates a controller
- - usage: 'create-controller [controller name]'
- - completer: org.grails.cli.interactive.completers.DomainClassCompleter
- - argument: Controller Name
- description: The name of the controller
- - flag: force
- description: Whether to override existing files
-steps:
- - command: render
- template: templates/artifacts/Controller.groovy
- convention: Controller
- destination: grails-app/controllers/@artifact.package.path@/@artifact.name@Controller.groovy
- - command: render
- template: templates/testing/Controller.groovy
- convention: Controller
- destination: src/test/groovy/@artifact.package.path@/@artifact.name@ControllerSpec.groovy
- - command: mkdir
- location: grails-app/views/@artifact.propertyName@
diff --git a/profiles/rest-api/commands/create-domain-resource.yml b/profiles/rest-api/commands/create-domain-resource.yml
deleted file mode 100644
index 4d8a5af..0000000
--- a/profiles/rest-api/commands/create-domain-resource.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description:
- - Creates a domain class that represents a resource
- - usage: 'create-domain-resource [resource name]'
- - argument: Resource Name
- description: The name of the resource
- - flag: force
- description: Whether to override existing files
-steps:
- - command: render
- template: templates/artifacts/Resource.groovy
- destination: grails-app/domain/@artifact.package.path@/@artifact.name@.groovy
- - command: render
- template: templates/testing/Resource.groovy
- destination: src/test/groovy/@artifact.package.path@/@artifact.name@Spec.groovy
diff --git a/profiles/rest-api/commands/create-functional-test.yml b/profiles/rest-api/commands/create-functional-test.yml
deleted file mode 100644
index 4e4a5bf..0000000
--- a/profiles/rest-api/commands/create-functional-test.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description:
- - Creates an functional test
- - usage: 'create-functional-test [test name]'
- - completer: org.grails.cli.interactive.completers.AllClassCompleter
- - argument: "Functional Test Name"
- description: "The name of the functional test"
- - flag: force
- description: Whether to override existing files
-
-steps:
- - command: render
- template: templates/testing/Functional.groovy
- destination: src/integration-test/groovy/@artifact.package.path@/@artifact.name@Spec.groovy
diff --git a/profiles/rest-api/commands/create-integration-test.yml b/profiles/rest-api/commands/create-integration-test.yml
deleted file mode 100644
index 31a57ea..0000000
--- a/profiles/rest-api/commands/create-integration-test.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description:
- - Creates an integration test
- - usage: 'create-integration-test [test name]'
- - completer: org.grails.cli.interactive.completers.AllClassCompleter
- - argument: "Integration Test Name"
- description: "The name of the integration test"
- - flag: force
- description: Whether to override existing files
-
-steps:
- - command: render
- template: templates/testing/Integration.groovy
- destination: src/integration-test/groovy/@artifact.package.path@/@artifact.name@Spec.groovy
diff --git a/profiles/rest-api/commands/create-interceptor.yml b/profiles/rest-api/commands/create-interceptor.yml
deleted file mode 100644
index 616da5f..0000000
--- a/profiles/rest-api/commands/create-interceptor.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description:
- - Creates an interceptor
- - usage: 'create-interceptor [interceptor name]'
- - completer: org.grails.cli.interactive.completers.DomainClassCompleter
- - argument: "Interceptor name"
- description: "The name of the interceptor"
- - flag: force
- description: Whether to override existing files
-
-steps:
- - command: render
- template: templates/artifacts/Interceptor.groovy
- convention: Interceptor
- destination: grails-app/controllers/@artifact.package.path@/@artifact.name@Interceptor.groovy
- - command: render
- template: templates/testing/Interceptor.groovy
- convention: Interceptor
- destination: src/test/groovy/@artifact.package.path@/@artifact.name@InterceptorSpec.groovy
diff --git a/profiles/rest-api/commands/create-restful-controller.yml b/profiles/rest-api/commands/create-restful-controller.yml
deleted file mode 100644
index 5bc6c6c..0000000
--- a/profiles/rest-api/commands/create-restful-controller.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description:
- - Creates a REST controller
- - usage: 'create-restful-controller [controller name]'
- - completer: org.grails.cli.interactive.completers.DomainClassCompleter
- - argument: Domain Class
- description: The name of the domain class
- - flag: force
- description: Whether to override existing files
-steps:
- - command: render
- template: templates/artifacts/RestfulController.groovy
- convention: Controller
- destination: grails-app/controllers/@artifact.package.path@/@artifact.name@Controller.groovy
- # - command: render
- # template: templates/testing/Controller.groovy
- # convention: Controller
- # destination: src/test/groovy/@artifact.package.path@/@artifact.name@ControllerSpec.groovy
diff --git a/profiles/rest-api/commands/generate-all.groovy b/profiles/rest-api/commands/generate-all.groovy
deleted file mode 100644
index 2764fc1..0000000
--- a/profiles/rest-api/commands/generate-all.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-import org.grails.cli.interactive.completers.DomainClassCompleter
-
-description( "Generates a controller that performs REST operations" ) {
- usage "grails generate-resource-controller [DOMAIN CLASS]"
- argument name:'Domain Class', description:"The name of the domain class", required:true
- completer DomainClassCompleter
- synonyms 'generate-resource-controller'
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-if(args) {
- generateController(*args)
- generateViews(*args)
- generateUnitTest(*args)
- generateFunctionalTest(*args)
-}
-else {
- error "No domain class specified"
-}
diff --git a/profiles/rest-api/commands/generate-controller.groovy b/profiles/rest-api/commands/generate-controller.groovy
deleted file mode 100644
index 913bf58..0000000
--- a/profiles/rest-api/commands/generate-controller.groovy
+++ /dev/null
@@ -1,35 +0,0 @@
-import org.grails.cli.interactive.completers.DomainClassCompleter
-
-description( "Generates a controller that performs REST operations" ) {
- usage "grails generate-controller [DOMAIN CLASS]"
- argument name:'Domain Class', description:"The name of the domain class", required:true
- completer DomainClassCompleter
- synonyms 'generate-resource-controller'
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-if(args) {
- def classNames = args
- if(args[0] == '*') {
- classNames = resources("file:grails-app/domain/**/*.groovy").collect { className(it) }
- }
- for(arg in classNames) {
- def sourceClass = source(arg)
- boolean overwrite = flag('force')
- if(sourceClass) {
- def model = model(sourceClass)
- render template: template('artifacts/scaffolding/Controller.groovy'),
- destination: file("grails-app/controllers/${model.packagePath}/${model.convention('Controller')}.groovy"),
- model: model,
- overwrite: overwrite
-
- addStatus "Scaffolding completed for ${projectPath(sourceClass)}"
- }
- else {
- error "Domain class not found for name $arg"
- }
- }
-}
-else {
- error "No domain class specified"
-}
diff --git a/profiles/rest-api/commands/generate-functional-test.groovy b/profiles/rest-api/commands/generate-functional-test.groovy
deleted file mode 100644
index c14288a..0000000
--- a/profiles/rest-api/commands/generate-functional-test.groovy
+++ /dev/null
@@ -1,35 +0,0 @@
-import org.grails.cli.interactive.completers.DomainClassCompleter
-
-description( "Generates a functional test for a controller that performs REST operations" ) {
- usage "grails generate-functional-test [DOMAIN CLASS]"
- argument name:'Domain Class', description:"The name of the domain class", required:true
- completer DomainClassCompleter
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-if(args) {
- def classNames = args
- if(args[0] == '*') {
- classNames = resources("file:grails-app/domain/**/*.groovy").collect { className(it) }
- }
- for(arg in classNames) {
- def sourceClass = source(arg)
- boolean overwrite = flag('force')
- if(sourceClass) {
- def model = model(sourceClass)
- render template: template('artifacts/scaffolding/FunctionalSpec.groovy'),
- destination: file("src/integration-test/groovy/${model.packagePath}/${model.convention('FunctionalSpec')}.groovy"),
- model: model,
- overwrite: overwrite
-
-
- addStatus "Scaffolding completed for ${projectPath(sourceClass)}"
- }
- else {
- error "Domain class not found for name $arg"
- }
- }
-}
-else {
- error "No domain class specified"
-}
diff --git a/profiles/rest-api/commands/generate-unit-test.groovy b/profiles/rest-api/commands/generate-unit-test.groovy
deleted file mode 100644
index 6be6516..0000000
--- a/profiles/rest-api/commands/generate-unit-test.groovy
+++ /dev/null
@@ -1,35 +0,0 @@
-import org.grails.cli.interactive.completers.DomainClassCompleter
-
-description( "Generates a unit test for a controller that performs REST operations" ) {
- usage "grails generate-unit-test [DOMAIN CLASS]"
- argument name:'Domain Class', description:"The name of the domain class", required:true
- completer DomainClassCompleter
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-if(args) {
- def classNames = args
- if(args[0] == '*') {
- classNames = resources("file:grails-app/domain/**/*.groovy").collect { className(it) }
- }
- for(arg in classNames) {
- def sourceClass = source(arg)
- boolean overwrite = flag('force')
- if(sourceClass) {
- def model = model(sourceClass)
- render template: template('artifacts/scaffolding/Spec.groovy'),
- destination: file("src/test/groovy/${model.packagePath}/${model.convention('ControllerSpec')}.groovy"),
- model: model,
- overwrite: overwrite
-
-
- addStatus "Scaffolding completed for ${projectPath(sourceClass)}"
- }
- else {
- error "Domain class not found for name $arg"
- }
- }
-}
-else {
- error "No domain class specified"
-}
diff --git a/profiles/rest-api/commands/generate-views.groovy b/profiles/rest-api/commands/generate-views.groovy
deleted file mode 100644
index 596c871..0000000
--- a/profiles/rest-api/commands/generate-views.groovy
+++ /dev/null
@@ -1,46 +0,0 @@
-import org.grails.cli.interactive.completers.DomainClassCompleter
-
-description( "Generates a controller that performs REST operations" ) {
- usage "grails generate-views [DOMAIN CLASS]"
- argument name:'Domain Class', description:"The name of the domain class", required:true
- completer DomainClassCompleter
-
- flag name:'force', description:"Whether to overwrite existing files"
-}
-
-if(args) {
- def classNames = args
- if(args[0] == '*') {
- classNames = resources("file:grails-app/domain/**/*.groovy").collect { className(it) }
- }
- for(arg in classNames) {
- def sourceClass = source(arg)
- boolean overwrite = flag('force')
- if(sourceClass) {
- def model = model(sourceClass)
-
- render template: template('artifacts/scaffolding/index.gson'),
- destination: file("grails-app/views/${model.propertyName}/index.gson"),
- model: model,
- overwrite: overwrite
-
- render template: template('artifacts/scaffolding/show.gson'),
- destination: file("grails-app/views/${model.propertyName}/show.gson"),
- model: model,
- overwrite: overwrite
-
- render template: template("artifacts/scaffolding/_domain.gson"),
- destination: file("grails-app/views/${model.propertyName}/_${model.propertyName}.gson"),
- model: model,
- overwrite: overwrite
-
- addStatus "Scaffolding completed for ${projectPath(sourceClass)}"
- }
- else {
- error "Domain class not found for name $arg"
- }
- }
-}
-else {
- error "No domain class specified"
-}
diff --git a/profiles/rest-api/features/security/feature.yml b/profiles/rest-api/features/security/feature.yml
deleted file mode 100644
index f0f5bca..0000000
--- a/profiles/rest-api/features/security/feature.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-description: Adds Spring Security REST to the project
-dependencies:
- compile:
- - org.grails:grails-plugin-gsp
- - org.grails.plugins:spring-security-rest:2.0.0.M2
diff --git a/profiles/rest-api/features/security/skeleton/grails-app/conf/application.groovy b/profiles/rest-api/features/security/skeleton/grails-app/conf/application.groovy
deleted file mode 100644
index 7cdc6ef..0000000
--- a/profiles/rest-api/features/security/skeleton/grails-app/conf/application.groovy
+++ /dev/null
@@ -1,13 +0,0 @@
-grails.plugin.springsecurity.filterChain.chainMap = [
- //Stateless chain
- [
- pattern: '/**',
- filters: 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'
- ],
-
- //Traditional, stateful chain
- [
- pattern: '/stateful/**',
- filters: 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'
- ]
-]
diff --git a/profiles/rest-api/profile.yml b/profiles/rest-api/profile.yml
deleted file mode 100644
index 5f13451..0000000
--- a/profiles/rest-api/profile.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-description: Profile for REST API applications
-features:
- defaults:
- - hibernate
- required:
- - json-views
-build:
- plugins:
- - war
- - org.grails.grails-web
- excludes:
- - org.grails.grails-core
-dependencies:
- compile:
- - "org.springframework.boot:spring-boot-starter-actuator"
- - "org.springframework.boot:spring-boot-starter-tomcat"
- - "org.grails:grails-plugin-url-mappings"
- - "org.grails:grails-plugin-rest"
- - "org.grails:grails-plugin-codecs"
- - "org.grails:grails-plugin-interceptors"
- - "org.grails:grails-plugin-services"
- - "org.grails:grails-plugin-datasource"
- - "org.grails:grails-plugin-databinding"
- - "org.grails:grails-plugin-async"
- - "org.grails:grails-web-boot"
- - "org.grails:grails-logging"
- - "org.grails.plugins:cache"
- testCompile:
- - "org.grails:grails-plugin-testing"
- - "org.grails.plugins:geb"
- - "org.grails:grails-datastore-rest-client"
- testRuntime:
- - 'org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1'
- - 'net.sourceforge.htmlunit:htmlunit:2.18'
-
-
-
-
diff --git a/profiles/rest-api/skeleton/grails-app/conf/application.yml b/profiles/rest-api/skeleton/grails-app/conf/application.yml
deleted file mode 100644
index d13b503..0000000
--- a/profiles/rest-api/skeleton/grails-app/conf/application.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-grails:
- mime:
- disable:
- accept:
- header:
- userAgents:
- - Gecko
- - WebKit
- - Presto
- - Trident
- types:
- all: '*/*'
- atom: application/atom+xml
- css: text/css
- csv: text/csv
- form: application/x-www-form-urlencoded
- html:
- - text/html
- - application/xhtml+xml
- js: text/javascript
- json:
- - application/json
- - text/json
- multipartForm: multipart/form-data
- rss: application/rss+xml
- text: text/plain
- hal:
- - application/hal+json
- - application/hal+xml
- xml:
- - text/xml
- - application/xml
- urlmapping:
- cache:
- maxsize: 1000
- controllers:
- defaultScope: singleton
- converters:
- encoding: UTF-8
diff --git a/profiles/rest-api/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/ApplicationController.groovy b/profiles/rest-api/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/ApplicationController.groovy
deleted file mode 100644
index 11aafe9..0000000
--- a/profiles/rest-api/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/ApplicationController.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-package @grails.codegen.defaultPackage@
-
-import grails.core.GrailsApplication
-import grails.util.Environment
-import grails.plugins.*
-
-class ApplicationController implements PluginManagerAware {
-
- GrailsApplication grailsApplication
- GrailsPluginManager pluginManager
-
- def index() {
- [grailsApplication: grailsApplication, pluginManager: pluginManager]
- }
-}
diff --git a/profiles/rest-api/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/UrlMappings.groovy b/profiles/rest-api/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/UrlMappings.groovy
deleted file mode 100644
index 1ae963b..0000000
--- a/profiles/rest-api/skeleton/grails-app/controllers/@grails.codegen.defaultPackage.path@/UrlMappings.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-package @grails.codegen.defaultPackage@
-
-class UrlMappings {
-
- static mappings = {
- "/$controller/$action?/$id?(.$format)?"{
- constraints {
- // apply constraints here
- }
- }
-
- "/"(controller: 'application', action:'index')
- "500"(view: '/error')
- "404"(view: '/notFound')
- }
-}
diff --git a/profiles/rest-api/skeleton/grails-app/domain/.gitkeep b/profiles/rest-api/skeleton/grails-app/domain/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/rest-api/skeleton/grails-app/services/.gitkeep b/profiles/rest-api/skeleton/grails-app/services/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/rest-api/skeleton/grails-app/utils/.gitkeep b/profiles/rest-api/skeleton/grails-app/utils/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/rest-api/skeleton/grails-app/views/application/index.gson b/profiles/rest-api/skeleton/grails-app/views/application/index.gson
deleted file mode 100644
index 61f9643..0000000
--- a/profiles/rest-api/skeleton/grails-app/views/application/index.gson
+++ /dev/null
@@ -1,33 +0,0 @@
-import grails.core.*
-import grails.util.*
-import grails.plugins.*
-import org.grails.core.artefact.*
-
-model {
- GrailsApplication grailsApplication
- GrailsPluginManager pluginManager
-}
-
-json {
- message "Welcome to Grails!"
- environment Environment.current.name
- appversion grailsApplication.metadata.getApplicationVersion()
- grailsversion GrailsUtil.grailsVersion
- appprofile grailsApplication.config.getProperty('grails.profile')
- groovyversion GroovySystem.getVersion()
- jvmversion System.getProperty('java.version')
- reloadingagentenabled Environment.reloadingAgentEnabled
- artefacts (
- controllers: grailsApplication.getArtefactInfo(ControllerArtefactHandler.TYPE).classesByName.size(),
- domains: grailsApplication.getArtefactInfo(DomainClassArtefactHandler.TYPE).classesByName.size(),
- services: grailsApplication.getArtefactInfo(ServiceArtefactHandler.TYPE).classesByName.size()
- )
- controllers grailsApplication.getArtefacts(ControllerArtefactHandler.TYPE), { GrailsClass c ->
- name c.fullName
- logicalPropertyName c.logicalPropertyName
- }
- plugins pluginManager.allPlugins, { GrailsPlugin plugin ->
- name plugin.name
- version plugin.version
- }
-}
diff --git a/profiles/rest-api/skeleton/grails-app/views/error.gson b/profiles/rest-api/skeleton/grails-app/views/error.gson
deleted file mode 100644
index 9448828..0000000
--- a/profiles/rest-api/skeleton/grails-app/views/error.gson
+++ /dev/null
@@ -1,6 +0,0 @@
-response.status 500
-
-json {
- message "Internal server error"
- error 500
-}
\ No newline at end of file
diff --git a/profiles/rest-api/skeleton/grails-app/views/errors/_errors.gson b/profiles/rest-api/skeleton/grails-app/views/errors/_errors.gson
deleted file mode 100644
index c1ae732..0000000
--- a/profiles/rest-api/skeleton/grails-app/views/errors/_errors.gson
+++ /dev/null
@@ -1,42 +0,0 @@
-import org.springframework.validation.*
-
-/**
- * Renders validation errors according to vnd.error: https://github.com/blongden/vnd.error
- */
-model {
- Errors errors
-}
-
-response.status UNPROCESSABLE_ENTITY
-
-json {
- Errors errorsObject = (Errors)this.errors
- def allErrors = errorsObject.allErrors
- int errorCount = allErrors.size()
- def resourcePath = g.link(resource:request.uri, absolute:false)
- def resourceLink = g.link(resource:request.uri, absolute:true)
- if(errorCount == 1) {
- def error = allErrors.iterator().next()
- message messageSource.getMessage(error, locale)
- path resourcePath
- _links {
- self {
- href resourceLink
- }
- }
- }
- else {
- total errorCount
- _embedded {
- errors(allErrors) { ObjectError error ->
- message messageSource.getMessage(error, locale)
- path resourcePath
- _links {
- self {
- href resourceLink
- }
- }
- }
- }
- }
-}
diff --git a/profiles/rest-api/skeleton/grails-app/views/notFound.gson b/profiles/rest-api/skeleton/grails-app/views/notFound.gson
deleted file mode 100644
index 1a710b2..0000000
--- a/profiles/rest-api/skeleton/grails-app/views/notFound.gson
+++ /dev/null
@@ -1,6 +0,0 @@
-response.status 404
-
-json {
- message "Not Found"
- error 404
-}
\ No newline at end of file
diff --git a/profiles/rest-api/skeleton/grails-app/views/object/_object.gson b/profiles/rest-api/skeleton/grails-app/views/object/_object.gson
deleted file mode 100644
index 114568f..0000000
--- a/profiles/rest-api/skeleton/grails-app/views/object/_object.gson
+++ /dev/null
@@ -1,5 +0,0 @@
-import groovy.transform.*
-
-@Field Object object
-
-json g.render(object)
diff --git a/profiles/rest-api/skeleton/src/main/webapp/.gitkeep b/profiles/rest-api/skeleton/src/main/webapp/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/profiles/rest-api/templates/artifacts/Controller.groovy b/profiles/rest-api/templates/artifacts/Controller.groovy
deleted file mode 100644
index f2f5bae..0000000
--- a/profiles/rest-api/templates/artifacts/Controller.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-@artifact.package@
-
-import grails.rest.*
-import grails.converters.*
-
-class @artifact.name@Controller {
-
- def index() { }
-}
diff --git a/profiles/rest-api/templates/artifacts/Interceptor.groovy b/profiles/rest-api/templates/artifacts/Interceptor.groovy
deleted file mode 100644
index 6d29474..0000000
--- a/profiles/rest-api/templates/artifacts/Interceptor.groovy
+++ /dev/null
@@ -1,12 +0,0 @@
-@artifact.package@
-
-class @artifact.name@Interceptor {
-
- boolean before() { true }
-
- boolean after() { true }
-
- void afterView() {
- // no-op
- }
-}
diff --git a/profiles/rest-api/templates/artifacts/Resource.groovy b/profiles/rest-api/templates/artifacts/Resource.groovy
deleted file mode 100644
index 7b2dd79..0000000
--- a/profiles/rest-api/templates/artifacts/Resource.groovy
+++ /dev/null
@@ -1,8 +0,0 @@
-@artifact.package@
-
-import grails.rest.*
-
-@Resource(readOnly = false, formats = ['json', 'xml'])
-class @artifact.name@ {
-
-}
\ No newline at end of file
diff --git a/profiles/rest-api/templates/artifacts/RestfulController.groovy b/profiles/rest-api/templates/artifacts/RestfulController.groovy
deleted file mode 100644
index 01a774e..0000000
--- a/profiles/rest-api/templates/artifacts/RestfulController.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-@artifact.package@
-
-import grails.rest.*
-import grails.converters.*
-
-class @artifact.name@Controller extends RestfulController {
- static responseFormats = ['json', 'xml']
- @artifact.name@Controller() {
- super(@artifact.name@)
- }
-}
diff --git a/profiles/rest-api/templates/artifacts/scaffolding/Controller.groovy b/profiles/rest-api/templates/artifacts/scaffolding/Controller.groovy
deleted file mode 100644
index 81c3de7..0000000
--- a/profiles/rest-api/templates/artifacts/scaffolding/Controller.groovy
+++ /dev/null
@@ -1,72 +0,0 @@
-<%=packageName ? "package ${packageName}" : ''%>
-
-import static org.springframework.http.HttpStatus.*
-import grails.transaction.Transactional
-
-@Transactional(readOnly = true)
-class ${className}Controller {
-
- static responseFormats = ['json', 'xml']
- static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]
-
- def index(Integer max) {
- params.max = Math.min(max ?: 10, 100)
- respond ${className}.list(params), model:[${propertyName}Count: ${className}.count()]
- }
-
- def show(${className} ${propertyName}) {
- respond ${propertyName}
- }
-
- @Transactional
- def save(${className} ${propertyName}) {
- if (${propertyName} == null) {
- transactionStatus.setRollbackOnly()
- render status: NOT_FOUND
- return
- }
-
- if (${propertyName}.hasErrors()) {
- transactionStatus.setRollbackOnly()
- respond ${propertyName}.errors, view:'create'
- return
- }
-
- ${propertyName}.save flush:true
-
- respond ${propertyName}, [status: CREATED, view:"show"]
- }
-
- @Transactional
- def update(${className} ${propertyName}) {
- if (${propertyName} == null) {
- transactionStatus.setRollbackOnly()
- render status: NOT_FOUND
- return
- }
-
- if (${propertyName}.hasErrors()) {
- transactionStatus.setRollbackOnly()
- respond ${propertyName}.errors, view:'edit'
- return
- }
-
- ${propertyName}.save flush:true
-
- respond ${propertyName}, [status: OK, view:"show"]
- }
-
- @Transactional
- def delete(${className} ${propertyName}) {
-
- if (${propertyName} == null) {
- transactionStatus.setRollbackOnly()
- render status: NOT_FOUND
- return
- }
-
- ${propertyName}.delete flush:true
-
- render status: NO_CONTENT
- }
-}
diff --git a/profiles/rest-api/templates/artifacts/scaffolding/FunctionalSpec.groovy b/profiles/rest-api/templates/artifacts/scaffolding/FunctionalSpec.groovy
deleted file mode 100644
index d3ab1db..0000000
--- a/profiles/rest-api/templates/artifacts/scaffolding/FunctionalSpec.groovy
+++ /dev/null
@@ -1,139 +0,0 @@
-<%=packageName ? "package ${packageName}" : ''%>
-
-import grails.test.mixin.integration.Integration
-import grails.transaction.*
-import static grails.web.http.HttpHeaders.*
-import static org.springframework.http.HttpStatus.*
-import spock.lang.*
-import geb.spock.*
-import grails.plugins.rest.client.RestBuilder
-
-@Integration
-@Rollback
-class ${className}FunctionalSpec extends GebSpec {
-
- RestBuilder getRestBuilder() {
- new RestBuilder()
- }
-
- String getResourcePath() {
- assert false, "TODO: provide the path to your resource. Example: \"\${baseUrl}/books\""
- }
-
- Closure getValidJson() {{->
- assert false, "TODO: provide valid JSON"
- }}
-
- Closure getInvalidJson() {{->
- assert false, "TODO: provide invalid JSON"
- }}
-
- void "Test the index action"() {
- when:"The index action is requested"
- def response = restBuilder.get(resourcePath)
-
- then:"The response is correct"
- response.status == OK.value()
- response.json == []
- }
-
- void "Test the save action correctly persists an instance"() {
- when:"The save action is executed with no content"
- def response = restBuilder.post(resourcePath)
-
- then:"The response is correct"
- response.status == UNPROCESSABLE_ENTITY.value()
-
- when:"The save action is executed with invalid data"
- response = restBuilder.post(resourcePath) {
- json invalidJson
- }
- then:"The response is correct"
- response.status == UNPROCESSABLE_ENTITY.value()
-
-
- when:"The save action is executed with valid data"
- response = restBuilder.post(resourcePath) {
- json validJson
- }
-
- then:"The response is correct"
- response.status == CREATED.value()
- response.json.id
- ${className}.count() == 1
- }
-
- void "Test the update action correctly updates an instance"() {
- when:"The save action is executed with valid data"
- def response = restBuilder.post(resourcePath) {
- json validJson
- }
-
- then:"The response is correct"
- response.status == CREATED.value()
- response.json.id
-
- when:"The update action is called with invalid data"
- def id = response.json.id
- response = restBuilder.put("\$resourcePath/\$id") {
- json invalidJson
- }
-
- then:"The response is correct"
- response.status == UNPROCESSABLE_ENTITY.value()
-
- when:"The update action is called with valid data"
- response = restBuilder.put("\$resourcePath/\$id") {
- json validJson
- }
-
- then:"The response is correct"
- response.status == OK.value()
- response.json
-
- }
-
- void "Test the show action correctly renders an instance"() {
- when:"The save action is executed with valid data"
- def response = restBuilder.post(resourcePath) {
- json validJson
- }
-
- then:"The response is correct"
- response.status == CREATED.value()
- response.json.id
-
- when:"When the show action is called to retrieve a resource"
- def id = response.json.id
- response = restBuilder.get("\$resourcePath/\$id")
-
- then:"The response is correct"
- response.status == OK.value()
- response.json.id == id
- }
-
- void "Test the delete action correctly deletes an instance"() {
- when:"The save action is executed with valid data"
- def response = restBuilder.post(resourcePath) {
- json validJson
- }
-
- then:"The response is correct"
- response.status == CREATED.value()
- response.json.id
-
- when:"When the delete action is executed on an unknown instance"
- def id = response.json.id
- response = restBuilder.delete("\$resourcePath/99999")
-
- then:"The response is correct"
- response.status == NOT_FOUND.value()
-
- when:"When the delete action is executed on an existing instance"
- response = restBuilder.delete("\$resourcePath/\$id")
-
- then:"The response is correct"
- response.status == NO_CONTENT.value()
- !${className}.get(id)
- }
-}
\ No newline at end of file
diff --git a/profiles/rest-api/templates/artifacts/scaffolding/Spec.groovy b/profiles/rest-api/templates/artifacts/scaffolding/Spec.groovy
deleted file mode 100644
index 7546c27..0000000
--- a/profiles/rest-api/templates/artifacts/scaffolding/Spec.groovy
+++ /dev/null
@@ -1,131 +0,0 @@
-<%=packageName ? "package ${packageName}" : ''%>
-
-import grails.test.mixin.*
-import spock.lang.*
-import static org.springframework.http.HttpStatus.*
-
-@TestFor(${className}Controller)
-@Mock(${className})
-class ${className}ControllerSpec extends Specification {
-
- def populateValidParams(params) {
- assert params != null
-
- // TODO: Populate valid properties like...
- //params["name"] = 'someValidName'
- assert false, "TODO: Provide a populateValidParams() implementation for this generated test suite"
- }
-
- void "Test the index action returns the correct response"() {
-
- when:"The index action is executed"
- controller.index()
-
- then:"The response is correct"
- response.text == '[]'
- }
-
-
- void "Test the save action correctly persists an instance"() {
-
- when:"The save action is executed with an invalid instance"
- request.contentType = JSON_CONTENT_TYPE
- request.method = 'POST'
- def ${propertyName} = new ${className}()
- ${propertyName}.validate()
- controller.save(${propertyName})
-
- then:"The create view is rendered again with the correct model"
- response.status == UNPROCESSABLE_ENTITY.value()
- response.json.errors
-
- when:"The save action is executed with a valid instance"
- response.reset()
- populateValidParams(params)
- ${propertyName} = new ${className}(params)
-
- controller.save(${propertyName})
-
- then:"A redirect is issued to the show action"
- ${className}.count() == 1
- response.status == CREATED.value()
- response.json
- }
-
- void "Test that the show action returns the correct model"() {
- when:"The show action is executed with a null domain"
- controller.show(null)
-
- then:"A 404 error is returned"
- response.status == 404
-
- when:"A domain instance is passed to the show action"
- populateValidParams(params)
- response.reset()
- def ${propertyName}= new ${className}(params).save()
- controller.show(${propertyName})
-
- then:"A model is populated containing the domain instance"
- ${propertyName}!= null
- response.status == OK.value()
- response.json
- }
-
- void "Test the update action performs an update on a valid domain instance"() {
- when:"Update is called for a domain instance that doesn't exist"
- request.contentType = JSON_CONTENT_TYPE
- request.method = 'PUT'
- controller.update(null)
-
- then:"A 404 error is returned"
- response.status == NOT_FOUND.value()
-
- when:"An invalid domain instance is passed to the update action"
- response.reset()
- def ${propertyName}= new ${className}()
- ${propertyName}.validate()
- controller.update(${propertyName})
-
- then:"The edit view is rendered again with the invalid instance"
- response.status == UNPROCESSABLE_ENTITY.value()
- response.json.errors
-
- when:"A valid domain instance is passed to the update action"
- response.reset()
- populateValidParams(params)
- ${propertyName}= new ${className}(params).save(flush: true)
- controller.update(${propertyName})
-
- then:"A redirect is issued to the show action"
- ${propertyName}!= null
- response.status == OK.value()
- response.json.id == ${propertyName}.id
- }
-
- void "Test that the delete action deletes an instance if it exists"() {
- when:"The delete action is called for a null instance"
- request.contentType = JSON_CONTENT_TYPE
- request.method = 'DELETE'
- controller.delete(null)
-
- then:"A 404 is returned"
- response.status == NOT_FOUND.value()
-
-
- when:"A domain instance is created"
- response.reset()
- populateValidParams(params)
- def ${propertyName}= new ${className}(params).save(flush: true)
-
- then:"It exists"
- ${className}.count() == 1
-
- when:"The domain instance is passed to the delete action"
- controller.delete(${propertyName})
-
- then:"The instance is deleted"
- ${className}.count() == 0
- response.status == NO_CONTENT.value()
-
- }
-}
\ No newline at end of file
diff --git a/profiles/rest-api/templates/artifacts/scaffolding/_domain.gson b/profiles/rest-api/templates/artifacts/scaffolding/_domain.gson
deleted file mode 100644
index 3618970..0000000
--- a/profiles/rest-api/templates/artifacts/scaffolding/_domain.gson
+++ /dev/null
@@ -1,7 +0,0 @@
-import ${fullName}
-
-model {
- ${className} ${propertyName}
-}
-
-json g.render(${propertyName})
diff --git a/profiles/rest-api/templates/artifacts/scaffolding/index.gson b/profiles/rest-api/templates/artifacts/scaffolding/index.gson
deleted file mode 100644
index e46c48e..0000000
--- a/profiles/rest-api/templates/artifacts/scaffolding/index.gson
+++ /dev/null
@@ -1,8 +0,0 @@
-import ${fullName}
-
-model {
- Iterable<${className}> ${propertyName}List
-}
-
-json tmpl.${propertyName}(${propertyName}List ?: [])
-
diff --git a/profiles/rest-api/templates/artifacts/scaffolding/show.gson b/profiles/rest-api/templates/artifacts/scaffolding/show.gson
deleted file mode 100644
index 7836019..0000000
--- a/profiles/rest-api/templates/artifacts/scaffolding/show.gson
+++ /dev/null
@@ -1,7 +0,0 @@
-import ${fullName}
-
-model {
- ${className} ${propertyName}
-}
-
-json tmpl.${propertyName}(${propertyName})
diff --git a/profiles/rest-api/templates/testing/Controller.groovy b/profiles/rest-api/templates/testing/Controller.groovy
deleted file mode 100644
index 07c8a4f..0000000
--- a/profiles/rest-api/templates/testing/Controller.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-@artifact.package@
-import grails.test.mixin.TestFor
-import spock.lang.Specification
-
-/**
- * See the API for {@link grails.test.mixin.web.ControllerUnitTestMixin} for usage instructions
- */
-@TestFor(@artifact.name@Controller)
-class @artifact.name@ControllerSpec extends Specification {
-
- def setup() {
- }
-
- def cleanup() {
- }
-
- void "test something"() {
- expect:"fix me"
- true == false
- }
-}
diff --git a/profiles/rest-api/templates/testing/Functional.groovy b/profiles/rest-api/templates/testing/Functional.groovy
deleted file mode 100644
index b4c4265..0000000
--- a/profiles/rest-api/templates/testing/Functional.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-@artifact.package@
-
-import grails.test.mixin.integration.Integration
-import grails.transaction.*
-import static grails.web.http.HttpHeaders.*
-import static org.springframework.http.HttpStatus.*
-import spock.lang.*
-import geb.spock.*
-import grails.plugins.rest.client.RestBuilder
-
-@Integration
-@Rollback
-class @artifact.name@Spec extends GebSpec {
-
- def setup() {
- }
-
- def cleanup() {
- }
-
- void "Test the homepage"() {
- when:"The home page is requested"
- def resp = restBuilder().get("$baseUrl/")
-
- then:"The response is correct"
- resp.status == OK.value()
- resp.headers[CONTENT_TYPE] == ['application/json;charset=UTF-8']
- resp.json.message == 'Welcome to Grails!'
- }
-
- RestBuilder restBuilder() {
- new RestBuilder()
- }
-}
diff --git a/profiles/rest-api/templates/testing/Integration.groovy b/profiles/rest-api/templates/testing/Integration.groovy
deleted file mode 100644
index 75993ba..0000000
--- a/profiles/rest-api/templates/testing/Integration.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-@artifact.package@
-
-import grails.test.mixin.integration.Integration
-import grails.transaction.*
-import spock.lang.*
-
-@Integration
-@Rollback
-class @artifact.name@Spec extends Specification {
-
- def setup() {
- }
-
- def cleanup() {
- }
-
- void "test something"() {
- expect:"fix me"
- true == false
- }
-}
diff --git a/profiles/rest-api/templates/testing/Interceptor.groovy b/profiles/rest-api/templates/testing/Interceptor.groovy
deleted file mode 100644
index 40445ed..0000000
--- a/profiles/rest-api/templates/testing/Interceptor.groovy
+++ /dev/null
@@ -1,26 +0,0 @@
-@artifact.package@
-
-import grails.test.mixin.TestFor
-import spock.lang.Specification
-
-/**
- * See the API for {@link grails.test.mixin.web.ControllerUnitTestMixin} for usage instructions
- */
-@TestFor(@artifact.name@Interceptor)
-class @artifact.name@InterceptorSpec extends Specification {
-
- def setup() {
- }
-
- def cleanup() {
-
- }
-
- void "Test @artifact.propertyName@ interceptor matching"() {
- when:"A request matches the interceptor"
- withRequest(controller:"@artifact.propertyName@")
-
- then:"The interceptor does match"
- interceptor.doesMatch()
- }
-}
diff --git a/profiles/rest-api/templates/testing/Resource.groovy b/profiles/rest-api/templates/testing/Resource.groovy
deleted file mode 100644
index 699af2f..0000000
--- a/profiles/rest-api/templates/testing/Resource.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-@artifact.package@
-
-import grails.test.mixin.TestFor
-import spock.lang.Specification
-
-/**
- * See the API for {@link grails.test.mixin.domain.DomainClassUnitTestMixin} for usage instructions
- */
-@TestFor(@artifact.name@)
-class @artifact.name@Spec extends Specification {
-
- def setup() {
- }
-
- def cleanup() {
- }
-
- void "test something"() {
- expect:"fix me"
- true == false
- }
-}
diff --git a/profiles/settings.gradle b/profiles/settings.gradle
deleted file mode 100644
index 13af178..0000000
--- a/profiles/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-include 'base', 'web', 'rest-api', 'rest-api-plugin', 'web-plugin', 'plugin', 'profile', 'angular'
diff --git a/profiles/travis-build.sh b/profiles/travis-build.sh
deleted file mode 100755
index 4099896..0000000
--- a/profiles/travis-build.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-set -e
-#cd profiles
-#./gradlew clean
-EXIT_STATUS=0
-#echo "Publishing archives for branch $TRAVIS_BRANCH"
-#if [[ -n $TRAVIS_TAG ]] || [[ $TRAVIS_BRANCH == '3.1.x' && $TRAVIS_PULL_REQUEST == 'false' ]]; then
-
-# echo "Publishing archives"
-
-# if [[ -n $TRAVIS_TAG ]]; then
-# ./gradlew bintrayUpload || EXIT_STATUS=$?
-# else
-# ./gradlew publish || EXIT_STATUS=$?
-# fi
-
-#fi
-
-exit $EXIT_STATUS
diff --git a/profiles/web-micro/commands/create-unit-test.yml b/profiles/web-micro/commands/create-unit-test.yml
deleted file mode 100644
index 65d9eee..0000000
--- a/profiles/web-micro/commands/create-unit-test.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: Creates a unit test
-usage: |
- create-unit-test [unit test class name]
- Creates a unit test
-steps:
- - command: render
- template: templates/testing/UnitTest.groovy
- destination: '@artifact.name@Spec.groovy'
diff --git a/profiles/web-micro/commands/package.groovy b/profiles/web-micro/commands/package.groovy
deleted file mode 100644
index 3bece13..0000000
--- a/profiles/web-micro/commands/package.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-description("Packages a Grails application") {
- usage "grails package"
- synonyms 'jar', 'assemble'
-}
-
-allResources = resources("file:**/*.groovy")
-
-appName = config.getProperty('info.app.name', String) ?: baseDir.parentFile.name
-appVersion = config.getProperty('info.app.version', String) ?: '0.1'
-jar = file("${buildDir}/${appName}-${appVersion}.jar")
-args = [ jar.absolutePath ]
-args.addAll allResources.findAll { res -> !['Spec', 'Test', 'Tests'].any { res.filename.endsWith(it) } }
- .sort { it.filename == "Application.groovy" ? 1 : 0 }
- .collect { projectPath(it.file) }
-
-args.addAll commandLine.remainingArgs
-if(spring.jar(*args) == 0) {
- addStatus "Built JAR file ${projectPath(jar)}"
-}
-else {
- error "Error building JAR file"
-}
diff --git a/profiles/web-micro/commands/run-app.groovy b/profiles/web-micro/commands/run-app.groovy
deleted file mode 100644
index 1ef34f3..0000000
--- a/profiles/web-micro/commands/run-app.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-import org.grails.cli.*
-
-description("Runs a Grails application") {
- usage "grails run-app"
- synonyms 'run'
-}
-
-allResources = resources("file:**/*.groovy")
-args = allResources.findAll { res -> !['Spec', 'Test', 'Tests'].any { res.filename.endsWith(it) } }
- .sort { it.filename == "Application.groovy" ? 1 : 0 }
- .collect { projectPath(it.file) }
-
-args.addAll commandLine.remainingArgs
-if(spring.run(*args) == 0) {
- if(!GrailsCli.isInteractiveModeActive()) {
- // block if interactive mode is not running
- while(true) {
- sleep(Long.MAX_VALUE)
- }
- }
-}
-else {
- return false
-}
diff --git a/profiles/web-micro/commands/test-app.groovy b/profiles/web-micro/commands/test-app.groovy
deleted file mode 100644
index 288d975..0000000
--- a/profiles/web-micro/commands/test-app.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-description("Tests a Grails application") {
- usage "grails test-app"
- synonyms 'test'
-}
-
-allResources = resources("file:**/*.groovy")
-args = allResources
- .sort { it.filename == "Application.groovy" ? 1 : 0 }
- .collect { projectPath(it.file) }
-
-args.addAll commandLine.remainingArgs
-if(spring.test(*args) == 0) {
- addStatus "Tests PASSED"
- return true
-}
-else {
- error "Tests FAILED"
- return false
-}
\ No newline at end of file
diff --git a/profiles/web-micro/profile.yml b/profiles/web-micro/profile.yml
deleted file mode 100644
index cc64a40..0000000
--- a/profiles/web-micro/profile.yml
+++ /dev/null
@@ -1 +0,0 @@
-description: Profile for creating Micro Service applications run as Groovy scripts
diff --git a/profiles/web-micro/skeleton/Application.groovy b/profiles/web-micro/skeleton/Application.groovy
deleted file mode 100644
index 21146a5..0000000
--- a/profiles/web-micro/skeleton/Application.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-@Grab("hibernate")
-@Grab("h2")
-import grails.persistence.Entity
-
-@Entity
-@Resource(uri="/examples")
-class Example {
- String name
-}
diff --git a/profiles/web-micro/skeleton/application.yml b/profiles/web-micro/skeleton/application.yml
deleted file mode 100644
index 76be1c6..0000000
--- a/profiles/web-micro/skeleton/application.yml
+++ /dev/null
@@ -1,108 +0,0 @@
-grails:
- profile: @grails.profile@
- codegen:
- defaultPackage: @grails.codegen.defaultPackage@
-info:
- app:
- name: @grails.app.name@
- version: 0.1
- grailsVersion: @grails.version@
-spring:
- groovy:
- template:
- check-template-location: false
----
-grails:
- mime:
- disable:
- accept:
- header:
- userAgents:
- - Gecko
- - WebKit
- - Presto
- - Trident
- types:
- all: '*/*'
- atom: application/atom+xml
- css: text/css
- csv: text/csv
- form: application/x-www-form-urlencoded
- html:
- - text/html
- - application/xhtml+xml
- js: text/javascript
- json:
- - application/json
- - text/json
- multipartForm: multipart/form-data
- pdf: application/pdf
- rss: application/rss+xml
- text: text/plain
- hal:
- - application/hal+json
- - application/hal+xml
- xml:
- - text/xml
- - application/xml
- urlmapping:
- cache:
- maxsize: 1000
- controllers:
- defaultScope: singleton
- converters:
- encoding: UTF-8
- hibernate:
- cache:
- queries: false
- views:
- default:
- codec: html
- gsp:
- encoding: UTF-8
- htmlcodec: xml
- codecs:
- expression: html
- scriptlets: html
- taglib: none
- staticparts: none
-
----
-dataSource:
- pooled: true
- jmxExport: true
- driverClassName: org.h2.Driver
- username: sa
- password:
-
-environments:
- development:
- dataSource:
- dbCreate: create-drop
- url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
- test:
- dataSource:
- dbCreate: update
- url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
- production:
- dataSource:
- dbCreate: update
- url: jdbc:h2:./prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
- properties:
- jmxEnabled: true
- initialSize: 5
- maxActive: 50
- minIdle: 5
- maxIdle: 25
- maxWait: 10000
- maxAge: 600000
- timeBetweenEvictionRunsMillis: 5000
- minEvictableIdleTimeMillis: 60000
- validationQuery: SELECT 1
- validationQueryTimeout: 3
- validationInterval: 15000
- testOnBorrow: true
- testWhileIdle: true
- testOnReturn: false
- jdbcInterceptors: ConnectionState
- defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED
diff --git a/profiles/web-micro/templates/UnitTest.groovy b/profiles/web-micro/templates/UnitTest.groovy
deleted file mode 100644
index 7520ee3..0000000
--- a/profiles/web-micro/templates/UnitTest.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * See the API for {@link grails.test.mixin.support.GrailsUnitTestMixin} for usage instructions
- */
-@TestMixin(GrailsUnitTestMixin)
-class @artifact.name@Spec extends Specification {
-
- def setup() {
- }
-
- def cleanup() {
- }
-
- void "test something"() {
- expect:"fix me"
- true == false
- }
-}
\ No newline at end of file
diff --git a/profiles/web-micro/templates/testing/UnitTest.groovy b/profiles/web-micro/templates/testing/UnitTest.groovy
deleted file mode 100644
index 78575dd..0000000
--- a/profiles/web-micro/templates/testing/UnitTest.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-import grails.test.mixin.TestMixin
-import grails.test.mixin.support.GrailsUnitTestMixin
-import spock.lang.Specification
-
-/**
- * See the API for {@link grails.test.mixin.support.GrailsUnitTestMixin} for usage instructions
- */
-@TestMixin(GrailsUnitTestMixin)
-class @artifact.name@Spec extends Specification {
-
- def setup() {
- }
-
- def cleanup() {
- }
-
- void "test something"() {
- expect:"fix me"
- true == false
- }
-}
\ No newline at end of file
diff --git a/profiles/web-plugin/build.gradle b/profiles/web-plugin/build.gradle
deleted file mode 100644
index 5879b4a..0000000
--- a/profiles/web-plugin/build.gradle
+++ /dev/null
@@ -1,4 +0,0 @@
-dependencies {
- runtime project(":plugin")
- runtime project(":web")
-}
\ No newline at end of file
diff --git a/profiles/web-plugin/profile.yml b/profiles/web-plugin/profile.yml
deleted file mode 100644
index 630e6ff..0000000
--- a/profiles/web-plugin/profile.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-description: Profile for Plugins designed for Web applications
-skeleton:
- excludes:
- - grails-app/assets/**/*.*
- - grails-app/i18n/*.properties
- - grails-app/conf/spring/**
- - grails-app/controllers/UrlMappings.groovy
- - grails-app/init/BootStrap.groovy
-command:
- excludes:
- - war
-features:
- defaults:
- - asset-pipeline-plugin
-build:
- merge:
- - base
- - plugin
- excludes:
- - war
- - org.grails.grails-web
-dependencies:
- testCompile:
- - "org.grails:grails-plugin-testing"
-
-
diff --git a/profiles/web-plugin/skeleton/src/main/groovy/@grails.codegen.defaultPackage.path@/@grails.codegen.projectClassName@GrailsPlugin.groovy b/profiles/web-plugin/skeleton/src/main/groovy/@grails.codegen.defaultPackage.path@/@grails.codegen.projectClassName@GrailsPlugin.groovy
deleted file mode 100644
index 49dd65f..0000000
--- a/profiles/web-plugin/skeleton/src/main/groovy/@grails.codegen.defaultPackage.path@/@grails.codegen.projectClassName@GrailsPlugin.groovy
+++ /dev/null
@@ -1,70 +0,0 @@
-package @grails.codegen.defaultPackage@
-
-import grails.plugins.*
-
-class @grails.codegen.projectClassName@GrailsPlugin extends Plugin {
-
- // the version or versions of Grails the plugin is designed for
- def grailsVersion = "@grails.version@ > *"
- // resources that are excluded from plugin packaging
- def pluginExcludes = [
- "grails-app/views/error.gsp"
- ]
-
- // TODO Fill in these fields
- def title = "@grails.codegen.projectNaturalName@" // Headline display name of the plugin
- def author = "Your name"
- def authorEmail = ""
- def description = '''\
-Brief summary/description of the plugin.
-'''
- def profiles = ['web']
-
- // URL to the plugin's documentation
- def documentation = "http://grails.org/plugin/@grails.codegen.projectName@"
-
- // Extra (optional) plugin metadata
-
- // License: one of 'APACHE', 'GPL2', 'GPL3'
-// def license = "APACHE"
-
- // Details of company behind the plugin (if there is one)
-// def organization = [ name: "My Company", url: "http://www.my-company.com/" ]
-
- // Any additional developers beyond the author specified above.
-// def developers = [ [ name: "Joe Bloggs", email: "joe@bloggs.net" ]]
-
- // Location of the plugin's issue tracker.
-// def issueManagement = [ system: "JIRA", url: "http://jira.grails.org/browse/GPMYPLUGIN" ]
-
- // Online location of the plugin's browseable source code.
-// def scm = [ url: "http://svn.codehaus.org/grails-plugins/" ]
-
- Closure doWithSpring() { {->
- // TODO Implement runtime spring config (optional)
- }
- }
-
- void doWithDynamicMethods() {
- // TODO Implement registering dynamic methods to classes (optional)
- }
-
- void doWithApplicationContext() {
- // TODO Implement post initialization spring config (optional)
- }
-
- void onChange(Map event) {
- // TODO Implement code that is executed when any artefact that this plugin is
- // watching is modified and reloaded. The event contains: event.source,
- // event.application, event.manager, event.ctx, and event.plugin.
- }
-
- void onConfigChange(Map event) {
- // TODO Implement code that is executed when the project configuration changes.
- // The event is the same as for 'onChange'.
- }
-
- void onShutdown(Map event) {
- // TODO Implement code that is executed when the application shuts down (optional)
- }
-}
diff --git a/profiles/web/build.gradle b/profiles/web/build.gradle
deleted file mode 100644
index 4a8b48c..0000000
--- a/profiles/web/build.gradle
+++ /dev/null
@@ -1,3 +0,0 @@
-dependencies {
- runtime project(":base")
-}
\ No newline at end of file
diff --git a/profiles/web/commands/create-controller.yml b/profiles/web/commands/create-controller.yml
deleted file mode 100644
index a67d09c..0000000
--- a/profiles/web/commands/create-controller.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description:
- - Creates a controller
- - usage: 'create-controller [controller name]'
- - completer: org.grails.cli.interactive.completers.DomainClassCompleter
- - argument: Controller Name
- description: The name of the controller
- - flag: force
- description: Whether to override existing files
-steps:
- - command: render
- template: templates/artifacts/Controller.groovy
- convention: Controller
- destination: grails-app/controllers/@artifact.package.path@/@artifact.name@Controller.groovy
- - command: render
- template: templates/testing/Controller.groovy
- convention: Controller
- destination: src/test/groovy/@artifact.package.path@/@artifact.name@ControllerSpec.groovy
- - command: mkdir
- location: grails-app/views/@artifact.propertyName@
diff --git a/profiles/web/commands/create-integration-test.yml b/profiles/web/commands/create-integration-test.yml
deleted file mode 100644
index 31a57ea..0000000
--- a/profiles/web/commands/create-integration-test.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description:
- - Creates an integration test
- - usage: 'create-integration-test [test name]'
- - completer: org.grails.cli.interactive.completers.AllClassCompleter
- - argument: "Integration Test Name"
- description: "The name of the integration test"
- - flag: force
- description: Whether to override existing files
-
-steps:
- - command: render
- template: templates/testing/Integration.groovy
- destination: src/integration-test/groovy/@artifact.package.path@/@artifact.name@Spec.groovy
diff --git a/profiles/web/commands/create-interceptor.yml b/profiles/web/commands/create-interceptor.yml
deleted file mode 100644
index 616da5f..0000000
--- a/profiles/web/commands/create-interceptor.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description:
- - Creates an interceptor
- - usage: 'create-interceptor [interceptor name]'
- - completer: org.grails.cli.interactive.completers.DomainClassCompleter
- - argument: "Interceptor name"
- description: "The name of the interceptor"
- - flag: force
- description: Whether to override existing files
-
-steps:
- - command: render
- template: templates/artifacts/Interceptor.groovy
- convention: Interceptor
- destination: grails-app/controllers/@artifact.package.path@/@artifact.name@Interceptor.groovy
- - command: render
- template: templates/testing/Interceptor.groovy
- convention: Interceptor
- destination: src/test/groovy/@artifact.package.path@/@artifact.name@InterceptorSpec.groovy
diff --git a/profiles/web/commands/create-taglib.yml b/profiles/web/commands/create-taglib.yml
deleted file mode 100644
index 1d024e7..0000000
--- a/profiles/web/commands/create-taglib.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description:
- - Creates a Tag Library
- - usage: 'create-taglib [taglib name]'
- - synonyms: 'create-tag-lib'
- - completer: org.grails.cli.interactive.completers.DomainClassCompleter
- - argument: Tag Library Name
- description: The name of the tag library
- - flag: force
- description: Whether to override existing files
-steps:
- - command: render
- template: templates/artifacts/TagLib.groovy
- convention: TagLib
- destination: grails-app/taglib/@artifact.package.path@/@artifact.name@TagLib.groovy
- - command: render
- template: templates/testing/TagLib.groovy
- convention: TagLib
- destination: src/test/groovy/@artifact.package.path@/@artifact.name@TagLibSpec.groovy
diff --git a/profiles/web/profile.yml b/profiles/web/profile.yml
deleted file mode 100644
index 10931b8..0000000
--- a/profiles/web/profile.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-description: Profile for Web applications
-features:
- defaults:
- - hibernate
- - asset-pipeline
-build:
- plugins:
- - war
- - org.grails.grails-web
- - org.grails.grails-gsp
- excludes:
- - org.grails.grails-core
-dependencies:
- compile:
- - "org.springframework.boot:spring-boot-starter-actuator"
- - "org.springframework.boot:spring-boot-starter-tomcat"
- - "org.grails:grails-dependencies"
- - "org.grails:grails-web-boot"
- - "org.grails.plugins:cache"
- - "org.grails.plugins:scaffolding"
- testCompile:
- - "org.grails:grails-plugin-testing"
- - "org.grails.plugins:geb"
- testRuntime:
- - 'org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1'
- - 'net.sourceforge.htmlunit:htmlunit:2.18'
-
-
diff --git a/profiles/web/skeleton/grails-app/assets/images/apple-touch-icon-retina.png b/profiles/web/skeleton/grails-app/assets/images/apple-touch-icon-retina.png
deleted file mode 100644
index 5cc83ed..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/apple-touch-icon-retina.png and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/apple-touch-icon.png b/profiles/web/skeleton/grails-app/assets/images/apple-touch-icon.png
deleted file mode 100644
index aba337f..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/apple-touch-icon.png and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/favicon.ico b/profiles/web/skeleton/grails-app/assets/images/favicon.ico
deleted file mode 100644
index 3dfcb92..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/favicon.ico and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/grails-cupsonly-logo-white.svg b/profiles/web/skeleton/grails-app/assets/images/grails-cupsonly-logo-white.svg
deleted file mode 100644
index d3fe882..0000000
--- a/profiles/web/skeleton/grails-app/assets/images/grails-cupsonly-logo-white.svg
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/profiles/web/skeleton/grails-app/assets/images/skin/database_add.png b/profiles/web/skeleton/grails-app/assets/images/skin/database_add.png
deleted file mode 100644
index 802bd6c..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/skin/database_add.png and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/skin/database_delete.png b/profiles/web/skeleton/grails-app/assets/images/skin/database_delete.png
deleted file mode 100644
index cce652e..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/skin/database_delete.png and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/skin/database_edit.png b/profiles/web/skeleton/grails-app/assets/images/skin/database_edit.png
deleted file mode 100644
index e501b66..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/skin/database_edit.png and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/skin/database_save.png b/profiles/web/skeleton/grails-app/assets/images/skin/database_save.png
deleted file mode 100644
index 44c06dd..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/skin/database_save.png and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/skin/database_table.png b/profiles/web/skeleton/grails-app/assets/images/skin/database_table.png
deleted file mode 100644
index 693709c..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/skin/database_table.png and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/skin/exclamation.png b/profiles/web/skeleton/grails-app/assets/images/skin/exclamation.png
deleted file mode 100644
index c37bd06..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/skin/exclamation.png and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/skin/house.png b/profiles/web/skeleton/grails-app/assets/images/skin/house.png
deleted file mode 100644
index fed6221..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/skin/house.png and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/skin/information.png b/profiles/web/skeleton/grails-app/assets/images/skin/information.png
deleted file mode 100644
index 12cd1ae..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/skin/information.png and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/skin/shadow.jpg b/profiles/web/skeleton/grails-app/assets/images/skin/shadow.jpg
deleted file mode 100644
index b7ed44f..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/skin/shadow.jpg and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/skin/sorted_asc.gif b/profiles/web/skeleton/grails-app/assets/images/skin/sorted_asc.gif
deleted file mode 100644
index 6b179c1..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/skin/sorted_asc.gif and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/skin/sorted_desc.gif b/profiles/web/skeleton/grails-app/assets/images/skin/sorted_desc.gif
deleted file mode 100644
index 38b3a01..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/skin/sorted_desc.gif and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/images/spinner.gif b/profiles/web/skeleton/grails-app/assets/images/spinner.gif
deleted file mode 100644
index 1ed786f..0000000
Binary files a/profiles/web/skeleton/grails-app/assets/images/spinner.gif and /dev/null differ
diff --git a/profiles/web/skeleton/grails-app/assets/javascripts/application.js b/profiles/web/skeleton/grails-app/assets/javascripts/application.js
deleted file mode 100644
index 24c1588..0000000
--- a/profiles/web/skeleton/grails-app/assets/javascripts/application.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// This is a manifest file that'll be compiled into application.js.
-//
-// Any JavaScript file within this directory can be referenced here using a relative path.
-//
-// You're free to add application-wide JavaScript to this file, but it's generally better
-// to create separate JavaScript files as needed.
-//
-//= require jquery-2.2.0.min
-//= require bootstrap
-//= require_tree .
-//= require_self
-
-if (typeof jQuery !== 'undefined') {
- (function($) {
- $('#spinner').ajaxStart(function() {
- $(this).fadeIn();
- }).ajaxStop(function() {
- $(this).fadeOut();
- });
- })(jQuery);
-}
diff --git a/profiles/web/skeleton/grails-app/assets/javascripts/bootstrap.js b/profiles/web/skeleton/grails-app/assets/javascripts/bootstrap.js
deleted file mode 100644
index 01fbbcb..0000000
--- a/profiles/web/skeleton/grails-app/assets/javascripts/bootstrap.js
+++ /dev/null
@@ -1,2363 +0,0 @@
-/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under the MIT license
- */
-
-if (typeof jQuery === 'undefined') {
- throw new Error('Bootstrap\'s JavaScript requires jQuery')
-}
-
-+function ($) {
- 'use strict';
- var version = $.fn.jquery.split(' ')[0].split('.')
- if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) {
- throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')
- }
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: transition.js v3.3.6
- * http://getbootstrap.com/javascript/#transitions
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
- // ============================================================
-
- function transitionEnd() {
- var el = document.createElement('bootstrap')
-
- var transEndEventNames = {
- WebkitTransition : 'webkitTransitionEnd',
- MozTransition : 'transitionend',
- OTransition : 'oTransitionEnd otransitionend',
- transition : 'transitionend'
- }
-
- for (var name in transEndEventNames) {
- if (el.style[name] !== undefined) {
- return { end: transEndEventNames[name] }
- }
- }
-
- return false // explicit for ie8 ( ._.)
- }
-
- // http://blog.alexmaccaw.com/css-transitions
- $.fn.emulateTransitionEnd = function (duration) {
- var called = false
- var $el = this
- $(this).one('bsTransitionEnd', function () { called = true })
- var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
- setTimeout(callback, duration)
- return this
- }
-
- $(function () {
- $.support.transition = transitionEnd()
-
- if (!$.support.transition) return
-
- $.event.special.bsTransitionEnd = {
- bindType: $.support.transition.end,
- delegateType: $.support.transition.end,
- handle: function (e) {
- if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
- }
- }
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: alert.js v3.3.6
- * http://getbootstrap.com/javascript/#alerts
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // ALERT CLASS DEFINITION
- // ======================
-
- var dismiss = '[data-dismiss="alert"]'
- var Alert = function (el) {
- $(el).on('click', dismiss, this.close)
- }
-
- Alert.VERSION = '3.3.6'
-
- Alert.TRANSITION_DURATION = 150
-
- Alert.prototype.close = function (e) {
- var $this = $(this)
- var selector = $this.attr('data-target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- var $parent = $(selector)
-
- if (e) e.preventDefault()
-
- if (!$parent.length) {
- $parent = $this.closest('.alert')
- }
-
- $parent.trigger(e = $.Event('close.bs.alert'))
-
- if (e.isDefaultPrevented()) return
-
- $parent.removeClass('in')
-
- function removeElement() {
- // detach from parent, fire event then clean up data
- $parent.detach().trigger('closed.bs.alert').remove()
- }
-
- $.support.transition && $parent.hasClass('fade') ?
- $parent
- .one('bsTransitionEnd', removeElement)
- .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
- removeElement()
- }
-
-
- // ALERT PLUGIN DEFINITION
- // =======================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.alert')
-
- if (!data) $this.data('bs.alert', (data = new Alert(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- var old = $.fn.alert
-
- $.fn.alert = Plugin
- $.fn.alert.Constructor = Alert
-
-
- // ALERT NO CONFLICT
- // =================
-
- $.fn.alert.noConflict = function () {
- $.fn.alert = old
- return this
- }
-
-
- // ALERT DATA-API
- // ==============
-
- $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: button.js v3.3.6
- * http://getbootstrap.com/javascript/#buttons
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // BUTTON PUBLIC CLASS DEFINITION
- // ==============================
-
- var Button = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, Button.DEFAULTS, options)
- this.isLoading = false
- }
-
- Button.VERSION = '3.3.6'
-
- Button.DEFAULTS = {
- loadingText: 'loading...'
- }
-
- Button.prototype.setState = function (state) {
- var d = 'disabled'
- var $el = this.$element
- var val = $el.is('input') ? 'val' : 'html'
- var data = $el.data()
-
- state += 'Text'
-
- if (data.resetText == null) $el.data('resetText', $el[val]())
-
- // push to event loop to allow forms to submit
- setTimeout($.proxy(function () {
- $el[val](data[state] == null ? this.options[state] : data[state])
-
- if (state == 'loadingText') {
- this.isLoading = true
- $el.addClass(d).attr(d, d)
- } else if (this.isLoading) {
- this.isLoading = false
- $el.removeClass(d).removeAttr(d)
- }
- }, this), 0)
- }
-
- Button.prototype.toggle = function () {
- var changed = true
- var $parent = this.$element.closest('[data-toggle="buttons"]')
-
- if ($parent.length) {
- var $input = this.$element.find('input')
- if ($input.prop('type') == 'radio') {
- if ($input.prop('checked')) changed = false
- $parent.find('.active').removeClass('active')
- this.$element.addClass('active')
- } else if ($input.prop('type') == 'checkbox') {
- if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
- this.$element.toggleClass('active')
- }
- $input.prop('checked', this.$element.hasClass('active'))
- if (changed) $input.trigger('change')
- } else {
- this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
- this.$element.toggleClass('active')
- }
- }
-
-
- // BUTTON PLUGIN DEFINITION
- // ========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.button')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.button', (data = new Button(this, options)))
-
- if (option == 'toggle') data.toggle()
- else if (option) data.setState(option)
- })
- }
-
- var old = $.fn.button
-
- $.fn.button = Plugin
- $.fn.button.Constructor = Button
-
-
- // BUTTON NO CONFLICT
- // ==================
-
- $.fn.button.noConflict = function () {
- $.fn.button = old
- return this
- }
-
-
- // BUTTON DATA-API
- // ===============
-
- $(document)
- .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
- var $btn = $(e.target)
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
- Plugin.call($btn, 'toggle')
- if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
- })
- .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
- $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: carousel.js v3.3.6
- * http://getbootstrap.com/javascript/#carousel
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // CAROUSEL CLASS DEFINITION
- // =========================
-
- var Carousel = function (element, options) {
- this.$element = $(element)
- this.$indicators = this.$element.find('.carousel-indicators')
- this.options = options
- this.paused = null
- this.sliding = null
- this.interval = null
- this.$active = null
- this.$items = null
-
- this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
-
- this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
- .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
- .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
- }
-
- Carousel.VERSION = '3.3.6'
-
- Carousel.TRANSITION_DURATION = 600
-
- Carousel.DEFAULTS = {
- interval: 5000,
- pause: 'hover',
- wrap: true,
- keyboard: true
- }
-
- Carousel.prototype.keydown = function (e) {
- if (/input|textarea/i.test(e.target.tagName)) return
- switch (e.which) {
- case 37: this.prev(); break
- case 39: this.next(); break
- default: return
- }
-
- e.preventDefault()
- }
-
- Carousel.prototype.cycle = function (e) {
- e || (this.paused = false)
-
- this.interval && clearInterval(this.interval)
-
- this.options.interval
- && !this.paused
- && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-
- return this
- }
-
- Carousel.prototype.getItemIndex = function (item) {
- this.$items = item.parent().children('.item')
- return this.$items.index(item || this.$active)
- }
-
- Carousel.prototype.getItemForDirection = function (direction, active) {
- var activeIndex = this.getItemIndex(active)
- var willWrap = (direction == 'prev' && activeIndex === 0)
- || (direction == 'next' && activeIndex == (this.$items.length - 1))
- if (willWrap && !this.options.wrap) return active
- var delta = direction == 'prev' ? -1 : 1
- var itemIndex = (activeIndex + delta) % this.$items.length
- return this.$items.eq(itemIndex)
- }
-
- Carousel.prototype.to = function (pos) {
- var that = this
- var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
-
- if (pos > (this.$items.length - 1) || pos < 0) return
-
- if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
- if (activeIndex == pos) return this.pause().cycle()
-
- return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
- }
-
- Carousel.prototype.pause = function (e) {
- e || (this.paused = true)
-
- if (this.$element.find('.next, .prev').length && $.support.transition) {
- this.$element.trigger($.support.transition.end)
- this.cycle(true)
- }
-
- this.interval = clearInterval(this.interval)
-
- return this
- }
-
- Carousel.prototype.next = function () {
- if (this.sliding) return
- return this.slide('next')
- }
-
- Carousel.prototype.prev = function () {
- if (this.sliding) return
- return this.slide('prev')
- }
-
- Carousel.prototype.slide = function (type, next) {
- var $active = this.$element.find('.item.active')
- var $next = next || this.getItemForDirection(type, $active)
- var isCycling = this.interval
- var direction = type == 'next' ? 'left' : 'right'
- var that = this
-
- if ($next.hasClass('active')) return (this.sliding = false)
-
- var relatedTarget = $next[0]
- var slideEvent = $.Event('slide.bs.carousel', {
- relatedTarget: relatedTarget,
- direction: direction
- })
- this.$element.trigger(slideEvent)
- if (slideEvent.isDefaultPrevented()) return
-
- this.sliding = true
-
- isCycling && this.pause()
-
- if (this.$indicators.length) {
- this.$indicators.find('.active').removeClass('active')
- var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
- $nextIndicator && $nextIndicator.addClass('active')
- }
-
- var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
- if ($.support.transition && this.$element.hasClass('slide')) {
- $next.addClass(type)
- $next[0].offsetWidth // force reflow
- $active.addClass(direction)
- $next.addClass(direction)
- $active
- .one('bsTransitionEnd', function () {
- $next.removeClass([type, direction].join(' ')).addClass('active')
- $active.removeClass(['active', direction].join(' '))
- that.sliding = false
- setTimeout(function () {
- that.$element.trigger(slidEvent)
- }, 0)
- })
- .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
- } else {
- $active.removeClass('active')
- $next.addClass('active')
- this.sliding = false
- this.$element.trigger(slidEvent)
- }
-
- isCycling && this.cycle()
-
- return this
- }
-
-
- // CAROUSEL PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.carousel')
- var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
- var action = typeof option == 'string' ? option : options.slide
-
- if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
- if (typeof option == 'number') data.to(option)
- else if (action) data[action]()
- else if (options.interval) data.pause().cycle()
- })
- }
-
- var old = $.fn.carousel
-
- $.fn.carousel = Plugin
- $.fn.carousel.Constructor = Carousel
-
-
- // CAROUSEL NO CONFLICT
- // ====================
-
- $.fn.carousel.noConflict = function () {
- $.fn.carousel = old
- return this
- }
-
-
- // CAROUSEL DATA-API
- // =================
-
- var clickHandler = function (e) {
- var href
- var $this = $(this)
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
- if (!$target.hasClass('carousel')) return
- var options = $.extend({}, $target.data(), $this.data())
- var slideIndex = $this.attr('data-slide-to')
- if (slideIndex) options.interval = false
-
- Plugin.call($target, options)
-
- if (slideIndex) {
- $target.data('bs.carousel').to(slideIndex)
- }
-
- e.preventDefault()
- }
-
- $(document)
- .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
- .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
-
- $(window).on('load', function () {
- $('[data-ride="carousel"]').each(function () {
- var $carousel = $(this)
- Plugin.call($carousel, $carousel.data())
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: collapse.js v3.3.6
- * http://getbootstrap.com/javascript/#collapse
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // COLLAPSE PUBLIC CLASS DEFINITION
- // ================================
-
- var Collapse = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, Collapse.DEFAULTS, options)
- this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
- '[data-toggle="collapse"][data-target="#' + element.id + '"]')
- this.transitioning = null
-
- if (this.options.parent) {
- this.$parent = this.getParent()
- } else {
- this.addAriaAndCollapsedClass(this.$element, this.$trigger)
- }
-
- if (this.options.toggle) this.toggle()
- }
-
- Collapse.VERSION = '3.3.6'
-
- Collapse.TRANSITION_DURATION = 350
-
- Collapse.DEFAULTS = {
- toggle: true
- }
-
- Collapse.prototype.dimension = function () {
- var hasWidth = this.$element.hasClass('width')
- return hasWidth ? 'width' : 'height'
- }
-
- Collapse.prototype.show = function () {
- if (this.transitioning || this.$element.hasClass('in')) return
-
- var activesData
- var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
-
- if (actives && actives.length) {
- activesData = actives.data('bs.collapse')
- if (activesData && activesData.transitioning) return
- }
-
- var startEvent = $.Event('show.bs.collapse')
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
-
- if (actives && actives.length) {
- Plugin.call(actives, 'hide')
- activesData || actives.data('bs.collapse', null)
- }
-
- var dimension = this.dimension()
-
- this.$element
- .removeClass('collapse')
- .addClass('collapsing')[dimension](0)
- .attr('aria-expanded', true)
-
- this.$trigger
- .removeClass('collapsed')
- .attr('aria-expanded', true)
-
- this.transitioning = 1
-
- var complete = function () {
- this.$element
- .removeClass('collapsing')
- .addClass('collapse in')[dimension]('')
- this.transitioning = 0
- this.$element
- .trigger('shown.bs.collapse')
- }
-
- if (!$.support.transition) return complete.call(this)
-
- var scrollSize = $.camelCase(['scroll', dimension].join('-'))
-
- this.$element
- .one('bsTransitionEnd', $.proxy(complete, this))
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
- }
-
- Collapse.prototype.hide = function () {
- if (this.transitioning || !this.$element.hasClass('in')) return
-
- var startEvent = $.Event('hide.bs.collapse')
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
-
- var dimension = this.dimension()
-
- this.$element[dimension](this.$element[dimension]())[0].offsetHeight
-
- this.$element
- .addClass('collapsing')
- .removeClass('collapse in')
- .attr('aria-expanded', false)
-
- this.$trigger
- .addClass('collapsed')
- .attr('aria-expanded', false)
-
- this.transitioning = 1
-
- var complete = function () {
- this.transitioning = 0
- this.$element
- .removeClass('collapsing')
- .addClass('collapse')
- .trigger('hidden.bs.collapse')
- }
-
- if (!$.support.transition) return complete.call(this)
-
- this.$element
- [dimension](0)
- .one('bsTransitionEnd', $.proxy(complete, this))
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
- }
-
- Collapse.prototype.toggle = function () {
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
- }
-
- Collapse.prototype.getParent = function () {
- return $(this.options.parent)
- .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
- .each($.proxy(function (i, element) {
- var $element = $(element)
- this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
- }, this))
- .end()
- }
-
- Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
- var isOpen = $element.hasClass('in')
-
- $element.attr('aria-expanded', isOpen)
- $trigger
- .toggleClass('collapsed', !isOpen)
- .attr('aria-expanded', isOpen)
- }
-
- function getTargetFromTrigger($trigger) {
- var href
- var target = $trigger.attr('data-target')
- || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
-
- return $(target)
- }
-
-
- // COLLAPSE PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.collapse')
- var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
- if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
- if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.collapse
-
- $.fn.collapse = Plugin
- $.fn.collapse.Constructor = Collapse
-
-
- // COLLAPSE NO CONFLICT
- // ====================
-
- $.fn.collapse.noConflict = function () {
- $.fn.collapse = old
- return this
- }
-
-
- // COLLAPSE DATA-API
- // =================
-
- $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
- var $this = $(this)
-
- if (!$this.attr('data-target')) e.preventDefault()
-
- var $target = getTargetFromTrigger($this)
- var data = $target.data('bs.collapse')
- var option = data ? 'toggle' : $this.data()
-
- Plugin.call($target, option)
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: dropdown.js v3.3.6
- * http://getbootstrap.com/javascript/#dropdowns
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // DROPDOWN CLASS DEFINITION
- // =========================
-
- var backdrop = '.dropdown-backdrop'
- var toggle = '[data-toggle="dropdown"]'
- var Dropdown = function (element) {
- $(element).on('click.bs.dropdown', this.toggle)
- }
-
- Dropdown.VERSION = '3.3.6'
-
- function getParent($this) {
- var selector = $this.attr('data-target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- var $parent = selector && $(selector)
-
- return $parent && $parent.length ? $parent : $this.parent()
- }
-
- function clearMenus(e) {
- if (e && e.which === 3) return
- $(backdrop).remove()
- $(toggle).each(function () {
- var $this = $(this)
- var $parent = getParent($this)
- var relatedTarget = { relatedTarget: this }
-
- if (!$parent.hasClass('open')) return
-
- if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
-
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
-
- if (e.isDefaultPrevented()) return
-
- $this.attr('aria-expanded', 'false')
- $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
- })
- }
-
- Dropdown.prototype.toggle = function (e) {
- var $this = $(this)
-
- if ($this.is('.disabled, :disabled')) return
-
- var $parent = getParent($this)
- var isActive = $parent.hasClass('open')
-
- clearMenus()
-
- if (!isActive) {
- if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
- // if mobile we use a backdrop because click events don't delegate
- $(document.createElement('div'))
- .addClass('dropdown-backdrop')
- .insertAfter($(this))
- .on('click', clearMenus)
- }
-
- var relatedTarget = { relatedTarget: this }
- $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
-
- if (e.isDefaultPrevented()) return
-
- $this
- .trigger('focus')
- .attr('aria-expanded', 'true')
-
- $parent
- .toggleClass('open')
- .trigger($.Event('shown.bs.dropdown', relatedTarget))
- }
-
- return false
- }
-
- Dropdown.prototype.keydown = function (e) {
- if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
-
- var $this = $(this)
-
- e.preventDefault()
- e.stopPropagation()
-
- if ($this.is('.disabled, :disabled')) return
-
- var $parent = getParent($this)
- var isActive = $parent.hasClass('open')
-
- if (!isActive && e.which != 27 || isActive && e.which == 27) {
- if (e.which == 27) $parent.find(toggle).trigger('focus')
- return $this.trigger('click')
- }
-
- var desc = ' li:not(.disabled):visible a'
- var $items = $parent.find('.dropdown-menu' + desc)
-
- if (!$items.length) return
-
- var index = $items.index(e.target)
-
- if (e.which == 38 && index > 0) index-- // up
- if (e.which == 40 && index < $items.length - 1) index++ // down
- if (!~index) index = 0
-
- $items.eq(index).trigger('focus')
- }
-
-
- // DROPDOWN PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.dropdown')
-
- if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- var old = $.fn.dropdown
-
- $.fn.dropdown = Plugin
- $.fn.dropdown.Constructor = Dropdown
-
-
- // DROPDOWN NO CONFLICT
- // ====================
-
- $.fn.dropdown.noConflict = function () {
- $.fn.dropdown = old
- return this
- }
-
-
- // APPLY TO STANDARD DROPDOWN ELEMENTS
- // ===================================
-
- $(document)
- .on('click.bs.dropdown.data-api', clearMenus)
- .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
- .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
- .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
- .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: modal.js v3.3.6
- * http://getbootstrap.com/javascript/#modals
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // MODAL CLASS DEFINITION
- // ======================
-
- var Modal = function (element, options) {
- this.options = options
- this.$body = $(document.body)
- this.$element = $(element)
- this.$dialog = this.$element.find('.modal-dialog')
- this.$backdrop = null
- this.isShown = null
- this.originalBodyPad = null
- this.scrollbarWidth = 0
- this.ignoreBackdropClick = false
-
- if (this.options.remote) {
- this.$element
- .find('.modal-content')
- .load(this.options.remote, $.proxy(function () {
- this.$element.trigger('loaded.bs.modal')
- }, this))
- }
- }
-
- Modal.VERSION = '3.3.6'
-
- Modal.TRANSITION_DURATION = 300
- Modal.BACKDROP_TRANSITION_DURATION = 150
-
- Modal.DEFAULTS = {
- backdrop: true,
- keyboard: true,
- show: true
- }
-
- Modal.prototype.toggle = function (_relatedTarget) {
- return this.isShown ? this.hide() : this.show(_relatedTarget)
- }
-
- Modal.prototype.show = function (_relatedTarget) {
- var that = this
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
-
- this.$element.trigger(e)
-
- if (this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = true
-
- this.checkScrollbar()
- this.setScrollbar()
- this.$body.addClass('modal-open')
-
- this.escape()
- this.resize()
-
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
-
- this.$dialog.on('mousedown.dismiss.bs.modal', function () {
- that.$element.one('mouseup.dismiss.bs.modal', function (e) {
- if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
- })
- })
-
- this.backdrop(function () {
- var transition = $.support.transition && that.$element.hasClass('fade')
-
- if (!that.$element.parent().length) {
- that.$element.appendTo(that.$body) // don't move modals dom position
- }
-
- that.$element
- .show()
- .scrollTop(0)
-
- that.adjustDialog()
-
- if (transition) {
- that.$element[0].offsetWidth // force reflow
- }
-
- that.$element.addClass('in')
-
- that.enforceFocus()
-
- var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
-
- transition ?
- that.$dialog // wait for modal to slide in
- .one('bsTransitionEnd', function () {
- that.$element.trigger('focus').trigger(e)
- })
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
- that.$element.trigger('focus').trigger(e)
- })
- }
-
- Modal.prototype.hide = function (e) {
- if (e) e.preventDefault()
-
- e = $.Event('hide.bs.modal')
-
- this.$element.trigger(e)
-
- if (!this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = false
-
- this.escape()
- this.resize()
-
- $(document).off('focusin.bs.modal')
-
- this.$element
- .removeClass('in')
- .off('click.dismiss.bs.modal')
- .off('mouseup.dismiss.bs.modal')
-
- this.$dialog.off('mousedown.dismiss.bs.modal')
-
- $.support.transition && this.$element.hasClass('fade') ?
- this.$element
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
- this.hideModal()
- }
-
- Modal.prototype.enforceFocus = function () {
- $(document)
- .off('focusin.bs.modal') // guard against infinite focus loop
- .on('focusin.bs.modal', $.proxy(function (e) {
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
- this.$element.trigger('focus')
- }
- }, this))
- }
-
- Modal.prototype.escape = function () {
- if (this.isShown && this.options.keyboard) {
- this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
- e.which == 27 && this.hide()
- }, this))
- } else if (!this.isShown) {
- this.$element.off('keydown.dismiss.bs.modal')
- }
- }
-
- Modal.prototype.resize = function () {
- if (this.isShown) {
- $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
- } else {
- $(window).off('resize.bs.modal')
- }
- }
-
- Modal.prototype.hideModal = function () {
- var that = this
- this.$element.hide()
- this.backdrop(function () {
- that.$body.removeClass('modal-open')
- that.resetAdjustments()
- that.resetScrollbar()
- that.$element.trigger('hidden.bs.modal')
- })
- }
-
- Modal.prototype.removeBackdrop = function () {
- this.$backdrop && this.$backdrop.remove()
- this.$backdrop = null
- }
-
- Modal.prototype.backdrop = function (callback) {
- var that = this
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
-
- if (this.isShown && this.options.backdrop) {
- var doAnimate = $.support.transition && animate
-
- this.$backdrop = $(document.createElement('div'))
- .addClass('modal-backdrop ' + animate)
- .appendTo(this.$body)
-
- this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
- if (this.ignoreBackdropClick) {
- this.ignoreBackdropClick = false
- return
- }
- if (e.target !== e.currentTarget) return
- this.options.backdrop == 'static'
- ? this.$element[0].focus()
- : this.hide()
- }, this))
-
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
- this.$backdrop.addClass('in')
-
- if (!callback) return
-
- doAnimate ?
- this.$backdrop
- .one('bsTransitionEnd', callback)
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
- callback()
-
- } else if (!this.isShown && this.$backdrop) {
- this.$backdrop.removeClass('in')
-
- var callbackRemove = function () {
- that.removeBackdrop()
- callback && callback()
- }
- $.support.transition && this.$element.hasClass('fade') ?
- this.$backdrop
- .one('bsTransitionEnd', callbackRemove)
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
- callbackRemove()
-
- } else if (callback) {
- callback()
- }
- }
-
- // these following methods are used to handle overflowing modals
-
- Modal.prototype.handleUpdate = function () {
- this.adjustDialog()
- }
-
- Modal.prototype.adjustDialog = function () {
- var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
-
- this.$element.css({
- paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
- paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
- })
- }
-
- Modal.prototype.resetAdjustments = function () {
- this.$element.css({
- paddingLeft: '',
- paddingRight: ''
- })
- }
-
- Modal.prototype.checkScrollbar = function () {
- var fullWindowWidth = window.innerWidth
- if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
- var documentElementRect = document.documentElement.getBoundingClientRect()
- fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
- }
- this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
- this.scrollbarWidth = this.measureScrollbar()
- }
-
- Modal.prototype.setScrollbar = function () {
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
- this.originalBodyPad = document.body.style.paddingRight || ''
- if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
- }
-
- Modal.prototype.resetScrollbar = function () {
- this.$body.css('padding-right', this.originalBodyPad)
- }
-
- Modal.prototype.measureScrollbar = function () { // thx walsh
- var scrollDiv = document.createElement('div')
- scrollDiv.className = 'modal-scrollbar-measure'
- this.$body.append(scrollDiv)
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
- this.$body[0].removeChild(scrollDiv)
- return scrollbarWidth
- }
-
-
- // MODAL PLUGIN DEFINITION
- // =======================
-
- function Plugin(option, _relatedTarget) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.modal')
- var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
- if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
- if (typeof option == 'string') data[option](_relatedTarget)
- else if (options.show) data.show(_relatedTarget)
- })
- }
-
- var old = $.fn.modal
-
- $.fn.modal = Plugin
- $.fn.modal.Constructor = Modal
-
-
- // MODAL NO CONFLICT
- // =================
-
- $.fn.modal.noConflict = function () {
- $.fn.modal = old
- return this
- }
-
-
- // MODAL DATA-API
- // ==============
-
- $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
- var $this = $(this)
- var href = $this.attr('href')
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
-
- if ($this.is('a')) e.preventDefault()
-
- $target.one('show.bs.modal', function (showEvent) {
- if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
- $target.one('hidden.bs.modal', function () {
- $this.is(':visible') && $this.trigger('focus')
- })
- })
- Plugin.call($target, option, this)
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tooltip.js v3.3.6
- * http://getbootstrap.com/javascript/#tooltip
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // TOOLTIP PUBLIC CLASS DEFINITION
- // ===============================
-
- var Tooltip = function (element, options) {
- this.type = null
- this.options = null
- this.enabled = null
- this.timeout = null
- this.hoverState = null
- this.$element = null
- this.inState = null
-
- this.init('tooltip', element, options)
- }
-
- Tooltip.VERSION = '3.3.6'
-
- Tooltip.TRANSITION_DURATION = 150
-
- Tooltip.DEFAULTS = {
- animation: true,
- placement: 'top',
- selector: false,
- template: '',
- trigger: 'hover focus',
- title: '',
- delay: 0,
- html: false,
- container: false,
- viewport: {
- selector: 'body',
- padding: 0
- }
- }
-
- Tooltip.prototype.init = function (type, element, options) {
- this.enabled = true
- this.type = type
- this.$element = $(element)
- this.options = this.getOptions(options)
- this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
- this.inState = { click: false, hover: false, focus: false }
-
- if (this.$element[0] instanceof document.constructor && !this.options.selector) {
- throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
- }
-
- var triggers = this.options.trigger.split(' ')
-
- for (var i = triggers.length; i--;) {
- var trigger = triggers[i]
-
- if (trigger == 'click') {
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
- } else if (trigger != 'manual') {
- var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
- var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
-
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
- }
- }
-
- this.options.selector ?
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
- this.fixTitle()
- }
-
- Tooltip.prototype.getDefaults = function () {
- return Tooltip.DEFAULTS
- }
-
- Tooltip.prototype.getOptions = function (options) {
- options = $.extend({}, this.getDefaults(), this.$element.data(), options)
-
- if (options.delay && typeof options.delay == 'number') {
- options.delay = {
- show: options.delay,
- hide: options.delay
- }
- }
-
- return options
- }
-
- Tooltip.prototype.getDelegateOptions = function () {
- var options = {}
- var defaults = this.getDefaults()
-
- this._options && $.each(this._options, function (key, value) {
- if (defaults[key] != value) options[key] = value
- })
-
- return options
- }
-
- Tooltip.prototype.enter = function (obj) {
- var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget).data('bs.' + this.type)
-
- if (!self) {
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
- $(obj.currentTarget).data('bs.' + this.type, self)
- }
-
- if (obj instanceof $.Event) {
- self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
- }
-
- if (self.tip().hasClass('in') || self.hoverState == 'in') {
- self.hoverState = 'in'
- return
- }
-
- clearTimeout(self.timeout)
-
- self.hoverState = 'in'
-
- if (!self.options.delay || !self.options.delay.show) return self.show()
-
- self.timeout = setTimeout(function () {
- if (self.hoverState == 'in') self.show()
- }, self.options.delay.show)
- }
-
- Tooltip.prototype.isInStateTrue = function () {
- for (var key in this.inState) {
- if (this.inState[key]) return true
- }
-
- return false
- }
-
- Tooltip.prototype.leave = function (obj) {
- var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget).data('bs.' + this.type)
-
- if (!self) {
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
- $(obj.currentTarget).data('bs.' + this.type, self)
- }
-
- if (obj instanceof $.Event) {
- self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
- }
-
- if (self.isInStateTrue()) return
-
- clearTimeout(self.timeout)
-
- self.hoverState = 'out'
-
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
- self.timeout = setTimeout(function () {
- if (self.hoverState == 'out') self.hide()
- }, self.options.delay.hide)
- }
-
- Tooltip.prototype.show = function () {
- var e = $.Event('show.bs.' + this.type)
-
- if (this.hasContent() && this.enabled) {
- this.$element.trigger(e)
-
- var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
- if (e.isDefaultPrevented() || !inDom) return
- var that = this
-
- var $tip = this.tip()
-
- var tipId = this.getUID(this.type)
-
- this.setContent()
- $tip.attr('id', tipId)
- this.$element.attr('aria-describedby', tipId)
-
- if (this.options.animation) $tip.addClass('fade')
-
- var placement = typeof this.options.placement == 'function' ?
- this.options.placement.call(this, $tip[0], this.$element[0]) :
- this.options.placement
-
- var autoToken = /\s?auto?\s?/i
- var autoPlace = autoToken.test(placement)
- if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
-
- $tip
- .detach()
- .css({ top: 0, left: 0, display: 'block' })
- .addClass(placement)
- .data('bs.' + this.type, this)
-
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
- this.$element.trigger('inserted.bs.' + this.type)
-
- var pos = this.getPosition()
- var actualWidth = $tip[0].offsetWidth
- var actualHeight = $tip[0].offsetHeight
-
- if (autoPlace) {
- var orgPlacement = placement
- var viewportDim = this.getPosition(this.$viewport)
-
- placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
- placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
- placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
- placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
- placement
-
- $tip
- .removeClass(orgPlacement)
- .addClass(placement)
- }
-
- var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
- this.applyPlacement(calculatedOffset, placement)
-
- var complete = function () {
- var prevHoverState = that.hoverState
- that.$element.trigger('shown.bs.' + that.type)
- that.hoverState = null
-
- if (prevHoverState == 'out') that.leave(that)
- }
-
- $.support.transition && this.$tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
- complete()
- }
- }
-
- Tooltip.prototype.applyPlacement = function (offset, placement) {
- var $tip = this.tip()
- var width = $tip[0].offsetWidth
- var height = $tip[0].offsetHeight
-
- // manually read margins because getBoundingClientRect includes difference
- var marginTop = parseInt($tip.css('margin-top'), 10)
- var marginLeft = parseInt($tip.css('margin-left'), 10)
-
- // we must check for NaN for ie 8/9
- if (isNaN(marginTop)) marginTop = 0
- if (isNaN(marginLeft)) marginLeft = 0
-
- offset.top += marginTop
- offset.left += marginLeft
-
- // $.fn.offset doesn't round pixel values
- // so we use setOffset directly with our own function B-0
- $.offset.setOffset($tip[0], $.extend({
- using: function (props) {
- $tip.css({
- top: Math.round(props.top),
- left: Math.round(props.left)
- })
- }
- }, offset), 0)
-
- $tip.addClass('in')
-
- // check to see if placing tip in new offset caused the tip to resize itself
- var actualWidth = $tip[0].offsetWidth
- var actualHeight = $tip[0].offsetHeight
-
- if (placement == 'top' && actualHeight != height) {
- offset.top = offset.top + height - actualHeight
- }
-
- var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
-
- if (delta.left) offset.left += delta.left
- else offset.top += delta.top
-
- var isVertical = /top|bottom/.test(placement)
- var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
- var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
-
- $tip.offset(offset)
- this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
- }
-
- Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
- this.arrow()
- .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
- .css(isVertical ? 'top' : 'left', '')
- }
-
- Tooltip.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
-
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
- $tip.removeClass('fade in top bottom left right')
- }
-
- Tooltip.prototype.hide = function (callback) {
- var that = this
- var $tip = $(this.$tip)
- var e = $.Event('hide.bs.' + this.type)
-
- function complete() {
- if (that.hoverState != 'in') $tip.detach()
- that.$element
- .removeAttr('aria-describedby')
- .trigger('hidden.bs.' + that.type)
- callback && callback()
- }
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- $tip.removeClass('in')
-
- $.support.transition && $tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
- complete()
-
- this.hoverState = null
-
- return this
- }
-
- Tooltip.prototype.fixTitle = function () {
- var $e = this.$element
- if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
- }
- }
-
- Tooltip.prototype.hasContent = function () {
- return this.getTitle()
- }
-
- Tooltip.prototype.getPosition = function ($element) {
- $element = $element || this.$element
-
- var el = $element[0]
- var isBody = el.tagName == 'BODY'
-
- var elRect = el.getBoundingClientRect()
- if (elRect.width == null) {
- // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
- elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
- }
- var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
- var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
- var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
-
- return $.extend({}, elRect, scroll, outerDims, elOffset)
- }
-
- Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
- return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
-
- }
-
- Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
- var delta = { top: 0, left: 0 }
- if (!this.$viewport) return delta
-
- var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
- var viewportDimensions = this.getPosition(this.$viewport)
-
- if (/right|left/.test(placement)) {
- var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
- var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
- if (topEdgeOffset < viewportDimensions.top) { // top overflow
- delta.top = viewportDimensions.top - topEdgeOffset
- } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
- delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
- }
- } else {
- var leftEdgeOffset = pos.left - viewportPadding
- var rightEdgeOffset = pos.left + viewportPadding + actualWidth
- if (leftEdgeOffset < viewportDimensions.left) { // left overflow
- delta.left = viewportDimensions.left - leftEdgeOffset
- } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
- delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
- }
- }
-
- return delta
- }
-
- Tooltip.prototype.getTitle = function () {
- var title
- var $e = this.$element
- var o = this.options
-
- title = $e.attr('data-original-title')
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
-
- return title
- }
-
- Tooltip.prototype.getUID = function (prefix) {
- do prefix += ~~(Math.random() * 1000000)
- while (document.getElementById(prefix))
- return prefix
- }
-
- Tooltip.prototype.tip = function () {
- if (!this.$tip) {
- this.$tip = $(this.options.template)
- if (this.$tip.length != 1) {
- throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
- }
- }
- return this.$tip
- }
-
- Tooltip.prototype.arrow = function () {
- return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
- }
-
- Tooltip.prototype.enable = function () {
- this.enabled = true
- }
-
- Tooltip.prototype.disable = function () {
- this.enabled = false
- }
-
- Tooltip.prototype.toggleEnabled = function () {
- this.enabled = !this.enabled
- }
-
- Tooltip.prototype.toggle = function (e) {
- var self = this
- if (e) {
- self = $(e.currentTarget).data('bs.' + this.type)
- if (!self) {
- self = new this.constructor(e.currentTarget, this.getDelegateOptions())
- $(e.currentTarget).data('bs.' + this.type, self)
- }
- }
-
- if (e) {
- self.inState.click = !self.inState.click
- if (self.isInStateTrue()) self.enter(self)
- else self.leave(self)
- } else {
- self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
- }
- }
-
- Tooltip.prototype.destroy = function () {
- var that = this
- clearTimeout(this.timeout)
- this.hide(function () {
- that.$element.off('.' + that.type).removeData('bs.' + that.type)
- if (that.$tip) {
- that.$tip.detach()
- }
- that.$tip = null
- that.$arrow = null
- that.$viewport = null
- })
- }
-
-
- // TOOLTIP PLUGIN DEFINITION
- // =========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tooltip')
- var options = typeof option == 'object' && option
-
- if (!data && /destroy|hide/.test(option)) return
- if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.tooltip
-
- $.fn.tooltip = Plugin
- $.fn.tooltip.Constructor = Tooltip
-
-
- // TOOLTIP NO CONFLICT
- // ===================
-
- $.fn.tooltip.noConflict = function () {
- $.fn.tooltip = old
- return this
- }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: popover.js v3.3.6
- * http://getbootstrap.com/javascript/#popovers
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // POPOVER PUBLIC CLASS DEFINITION
- // ===============================
-
- var Popover = function (element, options) {
- this.init('popover', element, options)
- }
-
- if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
-
- Popover.VERSION = '3.3.6'
-
- Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
- placement: 'right',
- trigger: 'click',
- content: '',
- template: ''
- })
-
-
- // NOTE: POPOVER EXTENDS tooltip.js
- // ================================
-
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
-
- Popover.prototype.constructor = Popover
-
- Popover.prototype.getDefaults = function () {
- return Popover.DEFAULTS
- }
-
- Popover.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
- var content = this.getContent()
-
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
- $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
- this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
- ](content)
-
- $tip.removeClass('fade top bottom left right in')
-
- // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
- // this manually by checking the contents.
- if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
- }
-
- Popover.prototype.hasContent = function () {
- return this.getTitle() || this.getContent()
- }
-
- Popover.prototype.getContent = function () {
- var $e = this.$element
- var o = this.options
-
- return $e.attr('data-content')
- || (typeof o.content == 'function' ?
- o.content.call($e[0]) :
- o.content)
- }
-
- Popover.prototype.arrow = function () {
- return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
- }
-
-
- // POPOVER PLUGIN DEFINITION
- // =========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.popover')
- var options = typeof option == 'object' && option
-
- if (!data && /destroy|hide/.test(option)) return
- if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.popover
-
- $.fn.popover = Plugin
- $.fn.popover.Constructor = Popover
-
-
- // POPOVER NO CONFLICT
- // ===================
-
- $.fn.popover.noConflict = function () {
- $.fn.popover = old
- return this
- }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: scrollspy.js v3.3.6
- * http://getbootstrap.com/javascript/#scrollspy
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // SCROLLSPY CLASS DEFINITION
- // ==========================
-
- function ScrollSpy(element, options) {
- this.$body = $(document.body)
- this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
- this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
- this.selector = (this.options.target || '') + ' .nav li > a'
- this.offsets = []
- this.targets = []
- this.activeTarget = null
- this.scrollHeight = 0
-
- this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
- this.refresh()
- this.process()
- }
-
- ScrollSpy.VERSION = '3.3.6'
-
- ScrollSpy.DEFAULTS = {
- offset: 10
- }
-
- ScrollSpy.prototype.getScrollHeight = function () {
- return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
- }
-
- ScrollSpy.prototype.refresh = function () {
- var that = this
- var offsetMethod = 'offset'
- var offsetBase = 0
-
- this.offsets = []
- this.targets = []
- this.scrollHeight = this.getScrollHeight()
-
- if (!$.isWindow(this.$scrollElement[0])) {
- offsetMethod = 'position'
- offsetBase = this.$scrollElement.scrollTop()
- }
-
- this.$body
- .find(this.selector)
- .map(function () {
- var $el = $(this)
- var href = $el.data('target') || $el.attr('href')
- var $href = /^#./.test(href) && $(href)
-
- return ($href
- && $href.length
- && $href.is(':visible')
- && [[$href[offsetMethod]().top + offsetBase, href]]) || null
- })
- .sort(function (a, b) { return a[0] - b[0] })
- .each(function () {
- that.offsets.push(this[0])
- that.targets.push(this[1])
- })
- }
-
- ScrollSpy.prototype.process = function () {
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
- var scrollHeight = this.getScrollHeight()
- var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
- var offsets = this.offsets
- var targets = this.targets
- var activeTarget = this.activeTarget
- var i
-
- if (this.scrollHeight != scrollHeight) {
- this.refresh()
- }
-
- if (scrollTop >= maxScroll) {
- return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
- }
-
- if (activeTarget && scrollTop < offsets[0]) {
- this.activeTarget = null
- return this.clear()
- }
-
- for (i = offsets.length; i--;) {
- activeTarget != targets[i]
- && scrollTop >= offsets[i]
- && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
- && this.activate(targets[i])
- }
- }
-
- ScrollSpy.prototype.activate = function (target) {
- this.activeTarget = target
-
- this.clear()
-
- var selector = this.selector +
- '[data-target="' + target + '"],' +
- this.selector + '[href="' + target + '"]'
-
- var active = $(selector)
- .parents('li')
- .addClass('active')
-
- if (active.parent('.dropdown-menu').length) {
- active = active
- .closest('li.dropdown')
- .addClass('active')
- }
-
- active.trigger('activate.bs.scrollspy')
- }
-
- ScrollSpy.prototype.clear = function () {
- $(this.selector)
- .parentsUntil(this.options.target, '.active')
- .removeClass('active')
- }
-
-
- // SCROLLSPY PLUGIN DEFINITION
- // ===========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.scrollspy')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.scrollspy
-
- $.fn.scrollspy = Plugin
- $.fn.scrollspy.Constructor = ScrollSpy
-
-
- // SCROLLSPY NO CONFLICT
- // =====================
-
- $.fn.scrollspy.noConflict = function () {
- $.fn.scrollspy = old
- return this
- }
-
-
- // SCROLLSPY DATA-API
- // ==================
-
- $(window).on('load.bs.scrollspy.data-api', function () {
- $('[data-spy="scroll"]').each(function () {
- var $spy = $(this)
- Plugin.call($spy, $spy.data())
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tab.js v3.3.6
- * http://getbootstrap.com/javascript/#tabs
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // TAB CLASS DEFINITION
- // ====================
-
- var Tab = function (element) {
- // jscs:disable requireDollarBeforejQueryAssignment
- this.element = $(element)
- // jscs:enable requireDollarBeforejQueryAssignment
- }
-
- Tab.VERSION = '3.3.6'
-
- Tab.TRANSITION_DURATION = 150
-
- Tab.prototype.show = function () {
- var $this = this.element
- var $ul = $this.closest('ul:not(.dropdown-menu)')
- var selector = $this.data('target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- if ($this.parent('li').hasClass('active')) return
-
- var $previous = $ul.find('.active:last a')
- var hideEvent = $.Event('hide.bs.tab', {
- relatedTarget: $this[0]
- })
- var showEvent = $.Event('show.bs.tab', {
- relatedTarget: $previous[0]
- })
-
- $previous.trigger(hideEvent)
- $this.trigger(showEvent)
-
- if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
-
- var $target = $(selector)
-
- this.activate($this.closest('li'), $ul)
- this.activate($target, $target.parent(), function () {
- $previous.trigger({
- type: 'hidden.bs.tab',
- relatedTarget: $this[0]
- })
- $this.trigger({
- type: 'shown.bs.tab',
- relatedTarget: $previous[0]
- })
- })
- }
-
- Tab.prototype.activate = function (element, container, callback) {
- var $active = container.find('> .active')
- var transition = callback
- && $.support.transition
- && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
-
- function next() {
- $active
- .removeClass('active')
- .find('> .dropdown-menu > .active')
- .removeClass('active')
- .end()
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', false)
-
- element
- .addClass('active')
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
-
- if (transition) {
- element[0].offsetWidth // reflow for transition
- element.addClass('in')
- } else {
- element.removeClass('fade')
- }
-
- if (element.parent('.dropdown-menu').length) {
- element
- .closest('li.dropdown')
- .addClass('active')
- .end()
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
- }
-
- callback && callback()
- }
-
- $active.length && transition ?
- $active
- .one('bsTransitionEnd', next)
- .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
- next()
-
- $active.removeClass('in')
- }
-
-
- // TAB PLUGIN DEFINITION
- // =====================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tab')
-
- if (!data) $this.data('bs.tab', (data = new Tab(this)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.tab
-
- $.fn.tab = Plugin
- $.fn.tab.Constructor = Tab
-
-
- // TAB NO CONFLICT
- // ===============
-
- $.fn.tab.noConflict = function () {
- $.fn.tab = old
- return this
- }
-
-
- // TAB DATA-API
- // ============
-
- var clickHandler = function (e) {
- e.preventDefault()
- Plugin.call($(this), 'show')
- }
-
- $(document)
- .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
- .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: affix.js v3.3.6
- * http://getbootstrap.com/javascript/#affix
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // AFFIX CLASS DEFINITION
- // ======================
-
- var Affix = function (element, options) {
- this.options = $.extend({}, Affix.DEFAULTS, options)
-
- this.$target = $(this.options.target)
- .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
- .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
-
- this.$element = $(element)
- this.affixed = null
- this.unpin = null
- this.pinnedOffset = null
-
- this.checkPosition()
- }
-
- Affix.VERSION = '3.3.6'
-
- Affix.RESET = 'affix affix-top affix-bottom'
-
- Affix.DEFAULTS = {
- offset: 0,
- target: window
- }
-
- Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
- var scrollTop = this.$target.scrollTop()
- var position = this.$element.offset()
- var targetHeight = this.$target.height()
-
- if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
-
- if (this.affixed == 'bottom') {
- if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
- return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
- }
-
- var initializing = this.affixed == null
- var colliderTop = initializing ? scrollTop : position.top
- var colliderHeight = initializing ? targetHeight : height
-
- if (offsetTop != null && scrollTop <= offsetTop) return 'top'
- if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
-
- return false
- }
-
- Affix.prototype.getPinnedOffset = function () {
- if (this.pinnedOffset) return this.pinnedOffset
- this.$element.removeClass(Affix.RESET).addClass('affix')
- var scrollTop = this.$target.scrollTop()
- var position = this.$element.offset()
- return (this.pinnedOffset = position.top - scrollTop)
- }
-
- Affix.prototype.checkPositionWithEventLoop = function () {
- setTimeout($.proxy(this.checkPosition, this), 1)
- }
-
- Affix.prototype.checkPosition = function () {
- if (!this.$element.is(':visible')) return
-
- var height = this.$element.height()
- var offset = this.options.offset
- var offsetTop = offset.top
- var offsetBottom = offset.bottom
- var scrollHeight = Math.max($(document).height(), $(document.body).height())
-
- if (typeof offset != 'object') offsetBottom = offsetTop = offset
- if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
- if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
-
- var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
-
- if (this.affixed != affix) {
- if (this.unpin != null) this.$element.css('top', '')
-
- var affixType = 'affix' + (affix ? '-' + affix : '')
- var e = $.Event(affixType + '.bs.affix')
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- this.affixed = affix
- this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
-
- this.$element
- .removeClass(Affix.RESET)
- .addClass(affixType)
- .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
- }
-
- if (affix == 'bottom') {
- this.$element.offset({
- top: scrollHeight - height - offsetBottom
- })
- }
- }
-
-
- // AFFIX PLUGIN DEFINITION
- // =======================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.affix')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.affix
-
- $.fn.affix = Plugin
- $.fn.affix.Constructor = Affix
-
-
- // AFFIX NO CONFLICT
- // =================
-
- $.fn.affix.noConflict = function () {
- $.fn.affix = old
- return this
- }
-
-
- // AFFIX DATA-API
- // ==============
-
- $(window).on('load', function () {
- $('[data-spy="affix"]').each(function () {
- var $spy = $(this)
- var data = $spy.data()
-
- data.offset = data.offset || {}
-
- if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
- if (data.offsetTop != null) data.offset.top = data.offsetTop
-
- Plugin.call($spy, data)
- })
- })
-
-}(jQuery);
diff --git a/profiles/web/skeleton/grails-app/assets/javascripts/jquery-2.2.0.min.js b/profiles/web/skeleton/grails-app/assets/javascripts/jquery-2.2.0.min.js
deleted file mode 100644
index 06ac263..0000000
--- a/profiles/web/skeleton/grails-app/assets/javascripts/jquery-2.2.0.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v2.2.0 | (c) jQuery Foundation | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!k.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML=" ",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML=" ","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML=" ",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c}catch(e){}O.set(a,b,c);
-}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return this;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.rnamespace||a.rnamespace.test(g.namespace))&&(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/