Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Suggerimento
Per le linee guida più recenti per lo sviluppo di estensioni, incluse la tematizzazione e la migrazione da VSS.SDK, vedere il portale per sviluppatori di Azure DevOps Extension SDK.
Usare gli stili di base forniti da Widget SDK per un aspetto coerente tra i widget del dashboard.
Per includere gli stili del widget, chiamare WidgetHelpers.IncludeWidgetStyles() durante l'inizializzazione del widget:
WidgetHelpers.IncludeWidgetStyles();
Questo carica sdk-widget.css nell'iframe del widget, fornendo stili per la famiglia di caratteri, le dimensioni del carattere, i margini, il padding, le intestazioni e i collegamenti.
Per i pannelli di configurazione dei widget, chiamare WidgetHelpers.IncludeWidgetConfigurationStyles() invece:
WidgetHelpers.IncludeWidgetConfigurationStyles();
In questo modo viene caricato sdk-widget-configuration.css, che fornisce stili per la famiglia di caratteri, le dimensioni del font e per elementi di modulo comuni come input, textarea e select.
Nota
Per applicare questi stili, aggiungere una widget classe nell'elemento HTML che contiene il widget. Tutti gli stili di sdk-widget.css sono limitati a questa classe. Analogamente, aggiungere una widget-configuration classe sull'elemento che contiene la configurazione del widget.
Per un esempio funzionante, vedere l'esempio di estensione.
Corpo del widget, titolo e descrizione
Aggiungendo la widget classe nell'elemento contenitore del widget, si ottiene automaticamente riempimento, tipo di carattere e colore per il contenuto del widget.
Includere sempre un titolo per il widget in modo che gli utenti possano identificarne lo scopo a colpo d'occhio. Usa la classe title con <h2>. Ciò consente anche alle utilità per la lettura dello schermo di identificare i diversi widget nel dashboard.
principio di progettazione: i widget devono avere un titolo. Usare il
<h2>tag con latitleclasse .
Per aggiungere una descrizione, usare la description classe sull'elemento che contiene la descrizione del widget.
Principio di progettazione: Usare la
descriptionclasse per la descrizione del widget. Le descrizioni devono avere senso anche quando vengono lette all'esterno del contesto del widget.
<div class="widget">
<h2 class="title">Widget title</h2>
<div class="description">The widget description is used to describe the widget. It makes sense even when read outside of the widget context.</div>
<p>Place widget content here.</p>
</div>
Titoli e sottotitoli dei widget
I sottotitoli integrano il titolo e potrebbero non avere senso quando si legge fuori contesto.
Principio di progettazione: Usare la
subtitleclasse per fornire altre informazioni sul widget.
Usare le titleclassi , inner-titlee subtitle per ottenere il tipo di carattere, il colore e i margini corretti per una combinazione di titolo e sottotitolo. Il sottotitolo ha un colore attenuato rispetto al titolo.
<div class="widget">
<h2 class="title">
<div class="inner-title">Widget title</div>
<div class="subtitle">Widget subtitle</div>
</h2>
<div class="content">
Place widget content here.
</div>
</div>
Suggerimenti per la combinazione di titolo e sottotitolo:
- Usare un elemento inline come
<span>per visualizzare il sottotitolo nella stessa riga del titolo. - Usare un elemento di blocco come
<div>per visualizzare il sottotitolo in una nuova riga.
Collegamenti con icone e sottotesto
Alcuni widget includono collegamenti con un'icona, un testo e un sottotesto.
principio di progettazione: Usare collegamenti con un'icona e un sottotesto per rendere ovvio lo scopo del collegamento all'utente. Assicurarsi che l'icona simbolizza la destinazione del collegamento.
Per ottenere lo stesso aspetto, usare la struttura e le classi HTML seguenti.
<div class="widget">
<h2 class="title">Widget title</h2>
<div class="content">
<p>Place your content here.</p>
<a class="link-with-icon-text" href="http://bing.com" target="_blank">
<span class="icon-container" style="background-color: #68217A"></span>
<div class="title">
Primary link text
<div class="subtitle">Link subtext</div>
</div>
</a>
</div>
</div>
Contatori
Per i widget che visualizzano un conteggio, aggiungere la big-count classe sull'elemento che contiene il numero. I widget Riquadro query e Riquadro codice usano lo stesso stile.
Principio di progettazione: Utilizzare la
big-countclasse per presentare numeri in caratteri di grandi dimensioni. Non usarlo con caratteri non numerici.
<div class="widget">
<h2 class="title">Counter widget</h2>
<div class="big-count">223</div>
<div>Additional text</div>
</div>
Widget selezionabili
Per rendere un widget cliccabile in modo che selezionandolo ovunque si venga reindirizzati a un'altra pagina:
- Aggiungere un tag di ancoraggio come elemento figlio del contenitore del widget.
- Inserire tutto il contenuto del widget all'interno del tag di ancoraggio.
- Aggiungere
target="_blank"al tag di ancoraggio in modo che il collegamento venga aperto in una nuova scheda. - Aggiungere la
clickableclasse al contenitore widget.
Senza la clickable classe, il colore di collegamento blu predefinito si applica a tutto il testo all'interno del widget. La clickable classe fornisce anche un indicatore di focus personalizzato per la navigazione tramite tastiera.
Principio di progettazione: Usare la
clickableclasse e il<a>tag per rendere selezionabile l'intero widget. Questo modello funziona bene quando il widget riepiloga i dati disponibili in un'altra pagina.
<div class="widget clickable">
<a href="https://bing.com" target="_blank">
<h2 class="title">Counter widget</h2>
<div class="big-count">223</div>
<div>Click me!</div>
</a>
</div>
Elementi del modulo di configurazione
Usare le classi seguenti per gli elementi di modulo comuni nella configurazione del widget:
| Elemento Form | Elemento di avvolgimento | Istruzioni |
|---|---|---|
| Casella di testo semplice |
div con la classe "single-line-text-input". |
Utilizzare un elemento label per aggiungere testo accanto alla casella di testo. Utilizzare l'elemento input per creare una casella di testo. Usare l'attributo placeholder per fornire testo segnaposto. |
| Casella di controllo |
fieldset con la classe "checkbox" |
Utilizzare un elemento label per aggiungere testo accanto a ogni casella di controllo. Usare un elemento legend per etichettare il gruppo di caselle di controllo. Usare l'attributo for in ogni elemento label per aiutare i lettori di schermo a comprendere l'elemento del modulo. |
| Pulsante di opzione |
fieldset con classe CSS "radio" |
Utilizzare un elemento label per aggiungere testo accanto a ogni radio button. Usare un elemento legend per aggiungere una didascalia al gruppo di pulsanti di opzione. Usare l'attributo for in ogni elemento label per aiutare i lettori di schermo a comprendere l'elemento del modulo. |
| Menu a discesa |
div con la classe "dropdown" |
Usare un elemento label per aggiungere testo accanto all'elenco a discesa. Se si desidera un elenco a discesa che occupa metà della larghezza, aggiungere la classe "metà" all'elemento di wrapping div. Se si vuole usare l'icona a forma di freccia standard dell'SDK anziché quella fornita dal browser, eseguire il wrapping dell'elemento select con un altro div con la classe "wrapper". |
| Casella di testo a più righe |
div con la classe "input-testo-multilinea". |
Utilizzare label elemento per etichettare l'elemento textarea utilizzato come casella di testo a più righe. |
Nell'esempio seguente vengono utilizzati tutti gli elementi del modulo elencati nella tabella .
Esempio di 
<div class="widget-configuration">
<div class="single-line-text-input" id="name-input">
<label>Your name</label>
<input type="text" value="Contoso"></input>
</div>
<div class="dropdown" id="query-path-dropdown">
<label>Drop down</label>
<div class="wrapper">
<select>
<option value="Shared Queries/Feedback">Shared Queries/Feedback</option>
<option value="Shared Queries/My Bugs">Shared Queries/My Bugs</option>
<option value="Shared Queries/My Tasks">Shared Queries/My Tasks</option>
</select>
</div>
<fieldset class="checkbox" id="select-results">
<legend>Select results to display</legend>
<input type="checkbox" id="check-option1" value="id" name="check" checked="true">
<label for="check-option1">Query ID</label><br/>
<input type="checkbox" id="check-option2" value="name" name="check" checked="true">
<label for="check-option2">Query Name</label><br/>
<input type="checkbox" id="check-option3" value="createdBy" name="check" checked="true">
<label for="check-option3">Created By</label><br/>
</fieldset>
<fieldset class="radio" id="display-options">
<legend>Display as </legend>
<input type="radio" id="radio-option1" value="ordered" name="radio" checked="true">
<label for="radio-option1">Ordered List</label><br/>
<input type="radio" id="radio-option2" value="unordered" name="radio">
<label for="radio-option2">Unordered List</label><br/>
</fieldset>
<div class="multi-line-text-input">
<label>Comments</label>
<textarea></textarea>
</div>
</div>
</div>
Messaggi di errore di convalida
Per visualizzare gli errori di convalida sotto gli elementi del modulo in modo coerente con i widget di prima parte, aggiungere il frammento di codice seguente sotto ogni elemento del modulo:
<span class="validation-error">
<span class="icon-error-exclamation"></span>
<span class="validation-error-text"></span>
</span>
La visibilità è nascosta per impostazione predefinita. Per visualizzare un messaggio di errore, trovare l'elemento corrispondente validation-error-text , impostarne il testo e impostarlo visibility: visible sull'elemento padre.
Ad esempio, per visualizzare un errore quando una casella di testo è vuota:
Esempio di 
Il codice HTML per questo sarà:
<div class="widget-configuration">
<div class="single-line-text-input">
<label>Your name</label>
<input type="text" placeholder="Type Here">
<span class="validation-error">
<span class="icon-error-exclamation"></span>
<span class="validation-error-text"></span>
</span>
</div>
</div>
Ecco JavaScript:
const input = document.querySelector(".single-line-text-input input");
const errorText = document.querySelector(".single-line-text-input .validation-error-text");
input.addEventListener("input", function () {
if (input.value === "") {
errorText.textContent = "Please enter your name.";
errorText.parentElement.style.visibility = "visible";
} else {
errorText.parentElement.style.visibility = "hidden";
}
});