필터 대화 상자

필터 대화 상자에는 필터 세부 사항이 표시됩니다. 필터 화살표를 클릭하면 필터 대화 상자가 표시되고 옵션을 선택하면 데이터가 필터링됩니다.

설명
app.jsx
app-func.jsx
app-class.jsx
index.html
styles.css
data.jsx

Filter 또는 Table 개체의 filterButtonVisible 메서드를 사용하여 필터 버튼이 표시되는지 여부를 가져오거나 설정합니다. 이를 통해 응용 프로그램에 사용자 ID가 있고 특정 사용자만 특정 열 또는 행을 필터링할 수 있는 경우처럼 필터를 완전히 제거하지 않고 사용자가 필터링할 수 있도록 허용할 대상을 제어할 수 있습니다.

filterButtonVisible 메서드의 가져오기 및 설정 데이터는 다음 인수에 따라 달라집니다.

  • 인수 없음: 필터 버튼 표시 여부를 가져옵니다. 표시된 경우 true이고 표시되지 않은 경우 false입니다.
  • 인수 1개: 숫자인 경우 해당 열의 필터 버튼 표시 여부를 반환하는 열 색인으로 사용합니다. 부울인 경우 모든 필터 버튼을 지정된 값으로 설정합니다.
  • 인수 2개: 첫 번째 인수는 열 색인이고 두 번째 인수는 값입니다. 해당 열의 필터 버튼이 표시되는지 여부를 설정합니다.
    // Hide all filter buttons
    filter.filterButtonVisible(false);
    // table.filterButtonVisible(false);

    // Show all filter buttons
    filter.filterButtonVisible(true);
    // table.filterButtonVisible(true);

    // Hide special column filter button
    filter.filterButtonVisible(colIndex, false);
    // table.filterButtonVisible(tableColumnIndex, false);

    // Get special column filter button visible
    filter.filterButtonVisible(colIndex);
    // table.filterButtonVisible(tableColumnIndex);

필터 대화 상자 컨테이너에는 sortByValue, sortByColor, filterByColor, filterByValue 및 listFilterArea와 이 옵션의 표시 여부를 가져오거나 설정하기 위한 filterDialogVisibleInfo 메서드가 포함됩니다.

    filter.filterDialogVisibleInfo({
       sortByValue: false,         //SortByValue item is visible.
       sortByColor: true,          //SortByColor item is visible.
       filterByColor: true,        //FilterByColor item is visible.
       filterByValue: true,        //FilterByValue item is visible.
       listFilterArea: false       //ListFilterArea item is visible.
    });

Enhanced functionality: 필터에 현재 선택을 추가합니다.

선택 항목을 한 번 필터링 했고, 선택 항목의 일부가 필터링되었다고 가정해 봅시다. 두 번째 필터링을 사용하는 동안 "필터링할 현재 선택 내용 추가"를 선택하면 첫 번째 필터를 지우고 두 번째 필터만 표시하는 대신 두 번째 필터가 첫 번째 필터와 동시에 표시됩니다. 오른쪽 아래 모서리의 표시기를 클릭하고 드래그하면 필터 대화 상자의 크기를 조정할 수 있습니다.

