├── .gitignore ├── web-app ├── WEB-INF │ ├── plugins │ │ ├── app-engine-0.8.9 │ │ │ ├── grails-app │ │ │ │ └── i18n │ │ │ │ │ └── messages.properties │ │ │ └── plugin.xml │ │ ├── gorm-jpa-0.7.1 │ │ │ ├── grails-app │ │ │ │ └── i18n │ │ │ │ │ └── messages.properties │ │ │ └── plugin.xml │ │ └── mootools-0.1.3 │ │ │ ├── grails-app │ │ │ ├── views │ │ │ │ ├── layouts │ │ │ │ │ └── main.gsp │ │ │ │ ├── index.gsp │ │ │ │ ├── mooUi │ │ │ │ │ └── index.gsp │ │ │ │ └── error.gsp │ │ │ └── i18n │ │ │ │ └── messages.properties │ │ │ └── plugin.xml │ ├── appengine-generated │ │ ├── local_db.bin │ │ └── datastore-indexes-auto.xml │ ├── cron.xml │ ├── classes │ │ ├── application.properties │ │ └── META-INF │ │ │ └── persistence.xml │ ├── appengine-web.xml │ ├── sitemesh.xml │ ├── grails.xml │ ├── applicationContext.xml │ ├── web.xml │ └── tld │ │ └── spring.tld ├── images │ ├── favicon.ico │ ├── spinner.gif │ ├── grails_logo.jpg │ ├── grails_logo.png │ ├── leftnav_btm.png │ ├── leftnav_top.png │ ├── skin │ │ ├── house.png │ │ ├── shadow.jpg │ │ ├── exclamation.png │ │ ├── information.png │ │ ├── sorted_asc.gif │ │ ├── sorted_desc.gif │ │ ├── database_add.png │ │ ├── database_edit.png │ │ ├── database_save.png │ │ ├── database_delete.png │ │ └── database_table.png │ ├── springsource.png │ └── leftnav_midstretch.png ├── plugins │ └── mootools-0.1.3 │ │ ├── images │ │ ├── favicon.ico │ │ ├── spinner.gif │ │ ├── skin │ │ │ ├── house.png │ │ │ ├── shadow.jpg │ │ │ ├── sorted_asc.gif │ │ │ ├── database_add.png │ │ │ ├── database_edit.png │ │ │ ├── database_save.png │ │ │ ├── exclamation.png │ │ │ ├── information.png │ │ │ ├── sorted_desc.gif │ │ │ ├── database_delete.png │ │ │ └── database_table.png │ │ └── grails_logo.jpg │ │ ├── js │ │ ├── mootools │ │ │ ├── mootools-1.2.3-more-nc.js │ │ │ └── ui │ │ │ │ ├── window │ │ │ │ ├── images │ │ │ │ │ └── close.gif │ │ │ │ └── css │ │ │ │ │ └── window.css │ │ │ │ ├── mootabs │ │ │ │ ├── images │ │ │ │ │ ├── tab_off.gif │ │ │ │ │ └── tab_on.gif │ │ │ │ ├── css │ │ │ │ │ └── mootabs.css │ │ │ │ └── mootabs.js │ │ │ │ └── calendar │ │ │ │ ├── images │ │ │ │ ├── calendar.png │ │ │ │ ├── calendar-td.gif │ │ │ │ ├── calendar-icon.gif │ │ │ │ ├── calendar-next.gif │ │ │ │ ├── calendar-prev.gif │ │ │ │ ├── calendar-valid.gif │ │ │ │ └── calendar-hilite.gif │ │ │ │ └── css │ │ │ │ └── calendar.css │ │ └── application.js │ │ ├── index.gsp │ │ └── css │ │ └── main.css ├── js │ ├── application.js │ └── prototype │ │ ├── sound.js │ │ ├── scriptaculous.js │ │ ├── builder.js │ │ ├── animation.js │ │ └── slider.js └── css │ └── main.css ├── grails-app ├── conf │ ├── spring │ │ └── resources.groovy │ ├── BootStrap.groovy │ ├── datastore-indexes.xml │ ├── UrlMappings.groovy │ ├── DataSource.groovy │ ├── persistence.xml │ ├── BuildConfig.groovy │ └── Config.groovy ├── i18n │ ├── messages_da.properties │ ├── messages_ja.properties │ ├── messages_it.properties │ ├── messages_fr.properties │ ├── messages_zh_CN.properties │ ├── messages_es.properties │ ├── messages_pt_BR.properties │ ├── messages_ru.properties │ ├── messages_pt_PT.properties │ ├── messages_th.properties │ ├── messages.properties │ ├── messages_nl.properties │ └── messages_de.properties ├── domain │ └── com │ │ └── kursuspedia │ │ └── domain │ │ ├── Role.groovy │ │ ├── UserGroup.groovy │ │ └── User.groovy ├── views │ ├── layouts │ │ └── main.gsp │ ├── error.gsp │ ├── role │ │ ├── list.gsp │ │ ├── create.gsp │ │ ├── show.gsp │ │ └── edit.gsp │ ├── userGroup │ │ ├── create.gsp │ │ ├── list.gsp │ │ ├── show.gsp │ │ └── edit.gsp │ ├── user │ │ ├── list.gsp │ │ ├── show.gsp │ │ ├── create.gsp │ │ └── edit.gsp │ └── index.gsp └── controllers │ └── com │ └── kursuspedia │ └── domain │ ├── RoleController.groovy │ ├── UserController.groovy │ └── UserGroupController.groovy ├── application.properties ├── test └── unit │ └── com │ └── kursuspedia │ ├── MenuTests.groovy │ └── domain │ ├── RoleTests.groovy │ ├── UserTests.groovy │ └── UserGroupTests.groovy └── src └── templates ├── artifacts └── DomainClass.groovy ├── scaffolding ├── list.gsp ├── create.gsp ├── edit.gsp ├── show.gsp └── Controller.groovy └── war └── web.xml /.gitignore: -------------------------------------------------------------------------------- 1 | target/* 2 | *.log 3 | *.class 4 | *.jar 5 | -------------------------------------------------------------------------------- /web-app/WEB-INF/plugins/app-engine-0.8.9/grails-app/i18n/messages.properties: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web-app/WEB-INF/plugins/gorm-jpa-0.7.1/grails-app/i18n/messages.properties: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /grails-app/conf/spring/resources.groovy: -------------------------------------------------------------------------------- 1 | //Place your Spring DSL code here*/ 2 | beans = { 3 | 4 | } -------------------------------------------------------------------------------- /web-app/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/favicon.ico -------------------------------------------------------------------------------- /web-app/images/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/spinner.gif -------------------------------------------------------------------------------- /web-app/images/grails_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/grails_logo.jpg -------------------------------------------------------------------------------- /web-app/images/grails_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/grails_logo.png -------------------------------------------------------------------------------- /web-app/images/leftnav_btm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/leftnav_btm.png -------------------------------------------------------------------------------- /web-app/images/leftnav_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/leftnav_top.png -------------------------------------------------------------------------------- /web-app/images/skin/house.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/skin/house.png -------------------------------------------------------------------------------- /web-app/images/skin/shadow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/skin/shadow.jpg -------------------------------------------------------------------------------- /web-app/images/springsource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/springsource.png -------------------------------------------------------------------------------- /web-app/images/skin/exclamation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/skin/exclamation.png -------------------------------------------------------------------------------- /web-app/images/skin/information.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/skin/information.png -------------------------------------------------------------------------------- /web-app/images/skin/sorted_asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/skin/sorted_asc.gif -------------------------------------------------------------------------------- /web-app/images/skin/sorted_desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/skin/sorted_desc.gif -------------------------------------------------------------------------------- /web-app/images/leftnav_midstretch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/leftnav_midstretch.png -------------------------------------------------------------------------------- /web-app/images/skin/database_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/skin/database_add.png -------------------------------------------------------------------------------- /web-app/images/skin/database_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/skin/database_edit.png -------------------------------------------------------------------------------- /web-app/images/skin/database_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/skin/database_save.png -------------------------------------------------------------------------------- /grails-app/i18n/messages_da.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/grails-app/i18n/messages_da.properties -------------------------------------------------------------------------------- /web-app/images/skin/database_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/skin/database_delete.png -------------------------------------------------------------------------------- /web-app/images/skin/database_table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/images/skin/database_table.png -------------------------------------------------------------------------------- /grails-app/conf/BootStrap.groovy: -------------------------------------------------------------------------------- 1 | class BootStrap { 2 | 3 | def init = { servletContext -> 4 | } 5 | def destroy = { 6 | } 7 | } -------------------------------------------------------------------------------- /grails-app/conf/datastore-indexes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web-app/WEB-INF/appengine-generated/local_db.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/WEB-INF/appengine-generated/local_db.bin -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/favicon.ico -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/spinner.gif -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/skin/house.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/skin/house.png -------------------------------------------------------------------------------- /web-app/WEB-INF/appengine-generated/datastore-indexes-auto.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/grails_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/grails_logo.jpg -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/skin/shadow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/skin/shadow.jpg -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/skin/sorted_asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/skin/sorted_asc.gif -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/skin/database_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/skin/database_add.png -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/skin/database_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/skin/database_edit.png -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/skin/database_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/skin/database_save.png -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/skin/exclamation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/skin/exclamation.png -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/skin/information.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/skin/information.png -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/skin/sorted_desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/skin/sorted_desc.gif -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/skin/database_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/skin/database_delete.png -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/images/skin/database_table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/images/skin/database_table.png -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/mootools-1.2.3-more-nc.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/js/mootools/mootools-1.2.3-more-nc.js -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/ui/window/images/close.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/js/mootools/ui/window/images/close.gif -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/ui/mootabs/images/tab_off.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/js/mootools/ui/mootabs/images/tab_off.gif -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/ui/mootabs/images/tab_on.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/js/mootools/ui/mootabs/images/tab_on.gif -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar.png -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-td.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-td.gif -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-icon.gif -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-next.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-next.gif -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-prev.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-prev.gif -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-valid.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-valid.gif -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-hilite.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ATA/kursuspedia/master/web-app/plugins/mootools-0.1.3/js/mootools/ui/calendar/images/calendar-hilite.gif -------------------------------------------------------------------------------- /web-app/WEB-INF/cron.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | / 5 | Biar Ga error 6 | every 2 minutes 7 | 8 | 9 | -------------------------------------------------------------------------------- /grails-app/conf/UrlMappings.groovy: -------------------------------------------------------------------------------- 1 | class UrlMappings { 2 | static mappings = { 3 | "/$controller/$action?/$id?"{ 4 | constraints { 5 | // apply constraints here 6 | } 7 | } 8 | "/"(view:"/index") 9 | "500"(view:'/error') 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /application.properties: -------------------------------------------------------------------------------- 1 | #Grails Metadata file 2 | #Tue Mar 16 19:34:54 WIT 2010 3 | app.grails.version=1.2.1 4 | app.name=kursuspedia 5 | app.servlet.version=2.4 6 | app.version=1 7 | appengine.persistence=jpa 8 | plugins.app-engine=0.8.9 9 | plugins.gorm-jpa=0.7.1 10 | plugins.mootools=0.1.3 11 | -------------------------------------------------------------------------------- /web-app/WEB-INF/classes/application.properties: -------------------------------------------------------------------------------- 1 | #Grails Metadata file 2 | #Tue Mar 16 19:34:54 WIT 2010 3 | app.grails.version=1.2.1 4 | app.name=kursuspedia 5 | app.servlet.version=2.4 6 | app.version=1 7 | appengine.persistence=jpa 8 | plugins.app-engine=0.8.9 9 | plugins.gorm-jpa=0.7.1 10 | plugins.mootools=0.1.3 11 | -------------------------------------------------------------------------------- /test/unit/com/kursuspedia/MenuTests.groovy: -------------------------------------------------------------------------------- 1 | package com.kursuspedia 2 | 3 | import grails.test.* 4 | 5 | class MenuTests extends GrailsUnitTestCase { 6 | protected void setUp() { 7 | super.setUp() 8 | } 9 | 10 | protected void tearDown() { 11 | super.tearDown() 12 | } 13 | 14 | void testSomething() { 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/unit/com/kursuspedia/domain/RoleTests.groovy: -------------------------------------------------------------------------------- 1 | package com.kursuspedia.domain 2 | 3 | import grails.test.* 4 | 5 | class RoleTests extends GrailsUnitTestCase { 6 | protected void setUp() { 7 | super.setUp() 8 | } 9 | 10 | protected void tearDown() { 11 | super.tearDown() 12 | } 13 | 14 | void testSomething() { 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/unit/com/kursuspedia/domain/UserTests.groovy: -------------------------------------------------------------------------------- 1 | package com.kursuspedia.domain 2 | 3 | import grails.test.* 4 | 5 | class UserTests extends GrailsUnitTestCase { 6 | protected void setUp() { 7 | super.setUp() 8 | } 9 | 10 | protected void tearDown() { 11 | super.tearDown() 12 | } 13 | 14 | void testSomething() { 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/unit/com/kursuspedia/domain/UserGroupTests.groovy: -------------------------------------------------------------------------------- 1 | package com.kursuspedia.domain 2 | 3 | import grails.test.* 4 | 5 | class UserGroupTests extends GrailsUnitTestCase { 6 | protected void setUp() { 7 | super.setUp() 8 | } 9 | 10 | protected void tearDown() { 11 | super.tearDown() 12 | } 13 | 14 | void testSomething() { 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/templates/artifacts/DomainClass.groovy: -------------------------------------------------------------------------------- 1 | @artifact.package@ 2 | 3 | import javax.persistence.*; 4 | // import com.google.appengine.api.datastore.Key; 5 | 6 | @Entity 7 | class @artifact.name@ implements Serializable { 8 | 9 | @Id 10 | @GeneratedValue(strategy = GenerationType.IDENTITY) 11 | Long id 12 | 13 | static constraints = { 14 | id visible:false 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /grails-app/domain/com/kursuspedia/domain/Role.groovy: -------------------------------------------------------------------------------- 1 | package com.kursuspedia.domain 2 | 3 | 4 | 5 | import javax.persistence.*; 6 | // import com.google.appengine.api.datastore.Key; 7 | 8 | @Entity 9 | class Role implements Serializable { 10 | 11 | @Id 12 | @GeneratedValue(strategy = GenerationType.IDENTITY) 13 | Long id 14 | 15 | String name 16 | 17 | static constraints = { 18 | id visible:false 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /web-app/js/application.js: -------------------------------------------------------------------------------- 1 | var Ajax; 2 | if (Ajax && (Ajax != null)) { 3 | Ajax.Responders.register({ 4 | onCreate: function() { 5 | if($('spinner') && Ajax.activeRequestCount>0) 6 | Effect.Appear('spinner',{duration:0.5,queue:'end'}); 7 | }, 8 | onComplete: function() { 9 | if($('spinner') && Ajax.activeRequestCount==0) 10 | Effect.Fade('spinner',{duration:0.5,queue:'end'}); 11 | } 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/application.js: -------------------------------------------------------------------------------- 1 | var Ajax; 2 | if (Ajax && (Ajax != null)) { 3 | Ajax.Responders.register({ 4 | onCreate: function() { 5 | if($('spinner') && Ajax.activeRequestCount>0) 6 | Effect.Appear('spinner',{duration:0.5,queue:'end'}); 7 | }, 8 | onComplete: function() { 9 | if($('spinner') && Ajax.activeRequestCount==0) 10 | Effect.Fade('spinner',{duration:0.5,queue:'end'}); 11 | } 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /grails-app/domain/com/kursuspedia/domain/UserGroup.groovy: -------------------------------------------------------------------------------- 1 | package com.kursuspedia.domain 2 | 3 | 4 | 5 | import javax.persistence.*; 6 | // import com.google.appengine.api.datastore.Key; 7 | 8 | @Entity 9 | class UserGroup implements Serializable { 10 | 11 | @Id 12 | @GeneratedValue(strategy = GenerationType.IDENTITY) 13 | Long id 14 | 15 | String name 16 | 17 | @OneToMany(mappedBy="group") 18 | List users 19 | 20 | static constraints = { 21 | id visible:false 22 | } 23 | 24 | String toString() 25 | { 26 | return name 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /web-app/WEB-INF/appengine-web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @app.name@ 4 | @app.version@ 5 | true 6 | 7 | true 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /grails-app/domain/com/kursuspedia/domain/User.groovy: -------------------------------------------------------------------------------- 1 | package com.kursuspedia.domain 2 | 3 | 4 | 5 | import javax.persistence.*; 6 | // import com.google.appengine.api.datastore.Key; 7 | 8 | @Entity 9 | class User implements Serializable { 10 | 11 | @Id 12 | @GeneratedValue(strategy = GenerationType.IDENTITY) 13 | Long id 14 | 15 | @ManyToOne(cascade=[CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH]) 16 | UserGroup group 17 | 18 | 19 | String username 20 | String password 21 | String email 22 | 23 | 24 | static constraints = { 25 | id visible:false 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /web-app/WEB-INF/sitemesh.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /grails-app/conf/DataSource.groovy: -------------------------------------------------------------------------------- 1 | dataSource { 2 | pooled = true 3 | driverClassName = "org.hsqldb.jdbcDriver" 4 | username = "sa" 5 | password = "" 6 | } 7 | hibernate { 8 | cache.use_second_level_cache=true 9 | cache.use_query_cache=true 10 | cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider' 11 | } 12 | // environment specific settings 13 | environments { 14 | development { 15 | dataSource { 16 | dbCreate = "create-drop" // one of 'create', 'create-drop','update' 17 | url = "jdbc:hsqldb:mem:devDB" 18 | } 19 | } 20 | test { 21 | dataSource { 22 | dbCreate = "update" 23 | url = "jdbc:hsqldb:mem:testDb" 24 | } 25 | } 26 | production { 27 | dataSource { 28 | dbCreate = "update" 29 | url = "jdbc:hsqldb:file:prodDb;shutdown=true" 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /web-app/WEB-INF/plugins/mootools-0.1.3/grails-app/views/layouts/main.gsp: -------------------------------------------------------------------------------- 1 | 2 | 3 | <g:layoutTitle default="Grails" /> 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /grails-app/conf/persistence.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /grails-app/views/layouts/main.gsp: -------------------------------------------------------------------------------- 1 | 2 | 3 | <g:layoutTitle default="Grails" /> 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /web-app/WEB-INF/classes/META-INF/persistence.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /web-app/WEB-INF/plugins/app-engine-0.8.9/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | Graeme Rocher 3 | graeme.rocher@springsource.com 4 | Grails AppEngine plugin 5 | \ 6 | A plugin that integrates the AppEngine development runtime and deployment tools with Grails. 7 | 8 | http://grails.org/plugin/app-engine 9 | 10 | BuildConfig 11 | UrlMappings 12 | TestController 13 | org.grails.appengine.AppEngineReloadController 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /web-app/WEB-INF/plugins/mootools-0.1.3/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | Ford Guo 3 | agile.guo at gmail.com 4 | Provides integration with the Mootools toolkit http://mootools.net, a light OO javascript framework. 5 | Provides integration with the Mootools toolkit http://mootools.net, a light OO javascript framework. 6 | 7 | http://grails.org/Mootools+Plugin 8 | 9 | MootoolsTagLib 10 | ResourceTagLib 11 | MooUiController 12 | UrlMappings 13 | Config 14 | DataSource 15 | BuildConfig 16 | 17 | 18 | -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/js/mootools/ui/mootabs/css/mootabs.css: -------------------------------------------------------------------------------- 1 | .mootabs_title { 2 | list-style-image: none; 3 | list-style-type: none; 4 | margin: 0px; 5 | padding: 0px; 6 | height: 29px; 7 | } 8 | 9 | .mootabs_title li { 10 | float: left; 11 | background: url(../images/tab_off.gif) no-repeat left bottom; 12 | height:29px; 13 | width:85px; 14 | position: relative; 15 | z-index: 2; 16 | text-align: center; 17 | line-height: 30px; 18 | } 19 | 20 | .mootabs_title li.active { 21 | background: url(../images/tab_on.gif) no-repeat left bottom; 22 | position: relative; 23 | z-index: 10; 24 | } 25 | 26 | .mootabs_panel { 27 | display: none; 28 | top: -4px; 29 | padding: 5px; 30 | border: 1px solid #A4C8EA; 31 | z-index: 0; 32 | width:100%; 33 | } 34 | 35 | .mootabs_panel.active { 36 | display: block; 37 | position: relative; 38 | z-index: 1; 39 | } 40 | 41 | .mootabs_title li.over { 42 | font-weight: bold; 43 | cursor: hand; 44 | } 45 | 46 | -------------------------------------------------------------------------------- /web-app/WEB-INF/grails.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.grails.appengine.AppEngineReloadController 4 | ResourceTagLib 5 | MootoolsTagLib 6 | MooUiController 7 | com.kursuspedia.domain.Role 8 | com.kursuspedia.domain.UserGroup 9 | com.kursuspedia.domain.User 10 | UrlMappings 11 | Config 12 | BuildConfig 13 | resources 14 | DataSource 15 | BootStrap 16 | com.kursuspedia.domain.UserGroupController 17 | com.kursuspedia.domain.UserController 18 | com.kursuspedia.domain.RoleController 19 | 20 | 21 | GormJpaGrailsPlugin 22 | AppEngineGrailsPlugin 23 | MootoolsGrailsPlugin 24 | 25 | -------------------------------------------------------------------------------- /web-app/plugins/mootools-0.1.3/index.gsp: -------------------------------------------------------------------------------- 1 | 2 | 3 | Welcome to Grails 4 | 5 | 6 | 7 |

Welcome to Grails

8 |

Congratulations, you have successfully started your first Grails application! At the moment 9 | this is the default page, feel free to modify it to either redirect to a controller or display whatever 10 | content you may choose. Below is a list of controllers that are currently deployed in this application, 11 | click on each to execute its default action:

12 |
13 |
    14 | 15 |
  • ${c.fullName}
  • 16 |
    17 |
18 |
19 | 20 | -------------------------------------------------------------------------------- /web-app/WEB-INF/plugins/mootools-0.1.3/grails-app/views/index.gsp: -------------------------------------------------------------------------------- 1 | 2 | 3 | Welcome to Grails 4 | 5 | 6 | 7 |

Welcome to Grails

8 |

Congratulations, you have successfully started your first Grails application! At the moment 9 | this is the default page, feel free to modify it to either redirect to a controller or display whatever 10 | content you may choose. Below is a list of controllers that are currently deployed in this application, 11 | click on each to execute its default action:

12 |
13 |
    14 | 15 |
  • ${c.fullName}
  • 16 |
    17 |
18 |
19 | 20 | -------------------------------------------------------------------------------- /grails-app/conf/BuildConfig.groovy: -------------------------------------------------------------------------------- 1 | grails.project.class.dir = "target/classes" 2 | grails.project.test.class.dir = "target/test-classes" 3 | grails.project.test.reports.dir = "target/test-reports" 4 | //grails.project.war.file = "target/${appName}-${appVersion}.war" 5 | grails.project.dependency.resolution = { 6 | // inherit Grails' default dependencies 7 | inherits( "global" ) { 8 | // uncomment to disable ehcache 9 | // excludes 'ehcache' 10 | } 11 | log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose' 12 | repositories { 13 | grailsPlugins() 14 | grailsHome() 15 | 16 | // uncomment the below to enable remote dependency resolution 17 | // from public Maven repositories 18 | //mavenLocal() 19 | //mavenCentral() 20 | //mavenRepo "http://snapshots.repository.codehaus.org" 21 | //mavenRepo "http://repository.codehaus.org" 22 | //mavenRepo "http://download.java.net/maven/2/" 23 | //mavenRepo "http://repository.jboss.com/maven2/" 24 | } 25 | dependencies { 26 | // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg. 27 | 28 | // runtime 'mysql:mysql-connector-java:5.1.5' 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /grails-app/i18n/messages_ja.properties: -------------------------------------------------------------------------------- 1 | default.doesnt.match.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]パターンと一致していません。 2 | default.invalid.url.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、URLではありません。 3 | default.invalid.creditCard.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、正当なクレジットカード番号ではありません。 4 | default.invalid.email.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、メールアドレスではありません。 5 | default.invalid.range.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]から[{4}]範囲内を指定してください。 6 | default.invalid.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]から[{4}]以内を指定してください。 7 | default.invalid.max.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最大値[{3}]より大きいです。 8 | default.invalid.min.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最小値[{3}]より小さいです。 9 | default.invalid.max.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最大値[{3}]より大きいです。 10 | default.invalid.min.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最小値[{3}]より小さいです。 11 | default.invalid.validator.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、カスタムバリデーションを通過できません。 12 | default.not.inlist.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]リスト内に存在しません。 13 | default.blank.message=[{1}]クラスのプロパティ[{0}]の空白は許可されません。 14 | default.not.equal.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]と同等ではありません。 15 | default.null.message=[{1}]クラスのプロパティ[{0}]にnullは許可されません。 16 | default.not.unique.message=クラス[{1}]プロパティ[{0}]の値[{2}]は既に使用されています。 17 | 18 | default.paginate.prev=戻る 19 | default.paginate.next=次へ 20 | -------------------------------------------------------------------------------- /web-app/WEB-INF/plugins/mootools-0.1.3/grails-app/views/mooUi/index.gsp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Mootools UI 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |


16 | 17 | 18 |

Hello Tab1

19 |
20 | 21 |

Hello Tab2

22 |
23 | 24 |

Hello 测试

25 |
26 |
27 | open window 28 | 29 | mootools ddddddddddfffffffffffffffeeeeeeeeeee
30 | 31 |

32 | open window 33 | 34 | mootools ddddddddddfffffffffffffffeeeeeeeeeee
35 | 36 |
37 | 38 | 39 | -------------------------------------------------------------------------------- /grails-app/views/error.gsp: -------------------------------------------------------------------------------- 1 | 2 | 3 | Grails Runtime Exception 4 | 24 | 25 | 26 | 27 |

Grails Runtime Exception

28 |

Error Details

29 | 30 |
31 | Error ${request.'javax.servlet.error.status_code'}: ${request.'javax.servlet.error.message'.encodeAsHTML()}
32 | Servlet: ${request.'javax.servlet.error.servlet_name'}
33 | URI: ${request.'javax.servlet.error.request_uri'}
34 | 35 | Exception Message: ${exception.message?.encodeAsHTML()}
36 | Caused by: ${exception.cause?.message?.encodeAsHTML()}
37 | Class: ${exception.className}
38 | At Line: [${exception.lineNumber}]
39 | Code Snippet:
40 |
41 | 42 | ${cs?.encodeAsHTML()}
43 |
44 |
45 |
46 |
47 | 48 |

Stack Trace

49 |
50 |
${it.encodeAsHTML()}
51 |
52 |
53 | 54 | -------------------------------------------------------------------------------- /web-app/WEB-INF/plugins/mootools-0.1.3/grails-app/views/error.gsp: -------------------------------------------------------------------------------- 1 | 2 | 3 | Grails Runtime Exception 4 | 24 | 25 | 26 | 27 |

Grails Runtime Exception

28 |

Error Details

29 | 30 |
31 | Error ${request.'javax.servlet.error.status_code'}: ${request.'javax.servlet.error.message'.encodeAsHTML()}
32 | Servlet: ${request.'javax.servlet.error.servlet_name'}
33 | URI: ${request.'javax.servlet.error.request_uri'}
34 | 35 | Exception Message: ${exception.message?.encodeAsHTML()}
36 | Caused by: ${exception.cause?.message?.encodeAsHTML()}
37 | Class: ${exception.className}
38 | At Line: [${exception.lineNumber}]
39 | Code Snippet:
40 |
41 | 42 | ${cs?.encodeAsHTML()}
43 |
44 |
45 |
46 |
47 | 48 |

Stack Trace

49 |
50 |
${it.encodeAsHTML()}
51 |
52 |
53 | 54 | -------------------------------------------------------------------------------- /grails-app/i18n/messages_it.properties: -------------------------------------------------------------------------------- 1 | default.doesnt.match.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non corrisponde al pattern [{3}] 2 | default.invalid.url.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un URL valido 3 | default.invalid.creditCard.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un numero di carta di credito valido 4 | default.invalid.email.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un indirizzo email valido 5 | default.invalid.range.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non rientra nell'intervallo valido da [{3}] a [{4}] 6 | default.invalid.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non rientra nell'intervallo di dimensioni valide da [{3}] a [{4}] 7 | default.invalid.max.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è maggiore di [{3}] 8 | default.invalid.min.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è minore di [{3}] 9 | default.invalid.max.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è maggiore di [{3}] 10 | default.invalid.min.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è minore di [{3}] 11 | default.invalid.validator.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è valida 12 | default.not.inlist.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è contenuta nella lista [{3}] 13 | default.blank.message=La proprietà [{0}] della classe [{1}] non può essere vuota 14 | default.not.equal.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non può essere uguale a [{3}] 15 | default.null.message=La proprietà [{0}] della classe [{1}] non può essere null 16 | default.not.unique.message=La proprietà [{0}] della classe [{1}] con valore [{2}] deve essere unica 17 | 18 | default.paginate.prev=Precedente 19 | default.paginate.next=Successivo -------------------------------------------------------------------------------- /grails-app/views/role/list.gsp: -------------------------------------------------------------------------------- 1 | <%@ page import="com.kursuspedia.domain.Role" %> 2 | 3 | 4 | 5 | 6 | Role List 7 | 8 | 9 | 13 |
14 |

Role List

15 | 16 |
${flash.message}
17 |
18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
${fieldValue(bean:roleInstance, field:'id')}${fieldValue(bean:roleInstance, field:'name')}
41 |
42 |
43 | 44 |
45 |
46 | 47 | 48 | -------------------------------------------------------------------------------- /grails-app/i18n/messages_fr.properties: -------------------------------------------------------------------------------- 1 | default.doesnt.match.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne correspond pas au pattern [{3}] 2 | default.invalid.url.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas une URL valide 3 | 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 4 | default.invalid.email.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas une adresse e-mail valide 5 | 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}] 6 | 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}] 7 | default.invalid.max.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est supérieure à la valeur maximum [{3}] 8 | default.invalid.min.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est inférieure à la valeur minimum [{3}] 9 | default.invalid.max.size.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est supérieure à la valeur maximum [{3}] 10 | default.invalid.min.size.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est inférieure à la valeur minimum [{3}] 11 | default.invalid.validator.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas valide 12 | default.not.inlist.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne fait pas partie de la liste [{3}] 13 | default.blank.message=La propriété [{0}] de la classe [{1}] ne peut pas être vide 14 | default.not.equal.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne peut pas être égale à [{3}] 15 | default.null.message=La propriété [{0}] de la classe [{1}] ne peut pas être nulle 16 | default.not.unique.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] doit être unique 17 | 18 | default.paginate.prev=Précédent 19 | default.paginate.next=Suivant 20 | -------------------------------------------------------------------------------- /grails-app/views/role/create.gsp: -------------------------------------------------------------------------------- 1 | <%@ page import="com.kursuspedia.domain.Role" %> 2 | 3 | 4 | 5 | 6 | Create Role 7 | 8 | 9 | 13 |
14 |

