[]
        
(Showing Draft Content)

접근성 지원

SpreadJS는 화면 읽기 프로그램과 같은 보조 기술을 사용하는 장애인 사용자들을 위해 충분한 접근성 지원을 제공합니다. 이에 따라 애플리케이션을 사용하는 개발자들은 모든 사용자에게 불편함 없는 접근성 환경을 제공할 수 있습니다.

웹 페이지의 텍스트 콘텐츠는 다음과 같은 방법으로 접근할 수 있습니다:

  • 활성 셀은 Tab 키를 눌러 변경할 수 있습니다.

  • 마우스를 움직여 셀 위에 마우스 오버할 수 있습니다.

  • 샘플 페이지가 활성 탭일 때 적절한 텍스트가 제공될 수 있습니다.

화면 읽기 프로그램이 텍스트를 읽을 때 더 의미 있게 전달되도록, 상황에 따라 다음과 같이 서로 다른 텍스트가 사용됩니다:

경우

화면 읽기 프로그램이 읽는 텍스트

The Cell(0, 1) becomes an active cell by pressing the Tab key, and its value is "name".

Cell(0, 1) has value "name"

The Mouse enters the cell (0, 1) in the viewport area, and its value is "name".

Cell(0, 1) has value "name"

The Mouse enters the cell (0, 1) in the column header area, its value is "name".

Column header Cell(0, 1) has value "name"

The Mouse enters the cell(1, 0) in the row header area, its value is "name".

Row header Cell(1, 0) has value "name"

The mouse enters the resize bar of the tab strip.

Resize

The mouse enters the first area of the tab strip.

First

The Mouse enters the previous arrow area of the tab strip.

Previous arrow

The Mouse enters the next arrow area of the tab strip.

Next arrow

The mouse enters the last area of the tab strip.

Last

The mouse enters the previous button area of the tab strip.

Previous button

The mouse enters the next button area of the tab strip.

Next button

The mouse enters the sheet tab area of the tab strip, and its name is "Sheet1".

Sheet tab "Sheet1"

The mouse enters the new sheet area of the tab strip.

New sheet

The mouse enters the blank area of the tab strip.

Blank

The mouse enters the left button area of the horizontal scrollbar.

Scrollbar left button

The mouse enters the top button area of the vertical scrollbar.

Scrollbar top button

The mouse enters the thumb button area of the scrollbar.

Scrollbar thumb button

The mouse enters the right button area of the horizontal scrollbar.

Scrollbar right button

The Mouse enters the bottom button area of the vertical scrollbar.

Scrollbar bottom button

The sample page is in the active tab, and the active cell is Cell(0, 1), then its value is "name".

Cell(0, 1) has value "name"

접근성 지원은 Windows Narrator, Windows용 NVDA(NonVisual Desktop Access), Mac OS X용 VoiceOver 등과 같은 화면 읽기 프로그램과 함께 고객이 사용할 수 있습니다. ‘Tab 키 누르기’, ‘마우스 오버’, ‘활성 탭의 페이지’와 같은 일부 기능은 사용되는 화면 읽기 프로그램과 브라우저 종류에 따라 다르게 작동할 수 있습니다.

다음 표는 다양한 인터넷 브라우저에서 화면 읽기 프로그램을 실시간으로 테스트한 결과를 보여줍니다:

화면 읽기 프로그램

브라우저

Tab 키 누르기

마우스 오버

활성 탭 페이지

NVDA for Windows

Chrome

지원

지원

지원

NVDA for Windows

Firefox

지원

지원

지원 안 함

NVDA for Windows

Chromium Edge

지원

지원

지원 안 함

NVDA for Windows

Edge

지원 안 함

지원 안 함

지원 안 함

NVDA for Windows

IE

지원 안 함

지원 안 함

지원 안 함

Windows Narrator

Chrome

지원

지원

지원 안 함

Windows Narrator

Firefox

지원

지원

지원 안 함

Windows Narrator

Chromium Edge

지원

지원

지원 안 함

Windows Narrator

Edge

지원

지원 안 함

지원 안 함

Windows Narrator

IE

지원

지원 안 함

지원 안 함

VoiceOver for OS X

Chrome

제한적으로 지원

제한적으로 지원