Filter 또는 Table 개체의 filterButtonVisible 메서드를 사용하여 필터 버튼이 표시되는지 여부를 가져오거나 설정합니다. 이를 통해 응용 프로그램에 사용자 ID가 있고 특정 사용자만 특정 열 또는 행을 필터링할 수 있는 경우처럼 필터를 완전히 제거하지 않고 사용자가 필터링할 수 있도록 허용할 대상을 제어할 수 있습니다. filterButtonVisible 메서드의 가져오기 및 설정 데이터는 다음 인수에 따라 달라집니다. 인수 없음: 필터 버튼 표시 여부를 가져옵니다. 표시된 경우 true이고 표시되지 않은 경우 false입니다. 인수 1개: 숫자인 경우 해당 열의 필터 버튼 표시 여부를 반환하는 열 색인으로 사용합니다. 부울인 경우 모든 필터 버튼을 지정된 값으로 설정합니다. 인수 2개: 첫 번째 인수는 열 색인이고 두 번째 인수는 값입니다. 해당 열의 필터 버튼이 표시되는지 여부를 설정합니다. 필터 대화 상자 컨테이너에는 sortByValue, sortByColor, filterByColor, filterByValue 및 listFilterArea와 이 옵션의 표시 여부를 가져오거나 설정하기 위한 filterDialogVisibleInfo 메서드가 포함됩니다. Enhanced functionality: 필터에 현재 선택을 추가합니다. 선택 항목을 한 번 필터링 했고, 선택 항목의 일부가 필터링되었다고 가정해 봅시다. 두 번째 필터링을 사용하는 동안 "필터링할 현재 선택 내용 추가"를 선택하면 첫 번째 필터를 지우고 두 번째 필터만 표시하는 대신 두 번째 필터가 첫 번째 필터와 동시에 표시됩니다. 오른쪽 아래 모서리의 표시기를 클릭하고 드래그하면 필터 대화 상자의 크기를 조정할 수 있습니다.
import * as React from 'react'; import * as ReactDOM from 'react-dom'; import './styles.css'; import { AppFunc } from './app-func'; // import { App } from './app-class'; // 1. Functional Component sample ReactDOM.render(<AppFunc />, document.getElementById('app')); // 2. Class Component sample // ReactDOM.render(<App />, document.getElementById('app'));
import * as React from 'react'; import GC from '@mescius/spread-sheets'; import '@mescius/spread-sheets-resources-ko'; GC.Spread.Common.CultureManager.culture("ko-kr"); import { SpreadSheets, Worksheet } from '@mescius/spread-sheets-react'; import { data } from './data'; let { salesData, outlineColumnData } = data; const spreadNS = GC.Spread.Sheets; function _getElementById(id) { return document.getElementById(id); } export function AppFunc() { let spread = null; let filter = null; let tableColumnsContainer = null; let checkBoxes = null; const initSpread = (currSpread) => { spread = currSpread; var sheet = spread.getSheet(0); sheet.suspendPaint(); sheet.options.allowCellOverflow = true; sheet.name("FilterDialog"); sheet.setArray(1, 1, salesData); filter = new spreadNS.Filter.HideRowFilter(new spreadNS.Range(2, 1, salesData.length - 1, salesData[0].length)); sheet.rowFilter(filter); prepareFilterItems(sheet, salesData[0]); sheet.defaults.rowHeight = 28; sheet.setColumnWidth(1, 110); sheet.setColumnWidth(2, 80); sheet.setColumnWidth(3, 100); sheet.setColumnWidth(4, 80); sheet.setColumnWidth(5, 80); sheet.setColumnWidth(6, 80); sheet.getRange(2, 2, 10, 1).formatter("yyyy/mm/dd"); var ComparisonOperators = spreadNS.ConditionalFormatting.ComparisonOperators; var equalsTo = ComparisonOperators.equalsTo; var range = sheet.getRange(1, 1, 11, 6); range.setBorder(new spreadNS.LineBorder("gray", spreadNS.LineStyle.thin), { all: true }); var ranges = [new spreadNS.Range(2, 3, 10, 1)]; var style1 = new spreadNS.Style(); style1.foreColor = "Accent 2"; var rule1 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style1, equalsTo, "West", ""); sheet.conditionalFormats.addRule(rule1); var style2 = new spreadNS.Style(); style2.foreColor = "Accent 3"; var rule2 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style2, equalsTo, "East", ""); sheet.conditionalFormats.addRule(rule2); var style3 = new spreadNS.Style(); style3.foreColor = "Accent 6"; var rule3 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style3, equalsTo, "North", ""); sheet.conditionalFormats.addRule(rule3); var style4 = new spreadNS.Style(); style4.foreColor = "Accent 1"; var rule4 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style4, equalsTo, "South", ""); sheet.conditionalFormats.addRule(rule4); ranges = [new spreadNS.Range(2, 2, 10, 1)]; style1 = new spreadNS.Style(); style1.backColor = "rgb(241, 135, 102)"; rule1 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style1, ComparisonOperators.lessThan, "1990/01/01", ""); sheet.conditionalFormats.addRule(rule1); style2 = new spreadNS.Style(); style2.backColor = "lightGreen"; rule2 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style2, ComparisonOperators.between, "1990/01/01", "2000/01/01"); sheet.conditionalFormats.addRule(rule2); style3 = new spreadNS.Style(); style3.backColor = "deepSkyBlue"; rule3 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style3, ComparisonOperators.greaterThan, "2000/01/01", ""); sheet.conditionalFormats.addRule(rule3); sheet.resumePaint(); var sheet2 = spread.sheets[1]; initOutlineColumnFilter(sheet2); sheet2.name("OutlineColumnFilter"); } const setAllFilterButtonsVisible = (e, visible) => { if (filter) { filter.filterButtonVisible(visible); checkBoxes.forEach(function (item) { item.checked = visible; }); } } const setMenuItem = (e, key) => { var options = {}; options[key] = e.target.checked; filter.filterDialogVisibleInfo(options); } const prepareFilterItems = (sheet, headers) => { var items = []; filter = sheet.rowFilter(); var range = filter.range, startColumn = range.col; for (var c = 0, length = headers.length; c < length; c++) { var name = headers[c]; items.push('<div><label><input type="checkbox" checked data-index="' + (startColumn + c) + '">' + name + '</label></div>'); } tableColumnsContainer = _getElementById("tableColumnsContainer"); tableColumnsContainer.innerHTML = items.join(""); var nodeList = tableColumnsContainer.querySelectorAll("input[type='checkbox']"); checkBoxes = []; for (var i = 0, count = nodeList.length; i < count; i++) { var element = nodeList[i]; checkBoxes.push(element); element.addEventListener('change', function () { var index = +this.dataset.index; // +this.getAttribute("data-index"); if (filter) { filter.filterButtonVisible(index, this.checked); } }); } } const initOutlineColumnFilter = (sheet) => { sheet.setColumnWidth(2, 120); sheet.rowFilter(new GC.Spread.Sheets.Filter.HideRowFilter(new GC.Spread.Sheets.Range(-1, 0, -1, 1))); sheet.suspendPaint(); sheet.setColumnWidth(0, 200); sheet.setRowCount(12); sheet.outlineColumn.options({ columnIndex: 0, showIndicator: true, }); var sourceData = outlineColumnData; sheet.setDataSource(sourceData); sheet.bindColumn(0, "name"); sheet.setColumnCount(3); sheet.setColumnWidth(0, 300); for (var r = 0; r < sourceData.length; r++) { var level = sourceData[r].level; sheet.getCell(r, 0).textIndent(level); } sheet.showRowOutline(false); sheet.outlineColumn.refresh(); sheet.resumePaint(); } return <div class="sample-tutorial"> <div class="sample-spreadsheets"> <SpreadSheets workbookInitialized={spread => initSpread(spread)}> <Worksheet> </Worksheet> <Worksheet> </Worksheet> </SpreadSheets> </div> <Panel setAllFilterButtonsVisible={(e, visible) => { setAllFilterButtonsVisible(e, visible) }} setMenuItem={(e, key) => { setMenuItem(e, key) }} /> </div>; } function Panel(props) { return ( <div class="options-container"> <div class="option-group"> <input type="button" value="Show All" title="Show all filter buttons of the table" onClick={(e) => { props.setAllFilterButtonsVisible(e, true) }} /> <input type="button" value="Hide All" title="Hide all filter buttons of the table" onClick={(e) => { props.setAllFilterButtonsVisible(e, false) }} /> </div> <div class="option-group"> <h4>Show filter buttons:</h4> <div id="tableColumnsContainer"></div> <h4>Filter dialog visible info:</h4> <div> <div><label><input type="checkbox" defaultChecked={true} onClick={(e) => { props.setMenuItem(e, 'sortByValue') }} />ShowSortByValue</label></div> <div><label><input type="checkbox" defaultChecked={true} onClick={(e) => { props.setMenuItem(e, 'sortByColor') }} />ShowSortByColor</label></div> <div><label><input type="checkbox" defaultChecked={true} onClick={(e) => { props.setMenuItem(e, 'filterByColor') }} />ShowFilterByColor</label></div> <div><label><input type="checkbox" defaultChecked={true} onClick={(e) => { props.setMenuItem(e, 'filterByValue') }} />ShowFilterByValue</label></div> <div><label><input type="checkbox" defaultChecked={true} onClick={(e) => { props.setMenuItem(e, 'listFilterArea') }} />ShowListFilterArea</label></div> </div> </div> </div> ) }
import * as React from 'react'; import GC from '@mescius/spread-sheets'; import '@mescius/spread-sheets-resources-ko'; GC.Spread.Common.CultureManager.culture("ko-kr"); import { SpreadSheets, Worksheet } from '@mescius/spread-sheets-react'; import { data } from './data'; let { salesData, outlineColumnData } = data; const Component = React.Component; const spreadNS = GC.Spread.Sheets; function _getElementById(id) { return document.getElementById(id); } export class App extends Component { constructor(props) { super(props); this.spread = null; this.filter = null; this.tableColumnsContainer = null; this.checkBoxes = null; } render() { return <div class="sample-tutorial"> <div class="sample-spreadsheets"> <SpreadSheets workbookInitialized={spread=>this.initSpread(spread)}> <Worksheet> </Worksheet> <Worksheet> </Worksheet> </SpreadSheets> </div> <Panel setAllFilterButtonsVisible={(e, visible)=>{this.setAllFilterButtonsVisible(e, visible)}} setMenuItem={(e, key)=>{this.setMenuItem(e, key)}} /> </div>; } initSpread(spread) { this.spread = spread; var sheet = spread.getSheet(0); sheet.suspendPaint(); sheet.options.allowCellOverflow = true; sheet.name("FilterDialog"); sheet.setArray(1, 1, salesData); var filter = new spreadNS.Filter.HideRowFilter(new spreadNS.Range(2, 1, salesData.length - 1, salesData[0].length)); sheet.rowFilter(filter); this.filter = filter; this.prepareFilterItems(sheet, salesData[0]); sheet.defaults.rowHeight = 28; sheet.setColumnWidth(1, 110); sheet.setColumnWidth(2, 80); sheet.setColumnWidth(3, 100); sheet.setColumnWidth(4, 80); sheet.setColumnWidth(5, 80); sheet.setColumnWidth(6, 80); sheet.getRange(2, 2, 10, 1).formatter("yyyy/mm/dd"); var ComparisonOperators = spreadNS.ConditionalFormatting.ComparisonOperators; var equalsTo = ComparisonOperators.equalsTo; var range = sheet.getRange(1, 1, 11, 6); range.setBorder(new spreadNS.LineBorder("gray", spreadNS.LineStyle.thin), {all: true}); var ranges = [new spreadNS.Range(2, 3, 10, 1)]; var style1 = new spreadNS.Style(); style1.foreColor = "Accent 2"; var rule1 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style1, equalsTo, "West", ""); sheet.conditionalFormats.addRule(rule1); var style2 = new spreadNS.Style(); style2.foreColor = "Accent 3"; var rule2 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style2, equalsTo, "East", ""); sheet.conditionalFormats.addRule(rule2); var style3 = new spreadNS.Style(); style3.foreColor = "Accent 6"; var rule3 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style3, equalsTo, "North", ""); sheet.conditionalFormats.addRule(rule3); var style4 = new spreadNS.Style(); style4.foreColor = "Accent 1"; var rule4 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style4, equalsTo, "South", ""); sheet.conditionalFormats.addRule(rule4); ranges = [new spreadNS.Range(2, 2, 10, 1)]; style1 = new spreadNS.Style(); style1.backColor = "rgb(241, 135, 102)"; rule1 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style1, ComparisonOperators.lessThan, "1990/01/01", ""); sheet.conditionalFormats.addRule(rule1); style2 = new spreadNS.Style(); style2.backColor = "lightGreen"; rule2 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style2, ComparisonOperators.between, "1990/01/01", "2000/01/01"); sheet.conditionalFormats.addRule(rule2); style3 = new spreadNS.Style(); style3.backColor = "deepSkyBlue"; rule3 = new spreadNS.ConditionalFormatting.NormalConditionRule(1, ranges, style3, ComparisonOperators.greaterThan, "2000/01/01", ""); sheet.conditionalFormats.addRule(rule3); sheet.resumePaint(); var sheet2 = spread.sheets[1]; this.initOutlineColumnFilter(sheet2); sheet2.name("OutlineColumnFilter"); } setAllFilterButtonsVisible (e, visible) { var filter = this.filter; if (filter) { filter.filterButtonVisible(visible); this.checkBoxes.forEach(function(item) { item.checked = visible; }); } } setMenuItem (e, key) { var options = {}; options[key] = e.target.checked; this.filter.filterDialogVisibleInfo(options); } prepareFilterItems(sheet, headers) { var items = []; var filter = sheet.rowFilter(), range = filter.range, startColumn = range.col; for (var c = 0, length = headers.length; c < length; c++) { var name = headers[c]; items.push('<div><label><input type="checkbox" checked data-index="' + (startColumn + c) + '">'+ name + '</label></div>'); } this.tableColumnsContainer = _getElementById("tableColumnsContainer"); this.tableColumnsContainer.innerHTML = items.join(""); var nodeList = this.tableColumnsContainer.querySelectorAll("input[type='checkbox']"); this.checkBoxes = []; var checkBoxes = this.checkBoxes; for (var i = 0, count = nodeList.length; i < count; i++) { var element = nodeList[i]; checkBoxes.push(element); element.addEventListener('change', function () { var index = +this.dataset.index; // +this.getAttribute("data-index"); if (filter) { filter.filterButtonVisible(index, this.checked); } }); } } initOutlineColumnFilter(sheet) { sheet.setColumnWidth(2, 120); sheet.rowFilter(new GC.Spread.Sheets.Filter.HideRowFilter(new GC.Spread.Sheets.Range(-1, 0, -1, 1))); sheet.suspendPaint(); sheet.setColumnWidth(0, 200); sheet.setRowCount(12); sheet.outlineColumn.options({ columnIndex: 0, showIndicator: true, }); var sourceData = outlineColumnData; sheet.setDataSource(sourceData); sheet.bindColumn(0, "name"); sheet.setColumnCount(3); sheet.setColumnWidth(0, 300); for (var r = 0; r < sourceData.length; r++) { var level = sourceData[r].level; sheet.getCell(r, 0).textIndent(level); } sheet.showRowOutline(false); sheet.outlineColumn.refresh(); sheet.resumePaint(); } } class Panel extends Component{ constructor(props){ super(props); } render(){ return( <div class="options-container"> <div class="option-group"> <input type="button" value="Show All" title="Show all filter buttons of the table" onClick={(e)=>{this.props.setAllFilterButtonsVisible(e, true)}} /> <input type="button" value="Hide All" title="Hide all filter buttons of the table" onClick={(e)=>{this.props.setAllFilterButtonsVisible(e, false)}} /> </div> <div class="option-group"> <h4>Show filter buttons:</h4> <div id="tableColumnsContainer"></div> <h4>Filter dialog visible info:</h4> <div> <div><label><input type="checkbox" defaultChecked={true} onClick={(e)=>{this.props.setMenuItem(e, 'sortByValue')}} />ShowSortByValue</label></div> <div><label><input type="checkbox" defaultChecked={true} onClick={(e)=>{this.props.setMenuItem(e, 'sortByColor')}} />ShowSortByColor</label></div> <div><label><input type="checkbox" defaultChecked={true} onClick={(e)=>{this.props.setMenuItem(e, 'filterByColor')}} />ShowFilterByColor</label></div> <div><label><input type="checkbox" defaultChecked={true} onClick={(e)=>{this.props.setMenuItem(e, 'filterByValue')}} />ShowFilterByValue</label></div> <div><label><input type="checkbox" defaultChecked={true} onClick={(e)=>{this.props.setMenuItem(e, 'listFilterArea')}} />ShowListFilterArea</label></div> </div> </div> </div> ) } }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/ko/react/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <!-- SystemJS --> <script src="$DEMOROOT$/ko/react/node_modules/systemjs/dist/system.src.js"></script> <script src="systemjs.config.js"></script> <script> System.import('$DEMOROOT$/ko/lib/react/license.js').then(function () { System.import('./src/app'); }); </script> </head> <body> <div id="app"></div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: calc(100% - 280px); height: 100%; overflow: hidden; float: left; } .options-container { float: right; width: 280px; padding: 12px; height: 100%; box-sizing: border-box; background: #fbfbfb; overflow: auto; } .option-group { margin-bottom: 6px; } .option-group input[type="checkbox"] { margin-right: 6px; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } #app { height: 100%; }
export const data = { salesData: [ ["SalesPers", "Birth", "Region", "SaleAmt", "ComPct", "ComAmt"], ["Joe", new Date("2000/01/23"), "North", 260, 0.1, 26], ["Robert", new Date("1988/08/21"), "South", 660, 0.15, 99], ["Michelle", new Date("1995/08/03"), "East", 940, 0.15, 141], ["Erich", new Date("1994/05/23"), "West", 410, 0.12, 49.2], ["Dafna", new Date("1992/07/21"), "North", 800, 0.15, 120], ["Rob", new Date("1995/11/03"), "South", 900, 0.15, 135], ["Jonason", new Date("1987/02/11"), "West", 300, 0.17, 110], ["Enana", new Date("1997/04/01"), "West", 310, 0.16, 99.2], ["Dania", new Date("1997/02/15"), "North", 500, 0.10, 76], ["Robin", new Date("1991/12/28"), "East", 450, 0.18, 35] ], outlineColumnData: [ {name: 'Preface', chapter: '1', page: 1, level: 0}, {name: 'Java SE5 and SE6', chapter: '1.1', page: 2, level: 1}, {name: 'Java SE6', chapter: '1.1.1', page: 2, level: 2}, {name: 'The 4th edition', chapter: '1.2', page: 2, level: 1}, {name: 'Changes', chapter: '1.2.1', page: 3, level: 2}, {name: 'Note on the cover design', chapter: '1.3', page: 4, level: 1}, {name: 'Acknowledgements', chapter: '1.4', page: 4, level: 1}, {name: 'Introduction', chapter: '2', page: 9, level: 0}, {name: 'Prerequisites', chapter: '2.1', page: 9, level: 1}, {name: 'Learning Java', chapter: '2.2', page: 10, level: 1}, {name: 'Goals', chapter: '2.3', page: 10, level: 1}, {name: 'Teaching from this book', chapter: '2.4', page: 11, level: 1}, {name: 'JDK HTML documentation', chapter: '2.5', page: 11, level: 1}, {name: 'Exercises', chapter: '2.6', page: 12, level: 1}, {name: 'Foundations for Java', chapter: '2.7', page: 12, level: 1}, {name: 'Source code', chapter: '2.8', page: 12, level: 1}, {name: 'Coding standards', chapter: '2.8.1', page: 14, level: 2}, {name: 'Errors', chapter: '2.9', page: 14, level: 1}, {name: 'Introduction to Objects', chapter: '3', page: 15, level: 0}, {name: 'The progress of abstraction', chapter: '3.1', page: 15, level: 1}, {name: 'An object has an interface', chapter: '3.2', page: 17, level: 1}, {name: 'An object provides services', chapter: '3.3', page: 18, level: 1}, {name: 'The hidden implementation', chapter: '3.4', page: 19, level: 1}, {name: 'Reusing the implementation', chapter: '3.5', page: 20, level: 1}, {name: 'Inheritance', chapter: '3.6', page: 21, level: 1}, {name: 'Is-a vs. is-like-a relationships', chapter: '3.6.1', page: 24, level: 2}, {name: 'Interchangeable objects with polymorphism', chapter: '3.7', page: 25, level: 1}, {name: 'The singly rooted hierarchy', chapter: '3.8', page: 28, level: 1}, {name: 'Containers', chapter: '3.9', page: 28, level: 1}, {name: 'Parameterized types (Generics)', chapter: '3.10', page: 29, level: 1}, {name: 'Object creation & lifetime', chapter: '3.11', page: 30, level: 1}, {name: 'Exception handling: dealing with errors', chapter: '3.12', page: 31, level: 1}, {name: 'Concurrent programming', chapter: '3.13', page: 32, level: 1}, {name: 'Java and the Internet', chapter: '3.14', page: 33, level: 1}, {name: 'What is the Web?', chapter: '3.14.1', page: 33, level: 2}, {name: 'Client-side programming', chapter: '3.14.2', page: 34, level: 2}, {name: 'Server-side programming', chapter: '3.14.3', page: 38, level: 2} ] };
(function (global) { System.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true, react: true }, meta: { '*.css': { loader: 'css' } }, paths: { // paths serve as alias 'npm:': 'node_modules/' }, // map tells the System loader where to look for things map: { '@mescius/spread-sheets': 'npm:@mescius/spread-sheets/index.js', '@mescius/spread-sheets-resources-ko': 'npm:@mescius/spread-sheets-resources-ko/index.js', '@mescius/spread-sheets-react': 'npm:@mescius/spread-sheets-react/index.js', '@grapecity/jsob-test-dependency-package/react-components': 'npm:@grapecity/jsob-test-dependency-package/react-components/index.js', 'react': 'npm:react/umd/react.production.min.js', 'react-dom': 'npm:react-dom/umd/react-dom.production.min.js', 'css': 'npm:systemjs-plugin-css/css.js', 'plugin-babel': 'npm:systemjs-plugin-babel/plugin-babel.js', 'systemjs-babel-build':'npm:systemjs-plugin-babel/systemjs-babel-browser.js' }, // packages tells the System loader how to load when no filename and/or no extension packages: { src: { defaultExtension: 'jsx' }, "node_modules": { defaultExtension: 'js' }, } }); })(this);