Create Role

15 | 16 |
${flash.message}
17 |
18 | 19 |
20 | 21 |
22 |
23 | 24 |
25 | 26 | 27 | 28 | 29 | 32 | 35 | 36 | 37 | 38 |
30 | 31 | 33 | 34 |
39 |
40 |
41 | 42 |
43 |
44 |
45 | 46 | 47 | -------------------------------------------------------------------------------- /web-app/WEB-INF/applicationContext.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | Grails application factory bean 9 | 10 | 11 | 12 | 13 | 14 | A bean that manages Grails plugins 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | /WEB-INF/**/grails-app/**/*.groovy 33 | 34 | 35 | 36 | 38 | 39 | utf-8 40 | 41 | 42 | -------------------------------------------------------------------------------- /grails-app/views/userGroup/create.gsp: -------------------------------------------------------------------------------- 1 | <%@ page import="com.kursuspedia.domain.UserGroup" %> 2 | 3 | 4 | 5 | 6 | Create UserGroup 7 | 8 | 9 | 13 |
14 |

Create UserGroup

15 | 16 |
${flash.message}
17 |
18 | 19 |
20 | 21 |
22 |
23 | 24 |
25 | 26 | 27 | 28 | 29 | 32 | 35 | 36 | 37 | 38 |
30 | 31 | 33 | 34 |
39 |
40 |
41 | 42 |
43 |
44 |
45 | 46 | 47 | -------------------------------------------------------------------------------- /grails-app/i18n/messages_zh_CN.properties: -------------------------------------------------------------------------------- 1 | default.blank.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3A\u7A7A 2 | default.doesnt.match.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E\u5B9A\u4E49\u7684\u6A21\u5F0F [{3}]\u4E0D\u5339\u914D 3 | default.invalid.creditCard.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u4FE1\u7528\u5361\u53F7 4 | 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 5 | default.invalid.max.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5927\u503C [{3}]\u8FD8\u5927 6 | default.invalid.max.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u6BD4\u6700\u5927\u503C [{3}]\u8FD8\u5927 7 | default.invalid.min.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5C0F\u503C [{3}]\u8FD8\u5C0F 8 | default.invalid.min.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u6BD4\u6700\u5C0F\u503C [{3}]\u8FD8\u5C0F 9 | default.invalid.range.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5408\u6CD5\u7684\u8303\u56F4\u5185( [{3}] \uFF5E [{4}] ) 10 | 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}] ) 11 | default.invalid.url.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u5408\u6CD5\u7684URL 12 | default.invalid.validator.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u672A\u80FD\u901A\u8FC7\u81EA\u5B9A\u4E49\u7684\u9A8C\u8BC1 13 | default.not.equal.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E[{3}]\u4E0D\u76F8\u7B49 14 | default.not.inlist.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5217\u8868\u7684\u53D6\u503C\u8303\u56F4\u5185 15 | default.not.unique.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u5FC5\u987B\u662F\u552F\u4E00\u7684 16 | default.null.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3Anull 17 | default.paginate.next=\u4E0B\u9875 18 | default.paginate.prev=\u4E0A\u9875 19 | -------------------------------------------------------------------------------- /grails-app/views/role/show.gsp: -------------------------------------------------------------------------------- 1 | <%@ page import="com.kursuspedia.domain.Role" %> 2 | 3 | 4 | 5 | 6 | Show Role 7 | 8 | 9 | 14 |
15 |

