Changeset 539


Ignore:
Timestamp:
Jun 8, 2010, 11:18:27 AM (9 years ago)
Author:
duh
Message:
  • dev commit
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/studycapturing/WizardController.groovy

    r535 r539  
    293293                                flash.errors = [:]
    294294                                flash.values = params
    295                                 def speciesTerm = Term.findByName(params.species);
    296                                 def subjectTemplateName = params.get('template');
    297                                 def subjectTemplate = Template.findByName(subjectTemplateName);
     295                                def speciesTerm = Term.findByName(params.species)
     296                                def subjectTemplateName = params.get('template')
     297                                def subjectTemplate = Template.findByName(subjectTemplateName)
    298298
    299299                                // add this subject template to the subject template array
     
    330330
    331331                                flash.errors = [:]
    332                                 def delete = params.get('do') as int;
     332                                def delete = params.get('do') as int
    333333
    334334                                // remove subject
     
    456456                        on("deleteEvent") {
    457457                                flash.values = params
    458                                 def delete = params.get('do') as int;
     458                                def delete = params.get('do') as int
    459459
    460460                                // handle event groupings
     
    506506                        on("deleteEventGroup") {
    507507                                flash.values = params
    508                                 def delete = params.get('do') as int;
     508                                def delete = params.get('do') as int
    509509
    510510                                // handle event groupings
     
    589589                                        // iterate through events
    590590                                        flow.events.each() { event ->
    591                                                 println "bla"
    592591                                                if (event instanceof SamplingEvent) {
    593                                                         //println event.getFieldValue('name')
     592                                                        println event.template.name
    594593                                                        println event.startTime
    595594                                                        println event.endTime
     595                                                        def sampleName = (this.ucwords(subject.value.name) + '_' + this.ucwords(event.template.name) + ((event.startTime) ? '_' + event.startTime : '')).replaceAll("([ ]{1,})", "")
     596                                                                //.replaceAll("([^A-Za-z0-9_])", "")
     597                                                        println sampleName
    596598                                                }
    597 
    598599                                        }
    599600                                }
     
    718719        def handleStudy(flow, flash, params) {
    719720                // create study instance if we have none
    720                 if (!flow.study) flow.study = new Study();
     721                if (!flow.study) flow.study = new Study()
    721722
    722723                // create date instance from date string?
     
    743744                }
    744745
    745                 // handle Publications and Contacts
    746                 handlePublications(flow, flash, params)
    747                 handleContacts(flow, flash, params)
     746                // handle Publications and Contacts
     747                handlePublications(flow, flash, params)
     748                handleContacts(flow, flash, params)
    748749
    749750                // validate study
     
    767768        def handlePublications(flow, flash, params) {
    768769                // create study instance if we have none
    769                 if (!flow.study) flow.study = new Study();
    770                 if (!flow.study.publications ) flow.study.publications = [];
    771 
    772                 // Check the ids of the pubblications that should be attached
    773                 // to this study. If they are already attached, keep 'm. If
    774                 // studies are attached that are not in the selected (i.e. the
    775                 // user deleted them), remove them
    776                 def publicationIDs = params.get( 'publication_ids' );
    777                 if( publicationIDs ) {
    778                     // Find the individual IDs and make integers
    779                     publicationIDs = publicationIDs.split(',').collect { Integer.parseInt( it, 10 ) };
    780 
    781                     // First remove the publication that are not present in the array
    782                     flow.study.publications.removeAll { publication -> !publicationIDs.find { id -> id == publication.id } }
    783 
    784                     // Add those publications not yet present in the database
    785                     publicationIDs.each { id ->
    786                         if( !flow.study.publications.find { publication -> id == publication.id } ) {
    787                             def publication = Publication.get( id );
    788                             if( publication ) {
    789                                 flow.study.addToPublications( publication );
    790                             } else {
    791                                 println( 'Publication with ID ' + id + ' not found in database.' );
    792                             }
    793                         }
    794                     }
    795 
    796                 } else {
    797                     println( 'No publications selected.')
    798                     flow.study.publications.clear();
    799                 }
     770                if (!flow.study) flow.study = new Study()
     771                if (!flow.study.publications) flow.study.publications = []
     772
     773                // Check the ids of the pubblications that should be attached
     774                // to this study. If they are already attached, keep 'm. If
     775                // studies are attached that are not in the selected (i.e. the
     776                // user deleted them), remove them
     777                def publicationIDs = params.get('publication_ids')
     778                if (publicationIDs) {
     779                        // Find the individual IDs and make integers
     780                        publicationIDs = publicationIDs.split(',').collect { Integer.parseInt(it, 10) }
     781
     782                        // First remove the publication that are not present in the array
     783                        flow.study.publications.removeAll { publication -> !publicationIDs.find { id -> id == publication.id } }
     784
     785                        // Add those publications not yet present in the database
     786                        publicationIDs.each { id ->
     787                                if (!flow.study.publications.find { publication -> id == publication.id }) {
     788                                        def publication = Publication.get(id)
     789                                        if (publication) {
     790                                                flow.study.addToPublications(publication)
     791                                        } else {
     792                                                println('.publication with ID ' + id + ' not found in database.')
     793                                        }
     794                                }
     795                        }
     796
     797                } else {
     798                        println('.no publications selected.')
     799                        flow.study.publications.clear()
     800                }
    800801
    801802        }
     
    810811        def handleContacts(flow, flash, params) {
    811812                // create study instance if we have none
    812                 if (!flow.study) flow.study = new Study();
    813                 if (!flow.study.persons ) flow.study.persons = [];
    814 
    815                 // Check the ids of the contacts that should be attached
    816                 // to this study. If they are already attached, keep 'm. If
    817                 // studies are attached that are not in the selected (i.e. the
    818                 // user deleted them), remove them
    819 
    820                 // Contacts are saved as [person_id]-[role_id]
    821                 println( params );
    822                 def contactIDs = params.get( 'contacts_ids' );
    823                 println( contactIDs );
    824                 if( contactIDs ) {
    825                     // Find the individual IDs and make integers
    826                     contactIDs = contactIDs.split(',').collect {
    827                         def parts = it.split( '-' );
    828                         return [ person: Integer.parseInt( parts[0] ), role: Integer.parseInt( parts[1] ) ];
    829                     };
    830 
    831                     // First remove the contacts that are not present in the array
    832                     flow.study.persons.removeAll {
    833                         studyperson -> !contactIDs.find { ids -> ( ids.person == studyperson.person.id ) && ( ids.role == studyperson.role.id ) }
    834                     };
    835 
    836                     // Add those contacts not yet present in the database
    837                     contactIDs.each { ids ->
    838                         if( !flow.study.persons.find { studyperson -> ( ids.person == studyperson.person.id ) && ( ids.role == studyperson.role.id ) } ) {
    839                             def person = Person.get( ids.person );
    840                             def role = PersonRole.get( ids.role );
    841                             if( person && role ) {
    842                                 // Find a studyperson object with these parameters
    843                                 def studyPerson = StudyPerson.findAll().find { studyperson -> studyperson.person.id == person.id && studyperson.role.id == role.id };
    844 
    845                                 // If if does not yet exist, save the example
    846                                 if( !studyPerson ) {
    847                                     studyPerson = new StudyPerson(
    848                                         person: person,
    849                                         role: role
    850                                     );
    851                                     studyPerson.save( flush: true );
    852                                 }
    853 
    854                                 flow.study.addToPersons( studyPerson );
    855                             } else {
    856                                 println( 'Person ' + ids.person + ' or Role ' + ids.role + ' not found in database.' );
    857                             }
    858                         }
    859                     }
    860 
    861                 } else {
    862                     println( 'No persons selected.')
    863                     flow.study.persons.clear();
    864                 }
    865 
    866         }
     813                if (!flow.study) flow.study = new Study()
     814                if (!flow.study.persons) flow.study.persons = []
     815
     816                // Check the ids of the contacts that should be attached
     817                // to this study. If they are already attached, keep 'm. If
     818                // studies are attached that are not in the selected (i.e. the
     819                // user deleted them), remove them
     820
     821                // Contacts are saved as [person_id]-[role_id]
     822                def contactIDs = params.get('contacts_ids')
     823                if (contactIDs) {
     824                        // Find the individual IDs and make integers
     825                        contactIDs = contactIDs.split(',').collect {
     826                                def parts = it.split('-')
     827                                return [person: Integer.parseInt(parts[0]), role: Integer.parseInt(parts[1])]
     828                        }
     829
     830                        // First remove the contacts that are not present in the array
     831                        flow.study.persons.removeAll {
     832                                studyperson -> !contactIDs.find { ids -> (ids.person == studyperson.person.id) && (ids.role == studyperson.role.id) }
     833                        }
     834
     835                        // Add those contacts not yet present in the database
     836                        contactIDs.each { ids ->
     837                                if (!flow.study.persons.find { studyperson -> (ids.person == studyperson.person.id) && (ids.role == studyperson.role.id) }) {
     838                                        def person = Person.get(ids.person)
     839                                        def role = PersonRole.get(ids.role)
     840                                        if (person && role) {
     841                                                // Find a studyperson object with these parameters
     842                                                def studyPerson = StudyPerson.findAll().find { studyperson -> studyperson.person.id == person.id && studyperson.role.id == role.id }
     843
     844                                                // If if does not yet exist, save the example
     845                                                if (!studyPerson) {
     846                                                        studyPerson = new StudyPerson(
     847                                                                person: person,
     848                                                                role: role
     849                                                        )
     850                                                        studyPerson.save(flush: true)
     851                                                }
     852
     853                                                flow.study.addToPersons(studyPerson)
     854                                        } else {
     855                                                println('.person ' + ids.person + ' or Role ' + ids.role + ' not found in database.')
     856                                        }
     857                                }
     858                        }
     859                } else {
     860                        println('.no persons selected.')
     861                        flow.study.persons.clear()
     862                }
     863
     864        }
     865
    867866        /**
    868867         * re-usable code for handling subject form data in a web flow
     
    914913                // handle the type of event
    915914                if (params.eventType == 'event') {
    916                         flow.event = new Event();
     915                        flow.event = new Event()
    917916                        template = params.remove('eventTemplate')
    918917                } else if (params.eventType == 'sample') {
    919                         flow.event = new SamplingEvent();
     918                        flow.event = new SamplingEvent()
    920919                        template = params.remove('sampleTemplate')
    921920                }
     
    10141013        }
    10151014
     1015
     1016        /**
     1017         * groovy / java equivalent of php's ucwords function
     1018         *
     1019         * Capitalize all first letters of seperate words
     1020         *
     1021         * @param String
     1022         * @return String
     1023         */
     1024        def ucwords(String text) {
     1025                def newText = ''
     1026
     1027                // change case to lowercase
     1028                text = text.toLowerCase()
     1029
     1030                // iterate through words
     1031                text.split(" ").each() {
     1032                        newText += it[0].toUpperCase() + it.substring(1) + " "
     1033                }
     1034
     1035                return newText.substring(0, newText.size()-1)
     1036        }
     1037
    10161038        /**
    10171039         * return the object from a map of objects by searching for a name
     
    10881110        def ajaxParseRelTime = {
    10891111                if (params.reltime == null) {
    1090                         response.status = 400;
    1091                         render('reltime parameter is expected');
     1112                        response.status = 400
     1113                        render('reltime parameter is expected')
    10921114                }
    10931115
    10941116                try {
    1095                         def reltime = RelTime.parseRelTime(params.reltime);
    1096                         render reltime.toPrettyString();
     1117                        def reltime = RelTime.parseRelTime(params.reltime)
     1118                        render reltime.toPrettyString()
    10971119                } catch (IllegalArgumentException e) {
    1098                         response.status = 400;
    1099                         render(e.getMessage());
     1120                        response.status = 400
     1121                        render(e.getMessage())
    11001122                }
    11011123        }
  • trunk/grails-app/taglib/dbnp/studycapturing/WizardTagLib.groovy

    r527 r539  
    991991        }
    992992
    993         def PublicationSelectElement = { attrs, body ->
    994 
    995             attrs.description = 'Publications';
    996             // render list with publications currently available
    997             baseElement.call(
    998                     '_publicationList',
    999                     attrs,
    1000                     body
    1001             )
    1002 
    1003             attrs.description = '';
    1004 
    1005             // render 'Add publication button'
    1006             baseElement.call(
    1007                     '_publicationAddButton',
    1008                     attrs,
    1009                     body
    1010             )
    1011         }
    1012 
    1013         /**
    1014         * Renders a input box for publications
    1015         */
    1016         def publicationSelect = { attrs, body ->
    1017                 if( attrs.get( 'value' ) == null ) {
    1018                     attrs.value = [];
    1019                 }
    1020                 if( attrs.get( 'description' ) == null ) {
    1021                     attrs.description = '';
    1022                 }
    1023                 out << '<form id="' + attrs.name + '_form">';
    1024                 out << textField(
    1025                             name: attrs.get( "name" ),
    1026                             value: '',
    1027                             rel: 'publication-pubmed',
    1028                             style: 'width: 400px;'
     993        def PublicationSelectElement = { attrs, body ->
     994
     995                attrs.description = 'Publications';
     996                // render list with publications currently available
     997                baseElement.call(
     998                        '_publicationList',
     999                        attrs,
     1000                        body
     1001                )
     1002
     1003                attrs.description = '';
     1004
     1005                // render 'Add publication button'
     1006                baseElement.call(
     1007                        '_publicationAddButton',
     1008                        attrs,
     1009                        body
     1010                )
     1011        }
     1012
     1013        /**
     1014        * Renders a input box for publications
     1015        */
     1016        def publicationSelect = { attrs, body ->
     1017                if (attrs.get('value') == null) {
     1018                        attrs.value = [];
     1019                }
     1020                if (attrs.get('description') == null) {
     1021                        attrs.description = '';
     1022                }
     1023                out << '<form id="' + attrs.name + '_form">';
     1024                out << textField(
     1025                        name: attrs.get("name"),
     1026                        value: '',
     1027                        rel: 'publication-pubmed',
     1028                        style: 'width: 400px;'
    10291029                );
    1030                 out << '</form>';
    1031                 out << '<script type="text/javascript">';
    1032                 out << '  var onSelect = function( chooserObject, inputElement, event, ui ) { selectPubMedAdd( chooserObject, inputElement, event, ui ); enableButton( ".'+ attrs.name + '_publication_dialog", "Add", true ); };'
    1033                 out << '  iField = $( "#' + attrs.get( 'name' ) + '" );';
    1034                 out << '  new PublicationChooser().initAutocomplete( iField, { "select" : onSelect } );';
    1035                 out << '</script>';
    1036         }
    1037 
    1038         def _publicationList = { attrs, body ->
    1039            def display_none = 'none';
    1040            if( !attrs.get( 'value' ) || attrs.get( 'value' ).size() == 0 ) {
    1041                 display_none = 'inline';
    1042            }
    1043            
    1044             // Add a unordered list
    1045             out << '<ul class="publication_list" id="' + attrs.name + '_list">';
    1046 
    1047             out << '<li>';
    1048             out << '<span class="publication_none" id="' + attrs.name + '_none" style="display: ' + display_none + ';">';
    1049             out << 'No publications selected';
    1050             out << '</span>';
    1051             out << '</li>';
    1052 
    1053             out << '</ul>';
    1054 
    1055            // Add the publications using javascript
    1056            out << '<script type="text/javascript">'
    1057            if( attrs.get( 'value' ) && attrs.get( 'value' ).size() > 0 ) {
    1058                def i = 0;
    1059                attrs.get( 'value' ).each {
    1060                     out << 'showPublication( ';
    1061                     out << '  "' + attrs.name + '",';
    1062                     out << '  ' + it.id + ',';
    1063                     out << '  "' + it.title + '",';
    1064                     out << '  "' + it.authorsList + '",';
    1065                     out << '  ' + i++;
    1066                     out << ');';
    1067                 }
    1068             }
    1069             out << '</script>';
    1070 
    1071             def ids;
    1072             if( attrs.get( 'value' ) && attrs.get( 'value' ).size() > 0 ) {
    1073                 ids = attrs.get( 'value' ).id.join( ',' )
    1074             } else {
    1075                 ids = '';
    1076             }
    1077             out << '<input type="hidden" name="' + attrs.name + '_ids" value="' + ids + '" id="' + attrs.name + '_ids">';
    1078         }
    1079 
    1080         def _publicationAddButton = { attrs, body ->
    1081 
    1082             // Output the dialog for the publications
    1083             out << '<div id="' + attrs.name + '_dialog">';
    1084             out << '<p>Search for a publication on pubmed. You can search on a part of the title or authors. </p>';
    1085             out << publicationSelect( attrs, body );
    1086             out << '</div>';
    1087             out << '<script type="text/javascript">';
    1088             out << '  createPublicationDialog( "' + attrs.name + '" );'
    1089             out << '</script>';
    1090 
    1091             out << '<input type="button" onClick="openPublicationDialog(\'' + attrs.name + '\' );" value="Add Publication">';
    1092         }
    1093 
    1094         def ContactSelectElement = { attrs, body ->
    1095 
    1096             attrs.description = 'Contacts';
    1097             // render list with publications currently available
    1098             baseElement.call(
    1099                     '_contactList',
    1100                     attrs,
    1101                     body
    1102             )
    1103 
    1104             attrs.description = '';
    1105 
    1106             // render 'publications list'
    1107             out << '<div id="' + attrs.name + '_dialog" class="contacts_dialog" style="display: none;">'
    1108             baseElement.call(
    1109                     '_personSelect',
    1110                     attrs,
    1111                     body
    1112             )
    1113             baseElement.call(
    1114                     '_roleSelect',
    1115                     attrs,
    1116                     body
    1117             )
    1118             baseElement.call(
    1119                     '_contactAddButtonAddition',
    1120                     attrs,
    1121                     body
    1122             )
    1123             out << '</div>';
    1124 
    1125             // render 'Add contact button'
    1126             baseElement.call(
    1127                     '_contactAddDialogButton',
    1128                     attrs,
    1129                     body
    1130             )
    1131         }
    1132 
    1133         def _contactList = { attrs, body ->
    1134            def display_none = 'none';
    1135            if( !attrs.get( 'value' ) || attrs.get( 'value' ).size() == 0 ) {
    1136                 display_none = 'inline';
    1137            }
    1138 
    1139             // Add a unordered list
    1140             out << '<ul class="contact_list" id="' + attrs.name + '_list">';
    1141 
    1142             out << '<li>';
    1143             out << '<span class="contacts_none" id="' + attrs.name + '_none" style="display: ' + display_none + ';">';
    1144             out << 'No contacts selected';
    1145             out << '</span>';
    1146             out << '</li>';
    1147 
    1148             out << '</ul>';
    1149 
    1150            // Add the contacts using javascript
    1151            out << '<script type="text/javascript">'
    1152            if( attrs.get( 'value' ) && attrs.get( 'value' ).size() > 0 ) {
    1153                def i = 0;
    1154                attrs.get( 'value' ).each {
    1155                     out << 'showContact( ';
    1156                     out << '  "' + attrs.name + '",';
    1157                     out << '  "' + it.person.id + '-' + it.role.id + '",';
    1158                     out << '  "' + it.person.lastName + ', ' + it.person.firstName + ( it.person.prefix  ? ' ' + it.person.prefix : '' ) + '",';
    1159                     out << '  "' + it.role.name + '",';
    1160                     out << '  ' + i++;
    1161                     out << ');';
    1162                 }
    1163             }
    1164             out << '</script>';
    1165 
    1166             def ids = '';
    1167             if( attrs.get( 'value' ) && attrs.get( 'value' ).size() > 0 ) {
    1168                 ids = attrs.get( 'value' ).collect { it.person.id + '-' + it.role.id }
    1169                 ids = ids.join( ',' );
    1170             }
    1171             out << '<input type="hidden" name="' + attrs.name + '_ids" value="' + ids + '" id="' + attrs.name + '_ids">';
    1172         }
    1173 
    1174         def _contactAddSelect = { attrs, body ->
    1175             out << _personSelect( attrs ) + _roleSelect( attrs );
    1176         }
    1177 
    1178         def _contactAddButtonAddition = { attrs, body ->
    1179             out << '<input type="button" onClick="addContact ( \'' + attrs.name + '\' ); $(\'#' + attrs.name + '_dialog\').hide(); $( \'#' + attrs.name + '_dialogButton\' ).show();" value="Add">';
    1180             out << '<input type="button" onClick="$(\'#' + attrs.name + '_dialog\').hide(); $( \'#' + attrs.name + '_dialogButton\' ).show();" value="Close">';
    1181         }
    1182        
    1183         def _contactAddDialogButton = { attrs, body ->
    1184             out << '<input type="button" onClick="$( \'#' + attrs.name + '_dialog\' ).show(); $(this).hide();" id="' + attrs.name + '_dialogButton" value="Add Contact">';
    1185         }
     1030                out << '</form>';
     1031                out << '<script type="text/javascript">';
     1032                out << '  var onSelect = function( chooserObject, inputElement, event, ui ) { selectPubMedAdd( chooserObject, inputElement, event, ui ); enableButton( ".' + attrs.name + '_publication_dialog", "Add", true ); };'
     1033                out << '  iField = $( "#' + attrs.get('name') + '" );';
     1034                out << '  new PublicationChooser().initAutocomplete( iField, { "select" : onSelect } );';
     1035                out << '</script>';
     1036        }
     1037
     1038        def _publicationList = { attrs, body ->
     1039                def display_none = 'none';
     1040                if (!attrs.get('value') || attrs.get('value').size() == 0) {
     1041                        display_none = 'inline';
     1042                }
     1043
     1044                // Add a unordered list
     1045                out << '<ul class="publication_list" id="' + attrs.name + '_list">';
     1046
     1047                out << '<li>';
     1048                out << '<span class="publication_none" id="' + attrs.name + '_none" style="display: ' + display_none + ';">';
     1049                out << 'No publications selected';
     1050                out << '</span>';
     1051                out << '</li>';
     1052
     1053                out << '</ul>';
     1054
     1055                // Add the publications using javascript
     1056                out << '<script type="text/javascript">'
     1057                if (attrs.get('value') && attrs.get('value').size() > 0) {
     1058                        def i = 0;
     1059                        attrs.get('value').each {
     1060                                out << 'showPublication( ';
     1061                                out << '  "' + attrs.name + '",';
     1062                                out << '  ' + it.id + ',';
     1063                                out << '  "' + it.title + '",';
     1064                                out << '  "' + it.authorsList + '",';
     1065                                out << '  ' + i++;
     1066                                out << ');';
     1067                        }
     1068                }
     1069                out << '</script>';
     1070
     1071                def ids;
     1072                if (attrs.get('value') && attrs.get('value').size() > 0) {
     1073                        ids = attrs.get('value').id.join(',')
     1074                } else {
     1075                        ids = '';
     1076                }
     1077                out << '<input type="hidden" name="' + attrs.name + '_ids" value="' + ids + '" id="' + attrs.name + '_ids">';
     1078        }
     1079
     1080        def _publicationAddButton = { attrs, body ->
     1081
     1082                // Output the dialog for the publications
     1083                out << '<div id="' + attrs.name + '_dialog">';
     1084                out << '<p>Search for a publication on pubmed. You can search on a part of the title or authors. </p>';
     1085                out << publicationSelect(attrs, body);
     1086                out << '</div>';
     1087                out << '<script type="text/javascript">';
     1088                out << '  createPublicationDialog( "' + attrs.name + '" );'
     1089                out << '</script>';
     1090
     1091                out << '<input type="button" onClick="openPublicationDialog(\'' + attrs.name + '\' );" value="Add Publication">';
     1092        }
     1093
     1094        def ContactSelectElement = { attrs, body ->
     1095
     1096                attrs.description = 'Contacts';
     1097                // render list with publications currently available
     1098                baseElement.call(
     1099                        '_contactList',
     1100                        attrs,
     1101                        body
     1102                )
     1103
     1104                attrs.description = '';
     1105
     1106                // render 'publications list'
     1107                out << '<div id="' + attrs.name + '_dialog" class="contacts_dialog" style="display: none;">'
     1108                baseElement.call(
     1109                        '_personSelect',
     1110                        attrs,
     1111                        body
     1112                )
     1113                baseElement.call(
     1114                        '_roleSelect',
     1115                        attrs,
     1116                        body
     1117                )
     1118                baseElement.call(
     1119                        '_contactAddButtonAddition',
     1120                        attrs,
     1121                        body
     1122                )
     1123                out << '</div>';
     1124
     1125                // render 'Add contact button'
     1126                baseElement.call(
     1127                        '_contactAddDialogButton',
     1128                        attrs,
     1129                        body
     1130                )
     1131        }
     1132
     1133        def _contactList = { attrs, body ->
     1134                def display_none = 'none';
     1135                if (!attrs.get('value') || attrs.get('value').size() == 0) {
     1136                        display_none = 'inline';
     1137                }
     1138
     1139                // Add a unordered list
     1140                out << '<ul class="contact_list" id="' + attrs.name + '_list">';
     1141
     1142                out << '<li>';
     1143                out << '<span class="contacts_none" id="' + attrs.name + '_none" style="display: ' + display_none + ';">';
     1144                out << 'No contacts selected';
     1145                out << '</span>';
     1146                out << '</li>';
     1147
     1148                out << '</ul>';
     1149
     1150                // Add the contacts using javascript
     1151                out << '<script type="text/javascript">'
     1152                if (attrs.get('value') && attrs.get('value').size() > 0) {
     1153                        def i = 0;
     1154                        attrs.get('value').each {
     1155                                out << 'showContact( ';
     1156                                out << '  "' + attrs.name + '",';
     1157                                out << '  "' + it.person.id + '-' + it.role.id + '",';
     1158                                out << '  "' + it.person.lastName + ', ' + it.person.firstName + (it.person.prefix ? ' ' + it.person.prefix : '') + '",';
     1159                                out << '  "' + it.role.name + '",';
     1160                                out << '  ' + i++;
     1161                                out << ');';
     1162                        }
     1163                }
     1164                out << '</script>';
     1165
     1166                def ids = '';
     1167                if (attrs.get('value') && attrs.get('value').size() > 0) {
     1168                        ids = attrs.get('value').collect { it.person.id + '-' + it.role.id }
     1169                        ids = ids.join(',');
     1170                }
     1171                out << '<input type="hidden" name="' + attrs.name + '_ids" value="' + ids + '" id="' + attrs.name + '_ids">';
     1172        }
     1173
     1174        def _contactAddSelect = { attrs, body ->
     1175                out << _personSelect(attrs) + _roleSelect(attrs);
     1176        }
     1177
     1178        def _contactAddButtonAddition = { attrs, body ->
     1179                out << '<input type="button" onClick="addContact ( \'' + attrs.name + '\' ); $(\'#' + attrs.name + '_dialog\').hide(); $( \'#' + attrs.name + '_dialogButton\' ).show();" value="Add">';
     1180                out << '<input type="button" onClick="$(\'#' + attrs.name + '_dialog\').hide(); $( \'#' + attrs.name + '_dialogButton\' ).show();" value="Close">';
     1181        }
     1182
     1183        def _contactAddDialogButton = { attrs, body ->
     1184                out << '<input type="button" onClick="$( \'#' + attrs.name + '_dialog\' ).show(); $(this).hide();" id="' + attrs.name + '_dialogButton" value="Add Contact">';
     1185        }
    11861186        /**
    11871187         * Person select element
     
    11891189         */
    11901190        def _personSelect = { attrs ->
    1191             def selectAttrs = new LinkedHashMap();
    1192 
    1193             // define 'from'
    1194             def persons = Person.findAll().sort( { a, b -> a.lastName == b.lastName ? ( a.firstName <=> b.firstName ) : ( a.lastName <=> b.lastName ) } as Comparator );
    1195             selectAttrs.from = persons.collect { it.lastName + ', ' + it.firstName + ( it.prefix ? ' ' + it.prefix : '' ) }
    1196             selectAttrs.keys = persons.id;
    1197 
    1198             // add 'rel' attribute
    1199             selectAttrs.rel = 'person'
    1200             selectAttrs.name = attrs.name + '_person';
    1201 
    1202             out << "Person: " + select(selectAttrs)
    1203         }
     1191                def selectAttrs = new LinkedHashMap();
     1192
     1193                // define 'from'
     1194                def persons = Person.findAll().sort({ a, b -> a.lastName == b.lastName ? (a.firstName <=> b.firstName) : (a.lastName <=> b.lastName) } as Comparator);
     1195                selectAttrs.from = persons.collect { it.lastName + ', ' + it.firstName + (it.prefix ? ' ' + it.prefix : '') }
     1196                selectAttrs.keys = persons.id;
     1197
     1198                // add 'rel' attribute
     1199                selectAttrs.rel = 'person'
     1200                selectAttrs.name = attrs.name + '_person';
     1201
     1202                out << "Person: " + select(selectAttrs)
     1203        }
    12041204
    12051205        /**
     
    12081208         */
    12091209        def _roleSelect = { attrs ->
    1210             println( attrs );
    1211             def selectAttrs = new LinkedHashMap();
    1212 
    1213             // define 'from'
    1214             def roles = PersonRole.findAll();
    1215             selectAttrs.from = roles.collect { it.name };
    1216             selectAttrs.keys = roles.id;
    1217            
    1218             // add 'rel' attribute
    1219             selectAttrs.rel = 'role'
    1220             selectAttrs.name = attrs.name + '_role';
    1221 
    1222             out << "Role: " + select(selectAttrs)
    1223         }
     1210                println(attrs);
     1211                def selectAttrs = new LinkedHashMap();
     1212
     1213                // define 'from'
     1214                def roles = PersonRole.findAll();
     1215                selectAttrs.from = roles.collect { it.name };
     1216                selectAttrs.keys = roles.id;
     1217
     1218                // add 'rel' attribute
     1219                selectAttrs.rel = 'role'
     1220                selectAttrs.name = attrs.name + '_role';
     1221
     1222                out << "Role: " + select(selectAttrs)
     1223        }
    12241224}
  • trunk/grails-app/views/wizard/pages/_samples.gsp

    r509 r539  
    2121                blah blah blaaa....
    2222        </span>
     23
    2324       
    2425
  • trunk/web-app/js/wizard.js

    r529 r539  
    1515var warnOnRedirect = true;
    1616$(document).ready(function() {
    17     // check if user is using Firefox 3.6 and warm the user
    18     // about the XMLHttpRequest bug that causes the wizard to break...
    19     re = /Firefox\/3\.6/gi;
    20     if (navigator.userAgent.match(re)) {
    21         // http://code.google.com/p/fbug/issues/detail?id=1899
    22         var wizard = $('div#wizard');
    23         if (wizard.find("#warning").length === 0) {
    24             wizard.html('<span id="warning" style="color:red;font-size:8px;">Firefox 3.6 contains <a href="http://code.google.com/p/fbug/issues/detail?id=2746" target="_new">a bug</a> in combination with Firebug\'s XMLHttpRequest spy which causes the wizard to not function anymore. Please make sure you have Firebug\'s XMLHttpRequest spy disabled or use Firefox 3.5.7 instead...</span>' + wizard.html())
    25         }
    26     }
    27 
    28     // attach Tooltips
    2917    insertOnRedirectWarning();
    3018    onWizardPage();
  • trunk/web-app/js/wizard.min.js

    r528 r539  
    1 var warnOnRedirect=true;$(document).ready(function(){re=/Firefox\/3\.6/gi;if(navigator.userAgent.match(re)){var a=$("div#wizard");if(a.find("#warning").length===0){a.html('<span id="warning" style="color:red;font-size:8px;">Firefox 3.6 contains <a href="http://code.google.com/p/fbug/issues/detail?id=2746" target="_new">a bug</a> in combination with Firebug\'s XMLHttpRequest spy which causes the wizard to not function anymore. Please make sure you have Firebug\'s XMLHttpRequest spy disabled or use Firefox 3.5.7 instead...</span>'+a.html())}}insertOnRedirectWarning();onWizardPage()});function onWizardPage(){attachHelpTooltips();attachDatePickers();attachDateTimePickers();attachTableEvents();handleWizardTable();new TableEditor().init("div.table","div.row","div.column");new OntologyChooser().init();new SelectAddMore().init({rel:"term",url:baseUrl+"/termEditor",vars:"ontologies",label:"add more...",style:"addMore",onClose:function(a){refreshWebFlow()}});new SelectAddMore().init({rel:"template",url:baseUrl+"/templateEditor",vars:"entity",label:"add / modify..",style:"modify",onClose:function(a){refreshWebFlow()}});new SelectAddMore().init({rel:"person",url:baseUrl+"/person/list?dialog=true",vars:"person",label:"add / modify persons...",style:"modify",onClose:function(a){refreshWebFlow()}});new SelectAddMore().init({rel:"role",url:baseUrl+"/personRole/list?dialog=true",vars:"role",label:"add / modify roles...",style:"modify",onClose:function(a){refreshWebFlow()}});$("#accordion").accordion()}function insertOnRedirectWarning(){$("a").each(function(){var a=$(this);var b=/^#/gi;if(!a.attr("href").match(/^#/gi)&&!a.attr("href").match(/\/([^\/]+)\/wizard\/pages/gi)){a.bind("click",function(){if(warnOnRedirect){return onDirectWarning()}})}})}function onDirectWarning(){return confirm("Warning: navigating away from the wizard causes loss of work and unsaved data. Are you sure you want to continue?")}function attachHelpTooltips(){$("div#wizard").find("div.helpIcon").each(function(){helpIcon=$(this);helpContent=helpIcon.parent().find("div.helpContent");if(!helpContent.html()){helpContent=helpIcon.parent().parent().find("div.helpContent")}var html=(helpContent.html())?helpContent.html():"";if(html){var specialContent=html.match(/\[([^:]+)\:([^\]]+)\]/);if(specialContent){eval(specialContent[1]+"('"+specialContent[2]+"',helpContent)")}helpIcon.qtip({content:"leftMiddle",position:{corner:{tooltip:"leftMiddle",target:"rightMiddle"}},style:{border:{width:5,radius:10},padding:10,textAlign:"center",tip:true,name:"blue"},content:helpContent.html(),show:"mouseover",hide:"mouseout",api:{beforeShow:function(){}}});helpContent.remove()}})}function youtube(b,a){a.html("<div id='"+b+"'></div>");var c={allowScriptAccess:"always"};var d={id:"myytplayer_"+b};swfobject.embedSWF("http://www.youtube.com/v/"+b+"?enablejsapi=1&playerapiid=ytplayer_"+b,b,"200","150","8",null,null,c,d)}function onYouTubePlayerReady(a){ytplayer=document.getElementById("my"+a);ytplayer.playVideo()}function attachDatePickers(){$("div#wizard").find("input[type=text][rel$='date']").each(function(){$(this).datepicker({numberOfMonths:3,showButtonPanel:true,changeMonth:true,changeYear:true,dateFormat:"dd/mm/yy",altField:"#"+$(this).attr("name")+"Example",altFormat:"DD, d MM, yy"})})}function attachDateTimePickers(){$("div#wizard").find("input[type=text][rel$='datetime']").each(function(){$(this).datepicker({changeMonth:true,changeYear:true,dateFormat:"dd/mm/yy",altField:"#"+$(this).attr("name")+"Example",altTimeField:"#"+$(this).attr("name")+"Example2",altFormat:"DD, d MM, yy",showTime:true,time24h:true})})}function attachTableEvents(){$("div#wizard").find("div.row").each(function(){$(this).hover(function(){$(this).addClass("highlight")},function(){$(this).removeClass("highlight")})})}function handleWizardTable(){var b=this;var a=$("div#wizard").find("div.table");a.each(function(){var d=$(this);var g=(d.next().attr("class")=="sliderContainer")?d.next():null;var h=d.find("div.header");var f=20;var e=0;var c=[];h.children().each(function(){var m=$(this);var k=m.width();var i=parseInt(m.css("padding-left"),10)+parseInt(m.css("padding-right"),10);var l=parseInt(m.css("margin-left"),10)+parseInt(m.css("margin-right"),10);var j=parseInt(m.css("borderLeftWidth"),10)+parseInt(m.css("borderRightWidth"),10);if(i){k+=i}if(l){k+=l}if(j){k+=j}f+=k;c[e]=m.width();e++});h.css({width:f+"px"});d.find("div.row").each(function(){var j=$(this);var i=0;j.children().each(function(){$(this).css({width:c[i]+"px"});i++});j.css({width:f+"px"})});if(g){if(h.width()<d.width()){g.css({display:"none "})}else{g.slider({value:1,min:1,max:h.width()-d.width(),step:1,slide:function(i,j){d.find("div.header, div.row").css({"margin-left":(1-j.value)+"px"})}})}}})}function showExampleReltime(a){var d=a.name;var b=function(f,g,e){if(e.status==200){document.getElementById(d+"Example").value=f}};var c=function(e,g,f){document.getElementById(d+"Example").value=""};$.ajax({url:baseUrl+"/wizard/ajaxParseRelTime?reltime="+a.value,success:b,error:c})}function fileUploadField(a){new AjaxUpload("#upload_button_"+a,{action:baseUrl+"/file/upload",data:{},name:a,autoSubmit:true,onChange:function(b,c){oldFile=$("#"+a).val();if(oldFile!=""){if(!confirm("The old file is deleted when uploading a new file. Do you want to continue?")){return false}}this.setData({field:a,oldFile:oldFile});$("#"+a+"Example").html("Uploading "+createFileHTML(b))},onComplete:function(c,b){if(b==""){$("#"+a).val("");$("#"+a+"Example").html('<span class="error">Error uploading '+createFileHTML(c)+"</span>")}else{$("#"+a).val(b);$("#"+a+"Example").html("Uploaded "+createFileHTML(c))}}})}function createFileHTML(a){return'<a target="_blank" href="'+baseUrl+"/file/get/"+a+'">'+a+"</a>"}function addPublication(a){jQuery.ajax({type:"GET",url:baseUrl+"/publication/getID?"+$("#"+a+"_form").serialize(),success:function(c,e){var d=parseInt(c);var b=getPublicationIds(a);if($.inArray(d,b)==-1){b[b.length]=d;$("#"+a+"_ids").val(b.join(","));showPublication(a,d,$("#"+a+"_form").find("[name=publication-title]").val(),$("#"+a+"_form").find("[name=publication-authorsList]").val(),b.length-1);$("#"+a+"_none").css("display","none")}},error:function(b,d,c){alert("Publication could not be added.")}});return false}function removePublication(b,d){var c=getPublicationIds(b);if($.inArray(d,c)!=-1){c.splice($.inArray(d,c),1);$("#"+b+"_ids").val(c.join(","));var a=$("#"+b+"_item_"+d);if(a){a.remove()}if(c.length==0){$("#"+b+"_none").css("display","inline")}}}function getPublicationIds(a){var c=$("#"+a+"_ids").val();if(c==""){return new Array()}else{ids_array=c.split(",");for(var b=0;b<ids_array.length;b++){ids_array[b]=parseInt(ids_array[b])}return ids_array}}function showPublication(c,a,g,f,h){var e=document.createElement("img");e.className="famfamfam delete_button";e.setAttribute("alt","remove this publication");e.setAttribute("src",baseUrl+"/images/icons/famfamfam/delete.png");e.onclick=function(){removePublication(c,a);return false};var b=document.createElement("div");b.className="title";b.appendChild(document.createTextNode(g));var d=document.createElement("div");d.className="authors";d.appendChild(document.createTextNode(f));var i=document.createElement("li");i.setAttribute("id",c+"_item_"+a);i.className=h%2==0?"even":"odd";i.appendChild(e);i.appendChild(b);i.appendChild(d);$("#"+c+"_list").append(i)}function createPublicationDialog(a){if($("."+a+"_publication_dialog").length==0){$("#"+a+"_dialog").dialog({title:"Add publication",autoOpen:false,width:800,height:400,modal:true,dialogClass:a+"_publication_dialog",position:"center",buttons:{Add:function(){addPublication(a);$(this).dialog("close")},Close:function(){$(this).dialog("close")}},close:function(){}}).width(790).height(400)}else{$("#"+a+"_dialog").remove()}}function openPublicationDialog(a){var b=$("#"+a);b.autocomplete("close");b.val("");$("#"+a+"_dialog").dialog("open");b.focus();enableButton("."+a+"_publication_dialog","Add",false)}function getDialogButton(b,a){var e=$(b+" .ui-dialog-buttonpane button");for(var d=0;d<e.length;++d){var c=$(e[d]);if(c.text()==a){return c}}return null}function enableButton(b,a,c){var d=getDialogButton(b,a);if(d){if(c){d.attr("disabled","");d.removeClass("ui-state-disabled")}else{d.attr("disabled","disabled");d.addClass("ui-state-disabled")}}}function addContact(b){var e=$("#"+b+"_person").val();var a=$("#"+b+"_role").val();var c=e+"-"+a;var d=getContactIds(b);if($.inArray(c,d)==-1){d[d.length]=c;$("#"+b+"_ids").val(d.join(","));showContact(b,c,$("#"+b+"_person  :selected").text(),$("#"+b+"_role :selected").text(),d.length-1);$("#"+b+"_none").css("display","none")}}function removeContact(b,c){var d=getContactIds(b);if($.inArray(c,d)!=-1){d.splice($.inArray(c,d),1);$("#"+b+"_ids").val(d.join(","));var a=$("#"+b+"_item_"+c);if(a){a.remove()}if(d.length==0){$("#"+b+"_none").css("display","inline")}}}function getContactIds(a){var b=$("#"+a+"_ids").val();if(b==""){return new Array()}else{ids_array=b.split(",");return ids_array}}function showContact(c,a,d,f,h){var g=document.createElement("img");g.className="famfamfam delete_button";g.setAttribute("alt","remove this person");g.setAttribute("src",baseUrl+"/images/icons/famfamfam/delete.png");g.onclick=function(){removeContact(c,a);return false};var b=document.createElement("div");b.className="person";b.appendChild(document.createTextNode(d));var e=document.createElement("div");e.className="role";e.appendChild(document.createTextNode(f));var i=document.createElement("li");i.setAttribute("id",c+"_item_"+a);i.className=h%2==0?"even":"odd";i.appendChild(g);i.appendChild(b);i.appendChild(e);$("#"+c+"_list").append(i)};
     1var warnOnRedirect=true;$(document).ready(function(){insertOnRedirectWarning();onWizardPage()});function onWizardPage(){attachHelpTooltips();attachDatePickers();attachDateTimePickers();attachTableEvents();handleWizardTable();new TableEditor().init("div.table","div.row","div.column");new OntologyChooser().init();new SelectAddMore().init({rel:"term",url:baseUrl+"/termEditor",vars:"ontologies",label:"add more...",style:"addMore",onClose:function(a){refreshWebFlow()}});new SelectAddMore().init({rel:"template",url:baseUrl+"/templateEditor",vars:"entity",label:"add / modify..",style:"modify",onClose:function(a){refreshWebFlow()}});new SelectAddMore().init({rel:"person",url:baseUrl+"/person/list?dialog=true",vars:"person",label:"add / modify persons...",style:"modify",onClose:function(a){refreshWebFlow()}});new SelectAddMore().init({rel:"role",url:baseUrl+"/personRole/list?dialog=true",vars:"role",label:"add / modify roles...",style:"modify",onClose:function(a){refreshWebFlow()}});$("#accordion").accordion()}function insertOnRedirectWarning(){$("a").each(function(){var a=$(this);var b=/^#/gi;if(!a.attr("href").match(/^#/gi)&&!a.attr("href").match(/\/([^\/]+)\/wizard\/pages/gi)){a.bind("click",function(){if(warnOnRedirect){return onDirectWarning()}})}})}function onDirectWarning(){return confirm("Warning: navigating away from the wizard causes loss of work and unsaved data. Are you sure you want to continue?")}function attachHelpTooltips(){$("div#wizard").find("div.helpIcon").each(function(){helpIcon=$(this);helpContent=helpIcon.parent().find("div.helpContent");if(!helpContent.html()){helpContent=helpIcon.parent().parent().find("div.helpContent")}var html=(helpContent.html())?helpContent.html():"";if(html){var specialContent=html.match(/\[([^:]+)\:([^\]]+)\]/);if(specialContent){eval(specialContent[1]+"('"+specialContent[2]+"',helpContent)")}helpIcon.qtip({content:"leftMiddle",position:{corner:{tooltip:"leftMiddle",target:"rightMiddle"}},style:{border:{width:5,radius:10},padding:10,textAlign:"center",tip:true,name:"blue"},content:helpContent.html(),show:"mouseover",hide:"mouseout",api:{beforeShow:function(){}}});helpContent.remove()}})}function youtube(b,a){a.html("<div id='"+b+"'></div>");var c={allowScriptAccess:"always"};var d={id:"myytplayer_"+b};swfobject.embedSWF("http://www.youtube.com/v/"+b+"?enablejsapi=1&playerapiid=ytplayer_"+b,b,"200","150","8",null,null,c,d)}function onYouTubePlayerReady(a){ytplayer=document.getElementById("my"+a);ytplayer.playVideo()}function attachDatePickers(){$("div#wizard").find("input[type=text][rel$='date']").each(function(){$(this).datepicker({numberOfMonths:3,showButtonPanel:true,changeMonth:true,changeYear:true,dateFormat:"dd/mm/yy",altField:"#"+$(this).attr("name")+"Example",altFormat:"DD, d MM, yy"})})}function attachDateTimePickers(){$("div#wizard").find("input[type=text][rel$='datetime']").each(function(){$(this).datepicker({changeMonth:true,changeYear:true,dateFormat:"dd/mm/yy",altField:"#"+$(this).attr("name")+"Example",altTimeField:"#"+$(this).attr("name")+"Example2",altFormat:"DD, d MM, yy",showTime:true,time24h:true})})}function attachTableEvents(){$("div#wizard").find("div.row").each(function(){$(this).hover(function(){$(this).addClass("highlight")},function(){$(this).removeClass("highlight")})})}function handleWizardTable(){var b=this;var a=$("div#wizard").find("div.table");a.each(function(){var d=$(this);var g=(d.next().attr("class")=="sliderContainer")?d.next():null;var h=d.find("div.header");var f=20;var e=0;var c=[];h.children().each(function(){var m=$(this);var k=m.width();var i=parseInt(m.css("padding-left"),10)+parseInt(m.css("padding-right"),10);var l=parseInt(m.css("margin-left"),10)+parseInt(m.css("margin-right"),10);var j=parseInt(m.css("borderLeftWidth"),10)+parseInt(m.css("borderRightWidth"),10);if(i){k+=i}if(l){k+=l}if(j){k+=j}f+=k;c[e]=m.width();e++});h.css({width:f+"px"});d.find("div.row").each(function(){var j=$(this);var i=0;j.children().each(function(){$(this).css({width:c[i]+"px"});i++});j.css({width:f+"px"})});if(g){if(h.width()<d.width()){g.css({display:"none "})}else{g.slider({value:1,min:1,max:h.width()-d.width(),step:1,slide:function(i,j){d.find("div.header, div.row").css({"margin-left":(1-j.value)+"px"})}})}}})}function showExampleReltime(a){var d=a.name;var b=function(f,g,e){if(e.status==200){document.getElementById(d+"Example").value=f}};var c=function(e,g,f){document.getElementById(d+"Example").value=""};$.ajax({url:baseUrl+"/wizard/ajaxParseRelTime?reltime="+a.value,success:b,error:c})}function fileUploadField(a){new AjaxUpload("#upload_button_"+a,{action:baseUrl+"/file/upload",data:{},name:a,autoSubmit:true,onChange:function(b,c){oldFile=$("#"+a).val();if(oldFile!=""){if(!confirm("The old file is deleted when uploading a new file. Do you want to continue?")){return false}}this.setData({field:a,oldFile:oldFile});$("#"+a+"Example").html("Uploading "+createFileHTML(b))},onComplete:function(c,b){if(b==""){$("#"+a).val("");$("#"+a+"Example").html('<span class="error">Error uploading '+createFileHTML(c)+"</span>")}else{$("#"+a).val(b);$("#"+a+"Example").html("Uploaded "+createFileHTML(c))}}})}function createFileHTML(a){return'<a target="_blank" href="'+baseUrl+"/file/get/"+a+'">'+a+"</a>"}function addPublication(a){jQuery.ajax({type:"GET",url:baseUrl+"/publication/getID?"+$("#"+a+"_form").serialize(),success:function(c,e){var d=parseInt(c);var b=getPublicationIds(a);if($.inArray(d,b)==-1){b[b.length]=d;$("#"+a+"_ids").val(b.join(","));showPublication(a,d,$("#"+a+"_form").find("[name=publication-title]").val(),$("#"+a+"_form").find("[name=publication-authorsList]").val(),b.length-1);$("#"+a+"_none").css("display","none")}},error:function(b,d,c){alert("Publication could not be added.")}});return false}function removePublication(b,d){var c=getPublicationIds(b);if($.inArray(d,c)!=-1){c.splice($.inArray(d,c),1);$("#"+b+"_ids").val(c.join(","));var a=$("#"+b+"_item_"+d);if(a){a.remove()}if(c.length==0){$("#"+b+"_none").css("display","inline")}}}function getPublicationIds(a){var c=$("#"+a+"_ids").val();if(c==""){return new Array()}else{ids_array=c.split(",");for(var b=0;b<ids_array.length;b++){ids_array[b]=parseInt(ids_array[b])}return ids_array}}function showPublication(c,a,g,f,h){var e=document.createElement("img");e.className="famfamfam delete_button";e.setAttribute("alt","remove this publication");e.setAttribute("src",baseUrl+"/images/icons/famfamfam/delete.png");e.onclick=function(){removePublication(c,a);return false};var b=document.createElement("div");b.className="title";b.appendChild(document.createTextNode(g));var d=document.createElement("div");d.className="authors";d.appendChild(document.createTextNode(f));var i=document.createElement("li");i.setAttribute("id",c+"_item_"+a);i.className=h%2==0?"even":"odd";i.appendChild(e);i.appendChild(b);i.appendChild(d);$("#"+c+"_list").append(i)}function createPublicationDialog(a){if($("."+a+"_publication_dialog").length==0){$("#"+a+"_dialog").dialog({title:"Add publication",autoOpen:false,width:800,height:400,modal:true,dialogClass:a+"_publication_dialog",position:"center",buttons:{Add:function(){addPublication(a);$(this).dialog("close")},Close:function(){$(this).dialog("close")}},close:function(){}}).width(790).height(400)}else{$("#"+a+"_dialog").remove()}}function openPublicationDialog(a){var b=$("#"+a);b.autocomplete("close");b.val("");$("#"+a+"_dialog").dialog("open");b.focus();enableButton("."+a+"_publication_dialog","Add",false)}function getDialogButton(b,a){var e=$(b+" .ui-dialog-buttonpane button");for(var d=0;d<e.length;++d){var c=$(e[d]);if(c.text()==a){return c}}return null}function enableButton(b,a,c){var d=getDialogButton(b,a);if(d){if(c){d.attr("disabled","");d.removeClass("ui-state-disabled")}else{d.attr("disabled","disabled");d.addClass("ui-state-disabled")}}}function addContact(b){var e=$("#"+b+"_person").val();var a=$("#"+b+"_role").val();var c=e+"-"+a;var d=getContactIds(b);if($.inArray(c,d)==-1){d[d.length]=c;$("#"+b+"_ids").val(d.join(","));showContact(b,c,$("#"+b+"_person  :selected").text(),$("#"+b+"_role :selected").text(),d.length-1);$("#"+b+"_none").css("display","none")}}function removeContact(b,c){var d=getContactIds(b);if($.inArray(c,d)!=-1){d.splice($.inArray(c,d),1);$("#"+b+"_ids").val(d.join(","));var a=$("#"+b+"_item_"+c);if(a){a.remove()}if(d.length==0){$("#"+b+"_none").css("display","inline")}}}function getContactIds(a){var b=$("#"+a+"_ids").val();if(b==""){return new Array()}else{ids_array=b.split(",");return ids_array}}function showContact(c,a,d,f,h){var g=document.createElement("img");g.className="famfamfam delete_button";g.setAttribute("alt","remove this person");g.setAttribute("src",baseUrl+"/images/icons/famfamfam/delete.png");g.onclick=function(){removeContact(c,a);return false};var b=document.createElement("div");b.className="person";b.appendChild(document.createTextNode(d));var e=document.createElement("div");e.className="role";e.appendChild(document.createTextNode(f));var i=document.createElement("li");i.setAttribute("id",c+"_item_"+a);i.className=h%2==0?"even":"odd";i.appendChild(g);i.appendChild(b);i.appendChild(e);$("#"+c+"_list").append(i)};
Note: See TracChangeset for help on using the changeset viewer.