diff --git a/logos/hellug_flat_1.svg b/logos/hellug_flat_1.svg new file mode 100644 index 0000000..27e8bdc --- /dev/null +++ b/logos/hellug_flat_1.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + hellug + + diff --git a/themes/hellug-keycloak/account/messages/messages_el.properties b/themes/hellug-keycloak/account/messages/messages_el.properties new file mode 100644 index 0000000..916d167 --- /dev/null +++ b/themes/hellug-keycloak/account/messages/messages_el.properties @@ -0,0 +1,378 @@ +# encoding: UTF-8 + +role_manage-identity-providers=Διαχείριση παρόχων ταυτότητας +doRemove=Αφαίρεση +doAdd=Προσθήκη +doSignOut=Έξοδος +doLink=Σύνδεση +personalInfoSidebarTitle=Προσωπικά στοιχεία +accountSecuritySidebarTitle=Ασφάλεια λογαριασμού +signingInSidebarTitle=Σε είσοδο +deviceActivitySidebarTitle=Δραστηριότητα συσκευών +role_manage-account-links=Διαχείριση συνδέσεων λογαριασμού +linkedAccountsSidebarTitle=Συνδεδεμένοι λογαριασμοί +editAccountHtmlTitle=Επεξεργασία Λογαριασμού +personalInfoHtmlTitle=Προσωπικά Στοιχεία +changePasswordHtmlTitle=Αλλαγή Κωδικού + + +requiredFields=Απαιτούμενα πεδία +sessionsHtmlTitle=Συνεδρίες +accountManagementTitle=Διαχείριση Λογαριασμού Keycloak +authenticatorTitle=Εφαρμογή Ταυτοποίησης +applicationsHtmlTitle=Εφαρμογές +linkedAccountsHtmlTitle=Συνδεδεμένοι λογαριασμοί +accountManagementWelcomeMessage=Καλώς Ήλθατε στη Διαχείριση Λογαριασμού στο Keycloak +personalInfoIntroMessage=Διαχειριστείτε τα βασικά στοιχεία +accountSecurityIntroMessage=Ελέγξτε το κωδικό και τη πρόσβαση σας +passwordLastUpdateMessage=Ο κωδικός πρόσβασης σας ενημερώθηκε στις +updatePasswordMessageTitle=Βεβαιωθείτε ότι επιλέξατε ένα ισχυρό κωδικό +updatePasswordMessage=Ένας ισχυρός κωδικός πρόσβασης είναι συνδυασμός ψηφίων, γραμμάτων και συμβόλων. Είναι δύσκολο να βρεθεί, δεν είναι υπαρκτή λέξη και το χρησιμοποιείται μόνο σε αυτό το λογαριασμό. +email=Email +firstName=Όνομα +lastName=Επώνυμο +familyName=Επώνυμο +password=Κωδικός Πρόσβασης +passwordConfirm=Επιβεβαίωση +currentPassword=Τρέχων Κωδικός Πρόσβασης +passwordNew=Νέος Κωδικός Πρόσβασης +username=Όνομα χρήστη +address=Διεύθυνση +street=Οδός +locality=Πόλη ή Δήμος +postal_code=Ταχυδρομικός Κώδικας +country=Χώρα +emailVerified=Επιβεβαιωμένο Email +website=Ιστοσελίδα +phoneNumber=Τηλέφωνο +phoneNumberVerified=Επιβεβαιωμένο τηλέφωνο +gender=Φύλο +birthday=Ημερομηνία γέννησης +zoneinfo=Ζώνη ώρας +gssDelegationCredential=GSS διαπιστευτήρια εξουσιοδότησης +profileScopeConsentText=Προφίλ χρήστη +emailScopeConsentText=Διεύθυνση email +addressScopeConsentText=Διεύθυνση +phoneScopeConsentText=Τηλέφωνο +samlRoleListScopeConsentText=Οι Ρόλοι Μου +rolesScopeConsentText=Ρόλοι χρήστη +role_admin=Διαχειριστής +role_view-identity-providers=Εμφάνιση παρόχων ταυτότητας +role_manage-realm=Διαχείριση τομέα +role_manage-users=Διαχείριση χρηστών +role_manage-applications=Διαχείριση εφαρμογών +role_realm-admin=Διαχειριστή Τόπου +role_create-realm=Δημιουργία τομέα +role_view-realm=Εμφάνιση τομέα +role_view-users=Εμφάνιση χρηστών +role_view-applications=Εμφάνιση εφαρμογών +role_view-clients=Εμφάνιση πελατών +role_view-events=Εμφάνιση συμβάντων +role_manage-clients=Διαχείριση πελατών +role_manage-events=Διαχείριση συμβάντων +role_view-profile=Εμφάνιση προφίλ +role_manage-account=Διαχείριση λογαριασμού +role_read-token=Ανάγνωση διακριτικού +role_offline-access=Πρόσβαση εκτός-σύνδεσης +client_account=Λογαριασμός +client_account-console=Κονσόλα Λογαριασμού +client_admin-cli=CLI Διαχείρισης +client_realm-management=Διαχείριση Τομέα +client_broker=Μεσολαβητής +inResource=σε +totpAppFreeOTPName=FreeOTP +totpAppGoogleName=Google Authenticator +totpAppMicrosoftAuthenticatorName=Microsoft Authenticator +invalidEmailMessage=Μη έγκυρη διεύθυνση email. +accountDisabledMessage=Ο λογαριασμός έχει απενεργοποιηθεί, επικοινωνήστε με το διαχειριστή. +consentDenied=Άρνηση Συναίνεσης. +locale_ca=Català +locale_cs=Čeština +locale_de=Deutsch +locale_es=Español +locale_fr=Français +locale_hu=Magyar +locale_it=Italiano +locale_ja=日本語 +locale_lt=Lietuvių +locale_nl=Nederlands +locale_no=Norsk +locale_pl=Polski +locale_pt-BR=Português (Brasil) +locale_ru=Русский +locale_sk=Slovenčina +locale_sv=Svenska +locale_tr=Türkçe +locale_zh-CN=中文简体 +locale_fi=Suomi +doSave=Αποθήκευση +doCancel=Ακύρωση +doLogIn=Είσοδος +updatePasswordTitle=Ενημέρωση Κωδικού Πρόσβασης +locale_ar=عربي +authenticatorCode=Κωδικός μίας-χρήσης +locale_en=English +givenName=Όνομα +region=Νομός ή Περιφέρεια +fullName=Ονοματεπώνυμο +offlineAccessScopeConsentText=Πρόσβαση εκτός-σύνδεσης +accountSecurityTitle=Ασφάλεια Λογαριασμού +invalidPasswordGenericMessage=Μη έγκυρος κωδικός πρόσβασης: ο νέος κωδικός δε συμφωνεί με τις πολιτικές κωδικών. +invalidPasswordHistoryMessage=Μη έγκυρος κωδικός πρόσβασης: δε πρέπει να είναι το ίδιο με τους τελευταίους {0} κωδικούς. +invalidPasswordRegexPatternMessage=Μη έγκυρος κωδικός πρόσβασης: δε ταιριάζει με τα μοτίβα regex. +invalidPasswordNotEmailMessage=Μη έγκυρος κωδικός πρόσβασης: πρέπει να μην είναι ίδιο με το email. +invalidPasswordNotUsernameMessage=Μη έγκυρος κωδικός πρόσβασης: πρέπει να μην είναι ίδιο με το όνομα χρήστη. +invalidPasswordMinSpecialCharsMessage=Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} ειδικούς χαρακτήρες. +invalidPasswordMinUpperCaseCharsMessage=Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} κεφαλαίους χαρακτήρες. +invalidPasswordMinLowerCaseCharsMessage=Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} πεζούς χαρακτήρες. +invalidPasswordMinDigitsMessage=Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} ψηφία. +invalidPasswordMaxLengthMessage=Μη έγκυρος κωδικός πρόσβασης: μέγιστο μήκος {0}. +invalidPasswordMinLengthMessage=Μη έγκυρος κωδικός πρόσβασης: ελάχιστο μήκος {0}. +accountPasswordUpdatedMessage=Ο κωδικός πρόσβασης ενημερώθηκε. +accountUpdatedMessage=Ο λογαριασμός σας έχει ενημερωθεί. +emailExistsMessage=Το email υπάρχει ήδη. +usernameExistsMessage=Το όνομα χρήστη υπάρχει ήδη. +invalidTotpMessage=Μη έγκυρος κωδικός μίας χρήσης. +invalidPasswordConfirmMessage=Η επιβεβαίωση του κωδικού πρόσβασης δε ταιριάζει. +invalidPasswordBlacklistedMessage=Μη έγκυρος κωδικός πρόσβασης: ο κωδικός πρόσβασης είναι απαγορευμένος. +invalidPasswordExistingMessage=Μη έγκυρος υπάρχοντας κωδικός πρόσβασης. +error-invalid-date=Μη έγκυρη ημερομηνία. +error-invalid-uri-fragment=Μη έγκυρο κομμάτι URL. +error-invalid-uri-scheme=Μη έγκυρο σχήμα URL. +error-invalid-uri=Μη έγκυρο URL. +error-pattern-no-match=Μη έγκυρη τιμή. +error-invalid-number=Μη έγκυρος αριθμός. +error-invalid-email=Μη έγκυρη διεύθυνση email. +error-empty=Παρακαλώ ορίστε τιμή. +error-invalid-blank=Παρακαλώ ορίστε τιμή. +error-invalid-value=Μη έγκυρη τιμή. +notMatchPasswordMessage=Οι κωδικοί πρόσβασης δε ταιριάζουν. +missingTotpDeviceNameMessage=Παρακαλώ ορίστε όνομα συσκευής. +missingTotpMessage=Παρακαλώ εισάγετε ένα κωδικό από εφαρμογή ταυτοποίησης. +missingPasswordMessage=Παρακαλώ ορίστε κωδικό πρόσβασης. +missingUsernameMessage=Παρακαλώ ορίστε όνομα χρήστη. +missingEmailMessage=Παρακαλώ ορίστε email. +missingLastNameMessage=Παρακαλώ ορίστε επώνυμο. +missingFirstNameMessage=Παρακαλώ ορίστε ένα όνομα. +readOnlyUsernameMessage=Δε μπορείτε να ενημερώσετε το όνομα χρήστη σας καθώς είναι μόνο-για-ανάγνωση. +access-denied-when-idp-auth=Δεν επιτρέπεται η πρόσβαση κατά τη ταυτοποίηση με {0} +accountUnusable=Κάθε μεταγενέστερη χρήση αυτής της εφαρμογής δεν θα είναι δυνατή με αυτό το λογαριασμό +loggingOutImmediately=Άμεση αποσύνδεση σας +errasingData=Διαγραφή όλων των δεδομένων σας +deletingImplies=Η διαγραφή του λογαριασμού σας συνεπάγεται: +irreversibleAction=Αυτή η ενέργεια είναι μη αναστρέψιμη +openshift.scope.list-projects=Εμφάνιση λίστας έργων +openshift.scope.user_full=Πλήρης Πρόσβαση +openshift.scope.user_check-access=Πληροφορίες πρόσβασης χρήστη + +# Openshift messages +openshift.scope.user_info=Πληροφορίες χρήστη +clientNotFoundMessage=Ο πελάτης δε βρέθηκε. +identityProviderAlreadyLinkedMessage=Η ομόσπονδη ταυτότητα που επιστρέφει το {0} είναι ήδη συνδεδεμένη με ένα άλλο χρήστη. +role_view-groups=Εμφάνιση ομάδων +role_uma_authorization=Απόκτηση δικαιωμάτων +client_security-admin-console=κονσόλα διαχειριστή ασφαλείας +allFieldsRequired=Απαιτούνται όλα τα πεδία +backTo=Πίσω στο{0} +date=Ημερομηνία +event=Γεγονός +ip=IP +client=Πελάτης +clients=Πελάτες +details=Λεπτομέρειες +started=Ξεκίνησε +expires=Λήγει +applications=Εφαρμογές +account=Λογαριασμός +federatedIdentity=Ομόσπονδη Ταυτότητα +device-activity=Δραστηριότητα συσκευών +sessions=Συνεδρίες +log=Λογότυπο +application=Εφαρμογή +availableRoles=Διαθέσιμοι Ρόλοι +grantedPersonalInfo=Εκχωρημένες Προσωπικές Πληροφορίες +additionalGrants=Επιπλέον Χορηγήσεις +action=Δράση +doLogOutAllSessions=Έξοδος από όλες τις συνεδρίες +accountLogHtmlTitle=Αρχείο Λογαριασμού +noAccessMessage=Δεν επιτρέπεται η πρόσβαση +deviceActivityHtmlTitle=Δραστηριότητα Συσκευών +federatedIdentitiesHtmlTitle=Ομόσπονδες Ταυτότητες +applicationsIntroMessage=Διαχειριστείτε το δικαίωμα της εφαρμογής σας να έχει πρόσβαση στο λογαριασμό σας +resourceIntroMessage=Μοιράστε τους πόρους σας μεταξύ των μελών της ομάδας +personalSubTitle=Τα Προσωπικά σας Στοιχεία +personalSubMessage=Διαχειριστείτε τα βασικά στοιχεία σας. +role_view-consent=Εμφάνιση εγκρίσεων +role_manage-consent=Διαχείριση εγκρίσεων +backToApplication=« Πίσω στην εφαρμογή +lastAccess=Τελευταία Πρόσβαση +authenticator=Ταυτοποιητής +grantedPermissions=Εκχωρημένα Δικαιώματα +fullAccess=Πλήρης Πρόσβαση +configureAuthenticators=Ρυθμισμένες Εφαρμογές Ταυτοποίησης +mobile=Κινητό +totpStep2=Ανοίξτε την εφαρμογή και σαρώστε την εικόνα του κωδικού: +totpStep3DeviceName=Ορίστε ένα Όνομα Συσκευής για να σας βοηθήσει στη διαχείριση των συσκευών OTP. +totpManualStep2=Ξεκινήστε την εφαρμογή και εισάγετε το κλειδί: +totpUnableToScan=Αδυναμία σάρωσης; +totpScanBarcode=Σάρωση της εικόνας του κωδικού; +totpStep1=Εγκαταστήστε μία από τις παρακάτω εφαρμογές στο κινητό σας: +totpStep3=Δώστε το κωδικό μίας χρήσης όπως εμφανίζεται στην εφαρμογή σας και επιλέξτε το Αποθήκευση για να ολοκληρωθεί η αρχική ρύθμιση. +totp.totp=Χρονικός +totp.hotp=Σειριακός +totpType=Τύπος +totpAlgorithm=Αλγόριθμος +totpDigits=Ψηφία +totpInterval=Διάστημα +totpCounter=Μετρητής +totpDeviceName=Όνομα Συσκευής +offlineToken=Διακριτικό Εκτός Σύνδεσης +revoke=Ανάκληση Χορήγησης +totpManualStep3=Χρησιμοποιείστε τις παρακάτω τιμές ρυθμίσεων αν η εφαρμογή το υποστηρίζει: +invalidUserMessage=Μη έγκυρος χρήστης +updateReadOnlyAttributesRejectedMessage=Απορρίφθηκε η ενημέρωση του μόνο-ανάγνωσης χαρακτηριστικού +readOnlyUserMessage=Δε μπορείτε να ενημερώσετε το λογαριασμό σας καθώς είναι μόνο-για-ανάγνωση. +successTotpMessage=Ενεργοποιήθηκε η εφαρμογή ταυτοποίησης στο κινητό. +successGrantRevokedMessage=Η χορήγηση ανακλήθηκε επιτυχώς. +invalidFederatedIdentityActionMessage=Μη έγκυρη ή απούσα δράση. +identityProviderNotFoundMessage=Δε βρέθηκε ο ορισμένος πάροχος ταυτότητας. +federatedIdentityLinkNotActiveMessage=Αυτή η ταυτότητα δεν είναι πια ενεργή. +identityProviderRedirectErrorMessage=Αποτυχία στην ανακατεύθυνση προς το πάροχο ταυτότητας. +identityProviderRemovedMessage=Ο πάροχος ταυτότητας αφαιρέθηκε επιτυχώς. + +# Authorization +myResources=Οι Πόροι Μου +myResourcesSub=Οι πόροι μου +doDeny=Άρνηση +doRevoke=Ανάκληση +doApprove=Έγκριση +doRemoveSharing=Αφαίρεση Διαμοιρασμού +doRemoveRequest=Αφαίρεση Αίτησης +peopleAccessResource=Άτομα με πρόσβαση σε αυτό το πόρο +resourceNoPermissionsGrantingAccess=Καμιά άδεια που χορηγεί πρόσβαση σε αυτό το πόρο +anyAction=Κάθε δράση +name=Όνομα +scopes=Πεδία +resource=Πόρος +user=Χρήστης +shareWithOthers=Διαμοιρασμός με άλλους +needMyApproval=Χρειάζεται την έγκριση μου +requestsWaitingApproval=Οι αιτήσεις που αναμένουν έγκριση +icon=Εικονίδιο +requestor=Αιτών +owner=Ιδιοκτήτης +permissionRequestion=Αίτηση Άδειας +permission=Άδεια +shares=διαμοιρασμός(οί) +notBeingShared=Αυτός ο πόρος δε διαμοιράζεται. +notHaveAnyResource=Δεν έχετε κανένα πόρο +havePermissionRequestsWaitingForApproval=Έχετε {0} αιτήση(εις) για άδεια σε αναμονή προς έγκριση. +clickHereForDetails=Πατήστε εδώ για λεπτομέρειες. + +# Applications +applicationName=Όνομα +applicationInUse=Μόνο εφαρμογή σε-χρήση +clearAllFilter=Καθαρισμός φίλτρων +activeFilters=Ενεργά φίλτρα +filterByName=Φιλτράρισμα Ανά Όνομα ... +internalApps=Εσωτερικές εφαρμογές +thirdpartyApps=Εφαρμογές Τρίτων +appResults=Αποτελέσματα +authenticatorSubTitle=Ορισμός Ταυτοποίησης Δύο-Παραγόντων +authenticatorMobileTitle=Εφαρμογή Ταυτοποίησης στο Κινητό +authenticatorMobileMessage=Χρησιμοποιείστε μία Εφαρμογή Ταυτοποίησης στο κινητό για να έχετε τους κωδικούς Επιβεβαίωσης σαν ταυτοποίηση δύο-παραγόντων. +authenticatorMobileFinishSetUpMessage=Η εφαρμογή ταυτοποίησης έχει δεθεί με το κινητό σας. +authenticatorActionSetup=Ρύθμιση +authenticatorSMSTitle=Κωδικός SMS +authenticatorSMSFinishSetUpMessage=Μηνύματα κειμένου στέλνονται στο +authenticatorDefaultStatus=Προεπιλογή + +# Linked account +authorizedProvider=Πιστοποιημένος Πάροχος +identityProvider=Πάροχος Ταυτότητας +identityProviderMessage=Για να συνδέσετε το λογαριασμό σας με παρόχους ταυτότητας που έχετε ρυθμίσει +socialLogin=Κοινωνική Είσοδος +userDefined=Ορισμένη από το Χρήστη +removeAccess=Αφαίρεση Πρόσβασης + +#Authenticator +authenticatorStatusMessage=Η ταυτοποίηση δύο-παραγόντων αυτή τη στιγμή είναι +authenticatorFinishSetUpTitle=Η Ταυτοποίηση Δύο Παραγόντων Σας +smscodeIntroMessage=Ορίστε ένα αριθμό τηλεφώνου και ένας κωδικός επιβεβαίωσης θα σταλεί στο κινητό σας. +mobileSetupStep2=Ανοίξτε την εφαρμογή και σαρώστε το κωδικό QR: +scanBarCode=Θέλετε να σαρώσετε το κωδικό QR; +enterBarCode=Εισάγετε το κωδικό μίας-φοράς +doCopy=Αντιγραφή +doFinish=Ολοκλήρωση + +#Authenticator - SMS Code setup +authenticatorSMSCodeSetupTitle=Ρύθμιση Κωδικού SMS +chooseYourCountry=Επιλέξτε τη χώρα σας +enterYourPhoneNumber=Εισάγετε το τηλεφωνικό αριθμό σας +sendVerficationCode=Αποστολή Κωδικού Επιβεβαίωσης +enterYourVerficationCode=Εισάγετε το κωδικό επιβεβαίωσης +realmName=Τομέας +doDownload=Λήψη +doPrint=Εκτύπωση +generateNewBackupCodes=Παραγωγή Νέων Κωδικών Ανάκτησης Ταυτοποίησης +backtoAuthenticatorPage=Πίσω στη Σελίδα Εφαρμογής Ταυτοποίησης + + +#Resources +resources=Πόροι +share=Διαμοιρασμός +sharedwith=Μοιράζεται με +permissionRequests=Αιτήσεις Αδειών +approve=Έγκριση +approveAll=Έγκριση όλων +people=άτομα +perPage=ανά σελίδα +currentPage=Τρέχουσα Σελίδα +sharetheResource=Διαμοιρασμός πόρου +group=Ομάδα +addPeople=Προσθήκη ατόμων στα οποία θα διαμοιράσετε το πόρο σας +myPermissions=Οι Άδειες Μου +waitingforApproval=Αναμονή για έγκριση +anyPermission=Κάθε Άδεια +error-invalid-length-too-short=Το χαρακτηριστικό {0} πρέπει να έχει ελάχιστο μήκος {1}. +error-number-out-of-range-too-small=Το χαρακτηριστικό {0} πρέπει να έχει ελάχιστη τιμή {1}. +error-user-attribute-required=Παρακαλώ ορίστε το χαρακτηριστικό {0}. +error-user-attribute-read-only=Το πεδίο {0} είναι μόνο για ανάγνωση. +error-person-name-invalid-character=Το όνομα περιέχει ένα μη έγκυρο χαρακτήρα. +readOnlyPasswordMessage=Δε μπορείτε να ενημερώσετε το κωδικό πρόσβασης σας καθώς είναι μόνο-για-ανάγνωση. +successTotpRemovedMessage=Αφαιρέθηκε η εφαρμογή ταυτοποίησης στο κινητό. +authenticatorFinishSetUpMessage=Κάθε φορά που συνδέστε στο λογαριασμό σας στο Keycloak, θα πρέπει να παρέχετε ένα κωδικό ταυτοποίησης δύο-παραγόντων. +authenticatorSubMessage=Για να βελτιώσετε τη ασφάλεια του λογαριασμού σας, ενεργοποιήστε τουλάχιστον μια από τις διαθέσιμες μεθόδους ταυτοποίησης δύο-παραγόντων. +authenticatorSMSMessage=Το Keycloak θα στείλει ένα κωδικό Επιβεβαίωσης στο κινητό σαν ταυτοποίηση δύο-παραγόντων. +authenticatorChangePhone=Αλλαγή Τηλεφωνικού Αριθμού + +#Authenticator - Mobile Authenticator setup +authenticatorMobileSetupTitle=Ρύθμιση Εφαρμογής Ταυτοποίησης +mobileSetupStep1=Εγκαταστήστε μία εφαρμογή ταυτοποίησης στο κινητό σας. Υποστηρίζονται οι παρακάτω εφαρμογές. +mobileSetupStep3=Εισάγετε το κωδικό μίας-φοράς που παρήχθει από την εφαρμογή και πατήστε Αποθήκευση για ολοκλήρωση. + +#Authenticator - backup Code setup +authenticatorBackupCodesSetupTitle=Ρύθμιση Κωδικών Ανάκτησης Ταυτοποίησης +sharedwithMe=Μοιράζονται με Εμένα +accessPermissions=Άδειες Πρόσβασης +selectPermission=Επιλογή Άδειας +addTeam=Προσθήκη ομάδας στην οποία θα διαμοιράσετε το πόρο σας +error-invalid-length=Το χαρακτηριστικό {0} πρέπει να έχει μήκος μεταξύ {1} και {2}. +error-number-out-of-range=Το χαρακτηριστικό {0} πρέπει να είναι ένας αριθμός μεταξύ {1} και {2}. +error-number-out-of-range-too-big=Το χαρακτηριστικό {0} πρέπει να έχει μέγιστη τιμή {2}. +error-username-invalid-character=Το όνομα χρήστη περιέχει ένα μη έγκυρο χαρακτήρα. +missingIdentityProviderMessage=Δεν ορίστηκε πάροχος ταυτότητας. +federatedIdentityRemovingLastProviderMessage=Δε μπορείτε να αφαιρέσετε τη τελευταία ομόσπονδη ταυτότητα καθώς δεν έχετε κωδικό πρόσβασης. +staleCodeAccountMessage=Η σελίδα έληξε. Παρακαλώ δοκιμάστε άλλη μια φορά. +accountTemporarilyDisabledMessage=Ο λογαριασμός έχει απενεργοποιηθεί προσωρινά, επικοινωνήστε με το διαχειριστή ή δοκιμάστε αργότερα. +resourceManagedPolicies=Άδειες που χορηγούν πρόσβαση σε αυτό το πόρο +description=Περιγραφή +peopleSharingThisResource=Άτομα που διαμοιράζουν αυτό το πόρο +resourcesSharedWithMe=Πόροι μου διαμοιράζονται με εμένα +noResourcesSharedWithYou=Δε διαμοιράζεται πόρος με εσάς +resourceIsNotBeingShared=Αυτός ο πόρος δεν διαμοιράζεται +applicationType=Τύπος Εφαρμογής +allApps=Όλες οι εφαρμογές +authorizedProviderMessage=Πιστοποιημένοι Πάροχοι που είναι συνδεδεμένοι με το λογαριασμό σας +removeAccessMessage=Πρέπει να χορηγήσετε ξανά πρόσβαση, αν θέλετε να χρησιμοποιήσετε αυτό το λογαριασμό εφαρμογής. +error-invalid-length-too-long=Το χαρακτηριστικό {0} πρέπει να έχει μέγιστο μήκος {2}. diff --git a/themes/hellug-keycloak/account/messages/messages_en.properties b/themes/hellug-keycloak/account/messages/messages_en.properties index 77831f7..bcf622c 100644 --- a/themes/hellug-keycloak/account/messages/messages_en.properties +++ b/themes/hellug-keycloak/account/messages/messages_en.properties @@ -1 +1,2 @@ -accountManagementTitle=Hellug Auth Account Management +# encoding: UTF-8 +locale_el=Ελληνικά diff --git a/themes/hellug-keycloak/account/resources/css/account.css b/themes/hellug-keycloak/account/resources/css/account.css deleted file mode 100644 index 56a0378..0000000 --- a/themes/hellug-keycloak/account/resources/css/account.css +++ /dev/null @@ -1,279 +0,0 @@ -html { - height: 100%; -} - -body { - background-color: #F9F9F9; - margin: 0; - padding: 0; - height: 100%; -} - -header .navbar { - margin-bottom: 0; - min-height: inherit; -} - -.header .container { - position: relative; -} - -.navbar-title { - background-image: url('../img/brand.svg'); - height: 25px; - background-repeat: no-repeat; - width: 172px; - margin: 3px 10px 5px; - text-indent: -99999px; - position: relative; - top: 8px; -} - -.navbar-pf .navbar-utility { - right: 20px; - top: -34px; - font-size: 12px; -} - -.navbar-pf .navbar-utility > li > a { - color: #fff !important; - padding-bottom: 12px; - padding-top: 11px; - border-left: medium none; -} - -.container { - height: 100%; -} - -.content-area { - background-color: #fff; - border-color: #CECECE; - border-style: solid; - border-width: 0 1px; - height: 100%; - padding: 0 30px; -} - -.margin-bottom { - margin-bottom: 10px; -} - -/* Sidebar */ - -.bs-sidebar { - background-color: #f9f9f9; - padding-top: 44px; - padding-right: 0; - padding-left: 0; - z-index: 20; -} -.bs-sidebar ul { - list-style: none; - padding-left: 12px; -} - -.bs-sidebar ul li { - margin-bottom: 0.5em; - margin-left: -1em; -} -.bs-sidebar ul li a { - font-size: 14px; - padding-left: 25px; - color: #4d5258; - line-height: 28px; - display: block; - border-width: 1px 0 1px 1px; - border-style: solid; - border-color: #f9f9f9; -} -.bs-sidebar ul li a:hover, -.bs-sidebar ul li a:focus { - text-decoration: none; - color: #777777; - border-right: 2px solid #aaa; -} -.bs-sidebar ul li.active a { - background-color: #c7e5f0; - border-color: #56bae0; - font-weight: bold; - background-image: url(../img/icon-sidebar-active.png); - background-repeat: no-repeat; - background-position: right center; -} - -.bs-sidebar ul li.active a:hover { - border-right: none; -} - - -.content-area h2 { - font-family: "Open Sans", sans-serif; - font-weight: 100; - font-size: 24px; - margin-bottom: 25px; - margin-top: 25px; -} - -.subtitle { - text-align: right; - margin-top: 30px; - color: #909090; -} - -.required { - color: #CB2915; -} - - -.alert { - margin-top: 30px; - margin-bottom: 0; -} - -.feedback-aligner .alert { - background-position: 1.27273em center; - background-repeat: no-repeat; - border-radius: 2px; - border-width: 1px; - color: #4D5258; - display: inline-block; - font-size: 1.1em; - line-height: 1.4em; - margin: 0; - padding: 0.909091em 3.63636em; - position: relative; - text-align: left; -} -.alert.alert-success { - background-color: #E4F1E1; - border-color: #4B9E39; -} -.alert.alert-error { - background-color: #F8E7E7; - border-color: #B91415; -} -.alert.alert-warning { - background-color: #FEF1E9; - border-color: #F17528; -} -.alert.alert-info { - background-color: #E4F3FA; - border-color: #5994B2; -} - -.form-horizontal { - border-top: 1px solid #E9E8E8; - padding-top: 23px; -} - -.form-horizontal .control-label { - color: #909090; - line-height: 1.4em; - padding-top: 5px; - position: relative; - text-align: right; - width: 100%; -} - -.form-group { - position: relative; -} - -.control-label + .required { - position: absolute; - right: -2px; - top: 0; -} - -#kc-form-buttons { - text-align: right; - margin-top: 10px; -} - -#kc-form-buttons .btn-primary { - float: right; - margin-left: 8px; -} - -/* Authenticator page */ - -ol { - padding-left: 40px; -} - -ol li { - font-size: 13px; - margin-bottom: 10px; - position: relative; -} - -ol li img { - margin-top: 15px; - margin-bottom: 5px; - border: 1px solid #eee; -} - -hr + .form-horizontal { - border: none; - padding-top: 0; -} - -.kc-dropdown{ - position: relative; -} -.kc-dropdown > a{ - display:block; - padding: 11px 10px 12px; - line-height: 12px; - font-size: 12px; - color: #fff !important; - text-decoration: none; -} -.kc-dropdown > a::after{ - content: "\2c5"; - margin-left: 4px; -} -.kc-dropdown:hover > a{ - background-color: rgba(0,0,0,0.2); -} -.kc-dropdown ul li a{ - padding: 1px 11px; - font-size: 12px; - color: #000 !important; - border: 1px solid #fff; - text-decoration: none; - display:block; - line-height: 20px; -} -.kc-dropdown ul li a:hover{ - color: #4d5258; - background-color: #d4edfa; - border-color: #b3d3e7; -} -.kc-dropdown ul{ - position: absolute; - z-index: 2000; - list-style:none; - display:none; - padding: 5px 0px; - margin: 0px; - background-color: #fff !important; - border: 1px solid #b6b6b6; - border-radius: 1px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; - min-width: 100px; -} -.kc-dropdown:hover ul{ - display:block; -} - - -#kc-totp-secret-key { - border: 1px solid #eee; - font-size: 16px; - padding: 10px; - margin: 50px 0; -} diff --git a/themes/hellug-keycloak/account/resources/img/icon-sidebar-active.png b/themes/hellug-keycloak/account/resources/img/icon-sidebar-active.png deleted file mode 100644 index e7b9b08..0000000 Binary files a/themes/hellug-keycloak/account/resources/img/icon-sidebar-active.png and /dev/null differ diff --git a/themes/hellug-keycloak/account/theme.properties b/themes/hellug-keycloak/account/theme.properties index 89a19bc..df4d0e7 100644 --- a/themes/hellug-keycloak/account/theme.properties +++ b/themes/hellug-keycloak/account/theme.properties @@ -1,3 +1,2 @@ parent=keycloak - -styles=css/account.css +locales=en,el diff --git a/themes/hellug-keycloak/common/resources/img/brand.svg b/themes/hellug-keycloak/common/resources/img/brand.svg deleted file mode 100644 index d82264a..0000000 --- a/themes/hellug-keycloak/common/resources/img/brand.svg +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - Hellug Authentication Service - - - - diff --git a/themes/hellug-keycloak/common/resources/img/favicon.ico b/themes/hellug-keycloak/common/resources/img/favicon.ico index d21bcf3..48188de 100644 Binary files a/themes/hellug-keycloak/common/resources/img/favicon.ico and b/themes/hellug-keycloak/common/resources/img/favicon.ico differ diff --git a/themes/hellug-keycloak/common/resources/lib/angular/errors.json b/themes/hellug-keycloak/common/resources/lib/angular/errors.json new file mode 100644 index 0000000..0fe7286 --- /dev/null +++ b/themes/hellug-keycloak/common/resources/lib/angular/errors.json @@ -0,0 +1 @@ +{"id":"ng","generated":"Thu Aug 13 2015 11:47:38 GMT-0700 (PDT)","errors":{"ng":{"areq":"Argument '{0}' is {1}","cpta":"Can't copy! TypedArray destination cannot be mutated.","test":"no injector found for element argument to getTestability","cpws":"Can't copy! Making copies of Window or Scope instances is not supported.","btstrpd":"App Already Bootstrapped with this Element '{0}'","cpi":"Can't copy! Source and destination are identical.","badname":"hasOwnProperty is not a valid {0} name"},"$http":{"legacy":"The method `{0}` on the promise returned from `$http` has been disabled.","badreq":"Http request configuration must be an object. Received: {0}"},"ngRepeat":{"badident":"alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.","iexp":"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.","dupes":"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}","iidexp":"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'."},"$sce":{"imatcher":"Matchers may only be \"self\", string patterns or RegExp objects","icontext":"Attempted to trust a value in invalid context. Context: {0}; Value: {1}","iwcard":"Illegal sequence *** in string matcher. String: {0}","insecurl":"Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}","iequirks":"Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks mode. You can fix this by adding the text to the top of your HTML document. See http://docs.angularjs.org/api/ng.$sce for more information.","unsafe":"Attempting to use an unsafe value in a safe context.","itype":"Attempted to trust a non-string value in a content requiring a string: Context: {0}"},"ngPattern":{"noregexp":"Expected {0} to be a RegExp but was {1}. Element: {2}"},"$controller":{"ctrlfmt":"Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.","noscp":"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`."},"$parse":{"isecfn":"Referencing Function in Angular expressions is disallowed! Expression: {0}","isecwindow":"Referencing the Window in Angular expressions is disallowed! Expression: {0}","ueoe":"Unexpected end of expression: {0}","isecdom":"Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}","lexerr":"Lexer Error: {0} at column{1} in expression [{2}].","esc":"IMPOSSIBLE","isecobj":"Referencing Object in Angular expressions is disallowed! Expression: {0}","lval":"Trying to assing a value to a non l-value","isecff":"Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}","syntax":"Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].","isecfld":"Attempting to access a disallowed field in Angular expressions! Expression: {0}"},"jqLite":{"offargs":"jqLite#off() does not support the `selector` argument","onargs":"jqLite#on() does not support the `selector` or `eventData` parameters","nosel":"Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element"},"$animate":{"notcsel":"Expecting class selector starting with '.' got '{0}'.","nongcls":"$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the \"{0}\" CSS class."},"$q":{"norslvr":"Expected resolverFn, got '{0}'","qcycle":"Expected promise to be resolved with value other than itself '{0}'"},"$injector":{"pget":"Provider '{0}' must define $get factory method.","cdep":"Circular dependency found: {0}","nomod":"Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.","strictdi":"{0} is not using explicit annotation and cannot be invoked in strict mode","modulerr":"Failed to instantiate module {0} due to:\n{1}","undef":"Provider '{0}' must return a value from $get factory method.","unpr":"Unknown provider: {0}","itkn":"Incorrect injection token! Expected service name as string, got {0}"},"filter":{"notarray":"Expected array but received: {0}"},"ngTransclude":{"orphan":"Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}"},"ngModel":{"nonassign":"Expression '{0}' is non-assignable. Element: {1}","datefmt":"Expected `{0}` to be a date","$asyncValidators":"Expected asynchronous validator to return a promise but got '{0}' instead.","constexpr":"Expected constant expression for `{0}`, but saw `{1}`.","numfmt":"Expected `{0}` to be a number"},"$location":{"nostate":"History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API","ipthprfx":"Invalid url \"{0}\", missing path prefix \"{1}\".","isrcharg":"The first argument of the `$location#search()` call must be a string or an object.","nobase":"$location in HTML5 mode requires a tag to be present!"},"$cacheFactory":{"iid":"CacheId '{0}' is already taken!"},"$interpolate":{"noconcat":"Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required. See http://docs.angularjs.org/api/ng.$sce","interr":"Can't interpolate: {0}\n{1}","nochgmustache":"angular-message-format.js currently does not allow you to use custom start and end symbols for interpolation.","reqcomma":"Expected a comma after the keyword “{0}” at line {1}, column {2} of text “{3}”","untermstr":"The string beginning at line {0}, column {1} is unterminated in text “{2}”","badexpr":"Unexpected operator “{0}” at line {1}, column {2} in text. Was expecting “{3}”. Text: “{4}”","dupvalue":"The choice “{0}” is specified more than once. Duplicate key is at line {1}, column {2} in text “{3}”","unsafe":"Use of select/plural MessageFormat syntax is currently disallowed in a secure context ({0}). At line {1}, column {2} of text “{3}”","reqother":"“other” is a required option.","reqendinterp":"Expecting end of interpolation symbol, “{0}”, at line {1}, column {2} in text “{3}”","reqarg":"Expected one of “plural” or “select” at line {0}, column {1} of text “{2}”","wantstring":"Expected the beginning of a string at line {0}, column {1} in text “{2}”","logicbug":"The messageformat parser has encountered an internal error. Please file a github issue against the AngularJS project and provide this message text that triggers the bug. Text: “{0}”","reqopenbrace":"The plural choice “{0}” must be followed by a message in braces at line {1}, column {2} in text “{3}”","unknarg":"Unsupported keyword “{0}” at line {0}, column {1}. Only “plural” and “select” are currently supported. Text: “{3}”","reqendbrace":"The plural/select choice “{0}” message starting at line {1}, column {2} does not have an ending closing brace. Text “{3}”"},"ngOptions":{"iexp":"Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}"},"$rootScope":{"inprog":"{0} already in progress","infdig":"{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}"},"$compile":{"noident":"Cannot bind to controller without identifier for directive '{0}'.","selmulti":"Binding to the 'multiple' attribute is not supported. Element: {0}","nodomevents":"Interpolations for HTML DOM event attributes are disallowed. Please use the ng- versions (such as ng-click instead of onclick) instead.","ctreq":"Controller '{0}', required by directive '{1}', can't be found!","nonassign":"Expression '{0}' used with directive '{1}' is non-assignable!","tplrt":"Template for directive '{0}' must have exactly one root element. {1}","iscp":"Invalid {3} for directive '{0}'. Definition: {... {1}: '{2}' ...}","baddir":"Directive name '{0}' is invalid. The name should not contain leading or trailing whitespaces","noctrl":"Cannot bind to controller without directive '{0}'s controller.","multidir":"Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}","tpload":"Failed to load template: {0} (HTTP status: {1} {2})","uterdir":"Unterminated attribute, found '{0}' but no matching '{1}' found."},"$resource":{"badargs":"Expected up to 4 arguments [params, data, success, error], got {0} arguments","badmember":"Dotted member path \"@{0}\" is invalid.","badname":"hasOwnProperty is not a valid parameter name.","badcfg":"Error in resource configuration for action `{0}`. Expected response to contain an {1} but got an {2} (Request: {3} {4})"},"$route":{"norout":"Tried updating route when with no current route"},"$sanitize":{"badparse":"The sanitizer was unable to parse the following block of html: {0}"}}} \ No newline at end of file diff --git a/themes/hellug-keycloak/common/resources/lib/angular/treeview/LICENSE b/themes/hellug-keycloak/common/resources/lib/angular/treeview/LICENSE new file mode 100644 index 0000000..514acd3 --- /dev/null +++ b/themes/hellug-keycloak/common/resources/lib/angular/treeview/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Steve + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/themes/hellug-keycloak/common/resources/lib/angular/treeview/README.md b/themes/hellug-keycloak/common/resources/lib/angular/treeview/README.md new file mode 100644 index 0000000..31c824f --- /dev/null +++ b/themes/hellug-keycloak/common/resources/lib/angular/treeview/README.md @@ -0,0 +1,122 @@ +Angular Treeview +================ + +Pure [AngularJS](https://www.angularjs.org) based tree menu directive. + +[![ScreenShot](https://github.com/eu81273/angular.treeview/raw/master/img/preview.png)](https://jsfiddle.net/eu81273/8LWUc/) + +## Installation + +Copy the script and css into your project and add a script and link tag to your page. + +```html + + +``` + +Add a dependency to your application module. + +```javascript +angular.module('myApp', ['angularTreeview']); +``` + +Add a tree to your application. See [Usage](#usage). + +## Usage + +Attributes of angular treeview are below. + +- angular-treeview: the treeview directive. +- tree-id : each tree's unique id. +- tree-model : the tree model on $scope. +- node-id : each node's id. +- node-label : each node's label. +- node-children: each node's children. + +Here is a simple example. + + +```html +
+
+``` + +Example model: + +```javascript +$scope.treedata = +[ + { "label" : "User", "id" : "role1", "children" : [ + { "label" : "subUser1", "id" : "role11", "children" : [] }, + { "label" : "subUser2", "id" : "role12", "children" : [ + { "label" : "subUser2-1", "id" : "role121", "children" : [ + { "label" : "subUser2-1-1", "id" : "role1211", "children" : [] }, + { "label" : "subUser2-1-2", "id" : "role1212", "children" : [] } + ]} + ]} + ]}, + { "label" : "Admin", "id" : "role2", "children" : [] }, + { "label" : "Guest", "id" : "role3", "children" : [] } +]; +``` + +## Selection + +If tree node is selected, then that selected tree node is saved to $scope."TREE ID".currentNode. By using $watch, the controller can recognize the tree selection. + + +```javascript +$scope.$watch( 'abc.currentNode', function( newObj, oldObj ) { + if( $scope.abc && angular.isObject($scope.abc.currentNode) ) { + console.log( 'Node Selected!!' ); + console.log( $scope.abc.currentNode ); + } +}, false); +``` + +## Examples + +#### Basic example +[![ScreenShot](https://github.com/eu81273/angular.treeview/raw/master/img/jsfiddle01.png)](https://jsfiddle.net/eu81273/8LWUc/) + +[jsFiddle - http://jsfiddle.net/eu81273/8LWUc/](https://jsfiddle.net/eu81273/8LWUc/) + +#### Multiple treeview example +[![ScreenShot](https://github.com/eu81273/angular.treeview/raw/master/img/jsfiddle02.png)](https://jsfiddle.net/eu81273/b9Pnw/) + +[jsFiddle - http://jsfiddle.net/eu81273/b9Pnw/](https://jsfiddle.net/eu81273/b9Pnw/) + +## Browser Compatibility + +Same with AngularJS. Safari, Chrome, Firefox, Opera, IE8, IE9 and mobile browsers (Android, Chrome Mobile, iOS Safari). + +## Changelogs + +#### version 0.1.6 +- Fixed the bug that 'null' string appears before each 'div' generated. (Thanks to Iaac) + +#### version 0.1.5 +- support multiple treeview. (Thanks to Axel Pesme) + +#### version 0.1.4 +- prevented memory leaks. + +#### version 0.1.3 +- removed unnecessary codes. + +#### version 0.1.2 +- removed some jQuery dependency. (Issue #2) + +## License + +The MIT License. + +Copyright ⓒ 2013 AHN JAE-HA. + +See [LICENSE](https://github.com/eu81273/angular.treeview/blob/master/LICENSE) diff --git a/themes/hellug-keycloak/common/resources/lib/angular/treeview/angular.treeview.js b/themes/hellug-keycloak/common/resources/lib/angular/treeview/angular.treeview.js new file mode 100755 index 0000000..2e56cad --- /dev/null +++ b/themes/hellug-keycloak/common/resources/lib/angular/treeview/angular.treeview.js @@ -0,0 +1,95 @@ +/* + @license Angular Treeview version 0.1.6 + ⓒ 2013 AHN JAE-HA http://github.com/eu81273/angular.treeview + License: MIT + + + [TREE attribute] + angular-treeview: the treeview directive + tree-id : each tree's unique id. + tree-model : the tree model on $scope. + node-id : each node's id + node-label : each node's label + node-children: each node's children + +
+
+*/ + +(function ( angular ) { + 'use strict'; + + angular.module( 'angularTreeview', [] ).directive( 'treeModel', ['$compile', function( $compile ) { + return { + restrict: 'A', + link: function ( scope, element, attrs ) { + //tree id + var treeId = attrs.treeId; + + //tree model + var treeModel = attrs.treeModel; + + //node id + var nodeId = attrs.nodeId || 'id'; + + //node label + var nodeLabel = attrs.nodeLabel || 'label'; + + //children + var nodeChildren = attrs.nodeChildren || 'children'; + + //tree template + var template = + ''; + + //check tree id, tree model + if( treeId && treeModel ) { + //root node + if( attrs.angularTreeview ) { + + //create tree object if not exists + scope[treeId] = scope[treeId] || {}; + + //if node head clicks, + scope[treeId].selectNodeHead = scope[treeId].selectNodeHead || function( selectedNode ){ + + //Collapse or Expand + selectedNode.collapsed = !selectedNode.collapsed; + scope[treeId].selectNodeLabel(selectedNode); + }; + + //if node label clicks, + scope[treeId].selectNodeLabel = scope[treeId].selectNodeLabel || function( selectedNode ){ + + //remove highlight from previous node + if( scope[treeId].currentNode && scope[treeId].currentNode.selected ) { + scope[treeId].currentNode.selected = undefined; + } + + //set highlight to selected node + selectedNode.selected = 'selected'; + + //set currentNode + scope[treeId].currentNode = selectedNode; + }; + } + + //Rendering template. + element.html('').append( $compile( template )( scope ) ); + } + } + }; + }]); +})( angular ); diff --git a/themes/hellug-keycloak/common/resources/lib/angular/treeview/angular.treeview.min.js b/themes/hellug-keycloak/common/resources/lib/angular/treeview/angular.treeview.min.js new file mode 100644 index 0000000..e02a85b --- /dev/null +++ b/themes/hellug-keycloak/common/resources/lib/angular/treeview/angular.treeview.min.js @@ -0,0 +1,9 @@ +/* + @license Angular Treeview version 0.1.6 + ⓒ 2013 AHN JAE-HA http://github.com/eu81273/angular.treeview + License: MIT +*/ + +(function(f){f.module("angularTreeview",[]).directive("treeModel",function($compile){return{restrict:"A",link:function(b,h,c){var a=c.treeId,g=c.treeModel,e=c.nodeLabel||"label",d=c.nodeChildren||"children",e='