Show Role

16 | 17 |
${flash.message}
18 |
19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
Id:${fieldValue(bean:roleInstance, field:'id')}
Name:${fieldValue(bean:roleInstance, field:'name')}
40 |
41 |
42 | 43 | 44 | 45 | 46 | 47 |
48 |
49 | 50 | 51 | -------------------------------------------------------------------------------- /web-app/WEB-INF/plugins/gorm-jpa-0.7.1/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | Graeme Rocher 3 | GORM-JPA Plugin 4 | \ 5 | A plugin that emulates the behavior of the GORM-Hibernate plugin against a standard JPA 1.0 backend 6 | 7 | http://grails.org/plugin/gorm-jpa 8 | 9 | BuildConfig 10 | DataSource 11 | UrlMappings 12 | spring.resources 13 | org.acme.Address 14 | org.acme.Person 15 | org.acme.Role 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /grails-app/views/userGroup/list.gsp: -------------------------------------------------------------------------------- 1 | <%@ page import="com.kursuspedia.domain.UserGroup" %> 2 | 3 | 4 | 5 | 6 | UserGroup List 7 | 8 | 9 | 13 |
14 |

UserGroup List

15 | 16 |
${flash.message}
17 |
18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
${fieldValue(bean:userGroupInstance, field:'id')}${fieldValue(bean:userGroupInstance, field:'name')}${fieldValue(bean:userGroupInstance, field:'users')}
45 |
46 |
47 | 48 |
49 |
50 | 51 | 52 | -------------------------------------------------------------------------------- /grails-app/views/role/edit.gsp: -------------------------------------------------------------------------------- 1 | <%@ page import="com.kursuspedia.domain.Role" %> 2 | 3 | 4 | 5 | 6 | Edit Role 7 | 8 | 9 | 14 |
15 |