지원 안 함

VoiceOver for OS X

Safari

제한적으로 지원

제한적으로 지원

지원 안 함

참고: Mac OS X용 VoiceOver 리더는 Chrome과 Safari 브라우저에서 일부 제한 사항과 함께 지원됩니다. div 요소에 콘텐츠가 있을 경우 aria-label 속성을 무시합니다. 예를 들어, 첫 번째 경우인 "Tab 키를 눌러 셀(0, 1)이 활성 셀이 되고, 그 값이 'name'일 때 VoiceOver 리더는 셀 텍스트 'name'만 인식할 수 있습니다. 마찬가지로 OSX용 VoiceOver 리더는 동적으로 변경되는 aria-label 속성을 인식하지 못해, 마우스가 캔버스 요소 위에 오버되거나 샘플 페이지가 활성 탭에 있을 때 워크시트가 전체 뷰포트 콘텐츠를 제공합니다. 또한, OSX용 VoiceOver 리더는 탭 스트립, 스크롤바, 그림, 차트, 도형과 같은 플로팅 객체도 인식하지 못합니다.

접근성 지원 활성화하기

SpreadJS에서는 기본적으로 접근성이 활성화되어 있지만, 화면 읽기 프로그램마다 기능 차이로 인해 읽기 결과가 다를 수 있습니다. 접근성 기능을 비활성화하려면 enableAccessibility 옵션을 false로 설정하면 됩니다.

다음 코드 예제는 접근성 지원을 비활성화하는 방법을 보여줍니다:

spread.options.enableAccessibility = false;

디자이너 사용하기

SpreadJS 런타임 외에도 SpreadJS 디자이너는 사용자들을 위한 충분한 접근성 지원을 제공합니다. 디자이너의 UI 요소들은 화면 읽기 프로그램에 의해 의미 있는 내용으로 읽혀져, SpreadJS 디자이너에서의 접근성 지원을 가능하게 합니다.

SpreadJS 디자이너에서 접근성 지원을 활성화하려면 다음 단계를 따르세요:

  1. 디자이너 리본에서 설정(Settings) 탭을 클릭한 후, **Spread 설정(Spread Settings)**에서 **일반(General)**을 선택하세요.


    enable-accessibility-spreadsetting


  2. 이렇게 하면 Spread 설정 대화 상자가 열립니다. 여기서 접근성 활성화(Enable Accessibility) 체크박스를 클릭하세요.


    enable-accessibility (1)

참고: 모든 기능은 기본적인 접근성 지원만 제공합니다.

셀에 대체 텍스트 설정하기

대체 텍스트(Alt text)는 장애가 있거나 화면 읽기 프로그램을 사용하는 사용자가 셀의 내용을 이해할 수 있도록 돕는 설명 텍스트입니다. 화면 읽기 프로그램이 대체 텍스트가 설정된 셀을 읽을 때, 시각적 표현에 의존하지 않고도 셀 내용을 음성으로 전달할 수 있습니다.

SpreadJS는 enableAccessibility 옵션이 true로 설정된 경우 셀에 대체 텍스트를 지원하여 접근성을 향상시킵니다. 대체 텍스트는 일반 텍스트뿐만 아니라 {value}(셀 값), {formatted}(서식이 적용된 셀 값)와 같은 플레이스홀더도 포함할 수 있습니다. 예를 들어, 셀 값이 1000이고 대체 텍스트가 "판매 금액은 {value}입니다"라면, 최종 접근 가능 콘텐츠는 "판매 금액은 1000입니다"가 됩니다.

셀의 대체 텍스트는 필요에 따라 설정, 조회, 복사, 이동, 수정할 수 있으며, .ssjson 또는 .sjs 포맷의 셀 대체 텍스트 직렬화 및 역직렬화도 지원합니다.

셀의 대체 텍스트 값을 설정하거나 가져오려면 다음 메서드를 사용할 수 있습니다.

// altText 메서드를 사용하여 셀의 대체 텍스트 값을 설정하고 가져올 수 있습니다.
activeSheet.getCell(0, 0).altText("Set alternative text for the cell");
var B1= activeSheet.getCell(1, 1).value(1000);
B1.altText("Alt Text is the cell value: " + activeSheet.getCell(1, 1).value());
console.log(activeSheet.getCell(0, 0).altText());
console.log(activeSheet.getCell(1, 1).altText());

