From b515b59cbaa0e3865fb2eae8d1fe31e6d1894bab Mon Sep 17 00:00:00 2001
From: Tamara Steinwender <tamara.steinwender@tugraz.at>
Date: Wed, 19 Aug 2020 10:14:13 +0200
Subject: [PATCH] Added Radiobutton and checkbox styling

---
 packages/common/styles.js                     | 140 ++++++++++++++++++
 .../src/dbp-nextcloud-file-picker.js          |  40 +++--
 2 files changed, 170 insertions(+), 10 deletions(-)

diff --git a/packages/common/styles.js b/packages/common/styles.js
index 1a54554f..01d9230f 100644
--- a/packages/common/styles.js
+++ b/packages/common/styles.js
@@ -28,6 +28,7 @@ export function getThemeCSS() {
             --dbp-muted-text: var(--dbp-override-muted-text, #6c757d);
             --dbp-border-radius: var(--dbp-override-border-radius, 0px);
             --dbp-border-width: var(--dbp-override-border-width, 1px);
+            --dbp-border-color: var(--dbp-override-border-color, #000);
             --dbp-placeholder-color: #777; 
         }
     `;
@@ -462,6 +463,145 @@ export function getButtonCSS() {
     `;
 }
 
+export function getRadioAndCheckboxCss() {
+    // language=css
+    return css`            
+            
+        /* 
+        Radiobutton:
+            <label class="button-container">
+                Labeltext
+                <input type="radio" name="myradiobutton">
+                <span class="radiobutton"></span>
+            </label>
+            
+        Checkbox:
+            <label class="button-container">
+                Labeltext
+                <input type="checkbox" name="mycheckbox"> 
+                <span class="checkmark"></span>
+            </label>
+         */
+            
+        .button-container {
+            display: block;
+            position: relative;
+            padding-left: 35px;
+            cursor: pointer;
+            line-height: 23px;
+            -webkit-user-select: none;
+            -moz-user-select: none;
+            -ms-user-select: none;
+            user-select: none;
+        }
+        
+        .button-container input[type="radio"], .button-container input[type="checkbox"] {
+            position: absolute;
+            opacity: 0;
+            cursor: pointer;
+            height: 0;
+            width: 0;
+            left: 0px;
+        }
+        
+        .checkmark {
+            position: absolute;
+            top: 0;
+            left: 0;
+            height: 21px;
+            width: 21px;
+            background-color: white;
+            border: solid;
+            border-radius: var(--dbp-border-radius);
+            border-width: var(--dbp-border-width);
+            border-color: var(--dbp-border-color);
+        }
+        
+        .radiobutton {
+            position: absolute;
+            top: 0;
+            left: 0;
+            height: 21px;
+            width: 21px;
+            background-color: white;
+            border: solid;
+            border-radius: 100%;
+            border-width: var(--dbp-border-width);
+            border-color: var(--dbp-border-color);
+        }
+
+        .button-container input[type="radio"]:checked ~ .radiobutton:after {
+            border-color: var(--dbp-danger-bg-color);
+        }
+        
+        .button-container input[type="radio"]:disabled ~ .radiobutton {
+            border-color: #aaa;
+            background-color: #eee;
+        }
+
+        .button-container input[type="radio"]:checked:disabled ~ .radiobutton:after {
+            border-color: #aaa;
+            background-color: #aaa;
+        }
+        
+        .radiobutton:after {
+            content: "";
+            position: absolute;
+            display: none;
+        }
+        
+        .button-container input[type="radio"]:checked ~ .radiobutton:after {
+            display: block;
+        }
+        
+        .button-container .radiobutton:after {
+            left: 4px;
+            top: 4px;
+            width: 12px;
+            height: 12px;
+            border: solid var(--dbp-danger-bg-color);
+            background-color: var(--dbp-danger-bg-color);
+            border-radius: 100%;
+        }
+        
+        .button-container input[type="checkbox"]:checked ~ .checkmark:after {
+            border-color: var(--dbp-danger-bg-color);
+        }
+        
+        .button-container input[type="checkbox"]:disabled ~ .checkmark {
+            border-color: #aaa;
+            background-color: #eee;
+        }
+
+        .button-container input[type="checkbox"]:checked:disabled ~ .checkmark:after {
+            border-color: #aaa;
+        }
+
+        .checkmark:after {
+            content: "";
+            position: absolute;
+            display: none;
+        }
+        
+        .button-container input[type="checkbox"]:checked ~ .checkmark:after {
+            display: block;
+        }
+        
+        .button-container .checkmark:after {
+            left: 7px;
+            top: 4px;
+            width: 6px;
+            height: 10px;
+            border: solid var(--dbp-danger-bg-color);
+            border-width: 0 2px 2px 0;
+            -webkit-transform: rotate(45deg);
+            -ms-transform: rotate(45deg);
+            transform: rotate(45deg);
+        }
+        
+    `;
+}
+
 export function getTagCSS() {
     // language=css
     return css`
diff --git a/packages/file-handling/src/dbp-nextcloud-file-picker.js b/packages/file-handling/src/dbp-nextcloud-file-picker.js
index 24db3f66..8a8d400b 100644
--- a/packages/file-handling/src/dbp-nextcloud-file-picker.js
+++ b/packages/file-handling/src/dbp-nextcloud-file-picker.js
@@ -740,6 +740,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
      * Disables or enables the input field for the new file name
      */
     setInputFieldVisibility() {
+        console.log("yesssss", !this._("#replace-new-name").checked);
         this._("#replace-filename").disabled = !this._("#replace-new-name").checked;
     }
 
@@ -883,6 +884,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
             ${commonStyles.getButtonCSS()}
             ${commonStyles.getTextUtilities()}
             ${commonStyles.getModalDialogCSS()}
+            ${commonStyles.getRadioAndCheckboxCss()}
             
             .block {
                 margin-bottom: 10px;
@@ -1146,6 +1148,8 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                 padding-top: 10px;
             }
             
+            
+           
             @media only screen
             and (orientation: portrait)
             and (max-device-width: 765px) {
@@ -1342,19 +1346,32 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                                 ${i18n.t('nextcloud-file-picker.replace-text')}?
                             </h3>
                             <div>
-                                <input type="radio" id="replace-new-name" class="radio-btn" name="replacement" value="new-name" checked @click="${() => {this.setInputFieldVisibility();}}">
-                                <label for="new-name">${i18n.t('nextcloud-file-picker.replace-new_name')}:
-                                     <input type="text" id="replace-filename" name="replace-filename" value="" onClick="this.select();">
+                                <label class="button-container">
+                                    <span> 
+                                        ${i18n.t('nextcloud-file-picker.replace-new_name')}:
+
+                                    </span>
+                                    <input type="radio" id="replace-new-name" class="radio-btn" name="replacement" value="new-name" checked @click="${() => {this.setInputFieldVisibility();}}">
+                                    <span class="radiobutton"></span>
+                                    <input type="text" id="replace-filename" class="input" name="replace-filename" value="" onClick="this.select();">
                                 </label>
+
                             </div>
-                            <div>
-                                <input type="radio" id="replace-replace" class="radio-btn" name="replacement" value="replace" @click="${() => {this.setInputFieldVisibility();}}">
 
-                                <label for="replace">${i18n.t('nextcloud-file-picker.replace-replace')}</label>
+                   
+                            <div>
+                                <label class="button-container">
+                                    <span>${i18n.t('nextcloud-file-picker.replace-replace')}</span>
+                                    <input type="radio" id="replace-replace" name="replacement" value="replace" @click="${() => {this.setInputFieldVisibility();}}">
+                                    <span class="radiobutton"></span>
+                                </label>
                             </div>
                             <div>
-                                <input type="radio" class="radio-btn" name="replacement" value="ignore" @click="${() => {this.setInputFieldVisibility();}}">
-                                <label for="ignore">${i18n.t('nextcloud-file-picker.replace-skip')}</label>
+                                <label class="button-container">
+                                    <span>${i18n.t('nextcloud-file-picker.replace-skip')}</span>
+                                    <input type="radio" class="radio-btn" name="replacement" value="ignore" @click="${() => {this.setInputFieldVisibility();}}">
+                                    <span class="radiobutton"></span>
+                                </label>
                             </div>
                         </main>
                         <footer class="modal-footer">
@@ -1363,8 +1380,11 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                                 <button class="button select-button is-primary" @click="${() => {this.uploadFileAfterConflict();}}">OK</button>
                             </div>
                             <div>
-                                <input type="checkbox" id="replace_mode_all" name="replace_mode_all" value="replace_mode_all" @click="${() => {this.setRepeatForAllConflicts();}}>
-                                <label for="replace_mode_all">${i18n.t('nextcloud-file-picker.replace-mode-all')}</label>
+                                <label class="button-container">
+                                    ${i18n.t('nextcloud-file-picker.replace-mode-all')}
+                                    <input type="checkbox" id="replace_mode_all" name="replace_mode_all" value="replace_mode_all" @click="${() => {this.setRepeatForAllConflicts();}}"> 
+                                    <span class="checkmark"></span>
+                                </label>
                             </div>
                         </footer>
                     </div>
-- 
GitLab