Edit Role

16 | 17 |
${flash.message}
18 |
19 | 20 |
21 | 22 |
23 |
24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | 32 | 35 | 38 | 39 | 40 | 41 |
33 | 34 | 36 | 37 |
42 |
43 |
44 | 45 | 46 |
47 |
48 |
49 | 50 | 51 | -------------------------------------------------------------------------------- /grails-app/views/userGroup/show.gsp: -------------------------------------------------------------------------------- 1 | <%@ page import="com.kursuspedia.domain.UserGroup" %> 2 | 3 | 4 | 5 | 6 | Show UserGroup 7 | 8 | 9 | 14 |
15 |

Show UserGroup

16 | 17 |
${flash.message}
18 |
19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
Id:${fieldValue(bean:userGroupInstance, field:'id')}
Name:${fieldValue(bean:userGroupInstance, field:'name')}
Users:${fieldValue(bean:userGroupInstance, field:'users')}
47 |
48 |
49 | 50 | 51 | 52 | 53 | 54 |
55 |
56 | 57 | 58 | -------------------------------------------------------------------------------- /web-app/js/prototype/sound.js: -------------------------------------------------------------------------------- 1 | // script.aculo.us sound.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009 2 | 3 | // Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) 4 | // 5 | // Based on code created by Jules Gravinese (http://www.webveteran.com/) 6 | // 7 | // script.aculo.us is freely distributable under the terms of an MIT-style license. 8 | // For details, see the script.aculo.us web site: http://script.aculo.us/ 9 | 10 | Sound = { 11 | tracks: {}, 12 | _enabled: true, 13 | template: 14 | new Template(''), 15 | enable: function(){ 16 | Sound._enabled = true; 17 | }, 18 | disable: function(){ 19 | Sound._enabled = false; 20 | }, 21 | play: function(url){ 22 | if(!Sound._enabled) return; 23 | var options = Object.extend({ 24 | track: 'global', url: url, replace: false 25 | }, arguments[1] || {}); 26 | 27 | if(options.replace && this.tracks[options.track]) { 28 | $R(0, this.tracks[options.track].id).each(function(id){ 29 | var sound = $('sound_'+options.track+'_'+id); 30 | sound.Stop && sound.Stop(); 31 | sound.remove(); 32 | }); 33 | this.tracks[options.track] = null; 34 | } 35 | 36 | if(!this.tracks[options.track]) 37 | this.tracks[options.track] = { id: 0 }; 38 | else 39 | this.tracks[options.track].id++; 40 | 41 | options.id = this.tracks[options.track].id; 42 | $$('body')[0].insert( 43 | Prototype.Browser.IE ? new Element('bgsound',{ 44 | id: 'sound_'+options.track+'_'+options.id, 45 | src: options.url, loop: 1, autostart: true 46 | }) : Sound.template.evaluate(options)); 47 | } 48 | }; 49 | 50 | if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){ 51 | if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1 })) 52 | Sound.template = new Template(''); 53 | else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('Windows Media') != -1 })) 54 | Sound.template = new Template(''); 55 | else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('RealPlayer') != -1 })) 56 | Sound.template = new Template(''); 57 | else 58 | Sound.play = function(){}; 59 | } -------------------------------------------------------------------------------- /grails-app/views/user/list.gsp: -------------------------------------------------------------------------------- 1 | <%@ page import="com.kursuspedia.domain.User" %> 2 | 3 | 4 | 5 | 6 | User List 7 | 8 | 9 | 13 |
14 |

