Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Aanbeveling
Voor de nieuwste richtlijnen voor uitbreidingsontwikkeling, inclusief thema's en migratie van VSS. SDK raadpleegt u de ontwikkelaarsportal van de Azure DevOps Extension SDK.
Gebruik de basisstijlen van de Widget-SDK voor een consistent uiterlijk in dashboardwidgets.
Als u widgetstijlen wilt opnemen, roept u WidgetHelpers.IncludeWidgetStyles() aan tijdens de initialisatie van de widget:
WidgetHelpers.IncludeWidgetStyles();
Hiermee wordt sdk-widget.css in het iframe van uw widget geladen, inclusief stijlen voor lettertypefamilie, tekengrootte, marges, vulling, koppen en links.
Voor widgetconfiguratiepanelen roep WidgetHelpers.IncludeWidgetConfigurationStyles() in plaats daarvan aan.
WidgetHelpers.IncludeWidgetConfigurationStyles();
Hiermee worden sdk-widget-configuration.css stijlen voor de lettertypefamilie, de tekengrootte, en algemene formulierelementen zoals input, textarea, en select.
Opmerking
Als u deze stijlen wilt toepassen, voegt u een widget klasse toe aan het HTML-element dat uw widget bevat. Alle stijlen van sdk-widget.css zijn beperkt tot deze klasse. Voeg op dezelfde manier een widget-configuration klasse toe aan het element dat de widgetconfiguratie bevat.
Zie het voorbeeld van de extensie voor een werkend voorbeeld.
Hoofdtekst, titel en beschrijving van widget
Door de klasse toe te voegen aan het widget containerelement van uw widget, krijgt u automatisch opvulling, lettertype en kleur voor widgetinhoud.
Voeg altijd een titel voor uw widget toe, zodat gebruikers het doel ervan in één oogopslag kunnen identificeren. Gebruik <h2> met de title klasse. Dit helpt schermlezers ook om de verschillende widgets op het dashboard te identificeren.
Ontwerpprincipe: Widgets moeten een titel hebben. Gebruik de
<h2>tag met detitleklasse.
Als u een beschrijving wilt toevoegen, gebruikt u de description klasse op het element dat uw widgetbeschrijving bevat.
Ontwerpprincipe: Gebruik de
descriptionklasse voor de beschrijving van de widget. Beschrijvingen moeten zinvol zijn, zelfs wanneer ze buiten de widgetcontext worden gelezen.
<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>
Widgettitels en ondertitels
Ondertitels vormen een aanvulling op de titel en zijn mogelijk niet zinvol wanneer ze uit de context worden gelezen.
Ontwerpprincipe: Gebruik de
subtitleklasse voor meer informatie over de widget.
Gebruik de titleen inner-titlesubtitle klassen om het juiste lettertype, de juiste kleur en marges op te halen voor een combinatie van titel en ondertitel. De ondertitel heeft een subtiele kleur ten opzichte van de titel.
<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>
Tips voor de combinatie van titel en ondertitel:
- Gebruik een inline-element, zoals
<span>voor de ondertitel, op dezelfde regel als de titel. - Gebruik een blokelement zoals
<div>zodat de ondertitel op een nieuwe regel wordt weergegeven.
Koppelingen met pictogrammen en subtekst
Sommige widgets bevatten koppelingen met een pictogram, tekst en subtekst.
Ontwerpprincipe: Gebruik koppelingen met een pictogram en subtekst om het doel van de koppeling duidelijk te maken voor de gebruiker. Zorg ervoor dat het pictogram het doel van de koppeling symboliseert.
Gebruik de onderstaande HTML-structuur en klassen om hetzelfde uiterlijk te krijgen.
<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>
Tellers
Voor widgets die een telling weergeven, voegt u de big-count klasse toe aan het element dat het getal bevat. De widgets querytegel en codetegel gebruiken dezelfde stijl.
Ontwerpprincipe: Gebruik de
big-countklasse om getallen in een groot lettertype weer te geven. Gebruik deze niet met niet-numerieke tekens.
<div class="widget">
<h2 class="title">Counter widget</h2>
<div class="big-count">223</div>
<div>Additional text</div>
</div>
Klikbare widgets
Om een widget klikbaar te maken zodat het selecteren ervan overal naar een andere pagina navigeert:
- Voeg een ankertag toe als onderliggend element van het widgetcontainerelement.
- Plaats alle widgetinhoud in de ankertag.
- Voeg toe
target="_blank"aan de ankertag, zodat de koppeling wordt geopend op een nieuw tabblad. - Voeg de
clickableklasse toe aan de widgetcontainer.
Zonder de clickable klasse is de standaardkleur voor blauwe koppelingen van toepassing op alle tekst in de widget. De clickable klasse biedt ook een aangepaste focusindicator voor toetsenbordnavigatie.
Ontwerpprincipe: Gebruik de
clickableklasse en de<a>tag om de hele widget klikbaar te maken. Dit patroon werkt goed wanneer uw widget gegevens samenvat die beschikbaar zijn op een andere 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>
Formulierelementen voor configuratie
Gebruik de volgende klassen voor algemene formulierelementen in widgetconfiguratie:
| Element van een formulier | Omhullings-element | Guidelines |
|---|---|---|
| Eenvoudig tekstvak |
div met klasse "single-line-text-input". |
Gebruik een label element om tekst toe te voegen naast het tekstvak. Gebruik het input element om een tekstvak te maken. Gebruik het placeholder kenmerk om tijdelijke aanduidingen voor tekst op te geven. |
| Selectievakje |
fieldset met klasse "checkbox" |
Gebruik een label element om tekst naast elk selectievakje toe te voegen. Gebruik een legend element om een titel toe te voegen aan de groep selectievakjes. Gebruik het for kenmerk voor elk label element om schermlezers inzicht te geven in het formulierelement. |
| Radioknop |
fieldset met klasse "radio" |
Gebruik een label element om tekst naast elk selectievakje toe te voegen. Gebruik een legend element om de groep radioknoppen te voorzien van een bijschrift. Gebruik het for kenmerk voor elk label element om schermlezers inzicht te geven in het formulierelement. |
| Vervolgkeuzelijst |
div met klasse "dropdownmenu" |
Gebruik een label element om tekst toe te voegen naast de vervolgkeuzelijst. Als u een vervolgkeuzelijst met de helft van de breedte wilt gebruiken, voegt u klasse 'half' toe aan het terugloopelement div . Als u het standaardpijlpictogram van de SDK wilt gebruiken in plaats van het pictogram van de browser, verpakt u het select element met een andere div met klasse 'wrapper'. |
| Tekstvak met meerdere regels |
div met klasse 'multi-line-text-input'. |
Gebruik label element om het textarea element te labelen dat wordt gebruikt als tekstvak met meerdere regels. |
In het volgende voorbeeld worden alle formulierelementen gebruikt die in de tabel worden vermeld.
<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>
Validatie-foutmeldingen
Als u validatiefouten onder formulierelementen wilt weergeven op een manier die consistent is met widgets van de eerste partij, voegt u het volgende fragment toe onder elk formulierelement:
<span class="validation-error">
<span class="icon-error-exclamation"></span>
<span class="validation-error-text"></span>
</span>
De zichtbaarheid is standaard verborgen. Als u een foutbericht wilt weergeven, zoekt u het bijbehorende validation-error-text element, stelt u de tekst ervan in, en stelt u visibility: visible in op het bovenliggende element.
Als u bijvoorbeeld een fout wilt weergeven wanneer een tekstvak leeg is:
De HTML hiervoor is:
<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>
En 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";
}
});