activeSheet.setValue(0, 3, new Date(2013, 3, 1));
activeSheet.getCell(0, 3).formatter('d-mmm;@');
console.log("Cell formatter of cell[0,3] is :" + activeSheet.getCell(0, 3).formatter());
console.log("Formatted value of cell[0,3] is :" + activeSheet.getCell(0, 3).value());
// setAltText와 getAltText 메서드를 사용하여 셀 값과 함께 대체 텍스트 값을 설정하고 가져올 수 있습니다.
activeSheet.setAltText(0, 0, "Set alternative text for the cell ");
console.log(activeSheet.getAltText(0, 0));

StorageType 열거형의 altText 옵션을 사용하면 대체 텍스트의 저장 데이터 유형을 확인할 수 있습니다.

// StorageType 열거형을 사용하여 셀의 대체 텍스트 값을 가져올 수 있습니다.
activeSheet.getCell(0, 0).altText("Alternative text for the cell ");
activeSheet.clear(0, 0, 3, 3, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.altText);

추가로, CopyToOptions 열거형의 altText 옵션을 사용하여 셀의 대체 텍스트를 복사할 수 있습니다.

//CopyToOptions 열거형을 사용하여 셀의 대체 텍스트 값을 복사할 수 있습니다.
activeSheet.getCell(0, 0).altText("Alternative text for the cell ");
activeSheet.copyTo(0, 0, 1, 1, 2, 2, GC.Spread.Sheets.CopyToOptions.altText);

제한 사항

행, 열, 워크시트는 대체 텍스트를 지원하지 않습니다.

디자이너 사용하기

SpreadJS 디자이너에서 셀의 대체 텍스트 값을 확인하거나 수정할 수 있습니다. 셀의 컨텍스트 메뉴에서 ‘대체 텍스트…(Alternative Text…)’ 옵션을 선택하면 ‘셀 대체 텍스트 대화상자(Cell Alternative Text Dialog)’가 열리며, 선택한 셀의 대체 텍스트 값을 확인할 수 있습니다. 필요에 따라 이 값을 변경할 수도 있습니다.

참고: ‘대체 텍스트**…**' 옵션은 설정(SETTINGS) > 일반(General) > Spread 설정(Spread Settings) 대화상자에서 접근성 활성화(Enable Accessibility) 체크박스가 선택된 경우에만 컨텍스트 메뉴에 표시됩니다.

셀을 마우스 오른쪽 버튼으로 클릭했을 때 나타나는 컨텍스트 메뉴의 ‘대체 텍스트…(Alternative Text…)’ 옵션은 다음과 같습니다:


CellAltText

그림, 도형, 차트에 사용자 지정 대체 텍스트 설정하기

그래픽 콘텐츠(떠다니는 객체, 그림, 차트, 도형 등)의 경우, SpreadJS는 적절한 대체 텍스트를 제공하지 않습니다. 하지만 사용자가 접근성 지원을 위해 텍스트를 직접 제공할 수 있습니다. 이를 위해 Picture, FloatingObject, ConnectorShape, GroupShape, Shape, Chart 클래스에는 alt 메서드가 있습니다.

다음 코드 예제는 그림, 도형, 차트에 대해 사용자 지정 대체 텍스트를 설정하는 방법을 보여줍니다.