User List

15 | 16 |
${flash.message}
17 |
18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |
Group
${fieldValue(bean:userInstance, field:'id')}${fieldValue(bean:userInstance, field:'username')}${fieldValue(bean:userInstance, field:'email')}${fieldValue(bean:userInstance, field:'group')}${fieldValue(bean:userInstance, field:'password')}
53 |
54 |
55 | 56 |
57 |
58 | 59 | 60 | -------------------------------------------------------------------------------- /grails-app/i18n/messages_es.properties: -------------------------------------------------------------------------------- 1 | default.doesnt.match.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no corresponde al patrón [{3}] 2 | default.invalid.url.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es una URL válida 3 | 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 4 | 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 5 | 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}] 6 | 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}] 7 | default.invalid.max.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] excede el valor máximo [{3}] 8 | default.invalid.min.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] es menos que el valor mínimo [{3}] 9 | default.invalid.max.size.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] excede el tamaño máximo de [{3}] 10 | 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}] 11 | default.invalid.validator.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es válido 12 | default.not.inlist.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no esta contenido dentro de la lista [{3}] 13 | default.blank.message=La propiedad [{0}] de la clase [{1}] no puede ser vacía 14 | default.not.equal.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no puede igualar a [{3}] 15 | default.null.message=La propiedad [{0}] de la clase [{1}] no puede ser nulo 16 | default.not.unique.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] debe ser única 17 | 18 | default.paginate.prev=Anterior 19 | default.paginate.next=Siguiente 20 | 21 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author) 22 | typeMismatch.java.net.URL=La propiedad {0} debe ser una URL válida 23 | typeMismatch.java.net.URI=La propiedad {0} debe ser una URI válida 24 | typeMismatch.java.util.Date=La propiedad {0} debe ser una fecha válida 25 | typeMismatch.java.lang.Double=La propiedad {0} debe ser un número válido 26 | typeMismatch.java.lang.Integer=La propiedad {0} debe ser un número válido 27 | typeMismatch.java.lang.Long=La propiedad {0} debe ser un número válido 28 | typeMismatch.java.lang.Short=La propiedad {0} debe ser un número válido 29 | typeMismatch.java.math.BigDecimal=La propiedad {0} debe ser un número válido 30 | typeMismatch.java.math.BigInteger=La propiedad {0} debe ser un número válido -------------------------------------------------------------------------------- /web-app/WEB-INF/plugins/mootools-0.1.3/grails-app/i18n/messages.properties: -------------------------------------------------------------------------------- 1 | default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}] 2 | default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL 3 | default.invalid.creditCard.message=Property [{0}] of class [{1}] with value [{2}] is not a valid credit card number 4 | default.invalid.email.message=Property [{0}] of class [{1}] with value [{2}] is not a valid e-mail address 5 | default.invalid.range.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid range from [{3}] to [{4}] 6 | default.invalid.size.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid size range from [{3}] to [{4}] 7 | default.invalid.max.message=Property [{0}] of class [{1}] with value [{2}] exceeds maximum value [{3}] 8 | default.invalid.min.message=Property [{0}] of class [{1}] with value [{2}] is less than minimum value [{3}] 9 | default.invalid.max.size.message=Property [{0}] of class [{1}] with value [{2}] exceeds the maximum size of [{3}] 10 | default.invalid.min.size.message=Property [{0}] of class [{1}] with value [{2}] is less than the minimum size of [{3}] 11 | default.invalid.validator.message=Property [{0}] of class [{1}] with value [{2}] does not pass custom validation 12 | default.not.inlist.message=Property [{0}] of class [{1}] with value [{2}] is not contained within the list [{3}] 13 | default.blank.message=Property [{0}] of class [{1}] cannot be blank 14 | default.not.equal.message=Property [{0}] of class [{1}] with value [{2}] cannot equal [{3}] 15 | default.null.message=Property [{0}] of class [{1}] cannot be null 16 | default.not.unique.message=Property [{0}] of class [{1}] with value [{2}] must be unique 17 | 18 | default.paginate.prev=Previous 19 | default.paginate.next=Next 20 | default.boolean.true=True 21 | default.boolean.false=False 22 | default.date.format=yyyy-MM-dd HH:mm:ss z 23 | default.number.format=0 24 | 25 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author) 26 | typeMismatch.java.net.URL=Property {0} must be a valid URL 27 | typeMismatch.java.net.URI=Property {0} must be a valid URI 28 | typeMismatch.java.util.Date=Property {0} must be a valid Date 29 | typeMismatch.java.lang.Double=Property {0} must be a valid number 30 | typeMismatch.java.lang.Integer=Property {0} must be a valid number 31 | typeMismatch.java.lang.Long=Property {0} must be a valid number 32 | typeMismatch.java.lang.Short=Property {0} must be a valid number 33 | typeMismatch.java.math.BigDecimal=Property {0} must be a valid number 34 | typeMismatch.java.math.BigInteger=Property {0} must be a valid number 35 | -------------------------------------------------------------------------------- /grails-app/i18n/messages_pt_BR.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Translated by Lucas Teixeira - lucastex@gmail.com 3 | # 4 | 5 | default.doesnt.match.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atende ao padrão definido [{3}] 6 | default.invalid.url.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é uma URL válida 7 | 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 8 | default.invalid.email.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um endereço de email válido. 9 | 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}] 10 | 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}] 11 | default.invalid.max.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapass o valor máximo [{3}] 12 | default.invalid.min.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o valor mínimo [{3}] 13 | default.invalid.max.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o tamanho máximo de [{3}] 14 | default.invalid.min.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o tamanho mínimo de [{3}] 15 | default.invalid.validator.message=O campo [{0}] da classe [{1}] com o valor [{2}] não passou na validação 16 | default.not.inlist.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um valor dentre os permitidos na lista [{3}] 17 | default.blank.message=O campo [{0}] da classe [{1}] não pode ficar em branco 18 | default.not.equal.message=O campo [{0}] da classe [{1}] com o valor [{2}] não pode ser igual a [{3}] 19 | default.null.message=O campo [{0}] da classe [{1}] não pode ser vazia 20 | default.not.unique.message=O campo [{0}] da classe [{1}] com o valor [{2}] deve ser único 21 | 22 | default.paginate.prev=Anterior 23 | default.paginate.next=Próximo 24 | 25 | # Mensagens de erro em atribuição de valores. Use "typeMismatch.$className.$propertyName" para customizar (eg typeMismatch.Book.author) 26 | typeMismatch.java.net.URL=O campo {0} deve ser uma URL válida. 27 | typeMismatch.java.net.URI=O campo {0} deve ser uma URI válida. 28 | typeMismatch.java.util.Date=O campo {0} deve ser uma data válida 29 | typeMismatch.java.lang.Double=O campo {0} deve ser um número válido. 30 | typeMismatch.java.lang.Integer=O campo {0} deve ser um número válido. 31 | typeMismatch.java.lang.Long=O campo {0} deve ser um número válido. 32 | typeMismatch.java.lang.Short=O campo {0} deve ser um número válido. 33 | typeMismatch.java.math.BigDecimal=O campo {0} deve ser um número válido. 34 | typeMismatch.java.math.BigInteger=O campo {0} deve ser um número válido. -------------------------------------------------------------------------------- /grails-app/i18n/messages_ru.properties: -------------------------------------------------------------------------------- 1 | default.doesnt.match.message=Значение [{2}] поля [{0}] класса [{1}] не соответствует образцу [{3}] 2 | default.invalid.url.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым URL-адресом 3 | default.invalid.creditCard.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым номером кредитной карты 4 | default.invalid.email.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым e-mail адресом 5 | default.invalid.range.message=Значение [{2}] поля [{0}] класса [{1}] не попадает в допустимый интервал от [{3}] до [{4}] 6 | default.invalid.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) не попадает в допустимый интервал от [{3}] до [{4}] 7 | default.invalid.max.message=Значение [{2}] поля [{0}] класса [{1}] больше чем максимально допустимое значение [{3}] 8 | default.invalid.min.message=Значение [{2}] поля [{0}] класса [{1}] меньше чем минимально допустимое значение [{3}] 9 | default.invalid.max.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) больше чем максимально допустимый размер [{3}] 10 | default.invalid.min.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) меньше чем минимально допустимый размер [{3}] 11 | default.invalid.validator.message=Значение [{2}] поля [{0}] класса [{1}] не допустимо 12 | default.not.inlist.message=Значение [{2}] поля [{0}] класса [{1}] не попадает в список допустимых значений [{3}] 13 | default.blank.message=Поле [{0}] класса [{1}] не может быть пустым 14 | default.not.equal.message=Значение [{2}] поля [{0}] класса [{1}] не может быть равно [{3}] 15 | default.null.message=Поле [{0}] класса [{1}] не может иметь значение null 16 | default.not.unique.message=Значение [{2}] поля [{0}] класса [{1}] должно быть уникальным 17 | 18 | default.paginate.prev=Предыдушая страница 19 | default.paginate.next=Следующая страница 20 | 21 | # Ошибки при присвоении данных. Для точной настройки для полей классов используйте 22 | # формат "typeMismatch.$className.$propertyName" (например, typeMismatch.Book.author) 23 | typeMismatch.java.net.URL=Значение поля {0} не является допустимым URL 24 | typeMismatch.java.net.URI=Значение поля {0} не является допустимым URI 25 | typeMismatch.java.util.Date=Значение поля {0} не является допустимой датой 26 | typeMismatch.java.lang.Double=Значение поля {0} не является допустимым числом 27 | typeMismatch.java.lang.Integer=Значение поля {0} не является допустимым числом 28 | typeMismatch.java.lang.Long=Значение поля {0} не является допустимым числом 29 | typeMismatch.java.lang.Short=Значение поля {0} не является допустимым числом 30 | typeMismatch.java.math.BigDecimal=Значение поля {0} не является допустимым числом 31 | typeMismatch.java.math.BigInteger=Значение поля {0} не является допустимым числом 32 | -------------------------------------------------------------------------------- /grails-app/i18n/messages_pt_PT.properties: -------------------------------------------------------------------------------- 1 | # 2 | # translation by miguel.ping@gmail.com, based on pt_BR translation by Lucas Teixeira - lucastex@gmail.com 3 | # 4 | 5 | default.doesnt.match.message=O campo [{0}] da classe [{1}] com o valor [{2}] não corresponde ao padrão definido [{3}] 6 | default.invalid.url.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um URL válido 7 | 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 8 | default.invalid.email.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um endereço de email válido. 9 | 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}] 10 | 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}] 11 | default.invalid.max.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o valor máximo [{3}] 12 | default.invalid.min.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o valor mínimo [{3}] 13 | default.invalid.max.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o tamanho máximo de [{3}] 14 | default.invalid.min.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o tamanho mínimo de [{3}] 15 | default.invalid.validator.message=O campo [{0}] da classe [{1}] com o valor [{2}] não passou na validação 16 | default.not.inlist.message=O campo [{0}] da classe [{1}] com o valor [{2}] não se encontra nos valores permitidos da lista [{3}] 17 | default.blank.message=O campo [{0}] da classe [{1}] não pode ser vazio 18 | default.not.equal.message=O campo [{0}] da classe [{1}] com o valor [{2}] não pode ser igual a [{3}] 19 | default.null.message=O campo [{0}] da classe [{1}] não pode ser vazio 20 | default.not.unique.message=O campo [{0}] da classe [{1}] com o valor [{2}] deve ser único 21 | 22 | default.paginate.prev=Anterior 23 | default.paginate.next=Próximo 24 | 25 | # Mensagens de erro em atribuição de valores. Use "typeMismatch.$className.$propertyName" para personalizar(eg typeMismatch.Book.author) 26 | typeMismatch.java.net.URL=O campo {0} deve ser um URL válido. 27 | typeMismatch.java.net.URI=O campo {0} deve ser um URI válido. 28 | typeMismatch.java.util.Date=O campo {0} deve ser uma data válida 29 | typeMismatch.java.lang.Double=O campo {0} deve ser um número válido. 30 | typeMismatch.java.lang.Integer=O campo {0} deve ser um número válido. 31 | typeMismatch.java.lang.Long=O campo {0} deve ser um número valido. 32 | typeMismatch.java.lang.Short=O campo {0} deve ser um número válido. 33 | typeMismatch.java.math.BigDecimal=O campo {0} deve ser um número válido. 34 | typeMismatch.java.math.BigInteger=O campo {0} deve ser um número válido. 35 | -------------------------------------------------------------------------------- /grails-app/i18n/messages_th.properties: -------------------------------------------------------------------------------- 1 | default.doesnt.match.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบที่กำหนดไว้ใน [{3}] 2 | default.invalid.url.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบ URL 3 | default.invalid.creditCard.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบหมายเลขบัตรเครดิต 4 | default.invalid.email.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบอีเมล์ 5 | default.invalid.range.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้มีค่าที่ถูกต้องในช่วงจาก [{3}] ถึง [{4}] 6 | default.invalid.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้มีขนาดที่ถูกต้องในช่วงจาก [{3}] ถึง [{4}] 7 | default.invalid.max.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีค่าเกิดกว่าค่ามากสุด [{3}] 8 | default.invalid.min.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีค่าน้อยกว่าค่าต่ำสุด [{3}] 9 | default.invalid.max.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีขนาดเกินกว่าขนาดมากสุดของ [{3}] 10 | default.invalid.min.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีขนาดต่ำกว่าขนาดต่ำสุดของ [{3}] 11 | default.invalid.validator.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ผ่านการทวนสอบค่าที่ตั้งขึ้น 12 | default.not.inlist.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้อยู่ในรายการต่อไปนี้ [{3}] 13 | default.blank.message=คุณสมบัติ [{0}] ของคลาส [{1}] ไม่สามารถเป็นค่าว่างได้ 14 | default.not.equal.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่สามารถเท่ากับ [{3}] ได้ 15 | default.null.message=คุณสมบัติ [{0}] ของคลาส [{1}] ไม่สามารถเป็น null ได้ 16 | default.not.unique.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] จะต้องไม่ซ้ำ (unique) 17 | 18 | default.paginate.prev=ก่อนหน้า 19 | default.paginate.next=ถัดไป 20 | 21 | default.boolean.true=จริง 22 | default.boolean.false=เท็จ 23 | default.date.format=dd-MM-yyyy HH:mm:ss z 24 | default.number.format=0 25 | 26 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author) 27 | typeMismatch.java.net.URL=คุณสมบัติ '{0}' จะต้องเป็นค่า URL ที่ถูกต้อง 28 | typeMismatch.java.net.URI=คุณสมบัติ '{0}' จะต้องเป็นค่า URI ที่ถูกต้อง 29 | typeMismatch.java.util.Date=คุณสมบัติ '{0}' จะต้องมีค่าเป็นวันที่ 30 | typeMismatch.java.lang.Double=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Double 31 | typeMismatch.java.lang.Integer=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Integer 32 | typeMismatch.java.lang.Long=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Long 33 | typeMismatch.java.lang.Short=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Short 34 | typeMismatch.java.math.BigDecimal=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท BigDecimal 35 | typeMismatch.java.math.BigInteger=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท BigInteger -------------------------------------------------------------------------------- /grails-app/views/userGroup/edit.gsp: -------------------------------------------------------------------------------- 1 | <%@ page import="com.kursuspedia.domain.UserGroup" %> 2 | 3 | 4 | 5 | 6 | Edit UserGroup 7 | 8 | 9 | 14 |
15 |

