diff --git a/samples/bootstrap-slider/.editorconfig b/samples/bootstrap-slider/.editorconfig new file mode 100644 index 000000000..8ffcdc4ec --- /dev/null +++ b/samples/bootstrap-slider/.editorconfig @@ -0,0 +1,25 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + + +[*] + +# change these settings to your own preference +indent_style = space +indent_size = 2 + +# we recommend you to keep these unchanged +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false + +[{package,bower}.json] +indent_style = space +indent_size = 2 \ No newline at end of file diff --git a/samples/bootstrap-slider/.gitattributes b/samples/bootstrap-slider/.gitattributes new file mode 100644 index 000000000..212566614 --- /dev/null +++ b/samples/bootstrap-slider/.gitattributes @@ -0,0 +1 @@ +* text=auto \ No newline at end of file diff --git a/samples/bootstrap-slider/.gitignore b/samples/bootstrap-slider/.gitignore new file mode 100644 index 000000000..b19bbe123 --- /dev/null +++ b/samples/bootstrap-slider/.gitignore @@ -0,0 +1,32 @@ +# Logs +logs +*.log +npm-debug.log* + +# Dependency directories +node_modules + +# Build generated files +dist +lib +solution +temp +*.sppkg + +# Coverage directory used by tools like istanbul +coverage + +# OSX +.DS_Store + +# Visual Studio files +.ntvs_analysis.dat +.vs +bin +obj + +# Resx Generated Code +*.resx.ts + +# Styles Generated Code +*.scss.ts diff --git a/samples/bootstrap-slider/.npmignore b/samples/bootstrap-slider/.npmignore new file mode 100644 index 000000000..2c93a9384 --- /dev/null +++ b/samples/bootstrap-slider/.npmignore @@ -0,0 +1,14 @@ +# Folders +.vscode +coverage +node_modules +sharepoint +src +temp + +# Files +*.csproj +.git* +.yo-rc.json +gulpfile.js +tsconfig.json diff --git a/samples/bootstrap-slider/.yo-rc.json b/samples/bootstrap-slider/.yo-rc.json new file mode 100644 index 000000000..b3ee4dc0d --- /dev/null +++ b/samples/bootstrap-slider/.yo-rc.json @@ -0,0 +1,8 @@ +{ + "@microsoft/generator-sharepoint": { + "libraryName": "bootstrap-slider", + "framework": "none", + "version": "1.0.0", + "libraryId": "aea96b80-92f9-49e4-9f29-34acc9990af5" + } +} \ No newline at end of file diff --git a/samples/bootstrap-slider/README.md b/samples/bootstrap-slider/README.md new file mode 100644 index 000000000..34bb8d887 --- /dev/null +++ b/samples/bootstrap-slider/README.md @@ -0,0 +1,51 @@ +## Bootstrap Slider Built with jQueryr v1.x and Boostrap v3.x + +## Summary +Sample bootstrap slider which pulls the slides from a list inside the SharePoint site. The list is automatically deployed once the app is installed in the SharePoint site. + +![First Slider Image](./assets/slider_image_1.png) + +![Second Slider Image](./assets/slider_image_2.png) + +![Deployed List](./assets/List.png) + +## Used SharePoint Framework Version +![drop](https://img.shields.io/badge/drop-ga-green.svg) + +## Applies to + +* [SharePoint Framework Developer GA](http://dev.office.com/sharepoint/docs/spfx/sharepoint-framework-overview) +* [Office 365 developer tenant](http://dev.office.com/sharepoint/docs/spfx/set-up-your-developer-tenant) + +## Solution + +Solution|Author(s) +--------|--------- +bootstrap-slider|David Hartman ([Slalom](https://slalom.com)) + +## Version History + +Version|Date|Comments +-------|----|-------- +1.0|April 25th, 2017|Initial Release + +## Disclaimer +**THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Configuration Bliss +- clone this repo +- in write-manifests.json + - fill in the correct CDN path +- in the command line run: + - `npm i` + - `gulp bundle --ship` + - `gulp package-solution --ship` +- in your SharePoint Online tenant app store install the app +- add your assets to the specified path in the write-manifests.json + - the assets are found in the **temp/deploy** folder +- add the app to your SharePoint Online site + - When the app is finished installing you should see a **SPFx List** in the **Site Contents** of the site + ![Deployed List](./assets/List.png) +- Add items to the **SPFx List** inorder for slides to display in the webpart \ No newline at end of file diff --git a/samples/bootstrap-slider/assets/List.png b/samples/bootstrap-slider/assets/List.png new file mode 100644 index 000000000..f200baae8 Binary files /dev/null and b/samples/bootstrap-slider/assets/List.png differ diff --git a/samples/bootstrap-slider/assets/slider_image_1.png b/samples/bootstrap-slider/assets/slider_image_1.png new file mode 100644 index 000000000..d88f53458 Binary files /dev/null and b/samples/bootstrap-slider/assets/slider_image_1.png differ diff --git a/samples/bootstrap-slider/assets/slider_image_2.png b/samples/bootstrap-slider/assets/slider_image_2.png new file mode 100644 index 000000000..6a0f71acd Binary files /dev/null and b/samples/bootstrap-slider/assets/slider_image_2.png differ diff --git a/samples/bootstrap-slider/config/config.json b/samples/bootstrap-slider/config/config.json new file mode 100644 index 000000000..82da8feb9 --- /dev/null +++ b/samples/bootstrap-slider/config/config.json @@ -0,0 +1,22 @@ +{ + "entries": [ + { + "entry": "./lib/webparts/slider/SliderWebPart.js", + "manifest": "./src/webparts/slider/SliderWebPart.manifest.json", + "outputPath": "./dist/slider.bundle.js" + } + ], + "externals": { + "jquery": { + "path": "https://code.jquery.com/jquery-1.12.4.js", + "globalName": "jquery" + }, + "bootstrap": { + "path": "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js", + "globalName": "bootstrap" + } + }, + "localizedResources": { + "sliderStrings": "webparts/slider/loc/{locale}.js" + } +} diff --git a/samples/bootstrap-slider/config/copy-assets.json b/samples/bootstrap-slider/config/copy-assets.json new file mode 100644 index 000000000..6aca63656 --- /dev/null +++ b/samples/bootstrap-slider/config/copy-assets.json @@ -0,0 +1,3 @@ +{ + "deployCdnPath": "temp/deploy" +} diff --git a/samples/bootstrap-slider/config/deploy-azure-storage.json b/samples/bootstrap-slider/config/deploy-azure-storage.json new file mode 100644 index 000000000..bb7b4a86f --- /dev/null +++ b/samples/bootstrap-slider/config/deploy-azure-storage.json @@ -0,0 +1,6 @@ +{ + "workingDir": "./temp/deploy/", + "account": "", + "container": "bootstrap-slider", + "accessKey": "" +} \ No newline at end of file diff --git a/samples/bootstrap-slider/config/package-solution.json b/samples/bootstrap-slider/config/package-solution.json new file mode 100644 index 000000000..ec7a461c7 --- /dev/null +++ b/samples/bootstrap-slider/config/package-solution.json @@ -0,0 +1,26 @@ +{ + "solution": { + "name": "bootstrap-slider-client-side-solution", + "id": "aea96b80-92f9-49e4-9f29-34acc9990af5", + "version": "1.0.0.2", + "features": [ + { + "title": "slider-assets", + "description": "deploy slider assets to site", + "id": "1de84ad0-f79e-478d-84f4-231eca43385f", + "version": "1.0.0.2", + "assets": { + "elementManifests": [ + "elements.xml" + ], + "elementFiles": [ + "schema.xml" + ] + } + } + ] + }, + "paths": { + "zippedPackage": "solution/bootstrap-slider.sppkg" + } +} diff --git a/samples/bootstrap-slider/config/serve.json b/samples/bootstrap-slider/config/serve.json new file mode 100644 index 000000000..087899637 --- /dev/null +++ b/samples/bootstrap-slider/config/serve.json @@ -0,0 +1,9 @@ +{ + "port": 4321, + "initialPage": "https://localhost:5432/workbench", + "https": true, + "api": { + "port": 5432, + "entryPath": "node_modules/@microsoft/sp-webpart-workbench/lib/api/" + } +} diff --git a/samples/bootstrap-slider/config/tslint.json b/samples/bootstrap-slider/config/tslint.json new file mode 100644 index 000000000..3c085daaf --- /dev/null +++ b/samples/bootstrap-slider/config/tslint.json @@ -0,0 +1,46 @@ +{ + // Display errors as warnings + "displayAsWarning": true, + // The TSLint task may have been configured with several custom lint rules + // before this config file is read (for example lint rules from the tslint-microsoft-contrib + // project). If true, this flag will deactivate any of these rules. + "removeExistingRules": true, + // When true, the TSLint task is configured with some default TSLint "rules.": + "useDefaultConfigAsBase": false, + // Since removeExistingRules=true and useDefaultConfigAsBase=false, there will be no lint rules + // which are active, other than the list of rules below. + "lintConfig": { + // Opt-in to Lint rules which help to eliminate bugs in JavaScript + "rules": { + "class-name": false, + "export-name": false, + "forin": false, + "label-position": false, + "member-access": true, + "no-arg": false, + "no-console": false, + "no-construct": false, + "no-duplicate-case": true, + "no-duplicate-variable": true, + "no-eval": false, + "no-function-expression": true, + "no-internal-module": true, + "no-shadowed-variable": true, + "no-switch-case-fall-through": true, + "no-unnecessary-semicolons": true, + "no-unused-expression": true, + "no-unused-imports": true, + "no-use-before-declare": true, + "no-with-statement": true, + "semicolon": true, + "trailing-comma": false, + "typedef": false, + "typedef-whitespace": false, + "use-named-parameter": true, + "valid-typeof": true, + "variable-name": false, + "whitespace": false, + "prefer-const": true + } + } +} \ No newline at end of file diff --git a/samples/bootstrap-slider/config/write-manifests.json b/samples/bootstrap-slider/config/write-manifests.json new file mode 100644 index 000000000..946a7d6f9 --- /dev/null +++ b/samples/bootstrap-slider/config/write-manifests.json @@ -0,0 +1,3 @@ +{ + "cdnBasePath": "https://dhartman.sharepoint.com/sites/PnPSlider/SiteAssets/" +} \ No newline at end of file diff --git a/samples/bootstrap-slider/gulpfile.js b/samples/bootstrap-slider/gulpfile.js new file mode 100644 index 000000000..7d36ddb1c --- /dev/null +++ b/samples/bootstrap-slider/gulpfile.js @@ -0,0 +1,6 @@ +'use strict'; + +const gulp = require('gulp'); +const build = require('@microsoft/sp-build-web'); + +build.initialize(gulp); diff --git a/samples/bootstrap-slider/package.json b/samples/bootstrap-slider/package.json new file mode 100644 index 000000000..dcd362c97 --- /dev/null +++ b/samples/bootstrap-slider/package.json @@ -0,0 +1,29 @@ +{ + "name": "bootstrap-slider", + "version": "0.0.1", + "private": true, + "engines": { + "node": ">=0.10.0" + }, + "dependencies": { + "@microsoft/sp-client-base": "~1.0.0", + "@microsoft/sp-core-library": "~1.0.0", + "@microsoft/sp-webpart-base": "~1.0.0", + "@types/webpack-env": ">=1.12.1 <1.14.0" + }, + "devDependencies": { + "@microsoft/sp-build-web": "~1.0.0", + "@microsoft/sp-module-interfaces": "~1.0.0", + "@microsoft/sp-webpart-workbench": "~1.0.0", + "@types/bootstrap": "3.3.33", + "@types/chai": ">=3.4.34 <3.6.0", + "@types/jquery": "1.10.31", + "@types/mocha": ">=2.2.33 <2.6.0", + "gulp": "~3.9.1" + }, + "scripts": { + "build": "gulp bundle", + "clean": "gulp clean", + "test": "gulp test" + } +} diff --git a/samples/bootstrap-slider/sharepoint/assets/elements.xml b/samples/bootstrap-slider/sharepoint/assets/elements.xml new file mode 100644 index 000000000..a280458ff --- /dev/null +++ b/samples/bootstrap-slider/sharepoint/assets/elements.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/bootstrap-slider/sharepoint/assets/schema.xml b/samples/bootstrap-slider/sharepoint/assets/schema.xml new file mode 100644 index 000000000..4a478d6a7 --- /dev/null +++ b/samples/bootstrap-slider/sharepoint/assets/schema.xml @@ -0,0 +1,31 @@ + + + + + + + + + main.xsl + clienttemplates.js + 30 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/bootstrap-slider/src/webparts/slider/ISliderWebPartProps.ts b/samples/bootstrap-slider/src/webparts/slider/ISliderWebPartProps.ts new file mode 100644 index 000000000..a651c55bf --- /dev/null +++ b/samples/bootstrap-slider/src/webparts/slider/ISliderWebPartProps.ts @@ -0,0 +1,3 @@ +export interface ISliderWebPartProps { + description: string; +} diff --git a/samples/bootstrap-slider/src/webparts/slider/Slider.module.scss b/samples/bootstrap-slider/src/webparts/slider/Slider.module.scss new file mode 100644 index 000000000..8f3144d1b --- /dev/null +++ b/samples/bootstrap-slider/src/webparts/slider/Slider.module.scss @@ -0,0 +1,52 @@ +.helloWorld { + .container { + max-width: 700px; + margin: 0px auto; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1); + } + + .row { + padding: 20px; + } + + .listItem { + max-width: 715px; + margin: 5px auto 5px auto; + box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1); + } + + .button { + // Our button + text-decoration: none; + height: 32px; + + // Primary Button + min-width: 80px; + background-color: #0078d7; + border-color: #0078d7; + color: #ffffff; + + // Basic Button + outline: transparent; + position: relative; + font-family: "Segoe UI WestEuropean","Segoe UI",-apple-system,BlinkMacSystemFont,Roboto,"Helvetica Neue",sans-serif; + -webkit-font-smoothing: antialiased; + font-size: 14px; + font-weight: 400; + border-width: 0; + text-align: center; + cursor: pointer; + display: inline-block; + padding: 0 16px; + + .label { + font-weight: 600; + font-size: 14px; + height: 32px; + line-height: 32px; + margin: 0 4px; + vertical-align: top; + display: inline-block; + } + } +} \ No newline at end of file diff --git a/samples/bootstrap-slider/src/webparts/slider/SliderWebPart.manifest.json b/samples/bootstrap-slider/src/webparts/slider/SliderWebPart.manifest.json new file mode 100644 index 000000000..091c907e8 --- /dev/null +++ b/samples/bootstrap-slider/src/webparts/slider/SliderWebPart.manifest.json @@ -0,0 +1,20 @@ +{ + "$schema": "../../../node_modules/@microsoft/sp-module-interfaces/lib/manifestSchemas/jsonSchemas/clientSideComponentManifestSchema.json", + + "id": "e7d6a43a-8292-426f-bd64-f65ec47dc91b", + "alias": "SliderWebPart", + "componentType": "WebPart", + "version": "0.0.3", + "manifestVersion": 2, + + "preconfiguredEntries": [{ + "groupId": "e7d6a43a-8292-426f-bd64-f65ec47dc91b", + "group": { "default": "Under Development" }, + "title": { "default": "Slider" }, + "description": { "default": "Slider description" }, + "officeFabricIconFontName": "Page", + "properties": { + "description": "Slider" + } + }] +} diff --git a/samples/bootstrap-slider/src/webparts/slider/SliderWebPart.ts b/samples/bootstrap-slider/src/webparts/slider/SliderWebPart.ts new file mode 100644 index 000000000..c2e7635ea --- /dev/null +++ b/samples/bootstrap-slider/src/webparts/slider/SliderWebPart.ts @@ -0,0 +1,228 @@ +import { Version } from '@microsoft/sp-core-library'; +import { + BaseClientSideWebPart, + IPropertyPaneConfiguration, + PropertyPaneTextField, + IWebPartContext +} from '@microsoft/sp-webpart-base'; +import { SPComponentLoader } from '@microsoft/sp-loader'; +import { SPHttpClient, SPHttpClientResponse } from '@microsoft/sp-http'; +import { escape } from '@microsoft/sp-lodash-subset'; + +import styles from './Slider.module.scss'; +import * as strings from 'sliderStrings'; +import { ISliderWebPartProps } from './ISliderWebPartProps'; + +import 'jquery'; +import 'bootstrap'; + +export interface ISlides{ + value: ISlide[]; +} + +export interface ISlide { + ID: number; + Title: string; +} + +export interface ISlideItem { + SPFxSliderImage: string; +} + +export interface IItemGuid { + value: string; +} + +export interface slides { + Title: string; + Url: string; +} + +export default class SliderWebPart extends BaseClientSideWebPart { + private _slides: slides[] = []; + + public constructor(context: IWebPartContext) { + super(); + + SPComponentLoader.loadCss("https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"); + } + + public render(): void { + + /* + this.domElement.innerHTML = ` + + + + + Welcome to SharePoint! + Customize SharePoint experiences using Web Parts. + ${escape(this.properties.description)} + + Learn more + + + + + `;*/ + this._getSlides() + .then((response: ISlides): void => { + // get slider images + response.value.forEach((slide: ISlide): void => { + this._getImage(slide.ID) + .then((data: ISlideItem): void => { + // get the image out of the FieldValuesAsHtml + let div = document.createElement('div'); + div.innerHTML = data.SPFxSliderImage; + let img: HTMLImageElement = div.firstChild as HTMLImageElement; + + // need to do string split inorder to make the url relative + const imgUrl: string = img.src.split(this.context.pageContext.web.serverRelativeUrl)[1]; + const item: slides = { + Title: slide.Title, + Url: `${this.context.pageContext.web.absoluteUrl}/_layouts/15/getpreview.ashx?resolution=2&path=${this.context.pageContext.web.serverRelativeUrl}${imgUrl}&clientType=modernWebPart` + }; + this._slides.push(item); + }) + .then((): void => { + this.domElement.innerHTML = ` + + + + + + + + + + + `; + + // add carousel items to domElement + if (this._slides.length > 0){ + this._slides.forEach((item: slides, index: number): void =>{ + jQuery('.carousel-indicators', this.domElement).append(this._itemCarouselIndicators(index)); + jQuery('.carousel-inner', this.domElement).append(this._itemSlideWrapper(item, index)); + }); + } + + // initialize the slider + jQuery('#myCarousel').carousel({ + interval: 7000 + }); + }); + //console.log(img.src); + }); + }); + } + + public onInit(): Promise { + // get slider items + /*this._getSlides() + .then((response: ISlides): void => { + // get slider images + response.value.forEach((slide: ISlide): void => { + this._getImage(slide.ID) + .then((data: ISlideItem): void => { + // get the image out of the FieldValuesAsHtml + let div = document.createElement('div'); + div.innerHTML = data.SPFxSliderImage; + let img: HTMLImageElement = div.firstChild as HTMLImageElement; + + // need to do string split inorder to make the url relative + this._getImageUrl(img.src.split(this.context.pageContext.web.serverRelativeUrl)[1]) + .then((imgGuid: string) => { + const item: slides = { + Title: slide.Title, + Url: `${this.context.pageContext.web.absoluteUrl}/_layouts/15/getpreview.ashx? + resolution=4&guidSite=${this.context.pageContext.site.id} + &guidWeb=${this.context.pageContext.web.id} + &guidFile=${imgGuid} + &clientType=modernWebPart` + }; + + this._slides.push(item); + }); + //console.log(img.src); + }); + }); + });*/ + return Promise.resolve(); + } + protected get dataVersion(): Version { + return Version.parse('1.0'); + } + + protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration { + return { + pages: [ + { + header: { + description: strings.PropertyPaneDescription + }, + groups: [ + { + groupName: strings.BasicGroupName, + groupFields: [ + PropertyPaneTextField('description', { + label: strings.DescriptionFieldLabel + }) + ] + } + ] + } + ] + }; + } + + private _getSlides(): Promise { + return this.context.spHttpClient.get(`${this.context.pageContext.web.absoluteUrl}/_api/web/lists/getByTitle('SPFx List')/items?$orderBy=SPFxOrder asc`, + SPHttpClient.configurations.v1) + .then((response: SPHttpClientResponse) => { + return response.json(); + }); + } + + private _getImage(id: number): Promise{ + return this.context.spHttpClient.get(`${this.context.pageContext.web.absoluteUrl}/_api/web/lists/getByTitle('SPFx List')/items('${id}')/FieldValuesAsHtml`, + SPHttpClient.configurations.v1) + .then((response: SPHttpClientResponse) => { + return response.json(); + }); + } + + private _getImageUrl(url: string): Promise { + return this.context.spHttpClient.get(`${this.context.pageContext.web.absoluteUrl}/_api/web/GetFileByServerRelativeUrl('${this.context.pageContext.web.serverRelativeUrl}${url}')/ListItemAllFields/ServerRelatveUrl`, + SPHttpClient.configurations.v1) + .then((response: SPHttpClientResponse) => { + return response.json(); + }) + .then((item: IItemGuid) => { + return item.value; + }); + } + + private _itemCarouselIndicators(index: number): string { + if (index == 0){ + return ``; + } + else { + return ``; + } + } + + private _itemSlideWrapper(item: slides, index: number): string { + if (index == 0){ + return ` + + + `; + } + else { + return ` + + + `; + } + } +} diff --git a/samples/bootstrap-slider/src/webparts/slider/loc/en-us.js b/samples/bootstrap-slider/src/webparts/slider/loc/en-us.js new file mode 100644 index 000000000..89f98bc1e --- /dev/null +++ b/samples/bootstrap-slider/src/webparts/slider/loc/en-us.js @@ -0,0 +1,7 @@ +define([], function() { + return { + "PropertyPaneDescription": "Description", + "BasicGroupName": "Group Name", + "DescriptionFieldLabel": "Description Field" + } +}); \ No newline at end of file diff --git a/samples/bootstrap-slider/src/webparts/slider/loc/mystrings.d.ts b/samples/bootstrap-slider/src/webparts/slider/loc/mystrings.d.ts new file mode 100644 index 000000000..da1ddb561 --- /dev/null +++ b/samples/bootstrap-slider/src/webparts/slider/loc/mystrings.d.ts @@ -0,0 +1,10 @@ +declare interface ISliderStrings { + PropertyPaneDescription: string; + BasicGroupName: string; + DescriptionFieldLabel: string; +} + +declare module 'sliderStrings' { + const strings: ISliderStrings; + export = strings; +} diff --git a/samples/bootstrap-slider/src/webparts/slider/tests/Slider.test.ts b/samples/bootstrap-slider/src/webparts/slider/tests/Slider.test.ts new file mode 100644 index 000000000..36ca83840 --- /dev/null +++ b/samples/bootstrap-slider/src/webparts/slider/tests/Slider.test.ts @@ -0,0 +1,9 @@ +/// + +import { assert } from 'chai'; + +describe('SliderWebPart', () => { + it('should do something', () => { + assert.ok(true); + }); +}); diff --git a/samples/bootstrap-slider/tsconfig.json b/samples/bootstrap-slider/tsconfig.json new file mode 100644 index 000000000..5fa39c930 --- /dev/null +++ b/samples/bootstrap-slider/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "es5", + "forceConsistentCasingInFileNames": true, + "module": "commonjs", + "jsx": "react", + "declaration": true, + "sourceMap": true, + "types": [ + "es6-promise", + "es6-collections", + "webpack-env" + ] + } +} diff --git a/samples/bootstrap-slider/typings/@ms/odsp.d.ts b/samples/bootstrap-slider/typings/@ms/odsp.d.ts new file mode 100644 index 000000000..2d2913e53 --- /dev/null +++ b/samples/bootstrap-slider/typings/@ms/odsp.d.ts @@ -0,0 +1,8 @@ +// Type definitions for Microsoft ODSP projects +// Project: ODSP + +/* Global definition for UNIT_TEST builds + Code that is wrapped inside an if(UNIT_TEST) {...} + block will not be included in the final bundle when the + --ship flag is specified */ +declare const UNIT_TEST: boolean; \ No newline at end of file diff --git a/samples/bootstrap-slider/typings/tsd.d.ts b/samples/bootstrap-slider/typings/tsd.d.ts new file mode 100644 index 000000000..e7efdd728 --- /dev/null +++ b/samples/bootstrap-slider/typings/tsd.d.ts @@ -0,0 +1 @@ +///
Customize SharePoint experiences using Web Parts.
${escape(this.properties.description)}