$(document).ready(function () {
    // Spread 초기화
    var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 2 });
    // 활성 시트 가져오기
    var sheet = spread.getSheet(0);
    // 접근성 활성화
    spread.options.enableAccessibility = true;
    spread.suspendPaint();
    //포커스 설정
    spread.focus();
    //Tab 키, Shift 키와 관련된 명령을 Tab 키로 변경하세요.
    var commands = spread.commandManager();
    //TAB
    commands.register("moveToNextCellThenControl", GC.Spread.Sheets.Commands.moveToNextCellThenControl, GC.Spread.Commands.Key.tab, false, false, false, false);
    //SHIFT+TAB
    commands.register("moveToPreviousCellThenControl", GC.Spread.Sheets.Commands.moveToPreviousCellThenControl, GC.Spread.Commands.Key.tab, false, true, false, false);
    //기본 행 높이와 열 너비 설정
    sheet.defaults.rowHeight = 50;
    sheet.defaults.colWidth = 150;
    //기본 가로 정렬과 세로 정렬 설정
    var defaultStyle = sheet.getDefaultStyle();
    defaultStyle.hAlign = GC.Spread.Sheets.HorizontalAlign.center;
    defaultStyle.vAlign = GC.Spread.Sheets.VerticalAlign.center;
    defaultStyle.rowHeight = 50;
    defaultStyle.colWidth = 150;
    sheet.setDefaultStyle(defaultStyle);
    //데이터 소스 바인딩
    sheet.setDataSource(dataSource);
    // 다른 시트 1 가져오기
    var sheet = spread.getSheet(1);
    //차트에 쓸 데이터 준비
    sheet.setValue(0, 1, "Q1");
    sheet.setValue(0, 2, "Q2");
    sheet.setValue(0, 3, "Q3");
    sheet.setValue(1, 0, "Mobile Phones");
    sheet.setValue(2, 0, "Laptops");
    sheet.setValue(3, 0, "Tablets");
    for (var r = 1; r <= 3; r++) {
        for (var c = 1; c <= 3; c++) {
            sheet.setValue(r, c, parseInt(Math.random() * 100));
        }
    }
    //열 클러스터형 차트 추가
    var c1 = chart_columnClustered = sheet.charts.add('chart_columnClustered', GC.Spread.Sheets.Charts.ChartType.columnClustered, 50, 300, 300, 300, "A1:D4");
    c1.alt("This is a column chart");
    var chartArea = c1.chartArea();
    chartArea.border.color = "rgba(20, 119, 167, 1)";
    chartArea.border.width = 2;
    c1.chartArea(chartArea);
    // 망고 그림 추가
    var p1 = sheet.pictures.add("p1", "mango.jpg", 500, 50, 200, 200);
    p1.alt("This is a mango image");
    p1.borderColor("rgba(20, 119, 167, 1)");
    p1.borderWidth(2);
    p1.borderStyle("solid");
    // 구름 도형 추가
    var sp1 = sheet.shapes.add("sp1", GC.Spread.Sheets.Shapes.AutoShapeType.cloud, 250, 50, 200, 200);
    sp1.alt("This is a cloud shape");
    spread.resumePaint();
    //대체 텍스트 설정을 위한 이벤트 바인딩
    function setAltText(collection, altText) {
        var success = false;
        collection.forEach(function (obj) {
            if (obj.isSelected()) {
                obj.alt(altText);
                success = true;
            }
        });
        return success;
    }
    var alternativeText = document.getElementById("alternativeText");
    document.getElementById("setAlternativeText").addEventListener("click", function () {
        var altText = alternativeText.value;
        var success = setAltText(sheet.pictures.all(), altText);
        if (success) {
            return;
        }
        success = setAltText(sheet.charts.all(), altText);
        if (success) {
            return;
        }
        setAltText(sheet.shapes.all(), altText);
    });
    spread.bind(GC.Spread.Sheets.Events.PictureChanged, function (event, args) {
        if (args.propertyName === "isSelected" && args.picture.isSelected()) {
            alternativeText.value = args.picture.alt();
        }
    });
    spread.bind(GC.Spread.Sheets.Events.FloatingObjectChanged, function (event, args) {
        var floatingObject = args.floatingObject;
        if (floatingObject && floatingObject instanceof GC.Spread.Sheets.Charts.Chart) {
            if (args.propertyName === "isSelected" && floatingObject.isSelected()) {
                alternativeText.value = floatingObject.alt();
            }
        }
    });
    spread.bind(GC.Spread.Sheets.Events.ShapeChanged, function (event, args) {
        if (args.propertyName === "isSelected" && args.shape.isSelected()) {
            alternativeText.value = args.shape.alt();
        }
    });
});

참고: 접근성 지원을 활성화한 후 시각 장애인도 데이터를 편리하게 접근할 수 있습니다. 그러나 마우스나 터치로 실행되는 드래그 채우기, 필터, 터치 등 UI 조작은 여전히 사용하기 어렵습니다.