Edit UserGroup

16 | 17 |
${flash.message}
18 |
19 | 20 |
21 | 22 |
23 |
24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | 32 | 35 | 38 | 39 | 40 | 41 | 44 | 47 | 48 | 49 | 50 |
33 | 34 | 36 | 37 |
42 | 43 | 45 | 46 |
51 |
52 |
53 | 54 | 55 |
56 |
57 |
58 | 59 | 60 | -------------------------------------------------------------------------------- /src/templates/scaffolding/list.gsp: -------------------------------------------------------------------------------- 1 | <%=packageName%> 2 | 3 | 4 | 5 | 6 | ${className} List 7 | 8 | 9 | 13 |
14 |

${className} List

15 | 16 |
\${flash.message}
17 |
18 |
19 | 20 | 21 | 22 | <% 23 | excludedProps = ['version', 24 | 'onLoad', 25 | 'beforeInsert', 26 | 'beforeDelete', 27 | 'beforeUpdate', 28 | 'afterInsert', 29 | 'afterUpdate', 30 | 'afterDelete'] 31 | 32 | props = domainClass.properties.findAll { !excludedProps.contains(it.name) && it.type != Set.class } 33 | Collections.sort(props, comparator.constructors[0].newInstance([domainClass] as Object[])) 34 | props.eachWithIndex { p,i -> 35 | if(i < 6) { 36 | if(p.isAssociation()) { %> 37 | 38 | <% } else { %> 39 | 40 | <% } } } %> 41 | 42 | 43 | 44 | 45 | 46 | <% props.eachWithIndex { p,i -> 47 | if(i == 0) { %> 48 | 49 | <% } else if(i < 6) { %> 50 | 51 | <% } } %> 52 | 53 | 54 | 55 |
${p.naturalName}
\${fieldValue(bean:${propertyName}, field:'${p.name}')}\${fieldValue(bean:${propertyName}, field:'${p.name}')}
56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 | -------------------------------------------------------------------------------- /src/templates/scaffolding/create.gsp: -------------------------------------------------------------------------------- 1 | <%=packageName%> 2 | 3 | 4 | 5 | 6 | Create ${className} 7 | 8 | 9 | 13 |
14 |

Create ${className}

15 | 16 |
\${flash.message}
17 |
18 | 19 |
20 | 21 |
22 |
23 | > 24 |
25 | 26 | 27 | <% 28 | 29 | excludedProps = ['version', 30 | 'id', 31 | 'onLoad', 32 | 'beforeInsert', 33 | 'beforeDelete', 34 | 'beforeUpdate', 35 | 'afterInsert', 36 | 'afterUpdate', 37 | 'afterDelete'] 38 | props = domainClass.properties.findAll { !excludedProps.contains(it.name) } 39 | 40 | Collections.sort(props, comparator.constructors[0].newInstance([domainClass] as Object[])) 41 | props.each { p -> 42 | if(!Collection.class.isAssignableFrom(p.type)) { 43 | cp = domainClass.constrainedProperties[p.name] 44 | display = (cp ? cp.display : true) 45 | if(display) { %> 46 | 47 | 50 | 53 | 54 | <% } } } %> 55 | 56 |
48 | 49 | 51 | ${renderEditor(p)} 52 |
57 |
58 |
59 | 60 |
61 |
62 |
63 | 64 | 65 | -------------------------------------------------------------------------------- /web-app/js/prototype/scriptaculous.js: -------------------------------------------------------------------------------- 1 | // script.aculo.us scriptaculous.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009 2 | 3 | // Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining 6 | // a copy of this software and associated documentation files (the 7 | // "Software"), to deal in the Software without restriction, including 8 | // without limitation the rights to use, copy, modify, merge, publish, 9 | // distribute, sublicense, and/or sell copies of the Software, and to 10 | // permit persons to whom the Software is furnished to do so, subject to 11 | // the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be 14 | // included in all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | // For details, see the script.aculo.us web site: http://script.aculo.us/ 25 | 26 | var Scriptaculous = { 27 | Version: '1.8.3', 28 | require: function(libraryName) { 29 | try{ 30 | // inserting via DOM fails in Safari 2.0, so brute force approach 31 | document.write('