From 21455b88da0b07c26cda3361455f520d35da1787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20P=C3=B8hner=20Henriksen?= Date: Wed, 15 Oct 2014 12:41:59 +0200 Subject: [PATCH 1/8] Added theme generator --- package.json | 3 +- theme/index.js | 86 ++ theme/templates/_bower.json | 6 + theme/templates/_common.css | 147 +++ theme/templates/_config.json | 110 ++ theme/templates/_images/cancel.png | Bin 0 -> 1048 bytes theme/templates/_images/close.png | Bin 0 -> 196 bytes theme/templates/_images/double_arrow.png | Bin 0 -> 233 bytes theme/templates/_images/icon.png | Bin 0 -> 9579 bytes theme/templates/_layouts/default/icon.png | Bin 0 -> 1123 bytes theme/templates/_manifest.json | 53 + theme/templates/_package.json | 5 + .../_panels/DockablePanel/Panel.html | 6 + .../templates/_panels/DockablePanel/Panel.js | 462 +++++++++ .../_panels/DockablePanel/images/bar_down.png | Bin 0 -> 987 bytes .../_panels/DockablePanel/images/bar_left.png | Bin 0 -> 205 bytes .../DockablePanel/images/bar_right.png | Bin 0 -> 200 bytes .../_panels/DockablePanel/images/bar_up.png | Bin 0 -> 199 bytes .../_panels/DockablePanel/images/nav_down.png | Bin 0 -> 306 bytes .../_panels/DockablePanel/images/nav_left.png | Bin 0 -> 367 bytes .../DockablePanel/images/nav_right.png | Bin 0 -> 1035 bytes .../_panels/DockablePanel/images/nav_up.png | Bin 0 -> 409 bytes .../_panels/FoldablePanel/FoldableDijit.js | 65 ++ .../FoldablePanel/FoldableWidgetFrame.js | 75 ++ .../templates/_panels/FoldablePanel/Panel.js | 357 +++++++ .../_panels/SimpleBorderPanel/Panel.js | 25 + theme/templates/_panels/TitlePanel/Panel.js | 222 +++++ theme/templates/_styles/black/style.css | 33 + theme/templates/_styles/cyan/style.css | 9 + theme/templates/_styles/default/style.css | 0 theme/templates/_styles/green/style.css | 6 + .../HeaderController/PopupTileNodes.js | 222 +++++ .../_widgets/HeaderController/Widget.html | 22 + .../_widgets/HeaderController/Widget.js | 936 ++++++++++++++++++ .../_widgets/HeaderController/config.json | 8 + .../HeaderController/css/images/arrow.png | Bin 0 -> 178 bytes .../HeaderController/css/images/close.png | Bin 0 -> 256 bytes .../_widgets/HeaderController/css/style.css | 305 ++++++ .../HeaderController/images/app-logo.png | Bin 0 -> 66870 bytes .../HeaderController/images/group_icon.png | Bin 0 -> 451 bytes .../_widgets/HeaderController/images/icon.png | Bin 0 -> 420 bytes .../HeaderController/images/more_icon.png | Bin 0 -> 262 bytes .../_widgets/HeaderController/manifest.json | 17 + .../HeaderController/nls/ar/strings.js | 6 + .../HeaderController/nls/cs/strings.js | 6 + .../HeaderController/nls/da/strings.js | 6 + .../HeaderController/nls/de/strings.js | 6 + .../HeaderController/nls/es/strings.js | 6 + .../HeaderController/nls/et/strings.js | 6 + .../HeaderController/nls/fi/strings.js | 6 + .../HeaderController/nls/fr/strings.js | 6 + .../HeaderController/nls/he/strings.js | 6 + .../HeaderController/nls/it/strings.js | 6 + .../HeaderController/nls/ja/strings.js | 6 + .../HeaderController/nls/ko/strings.js | 6 + .../HeaderController/nls/lt/strings.js | 6 + .../HeaderController/nls/lv/strings.js | 6 + .../HeaderController/nls/nb/strings.js | 6 + .../HeaderController/nls/nl/strings.js | 6 + .../HeaderController/nls/pl/strings.js | 6 + .../HeaderController/nls/pt-BR/strings.js | 6 + .../HeaderController/nls/pt-PT/strings.js | 6 + .../HeaderController/nls/ro/strings.js | 6 + .../HeaderController/nls/ru/strings.js | 6 + .../_widgets/HeaderController/nls/strings.js | 34 + .../HeaderController/nls/sv/strings.js | 6 + .../HeaderController/nls/th/strings.js | 6 + .../HeaderController/nls/tr/strings.js | 6 + .../HeaderController/nls/zh-cn/strings.js | 7 + .../HeaderController/setting/Setting.html | 5 + .../HeaderController/setting/Setting.js | 122 +++ .../HeaderController/setting/css/style.css | 20 + .../setting/nls/ar/strings.js | 7 + .../setting/nls/cs/strings.js | 7 + .../setting/nls/da/strings.js | 7 + .../setting/nls/de/strings.js | 7 + .../setting/nls/es/strings.js | 7 + .../setting/nls/et/strings.js | 7 + .../setting/nls/fi/strings.js | 7 + .../setting/nls/fr/strings.js | 7 + .../setting/nls/he/strings.js | 7 + .../setting/nls/it/strings.js | 7 + .../setting/nls/ja/strings.js | 7 + .../setting/nls/ko/strings.js | 7 + .../setting/nls/lt/strings.js | 7 + .../setting/nls/lv/strings.js | 7 + .../setting/nls/nb/strings.js | 7 + .../setting/nls/nl/strings.js | 7 + .../setting/nls/pl/strings.js | 7 + .../setting/nls/pt-BR/strings.js | 7 + .../setting/nls/pt-PT/strings.js | 7 + .../setting/nls/ro/strings.js | 7 + .../setting/nls/ru/strings.js | 7 + .../HeaderController/setting/nls/strings.js | 34 + .../setting/nls/sv/strings.js | 7 + .../setting/nls/th/strings.js | 7 + .../setting/nls/tr/strings.js | 7 + .../setting/nls/zh-cn/strings.js | 7 + 98 files changed, 3720 insertions(+), 1 deletion(-) create mode 100644 theme/index.js create mode 100644 theme/templates/_bower.json create mode 100644 theme/templates/_common.css create mode 100644 theme/templates/_config.json create mode 100644 theme/templates/_images/cancel.png create mode 100644 theme/templates/_images/close.png create mode 100644 theme/templates/_images/double_arrow.png create mode 100644 theme/templates/_images/icon.png create mode 100644 theme/templates/_layouts/default/icon.png create mode 100644 theme/templates/_manifest.json create mode 100644 theme/templates/_package.json create mode 100644 theme/templates/_panels/DockablePanel/Panel.html create mode 100644 theme/templates/_panels/DockablePanel/Panel.js create mode 100644 theme/templates/_panels/DockablePanel/images/bar_down.png create mode 100644 theme/templates/_panels/DockablePanel/images/bar_left.png create mode 100644 theme/templates/_panels/DockablePanel/images/bar_right.png create mode 100644 theme/templates/_panels/DockablePanel/images/bar_up.png create mode 100644 theme/templates/_panels/DockablePanel/images/nav_down.png create mode 100644 theme/templates/_panels/DockablePanel/images/nav_left.png create mode 100644 theme/templates/_panels/DockablePanel/images/nav_right.png create mode 100644 theme/templates/_panels/DockablePanel/images/nav_up.png create mode 100644 theme/templates/_panels/FoldablePanel/FoldableDijit.js create mode 100644 theme/templates/_panels/FoldablePanel/FoldableWidgetFrame.js create mode 100644 theme/templates/_panels/FoldablePanel/Panel.js create mode 100644 theme/templates/_panels/SimpleBorderPanel/Panel.js create mode 100644 theme/templates/_panels/TitlePanel/Panel.js create mode 100644 theme/templates/_styles/black/style.css create mode 100644 theme/templates/_styles/cyan/style.css create mode 100644 theme/templates/_styles/default/style.css create mode 100644 theme/templates/_styles/green/style.css create mode 100644 theme/templates/_widgets/HeaderController/PopupTileNodes.js create mode 100644 theme/templates/_widgets/HeaderController/Widget.html create mode 100644 theme/templates/_widgets/HeaderController/Widget.js create mode 100644 theme/templates/_widgets/HeaderController/config.json create mode 100644 theme/templates/_widgets/HeaderController/css/images/arrow.png create mode 100644 theme/templates/_widgets/HeaderController/css/images/close.png create mode 100644 theme/templates/_widgets/HeaderController/css/style.css create mode 100644 theme/templates/_widgets/HeaderController/images/app-logo.png create mode 100644 theme/templates/_widgets/HeaderController/images/group_icon.png create mode 100644 theme/templates/_widgets/HeaderController/images/icon.png create mode 100644 theme/templates/_widgets/HeaderController/images/more_icon.png create mode 100644 theme/templates/_widgets/HeaderController/manifest.json create mode 100644 theme/templates/_widgets/HeaderController/nls/ar/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/cs/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/da/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/de/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/es/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/et/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/fi/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/fr/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/he/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/it/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/ja/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/ko/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/lt/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/lv/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/nb/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/nl/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/pl/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/pt-BR/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/pt-PT/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/ro/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/ru/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/sv/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/th/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/tr/strings.js create mode 100644 theme/templates/_widgets/HeaderController/nls/zh-cn/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/Setting.html create mode 100644 theme/templates/_widgets/HeaderController/setting/Setting.js create mode 100644 theme/templates/_widgets/HeaderController/setting/css/style.css create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/ar/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/cs/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/da/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/de/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/es/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/et/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/fi/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/fr/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/he/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/it/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/ja/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/ko/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/lt/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/lv/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/nb/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/nl/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/pl/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/pt-BR/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/pt-PT/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/ro/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/ru/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/sv/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/th/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/tr/strings.js create mode 100644 theme/templates/_widgets/HeaderController/setting/nls/zh-cn/strings.js diff --git a/package.json b/package.json index de306cd..abb7c25 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ }, "files": [ "app", - "widget" + "widget", + "theme" ], "keywords": [ "yeoman-generator", "Esri", "ArcGIS", "Web", "AppBuilder" diff --git a/theme/index.js b/theme/index.js new file mode 100644 index 0000000..d6d7fe0 --- /dev/null +++ b/theme/index.js @@ -0,0 +1,86 @@ +'use strict'; +var util = require('util'); +var path = require('path'); +var yeoman = require('yeoman-generator'); +var yosay = require('yosay'); +var chalk = require('chalk'); + +var ThemeGenerator = yeoman.generators.Base.extend({ + initializing: function () { + this.pkg = require('../package.json'); + }, + + prompting: function () { + var done = this.async(); + var dasherize = this._.dasherize; + + // Have Yeoman greet the user. + this.log(yosay( + 'Welcome to the ArcGIS Web AppBuilder theme generator!' + )); + + var prompts = [{ + name: 'themeName', + message: 'What would you like to call your theme?', + 'default': "DefaultThemeName", + // test for valid folder name + validate: function(answer) { + var validFolderNameRegExp = /^[^\\/?%*"":|<>\.\s]+$/; + return validFolderNameRegExp.test(answer); + } + }, + { + name: 'author', + message: 'What is your name or the name of your organization?', + 'default': "My organization" + }, + { + name : 'desc', + message: 'Would you like to add a description for your theme?', + 'default': "A good description of my theme..." + } + ]; + + this.prompt(prompts, function (props) { + this.themeName = props.themeName.match(/([A-Z]?[^A-Z]*)/g).slice(0,-1).join(' '); + this.themeNameClean = this._.classify(this.themeName); + this.author = props.author; + this.description = props.desc; + done(); + }.bind(this)); + }, + + app: function () { + this.dest.mkdir(this.themeName); + }, + + projectfiles: function () { + // NOTE: this is needed b/c _Widget.html has ES6 style interpolation delimiters + // see: https://github.com/lodash/lodash/issues/399 + this._.templateSettings.interpolate = /<%=([\s\S]+?)%>/g; + + var basePath = path.join('themes', this.themeName); + //css + this.src.copy('_common.css', path.join(basePath, 'common.css')); + //folders + this.directory('_images', path.join(basePath, 'images')); + this.directory('_layouts', path.join(basePath, 'layouts')); + this.directory('_panels', path.join(basePath, 'panels')); + this.directory('_styles', path.join(basePath, 'styles')); + this.directory('_widgets', path.join(basePath, 'widgets')); + //Dev dependencies + //this.src.copy('_package.json',this.themeNameClean + '/package.json'); + //this.src.copy('_bower.json',this.themeNameClean + '/bower.json'); + + var context = { + themeName: this.themeName, + themeNameClean: this.themeNameClean + }; + + this.template('_manifest.json', path.join(basePath, 'manifest.json'), context); + this.template('_config.json',path.join(basePath,'layouts/default/config.json'),context); + + } +}); + +module.exports = ThemeGenerator; diff --git a/theme/templates/_bower.json b/theme/templates/_bower.json new file mode 100644 index 0000000..2b4eb38 --- /dev/null +++ b/theme/templates/_bower.json @@ -0,0 +1,6 @@ +{ + "name": "package", + "version": "0.0.0", + "dependencies": {} +} + diff --git a/theme/templates/_common.css b/theme/templates/_common.css new file mode 100644 index 0000000..d560052 --- /dev/null +++ b/theme/templates/_common.css @@ -0,0 +1,147 @@ +.jimu-foldable-dijit{ + position: relative; +} +.jimu-foldable-dijit>.title{} +.jimu-foldable-dijit>.jimu-container{ + position: absolute; + left: 0; + right: 0; + bottom: 0; +} + +.jimu-foldable-panel{ + position: absolute; +} +.jimu-foldable-panel .title{ + color: white; + cursor: pointer; + background-color: #485566; + box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.4); + z-index: 101; + position: relative; + font-weight: bold; +} +.jimu-foldable-panel .title-label{ + float: left; + height: 100%; + margin-left: 14px; + font-size: 16px; +} +.jimu-foldable-panel .close-btn{ + background: url(images/cancel.png) no-repeat center center; + width: 40px; + height: 100%; + margin-right: 10px; + float: right; + border-radius: 11px; + opacity: 1; +} +.jimu-foldable-panel .fold-btn{ + background: url(images/double_arrow.png) no-repeat center center; + width: 60px; + height: 100%; + float: right; +} + +.jimu-foldable-panel .fold-btn.folded{ + -moz-transform: scale(1) rotate(180deg) translateX(0px) translateY(0px) skewX(0deg) skewY(0deg); + -webkit-transform: scale(1) rotate(180deg) translateX(0px) translateY(0px) skewX(0deg) skewY(0deg); + -o-transform: scale(1) rotate(180deg) translateX(0px) translateY(0px) skewX(0deg) skewY(0deg); + -ms-transform: scale(1) rotate(180deg) translateX(0px) translateY(0px) skewX(0deg) skewY(0deg); + transform: scale(1) rotate(180deg) translateX(0px) translateY(0px) skewX(0deg) skewY(0deg); +} + +.jimu-foldable-panel .close-tip{ + position: absolute; + left: 0; + top: 0; +} + +.foldable-widget-frame>.title{ + color: #86909c; + background-color: #d9dde0; +} +.foldable-widget-frame>.title>.title-label{ + font-size: 14px; +} + +/********** styles for simple panel***********/ +.jimu-simple-panel{ + border-radius: 4px; +} + +/********** styles for title panel***********/ +.jimu-title-panel{ + border-radius: 4px; +} +.jimu-title-panel>.title{ + color: white; + cursor: pointer; + height: 35px; + width: 100%; + background-color: #485566; + box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.4); + z-index: 101; + position: relative; +} +.jimu-title-panel>.title>.title-label{ + float: left; + height: 100%; + margin-left: 14px; + font-size: 16px; +} +.jimu-title-panel>.title>.title-fold-btn{ + float:right; + height:100%; + width:60px; + background:url(images/double_arrow.png) no-repeat center center; +} +.jimu-title-panel>.title>.close-btn{ + background: url(images/cancel.png) no-repeat center center; + width: 40px; + height: 100%; + margin-right: 5px; + float: right; + border-radius: 11px; + opacity: 1; +} +.jimu-title-panel>.jimu-container{ + position: absolute; + left: 0; + top: 35px; + right: 0; + bottom: 0; +} + +/********** styles for dockable panel***********/ +.jimu-dockable-panel{ + background-color: rgba(0, 0, 0, 0.8); + overflow: visible; +} +.jimu-dockable-panel>.jimu-container{ + width: 100%; + height: 100%; + position: relative; +} +.jimu-dockable-panel>.bar{ + background-position: center center; + background-repeat: no-repeat; + cursor: pointer; +} +.jimu-dockable-panel>.bar.max{ + background-color: rgba(0, 0, 0, 0.8); +} +.jimu-dockable-panel>.bar.min{ + background-color: rgba(0, 0, 0, 0.6); +} +.jimu-dockable-panel>.bar.min:hover{ + background-color: rgba(0, 0, 0, 0.8); +} + +.jimu-dockable-panel>.nav{ + width: 25px; + height: 25px; + background-position: center center; + background-repeat: no-repeat; + cursor: pointer; +} \ No newline at end of file diff --git a/theme/templates/_config.json b/theme/templates/_config.json new file mode 100644 index 0000000..19393ae --- /dev/null +++ b/theme/templates/_config.json @@ -0,0 +1,110 @@ +{ + "widgetOnScreen": { + "panel": { + "uri": "themes/<%= themeNameClean %>/panels/TitlePanel/Panel" + }, + "widgets": [{ + "uri": "themes/<%= themeNameClean %>/widgets/HeaderController/Widget", + "positionRelativeTo": "browser", + "position": { + "left": 0, + "top": 0, + "right": 0, + "height": 40 + } + },{ + "label": "Scalebar", + "uri": "widgets/Scalebar/Widget", + "position": { + "left": 25, + "bottom": 25 + } + }, { + "uri": "widgets/Geocoder/Widget", + "position": { + "left": 45, + "top": 5 + } + }, { + "label": "Coordinate", + "uri": "widgets/Coordinate/Widget", + "position": { + "left": 200, + "bottom": 20 + } + },{ + "position": { + "left": 55, + "top": 45, + "width": 400, + "height": 410 + } + }, { + "position": { + "left": 105, + "top": 45, + "width": 380, + "height": 410 + } + }, { + "position": { + "left": 155, + "top": 45, + "width": 380, + "height": 410 + } + },{ + "label": "Overview Map", + "uri": "widgets/OverviewMap/Widget", + "position": { + "right": 0, + "top": 0 + } + }, { + "uri": "widgets/HomeButton/Widget", + "inPanel": false, + "position": { + "left": 7, + "top": 75 + } + }, { + "uri": "widgets/MyLocation/Widget", + "inPanel": false, + "position": { + "left": 7, + "top": 110 + } + }, { + "uri": "widgets/AttributeTable/Widget" + }] + }, + + "map": { + "position": { + "left": 0, + "top": 40, + "right": 0, + "bottom": 0 + } + }, + + "widgetPool": { + "panel": { + "uri": "themes/<%= themeNameClean %>/panels/FoldablePanel/Panel", + "positionRelativeTo": "map", + "position": { + "top": 5, + "right": 5, + "bottom": 5 + } + }, + + "widgets": [{ + "label": "Legend", + "uri": "widgets/Legend/Widget" + }, { + "label": "Layer List", + "uri": "widgets/LayerList/Widget" + }] + } +} diff --git a/theme/templates/_images/cancel.png b/theme/templates/_images/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..48a3d2aa0e5abe2993897dc1bbb4ef3c72009b9d GIT binary patch literal 1048 zcmaJ=O-K}B7#@sll_WC4lCWV6DQ#zVcHO^eH`|@r%`Hc^b-~3BInI2#gU)=@%xAk= zhpY~Uh7m|eL6;6iP(d96$q0fdycXCcqn}Gs9U_Ge_RZ?99omMO`F?nw=Y7BTeZI@d z&Z9Ne_0iYqT>hj}FQ~g=#xYhVmR1&;XLiyf&m;Ts}+{bU8e?w;75oK+s^AT1zS;CP^Ne zfb`NHr|e=`(&wYuRvOWLoY%*>{p9*X;b^AP&!vR;dMvyOQ(1%z zj$v}S9G&yf&>UdcU@&NFxZO^Sa9SfelJZX7YAh-Uz>-bXKq}NpTT$wR!zfJQOxKQ} z86{cWS}zkW7?YO_hNWHhk%~Z3{6AFFN@xqEz(&6R6t>bM24GUag2Sea8`s}xhcYBRpEl}sNWNC z3BG_o&ayF2G~)5_{#Yy?ar10E;wf?kC=Y8uM@6o(!Ht#W+E&mE99aOSdIl(Q6KZ7P z$eda}muOkNb*@rA7rrc)!O1XoWB+P&aSOZ0o|bHj7bW8Z9lPDcwq8B?umN9*$%GI| z=ilA#iqxJb9iJATufC~!G_!Jj>dvObhmPR*%>2?=Z@0O9+)?}G($&R%55~Su{N$S& z(93>D;I6ea|8c72DZgWJ&%|7^WsyH}@6?ve>zikfKk@doHdUf4NtU=qlmzFem6RtIr7}3CV?t&ImgtgbETyrvXj zwE5wlxo=bwGK_7ev^O-(4CX!~u!Lh)Ia_bJ=`7LRS1MQS{I~C(zLmkRM;T`y>|eV( tbxHKImuXC&yV95J8U}fi7AzZCsS>Jin={r978H@t(g?abwGim&3D)JTW70oedgP+drRK7TOvN2 z%w{As{;dC#k$1bFl|jiS@IBA{MHiDTWl}XNr}5`=F4^+ zldRxK;^=Y{i%Q_W^1|Kt3XnQ;q1$OeuBUt8p4V%Obi3_-)VA&0?0VYpi_FUd2kmE{ f-5@=kftf)e!};9iwrRmYXEAuX`njxgN@xNAR0>+{ literal 0 HcmV?d00001 diff --git a/theme/templates/_images/icon.png b/theme/templates/_images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..aee5cbdf4ac3c149a94241877305487ac4ef63aa GIT binary patch literal 9579 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 J+rNIC`#=14=5+u7 literal 0 HcmV?d00001 diff --git a/theme/templates/_layouts/default/icon.png b/theme/templates/_layouts/default/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1b89cdf20b3aaefad9a685a492fe85d54319cb20 GIT binary patch literal 1123 zcmaJ=T}%{L6rLhATMS7}j4hJjI41t2?#|544lon8I6phM#>I8n1e!qOFmr(sXYO?7 z!Y+hFr6nzC6BCVZYT`>@YLJH-iGW((Ow>Ta10{W_BsGPq#28FT+Vsw{i#|{%nRCxQ zIo~w%f3$bt*% zjZ+(>+EQs!fgT|F2p={WHb&M75te6T_3RNc%CH>Ga5T$>*{H|}BFmG-kHXnJvrEjV zS}_;C#i<^IT#=@8xm+a2MWEMBvw|SdOq7mB!`LJ24>(BAhaG=^DS`@o!?RpuL5BYcC;#VO2mqXgScr8WaQez8%wWprM5X*R;pwjI<}@b*y#yrr?Fx1Sww0i6Lp?DGsf zkFNbCFz(&^69tZ#ji^GS&jt=ks&NWiBBo`En#K#Uge*&3oy@WcPLO4_UezRCO)!bt zC|klN9UtkA0ZLfwEmnFjR#ZHoBj{xzJX@Mxx(6cY_du6a6!K83<(M$%9}YTOBnmvM zADEg4ZL-iB(b^)tQZGv^&uN09sRimvttx38BjDL7QjDRBSaXZAH?T40f3Y+sLkDwx zXU-)PUY(}9R*4<@T8 zMw)&+)x=IDM!xy_cWuYq?3>F6Zr{20^UQ^1Z~B@XvK!YVe|ddwe)UrIqs2X6);x8V zs&5{+zcjOQqyM{CWuetO_CJlx*wl;iyEEtdM}8V!tKrt3^IgwB8`^tiss3aKy?b?h z_BTbf&R@LsH)l*QeDdd#yfQXUl$D3l#0O>Nht6ZU>nN5LB$gk3yeZ2", + "label": "<%= themeName %>", + "panels": [ + { + "name": "FoldablePanel", + "description": "This is foldable panel" + }, + { + "name": "SimplePanel", + "description": "this is simple panel" + } + ], + "styles": [ + { + "name": "default", + "description": "this is default style", + "styleColor": "#596679" + }, + { + "name": "black", + "description": "this is black style", + "styleColor": "#000000" + }, + { + "name": "green", + "description": "this is green style", + "styleColor": "#2aaa8a" + }, + { + "name": "cyan", + "description": "this is cyan style", + "styleColor": "#b1d3d4" + } + ], + "layouts": [ + { + "name": "default", + "description": "this is default layout" + } + ], + "widgets": [ + { + "name": "HeaderController", + "description": "this is theme widget controller" + } + ], + "version": "0.0.1", + "author": "<=% author %>", + "description": "<=% desc %>", + "copyright": "", + "license": "http://www.apache.org/licenses/LICENSE-2.0" +} diff --git a/theme/templates/_package.json b/theme/templates/_package.json new file mode 100644 index 0000000..fba8e01 --- /dev/null +++ b/theme/templates/_package.json @@ -0,0 +1,5 @@ +{ + "name": "package", + "version": "0.0.0", + "dependencies": {} +} diff --git a/theme/templates/_panels/DockablePanel/Panel.html b/theme/templates/_panels/DockablePanel/Panel.html new file mode 100644 index 0000000..38da81e --- /dev/null +++ b/theme/templates/_panels/DockablePanel/Panel.html @@ -0,0 +1,6 @@ +
+
+
+ + +
\ No newline at end of file diff --git a/theme/templates/_panels/DockablePanel/Panel.js b/theme/templates/_panels/DockablePanel/Panel.js new file mode 100644 index 0000000..fe01637 --- /dev/null +++ b/theme/templates/_panels/DockablePanel/Panel.js @@ -0,0 +1,462 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define(['dojo/_base/declare', + 'dojo/_base/lang', + 'dojo/_base/html', + 'dojo/_base/array', + 'dojo/_base/fx', + 'dojo/on', + 'dojo/topic', + 'dijit/_TemplatedMixin', + 'dojo/text!./Panel.html', + 'jimu/BaseWidgetPanel', + 'jimu/dijit/IFramePane', + 'jimu/dijit/LoadingIndicator', + 'require' +], +function(declare, lang, html, array, baseFx, on, topic, _TemplatedMixin, template, BaseWidgetPanel, IFramePane, + LoadingIndicator, require) { + + return declare([BaseWidgetPanel, _TemplatedMixin], { + baseClass: 'jimu-widget-panel jimu-dockable-panel', + + templateString: template, + + //displayNumber: number + // the max number of widgets that the panel display at the same time. + // Each widget will occupy 1/displayNumber of the panel widget/height. + // If the widgets count is larger then this number, there will be a navigation bar displayed to scroll the widget. + displayNumber: 3, + + //firstIndex: number + // the first displayed widget index + firstIndex: 0, + + //region: String + // can be: left, right, bottom, top. + region: '', + + //resizeMap: Boolean + // if true, when resize the panel, the panel will resize map to make sure the panel will not override the map. + // Please note that when the panel resize the map, make sure that there is no other element between the panel and the map + resizeMap: true, + + _barSize: 30, + _margin: 15, + _navSize: 25, + _padding: 15, + + postCreate: function(){ + if(this.map.usePlugin){ + this.iframePane = new IFramePane({ + r: 8, + position: this.position + }); + html.place(this.iframePane.domNode, this.containerId); + } + }, + + startup: function(){ + if(this.iframePane){ + this.iframePane.startup(); + } + this.loadDisplayWidgets(); + this._setPanelPadding(); + this._setBarPosition(); + this._setNavPosition(); + this.resize(); + this._switchNavStatus(); + this.panelManager.normalizePanel(this); + }, + + resize: function(){ + this._setFrameSize(); + if(this.iframePane){ + this.iframePane.resize(); + } + }, + + _setFrameSize: function(){ + var count = Math.min(this.displayNumber, this._getConfigs().length); + if(count === 0){ + return; + } + var dim = {}, box = html.getContentBox(this.containerNode); + if(this.region === 'left' || this.region === 'right'){ + dim.width = '100%'; + dim.height = (box.h - count * this._margin) / count + 'px'; + dim.marginTop = this._margin + 'px'; + }else if(this.region === 'top' || this.region === 'bottom'){ + dim.height = '100%'; + dim.width = (box.w - count * this._margin) / count + 'px'; + dim.marginLeft = this._margin + 'px'; + } + + this.getChildren().forEach(lang.hitch(this, function(frame){ + html.setStyle(frame.domNode, dim); + frame.resize(); + })); + }, + + loadDisplayWidgets: function(){ + var configs = this._getConfigs(); + + function onWidgetLoaded(frame, loading, widget){ + loading.destroy(); + frame.setWidget(widget); + widget.startup(); + // if(widgetConfig.defaultState){ + // this.widgetManager.changeWindowStateTo(widget, widgetConfig.defaultState); + // } + } + + var endIndex = this._getEndIndex(); + for(var i = this.firstIndex; i < endIndex; i++){ + var widgetConfig = configs[i]; + var frame, loading; + + if(this.widgetManager.getWidgetById(widgetConfig.id)){ + continue; + } + loading = new LoadingIndicator(); + frame = this.createFrame(widgetConfig); + this.addChild(frame); + html.place(loading.domNode, frame.containerNode); + + this.widgetManager.loadWidget(widgetConfig).then(lang.hitch(this, onWidgetLoaded, frame, loading)); + } + this._setFrameFloat(); + this._setFrameSize(); + }, + + onNormalize: function(){ + html.addClass(this.barNode, 'max'); + html.removeClass(this.barNode, 'min'); + + this._setBarPosition(); + + if(this.region === 'left'){ + html.setStyle(this.barNode, { + backgroundImage: 'url(' + require.toUrl('.') + '/images/bar_left.png)' + }); + html.setStyle(this.domNode, { + left: 0, + width: this.position.width + 'px' + }); + + html.setStyle(this.barNode, { + borderTopLeftRadius: 0, + borderTopRightRadius: '4px', + borderBottomLeftRadius: 0, + borderBottomRightRadius: '4px' + }); + + }else if(this.region === 'right'){ + html.setStyle(this.barNode, { + backgroundImage: 'url(' + require.toUrl('.') + '/images/bar_right.png)' + }); + html.setStyle(this.domNode, { + right: 0, + width: this.position.width + 'px' + }); + + html.setStyle(this.barNode, { + borderTopLeftRadius: '4px', + borderTopRightRadius: 0, + borderBottomLeftRadius: '4px', + borderBottomRightRadius: 0 + }); + }else if(this.region === 'top'){ + html.setStyle(this.barNode, { + backgroundImage: 'url(' + require.toUrl('.') + '/images/bar_up.png)' + }); + html.setStyle(this.domNode, { + top: 0, + height: this.position.height + 'px' + }); + + html.setStyle(this.barNode, { + borderTopLeftRadius: 0, + borderTopRightRadius: 0, + borderBottomLeftRadius: '4px', + borderBottomRightRadius: '4px' + }); + }else if(this.region === 'bottom'){ + html.setStyle(this.barNode, { + backgroundImage: 'url(' + require.toUrl('.') + '/images/bar_down.png)' + }); + html.setStyle(this.domNode, { + bottom: 0, + height: this.position.height + 'px' + }); + + html.setStyle(this.barNode, { + borderTopLeftRadius: '4px', + borderTopRightRadius: '4px', + borderBottomLeftRadius: 0, + borderBottomRightRadius: 0 + }); + } + this.inherited(arguments); + }, + + onMinimize: function(){ + html.setStyle(this.barNode, { + borderTopLeftRadius: '4px', + borderTopRightRadius: '4px', + borderBottomLeftRadius: '4px', + borderBottomRightRadius: '4px' + }); + + html.removeClass(this.barNode, 'max'); + html.addClass(this.barNode, 'min'); + this._setBarPosition(); + + //on minimize, we can't set width/height = 0 to minimize because we use border-box model + //and the content height/width can't be nagative + //go here for more information: http://dev.w3.org/csswg/css-ui/#box-sizing + if(this.region === 'left'){ + html.setStyle(this.barNode, { + backgroundImage: 'url(' + require.toUrl('.') + '/images/bar_right.png)' + }); + html.setStyle(this.domNode, { + left: (0 - this.position.width) + 'px', + right: 'auto' + }); + }else if(this.region === 'right'){ + html.setStyle(this.barNode, { + backgroundImage: 'url(' + require.toUrl('.') + '/images/bar_left.png)' + }); + html.setStyle(this.domNode, { + right: (0 - this.position.width) + 'px', + left: 'auto' + }); + }else if(this.region === 'top'){ + html.setStyle(this.barNode, { + backgroundImage: 'url(' + require.toUrl('.') + '/images/bar_down.png)' + }); + html.setStyle(this.domNode, { + top: (0 - this.position.height) + 'px', + bottom: 'auto' + }); + }else if(this.region === 'bottom'){ + html.setStyle(this.barNode, { + backgroundImage: 'url(' + require.toUrl('.') + '/images/bar_up.png)' + }); + html.setStyle(this.domNode, { + bottom: (0 - this.position.height) + 'px', + top: 'auto' + }); + } + this.inherited(arguments); + }, + + scrollWidget: function(){ + var endIndex = this._getEndIndex(); + this.getChildren().forEach(lang.hitch(this, function(frame, i){ + if(i >= this.firstIndex && i < endIndex){ + html.setStyle(frame.domNode, 'display', ''); + }else{ + html.setStyle(frame.domNode, 'display', 'none'); + } + })); + }, + + _onBarClick: function(){ + var mapPosition = {}; + if(this.windowState === 'normal'){ + this.panelManager.minimizePanel(this); + + if(this.resizeMap){ + if(this.region === 'left'){ + mapPosition.left = 0; + }else if(this.region === 'right'){ + mapPosition.right = 0; + }else if(this.region === 'top'){ + mapPosition.top = 0; + }else if(this.region === 'bottom'){ + mapPosition.bottom = 0; + } + + topic.publish('changeMapPosition', mapPosition); + } + + }else{ + this.panelManager.normalizePanel(this); + + if(this.resizeMap){ + if(this.region === 'left'){ + mapPosition.left = this.position.width; + }else if(this.region === 'right'){ + mapPosition.right = this.position.width; + }else if(this.region === 'top'){ + mapPosition.top = this.position.height; + }else if(this.region === 'bottom'){ + mapPosition.bottom = this.position.height; + } + topic.publish('changeMapPosition', mapPosition); + } + } + }, + + _onPreClick: function(){ + if(this.firstIndex === 0){ + return; + } + this.firstIndex = this.firstIndex - 1; + this.loadDisplayWidgets(); + this.scrollWidget(); + this._switchNavStatus(); + }, + + _onNextClick: function(){ + if(this.firstIndex + this.displayNumber >= this._getConfigs().length){ + return; + } + this.firstIndex = this.firstIndex + 1; + this.loadDisplayWidgets(); + this.scrollWidget(); + this._switchNavStatus(); + }, + + _switchNavStatus: function(){ + if(this.firstIndex === 0){ + html.setStyle(this.preNode, 'opacity', '0.4'); + }else{ + html.setStyle(this.preNode, 'opacity', '1'); + } + + if(this.firstIndex + this.displayNumber >= this._getConfigs().length){ + html.setStyle(this.nextNode, 'opacity', '0.4'); + }else{ + html.setStyle(this.nextNode, 'opacity', '1'); + } + }, + + _getEndIndex: function(){ + var configs = this._getConfigs(); + var endIndex = Math.min(this.firstIndex + this.displayNumber, configs.length); + return endIndex; + }, + + _setBarPosition: function(){ + html.setStyle(this.barNode, { + position: 'absolute', + width: this._barSize + 'px', + height: this._barSize + 'px' + }); + + var pos = this.windowState === 'normal'? (0 - this._barSize) + 'px': (0 - this._barSize - 2) + 'px'; + if(this.region === 'left'){ + html.setStyle(this.barNode, { + top: '10px', + right: pos + }); + }else if(this.region === 'right'){ + html.setStyle(this.barNode, { + top: '10px', + left: pos + }); + }else if(this.region === 'top'){ + html.setStyle(this.barNode, { + left: '10px', + bottom: pos + }); + }else if(this.region === 'bottom'){ + html.setStyle(this.barNode, { + left: '10px', + top: pos + }); + } + }, + + _setNavPosition: function(){ + var box = html.getMarginBox(this.domNode); + + html.setStyle(this.preNode, { + position: 'absolute' + }); + html.setStyle(this.nextNode, { + position: 'absolute' + }); + + if(this.region === 'left' || this.region === 'right'){ + html.setStyle(this.preNode, { + top: '10px', + left: (box.w / 2) + 'px', + backgroundImage: 'url(' + require.toUrl('.') + '/images/nav_up.png)' + }); + + html.setStyle(this.nextNode, { + bottom: '10px', + left: (box.w / 2) + 'px', + backgroundImage: 'url(' + require.toUrl('.') + '/images/nav_down.png)' + }); + }else if(this.region === 'top' || this.region === 'bottom'){ + html.setStyle(this.preNode, { + left: '10px', + top: (box.h / 2) + 'px', + backgroundImage: 'url(' + require.toUrl('.') + '/images/nav_left.png)' + }); + + html.setStyle(this.nextNode, { + right: '10px', + top: (box.h / 2) + 'px', + backgroundImage: 'url(' + require.toUrl('.') + '/images/nav_right.png)' + }); + } + }, + + _setFrameFloat: function(){ + if(this.region === 'top' || this.region === 'bottom'){ + this.getChildren().forEach(function(frame){ + html.setStyle(frame.domNode, 'float', 'left'); + }); + } + }, + + _setPanelPadding: function(){ + if(this.region === 'left' || this.region === 'right'){ + //padding top is less then padding bottom, because the first element has margin + html.setStyle(this.domNode, { + paddingTop: (this._navSize + this._padding - this._margin) + 'px', + paddingRight: this._padding + 'px', + paddingBottom: (this._navSize + this._padding) + 'px', + paddingLeft: this._padding + 'px' + }); + }else if(this.region === 'top' || this.region === 'bottom'){ + html.setStyle(this.domNode, { + paddingTop: this._padding + 'px', + paddingRight: (this._navSize + this._padding) + 'px', + paddingBottom: this._padding + 'px', + paddingLeft: (this._navSize + this._padding - this._margin) + 'px' + }); + } + }, + + _getConfigs: function(){ + var configs = []; + if(Array.isArray(this.config.widgets)){ + //it's group + configs = this.config.widgets; + }else{ + configs = [this.config]; + } + return configs; + } + }); +}); \ No newline at end of file diff --git a/theme/templates/_panels/DockablePanel/images/bar_down.png b/theme/templates/_panels/DockablePanel/images/bar_down.png new file mode 100644 index 0000000000000000000000000000000000000000..026949e977733249b9b6854a3626d15aeea69cfc GIT binary patch literal 987 zcmaJ=&ui0Q7!DLv8+|ec$R!)V`s?!VCu^u8O~w7forIVV=IJI$wBK77@pOFRcJY#n+I@#qB68w zZ{UV`MYfU0SSf}{ynwJNYGE-6EPDfDunt?Uuh73ge4>HtDD;|O=FLEbZFjjF!diEw zZg)3q$)Oi7frUgS0v^N`NW4uyk`smQ>B?lDZnHG#LGXq`pCr{VD?mjd1Omh7>^#Q- zQDnHHAd1`^DCD^Un%EryRkYU87FKAI>B$kiU?}TH{W6h)v56J1 z9FtFvGyt0B|Dm2YL`S#^PxJk!a8&OEkgdW9ZG|>zTyr)J707A`EsVlCLYspsR@w-o zsEq=k)^To2j38EmVC5_{BUecwqR?zi% zRpfb*mj+x7*;^j;@qp``a>bF{)CyieB5N>oZ$YOVA`kSAEW4v~;YaHAxz6ZZiX*u! zNrp`u`&Xj}Tf{x-bZA?$7#bh?#O)!m_1@g|+vG~D8d|BI{CNE2YL)_H>d~(|N7t&A zXD?@Jc(t^%J*|$v3)t4Z+#m3De7Ao0E%Sn!`8K(~|M}JKLo3>TddN&3#BZi|mcF;9 b_NWZ?ATu@b^Zm!?>2)*o747xq8~2X^(&sg; literal 0 HcmV?d00001 diff --git a/theme/templates/_panels/DockablePanel/images/bar_left.png b/theme/templates/_panels/DockablePanel/images/bar_left.png new file mode 100644 index 0000000000000000000000000000000000000000..47544763efa8c0a0648f7a827c306daae1cfc2bd GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^96-#+!3HFS!eXZZDb50q$YKTtxkDh#n0KMn4k#Gl z>EaktF{gHdCm(|$$6=no|0iodGnyJSt!S&KfS4eUaKle#CKvUL6we(B4f_{x>DnA( z@piSIx9wE0-yx06qh3Kf4+dSD*SF_Y$PN1#rJL+qmI=x#M4WX8nyp+F5>euupIeZa ySINLoF{fC^i|?GjcHo5*9%sDQpE{v`m4(4Jk*#BcsKhp)at2RVKbLh*2~7Z2jY35L literal 0 HcmV?d00001 diff --git a/theme/templates/_panels/DockablePanel/images/bar_right.png b/theme/templates/_panels/DockablePanel/images/bar_right.png new file mode 100644 index 0000000000000000000000000000000000000000..623b9e13c55880830db173d8a26414543fc62463 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^96-#+!3HFS!eXZZDb50q$YKTtxkDh#n0KMn4k+mD z>EaktF{kw0L0$$04wi$h|EiDmtEtP>8Qi=m5Xu_hkl=T(;|$}Mrw*0RyMo?{X>M52 z+$gib`_)C&#m)NPV7R$JK+@g9jRk0|a#ct~iF1B#L1JDd14G4} tVjVBObN!3HEx3Z6Ryq&N#aB8wRq%ym`h7pCV~*miKR7dG$GcopG**S9gWD&`u+61E8tORUr{2&iT0oiFuU_3>9;V sb-eh_`D+JWIN@=|d;O^s`d3*PY!lf!Hi$}W11e|mboFyt=akR{0Ff&|rvLx| literal 0 HcmV?d00001 diff --git a/theme/templates/_panels/DockablePanel/images/nav_down.png b/theme/templates/_panels/DockablePanel/images/nav_down.png new file mode 100644 index 0000000000000000000000000000000000000000..f277ba88d32670dba19d036341d56da52391ae8a GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^5?b(^(ivn`CrWG+b95enNYAU$r&K2tqF28ng9qpcIJdrt^ zUG})slj(bRCwxn|+Sz74jro+k*aQa`>Gz>_z6W=^PV_LD_VQyUquq(?22J4?6bdfg z^2~cg|ls@WKg?Gv4b@ozTC^!eE=o*0DiUVjEC7gQu&X%Q~loCIH}L Bc5?s# literal 0 HcmV?d00001 diff --git a/theme/templates/_panels/DockablePanel/images/nav_left.png b/theme/templates/_panels/DockablePanel/images/nav_left.png new file mode 100644 index 0000000000000000000000000000000000000000..c17c0c0d38be954f2d3d40d13879f9ebb383b6aa GIT binary patch literal 367 zcmV-#0g(QQP)|!J+}5J1|AU1V%0qBjhPXxbV;&-m5MzVyKgyP zwr=Kpr%*2E0~}+KUH6Wa?}4+`+0$5xwU)4I`)nCq4kCbfy?xo&aK6vE1`EFSTj5HW zOB$yv#-`*qm#|NA(6}feL2dm6JL)xvUT+8BWA?Q^kie1mnC9FF7Li3DK>q^(`eYrI zPAzo+001L;R9JLFZ*6d4Zg~Izc${-AN)FCXD^bwMNX$#G%E&L(1OPo@28gf~7`6Za N002ovPDHLkV1n)~mWBWT literal 0 HcmV?d00001 diff --git a/theme/templates/_panels/DockablePanel/images/nav_right.png b/theme/templates/_panels/DockablePanel/images/nav_right.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa1bfaa3b70a233ad457d1d52eaafa47d733f29 GIT binary patch literal 1035 zcmaJ=&ui0Q7!K2oF*k*YL$}LkhUj$7k9KWsY__#cYm0W4wy+)qmnPrZ&?R3?zOCs7 zibD`VFET-xKMo3t2R+EVc-ZtJ!Y+E$lYf8{!HXd3m#*zRSVNNU2ha1o@AtmXcRe$8 zy02%jhoY#yR8q>4aUb~(c6X8gk?_ z6t#=i@&#N-pA{6OGqQ_e9Ni>riV9CSrmR#T21QuX43Yl&YMlm}D$>*bG?zAGu&gB) zEtp%J$}5W%C8W|5;~?w^L_mjF297>w*n%U{bzOnX-EEczbqKDA^mbB(bOywb1%aRO zc@&Q4K_I~JWBx#Z9|c~H_p%&$10H@%@CO8M5Huc|M6=XcAuA;svB*lK%NUyi%T}vZ zrs`vmRbu&2DCBB*y&i(_*fj&oj>oWvn+g)N6-zU*h78~;%0)DfMVe%~eFWWX$r^T} zOr&6}BbzMGaPE(IbWuDZjO+Hzeh=q8CQK}%bJYQjP~s2^F-+UF8! ztJmPF?Q@B?<+3Ch)@|%xjc#rc_qfxRZONi#d}t82Tg28MM%N?cN?cA!k-YQq(aNWu z4X!&@`StsOuWP9HTmQXtFP-fB{^8nvXaA|<#+7mO`N^H*ch^#DUv5+5KMK@VxPQ_- zx(AG`?9OaHJTUpA1p<6e& i7l&7Wa;wYL^Buj^b8*lE&Ww_aOHrx#l=Lh*v-}4t-$$bW literal 0 HcmV?d00001 diff --git a/theme/templates/_panels/DockablePanel/images/nav_up.png b/theme/templates/_panels/DockablePanel/images/nav_up.png new file mode 100644 index 0000000000000000000000000000000000000000..24790942a26bef9bcfb12b9f7fd453220b3ff9df GIT binary patch literal 409 zcmV;K0cQS*P)rLSz{T0V7hBX*bLjaYx#6d=H@+ZZL&HR^U5`Af zx}Ja3_o^ZXJCM|IbU0DQ_}bZ%mHc9y)`Otxe>(?_(0a5wwJjD^|MDO7l%J^+Ww09e zg4}HpL?rAG7$UVKqUvT!`k#m!;~Vlxi4rAc!{EN#gnV~6a_l(1sJ)4lJIdqf`~v*Z zX?&#A*rVMj9HZBh(QZ*wGU_`~?-UE*g)G#`8{B$Pj;!MO2Q&m#Ax84e9{>OVBYIR= zbVF}#aA9tF004NLb1X^@&QB{*(8x&4ORvhvFVzG9Jz)ljuoW1#00000NkvXXu0mjf D;4!vP literal 0 HcmV?d00001 diff --git a/theme/templates/_panels/FoldablePanel/FoldableDijit.js b/theme/templates/_panels/FoldablePanel/FoldableDijit.js new file mode 100644 index 0000000..8f54654 --- /dev/null +++ b/theme/templates/_panels/FoldablePanel/FoldableDijit.js @@ -0,0 +1,65 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define(['dojo/_base/declare', + 'dojo/_base/lang', + 'dojo/_base/html', + 'dojo/on', + 'dijit/_WidgetBase', + 'dijit/_TemplatedMixin' +], +function(declare, lang, html, on, _WidgetBase, _TemplatedMixin) { + //by default, the dijit will be displayed at 100px height, 100% width. + //width height can be customized, value can be px or % + return declare([_WidgetBase, _TemplatedMixin], { + baseClass: 'jimu-foldable-dijit', + width: '100%', + titleHeight: 20, + content: null,//content is a dijit + folded: false, + templateString: '
' + + '
' + + '
'+ '
'+ + '
'+ + '
', + + startup: function(){ + this.inherited(arguments); + this.bindEvent(); + + html.setStyle(this.titleNode, { + width: this.width, + height: this.titleHeight + 'px' + }); + html.setStyle(this.containerNode, { + top: this.titleHeight + 'px' + }); + + if(this.label){ + this.setTitleLabel(this.label); + } + }, + + bindEvent: function(){ + on(this.titleNode, 'click', lang.hitch(this, this.onTitleClick)); + }, + + setTitleLabel: function(label){ + this.label = label; + this.titleLabelNode.innerHTML = label; + } + }); +}); \ No newline at end of file diff --git a/theme/templates/_panels/FoldablePanel/FoldableWidgetFrame.js b/theme/templates/_panels/FoldablePanel/FoldableWidgetFrame.js new file mode 100644 index 0000000..3a7bd26 --- /dev/null +++ b/theme/templates/_panels/FoldablePanel/FoldableWidgetFrame.js @@ -0,0 +1,75 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define(['dojo/_base/declare', + 'dojo/_base/lang', + 'dojo/_base/html', + 'jimu/BaseWidgetFrame', + './FoldableDijit'], + function(declare, lang, html, BaseWidgetFrame, FoldableDijit){ + return declare([BaseWidgetFrame, FoldableDijit], { + baseClass: 'jimu-widget-frame jimu-foldable-dijit foldable-widget-frame', + + postCreate: function(){ + this.inherited(arguments); + this.titleHeight = 30; + this.createFoldBtn(); + this.foldEnable = true; + }, + + startup: function(){ + this.inherited(arguments); + this.setTitleLabel(this.label); + }, + + setWidget: function(){ + this.inherited(arguments); + this.setTitleLabel(this.widget.label); + }, + + onTitleClick: function(){ + if(!this.foldEnable){ + return; + } + if(this.folded){ + this.folded = false; + }else{ + this.folded = true; + } + this.onFoldStateChanged(); + }, + + createFoldBtn: function(){ + this.foldNode = html.create('div', { + 'class': 'fold-btn' + }, this.titleNode); + }, + + onFoldStateChanged: function(){ + if(this.folded){ + html.addClass(this.foldNode, 'folded'); + if(this.widget){ + this.widgetManager.minimizeWidget(this.widget); + } + }else{ + html.removeClass(this.foldNode, 'folded'); + if(this.widget){ + this.widgetManager.maximizeWidget(this.widget); + } + } + } + }); +}); \ No newline at end of file diff --git a/theme/templates/_panels/FoldablePanel/Panel.js b/theme/templates/_panels/FoldablePanel/Panel.js new file mode 100644 index 0000000..2f3cc6d --- /dev/null +++ b/theme/templates/_panels/FoldablePanel/Panel.js @@ -0,0 +1,357 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define(['dojo/_base/declare', + 'dojo/_base/lang', + 'dojo/_base/html', + 'dojo/_base/array', + 'dojo/_base/fx', + 'dojo/on', + 'dojo/aspect', + 'jimu/BaseWidgetPanel', + 'jimu/BaseWidgetFrame', + 'jimu/utils', + './FoldableDijit', + './FoldableWidgetFrame' + ], + function(declare, lang, html, array, baseFx, on, aspect, BaseWidgetPanel, BaseWidgetFrame, utils, FoldableDijit, FoldableWidgetFrame) { + var criticality = 360; + var currentLh = html.getMarginBox(jimuConfig.layoutId).h; // layout height + /* global jimuConfig */ + function isFullWindow() { + var layoutBox = html.getMarginBox(jimuConfig.layoutId); + if (layoutBox.w * 0.7 <= criticality) { + return true; + } else { + return false; + } + } + + function changedLh() { + var layoutBox = html.getMarginBox(jimuConfig.layoutId); + var changed = currentLh !== layoutBox.h; + currentLh = layoutBox.h; + return changed; + } + + function getPanelWidth() { + var layoutBox = html.getMarginBox(jimuConfig.layoutId); + if (layoutBox.w * 0.7 <= criticality) { + return '100%'; + } else { + return 360; + } + } + + function getHeaderHeight() { + return 35; + } + + return declare([BaseWidgetPanel, FoldableDijit], { + baseClass: 'jimu-widget-panel jimu-foldable-dijit jimu-foldable-panel', + + closeTolerance: 30, + + closeBtnHandle: null, + + startup: function() { + this.titleHeight = getHeaderHeight(); + this.isFull = null; + this.inherited(arguments); + this.createCloseBtn(); + this.resize(); + }, + + getFullPosition: function() { + var fullPos = {}, + pos = this.position; + fullPos.left = pos.left ? pos.left : 'auto'; + fullPos.right = pos.right ? pos.right : 'auto'; + fullPos.top = pos.top ? pos.top : 'auto'; + fullPos.bottom = pos.bottom ? pos.bottom : 'auto'; + fullPos.width = pos.width ? pos.width : 'auto'; + fullPos.height = pos.height ? pos.height : 'auto'; + + if (this.isFull) { + fullPos.right = 0; + fullPos.bottom = 0; + } + return fullPos; + }, + + changePosition: function() { + var pos; + + this.position.width = getPanelWidth(); + if (this.iframePane) { + this.iframePane.setPosition(this.position); + } + + if (this.isFull) { + html.place(this.domNode, jimuConfig.layoutId); + pos = { + left: 0, + right: 0, + top: 0, + bottom: 0, + width: 'auto', + height: 'auto' + }; + } else { + html.place(this.domNode, jimuConfig.mapId); + pos = { + left: this.position.left ? this.position.left : 'auto', + right: this.position.right ? this.position.right : 'auto', + top: this.position.top ? this.position.top : 'auto', + bottom: this.position.bottom ? this.position.bottom : 'auto', + width: this.position.width ? this.position.width : 'auto', + height: this.position.height ? this.position.height : 'auto' + }; + } + html.setStyle(this.domNode, utils.getPositionStyle(pos)); + utils.setVerticalCenter(this.titleNode); + this.setBorderRadius(); + this.moveTitle(); + }, + + setBorderRadius: function() { + var style; + if (this.isFull) { + style = { + borderTopLeftRadius: 0, + borderTopRightRadius: 0, + borderBottomLeftRadius: 0, + borderBottomRightRadius: 0 + }; + } else { + style = { + borderTopLeftRadius: '4px', + borderTopRightRadius: '4px', + borderBottomLeftRadius: '4px', + borderBottomRightRadius: '4px' + }; + } + html.setStyle(this.domNode, style); + }, + + _changePos: function() { + this.position.width = getPanelWidth(); + if (!isFullWindow()) { + this.position.left = 'auto'; + } + + this.position.height = 'auto'; + }, + + resize: function() { + this._changePos(); + + if (this.isFull !== isFullWindow() || changedLh()) { + this.isFull = isFullWindow(); + this.changePosition(); + } + html.setStyle(this.domNode, { + width: getPanelWidth() + 'px' + }); + + this.inherited(arguments); + if (this.getChildren().length > 1) { + this._setFrameSize(); + } + }, + + reloadWidget: function(widgetConfig) { + this.inherited(arguments); + if (!this.isWidgetInPanel(widgetConfig)) { + return; + } + if (!Array.isArray(this.config.widgets)) { + this.setTitleLabel(widgetConfig.label); + } + }, + + updateConfig: function(_config) { + this.inherited(arguments); + this.setTitleLabel(_config.label); + }, + + _setFrameSize: function() { + var h, box = html.getContentBox(this.containerNode), + openedPaneCount = 0; + + //openedPaneCount should >= 1 + array.forEach(this.getChildren(), function(frame) { + if (!frame.folded) { + openedPaneCount++; + } + }, this); + + h = (box.h - (this.getChildren().length - openedPaneCount) * this.getChildren()[0].titleHeight) / openedPaneCount; + console.log('box.h=' + box.h + ', h=' + h); + array.forEach(this.getChildren(), function(frame) { + if (frame.folded) { + html.setStyle(frame.domNode, { + height: frame.titleHeight + 'px' + }); + } else { + html.setStyle(frame.domNode, { + height: h + 'px' + }); + } + frame.resize(); + }, this); + }, + + createCloseBtn: function() { + if (this.isFull) { + this.closeNode = html.create('div', { + 'class': 'fold-btn jimu-vcenter' + }, this.titleNode); + } else { + this.closeNode = html.create('div', { + 'class': 'close-btn jimu-vcenter' + }, this.titleNode); + + this.closeBtnHandle = on(this.closeNode, 'click', lang.hitch(this, function(evt) { + evt.stopPropagation(); + this.panelManager.closePanel(this); + })); + } + utils.setVerticalCenter(this.titleNode); + }, + + + createFrame: function(widgetConfig) { + var frame; + if (this.config.widgets && this.config.widgets.length === 1 || !this.config.widgets) { + frame = new BaseWidgetFrame(); + } else { + frame = new FoldableWidgetFrame({ + label: widgetConfig.label, + widgetManager: this.widgetManager + }); + + aspect.after(frame, 'onFoldStateChanged', lang.hitch(this, function() { + var openedPaneCount = 0; + + this._setFrameSize(); + array.forEach(this.getChildren(), function(frame) { + if (!frame.folded) { + openedPaneCount++; + } + }, this); + + array.forEach(this.getChildren(), function(frame) { + if (!frame.folded && openedPaneCount === 1) { + frame.foldEnable = false; + } else { + frame.foldEnable = true; + } + }, this); + })); + } + + return frame; + }, + + createFullCloseTip: function() { + var node; + node = html.create('div', { + 'class': 'close-tip', + innerHTML: 'Close', + style: { + height: this.titleHeight + 'px', + lineHeight: this.titleHeight + 'px' + } + }, this.domNode); + return node; + }, + + onTitleClick: function() { + var ch; + if (this.folded) { + this.folded = false; + html.setStyle(this.domNode, utils.getPositionStyle(this.getFullPosition())); + + if (this.iframePane) { + html.setStyle(this.iframePane.domNode, utils.getPositionStyle(this.getFullPosition())); + this.iframePane.resize(); + } + + this.moveTitle(); + } else { + this.folded = true; + ch = 0; + html.setStyle(this.domNode, { + height: this.titleHeight + 'px' + }); + if (this.iframePane) { + html.setStyle(this.iframePane.domNode, { + height: this.titleHeight + 'px' + }); + this.iframePane.resize(); + } + this.moveTitle(); + } + + this.onFoldStateChanged(); + }, + + onOpen: function() { + this.inherited(arguments); + this._changePos(); + + this.isFull = isFullWindow(); + this.changePosition(); + + if (this.folded) { + this.onTitleClick(); + } + }, + + onFoldStateChanged: function() { + array.forEach(this.getChildren(), function(frame) { + var widget = frame.getWidget(); + if (!widget) { + return; + } + if (this.folded) { + this.widgetManager.minimizeWidget(widget); + } else { + this.widgetManager.maximizeWidget(widget); + } + }, this); + }, + + moveTitle: function() { + if (this.isFull) { + if (this.folded) { + html.setStyle(this.domNode, { + top: (html.getMarginBox(jimuConfig.layoutId).h - this.titleHeight) + 'px' + }); + } else { + html.setStyle(this.domNode, { + top: '0px' + }); + } + } else { + html.setStyle(this.domNode, { + top: this.position.top + 'px' + }); + } + } + }); + }); \ No newline at end of file diff --git a/theme/templates/_panels/SimpleBorderPanel/Panel.js b/theme/templates/_panels/SimpleBorderPanel/Panel.js new file mode 100644 index 0000000..9655f40 --- /dev/null +++ b/theme/templates/_panels/SimpleBorderPanel/Panel.js @@ -0,0 +1,25 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define(['dojo/_base/declare', + 'jimu/BaseWidgetPanel' +], +function(declare, BaseWidgetPanel) { + + return declare([BaseWidgetPanel], { + baseClass: 'jimu-widget-panel jimu-simple-panel' + }); +}); \ No newline at end of file diff --git a/theme/templates/_panels/TitlePanel/Panel.js b/theme/templates/_panels/TitlePanel/Panel.js new file mode 100644 index 0000000..e58c5d8 --- /dev/null +++ b/theme/templates/_panels/TitlePanel/Panel.js @@ -0,0 +1,222 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define(['dojo/_base/declare', + 'dojo/_base/lang', + 'dojo/_base/html', + 'dojo/_base/array', + 'dojo/on', + 'dojo/dnd/move', + 'dijit/_TemplatedMixin', + 'jimu/BaseWidgetPanel' + ], + function (declare, lang, html, array, on, Move, _TemplatedMixin, BaseWidgetPanel) { + /* global jimuConfig */ + return declare([BaseWidgetPanel, _TemplatedMixin], { + baseClass: 'jimu-widget-panel jimu-title-panel', + _originalBox: null, + widgetIcon: null, + + templateString: '
' + + '
' + + '
${label}
' + + '
' + + '
' + + '
' + + '
', + + _onTitleClicked: function () { + var posInfo = this._getPositionInfo(); + if (posInfo.isFull) { + var isShow = html.getStyle(this.containerNode, 'display') === 'block' ? true : false; + if (isShow) { + //hide container + html.setStyle(this.containerNode, 'display', 'none'); + html.setStyle(this.domNode, { + position: 'absolute', + top: 'auto', + bottom: 0, + left: 0, + right: 0, + height: 'auto' + }); + } else { + //show container + html.setStyle(this.containerNode, 'display', 'block'); + html.setStyle(this.domNode, { + position: 'absolute', + left: 0, + top: 0, + width: '100%', + height: '100%' + }); + } + } + }, + + _onCloseBtnClicked: function () { + html.setStyle(this.domNode, 'display', 'none'); + this.panelManager.closePanel(this); + }, + + startup: function () { + this.inherited(arguments); + this._originalBox = html.getMarginBox(this.domNode); + this.own(on(this.map, 'click', lang.hitch(this, function(){ + // this.panelManager.closePanel(this); + }))); + }, + + onOpen: function () { + html.style(this.domNode, 'display', 'none'); + this.resize(); + html.setStyle(this.domNode, 'display', 'block'); + this.inherited(arguments); + }, + + resize: function () { + this.closeNode.style.marginTop = '0px'; + var posInfo = this._getPositionInfo(); + if (posInfo.isFull) { + this._fullPosition(); + } + else { + this._normalPosition(posInfo.position); + } + this.inherited(arguments); + }, + + destroy: function () { + this.widgetIcon = null; + this.inherited(arguments); + }, + + _getPositionInfo: function () { + var result = { + isFull: false, + position: { + left: 0, + top: 0 + } + }; + var layoutBox = html.getMarginBox(jimuConfig.layoutId); + var widgetIconBox = html.getMarginBox(this.widgetIcon); + //judge width + var leftBlankWidth = widgetIconBox.l; + var rightBlankWidth = layoutBox.w - leftBlankWidth - widgetIconBox.w; + if (leftBlankWidth >= rightBlankWidth) { + if (leftBlankWidth >= this._originalBox.w) { + result.position.left = leftBlankWidth; + } + else { + result.isFull = true; + return result; + } + } + else{ + if(rightBlankWidth >= this._originalBox.w){ + result.position.left = leftBlankWidth; + } + else{ + result.isFull = true; + return result; + } + } + + //judge height + var topBlankHeight = widgetIconBox.t; + var bottomBlankHeight = layoutBox.h - topBlankHeight - widgetIconBox.h; + if(topBlankHeight >= bottomBlankHeight){ + if(topBlankHeight >= this._originalBox.h + 3){ + result.position.top = widgetIconBox.t - this._originalBox.h - 3; + } + else{ + result.isFull = true; + return result; + } + } + else{ + if(bottomBlankHeight >= this._originalBox.h + 3){ + result.position.top = widgetIconBox.t + widgetIconBox.h + 3; + } + else{ + result.isFull = true; + return result; + } + } + + return result; + }, + + _fullPosition: function () { + html.place(this.domNode, jimuConfig.layoutId); + var isShowContainer = html.getStyle(this.containerNode, 'display') === 'block'; + if (!isShowContainer) { + html.setStyle(this.containerNode, 'display', 'block'); + } + html.setStyle(this.domNode, { + left: 0, + width: '100%', + top: 0, + bottom: 0, + height: '100%' + }); + if (this.moveable) { + this.moveable.destroy(); + this.moveable = null; + } + }, + + _normalPosition: function (position) { + html.place(this.domNode, jimuConfig.mapId); + html.setStyle(this.containerNode, 'display', 'block'); + html.setStyle(this.domNode, { + left: position.left + 'px', + top: position.top + 'px', + width: this._originalBox.w + 'px', + height: this._originalBox.h + 'px' + }); + this._moveableNode(200, 100); + }, + + _moveableNode: function (width, tolerance) { + if (this.moveable) { + this.moveable.destroy(); + this.moveable = null; + } + var containerBox = html.getMarginBox(jimuConfig.layoutId); + containerBox.l = containerBox.l - width + tolerance; + containerBox.w = containerBox.w + 2 * (width - tolerance); + + this.moveable = new Move.boxConstrainedMoveable(this.domNode, { + box: containerBox, + handle: this.titleNode, + within: true + }); + this.own(on(this.moveable, 'Moving', lang.hitch(this, this.onMoving))); + this.own(on(this.moveable, 'MoveStop', lang.hitch(this, this.onMoveStop))); + }, + + onMoving: function (mover) { + html.setStyle(mover.node, 'opacity', 0.9); + }, + + onMoveStop: function (mover) { + html.setStyle(mover.node, 'opacity', 1); + } + + }); + }); \ No newline at end of file diff --git a/theme/templates/_styles/black/style.css b/theme/templates/_styles/black/style.css new file mode 100644 index 0000000..c5ab7d2 --- /dev/null +++ b/theme/templates/_styles/black/style.css @@ -0,0 +1,33 @@ +.jimu-main-bgcolor{ + background-color: black; +} +.jimu-btn{ + color: #fff; + + background: #66696c; /* Old browsers */ + background: -moz-linear-gradient(top, #66696c 0%, #5c5f62 100%); /* FF3.6+ */ + background: -webkit-linear-gradient(top, #66696c 0%,#5c5f62 100%); /* Chrome10+,Safari5.1+ */ + background: -ms-linear-gradient(top, #66696c 0%,#5c5f62 100%); /* IE10+ */ + background: linear-gradient(to bottom, #66696c 0%,#5c5f62 100%); /* W3C */ +} +.jimu-btn:hover{ + background: #494d51; /* Old browsers */ + background: -moz-linear-gradient(top, #494d51 0%, #363d3c 100%); /* FF3.6+ */ + background: -webkit-linear-gradient(top, #494d51 0%,#363d3c 100%); /* Chrome10+,Safari5.1+ */ + background: -ms-linear-gradient(top, #494d51 0%,#363d3c 100%); /* IE10+ */ + background: linear-gradient(to bottom, #494d51 0%,#363d3c 100%); /* W3C */ +} +.jimu-btn.jimu-state-disabled{ + background: #d9dde0; + color: #fff; + box-shadow: 0px 0px 0px 1px #d9dde0 inset; +} +.jimu-btn.jimu-state-disabled:hover{ + background: #d9dde0; /* Old browsers */ + color: #fff; +} + +.jimu-foldable-panel .title, .jimu-title-panel .title{ + color: white; + background-color: #000; +} \ No newline at end of file diff --git a/theme/templates/_styles/cyan/style.css b/theme/templates/_styles/cyan/style.css new file mode 100644 index 0000000..24a38fb --- /dev/null +++ b/theme/templates/_styles/cyan/style.css @@ -0,0 +1,9 @@ +.jimu-main-bgcolor{ + background-color: #b1d3d4; +} + +.jimu-foldable-panel .title, .jimu-title-panel .title{ + background-color: #e8e7e6; + color: #575656; +} + diff --git a/theme/templates/_styles/default/style.css b/theme/templates/_styles/default/style.css new file mode 100644 index 0000000..e69de29 diff --git a/theme/templates/_styles/green/style.css b/theme/templates/_styles/green/style.css new file mode 100644 index 0000000..92f9944 --- /dev/null +++ b/theme/templates/_styles/green/style.css @@ -0,0 +1,6 @@ +.jimu-main-bgcolor{ + background-color: #2aaa8a; +} +.jimu-foldable-panel .title, .jimu-title-panel .title{ + background-color: #23b692; +} diff --git a/theme/templates/_widgets/HeaderController/PopupTileNodes.js b/theme/templates/_widgets/HeaderController/PopupTileNodes.js new file mode 100644 index 0000000..e617c28 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/PopupTileNodes.js @@ -0,0 +1,222 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define([ + 'dojo/_base/declare', + 'dojo/_base/lang', + 'dojo/_base/html', + 'dojo/on', + 'dojo/dom-construct', + 'dojo/mouse', + 'dojo/query', + 'dijit/_WidgetBase', + 'dijit/_TemplatedMixin', + 'jimu/utils', + 'jimu/dijit/ViewStack' + ], + function(declare, lang, html, on, domConstruct, mouse, query, _WidgetBase, _TemplatedMixin, utils, ViewStack) { + //3*3 tile nodes, with a close button + return declare([_WidgetBase, _TemplatedMixin], { + baseClass: 'jimu-header-more-popup', + templateString: '
' + + '
', + margin: 4, + postCreate: function() { + this.nodes = []; + this.pages = []; + this.createCloseBtn(); + }, + + startup: function() { + this.viewStack = new ViewStack({ + views: [], + viewType: 'dom' + }, this.pagesNode); + this.viewStack.startup(); + this.createPages(); + if (this.viewStack.views.length > 0) { + this._selectPage(0); + } + this.resize(); + }, + + resize: function() { + var box; + box = html.getMarginBox(this.domNode); + this.nodeWidth = (box.w - this.margin * 2) / 3; + + this.nodes.forEach(lang.hitch(this, function(node, i) { + this.setItemNodePosition(node, i); + })); + }, + + setItemNodePosition: function(node, i) { + var ml, mt; + i++; + if (i % 3 === 1) { + ml = 0; + } else { + ml = 2; + } + + if (i <= 3) { + mt = 0; + } else { + mt = 2; + } + + var nodeStyle = {}; + if (typeof this.nodeWidth === "number") { + nodeStyle.width = this.nodeWidth + 'px'; + nodeStyle.height = this.nodeWidth + 'px'; + } + if (typeof ml === 'number') { + nodeStyle.marginLeft = ml + 'px'; + } + if (typeof mt === 'number') { + nodeStyle.marginTop = mt + 'px'; + } + html.setStyle(node, nodeStyle); + }, + + createPages: function() { + var count, pages, p, pageNode, pointNode; + count = this.items.length; + pages = Math.ceil(count / 9); + for (p = 0; p < pages; p++) { + pageNode = this.createPageNode(p); + this.createPageItems(p, pageNode); + this.viewStack.addView(pageNode); + if (pages > 1) { + pointNode = this.createPointNode(p); + on(pointNode, 'click', lang.hitch(this, this._onPageNodeClick, p)); + } + this.pages.push({ + pageNode: pageNode, + pointNode: pointNode + }); + } + }, + + _onPageNodeClick: function(p) { + this._selectPage(p); + }, + + _selectPage: function(p) { + if (this.pages.length > 1) { + query('.point', this.domNode).removeClass('point-selected'); + html.addClass(this.pages[p].pointNode, 'point-selected'); + } + this.viewStack.switchView(this.pages[p].pageNode); + }, + + createPageItems: function(page, pageNode) { + var count, i, b, e, empty; + count = this.items.length; + b = page * 9; + e = (page + 1) * 9; + empty = e - count; + for (i = b; i < Math.min(e, count); i++) { + this.createItemNode(i, pageNode); + } + for (i = count; i < count + empty; i++) { + this.createEmptyItemNode(i, pageNode); + } + }, + + createPageNode: function() { + var node; + node = domConstruct.create('div', { + 'class': 'page' + }); + return node; + }, + + createPointNode: function() { + var node; + node = domConstruct.create('div', { + 'class': 'point' + }, this.pointsNode); + return node; + }, + + createItemNode: function(i, pageNode) { + var node, item; + item = this.items[i]; + node = domConstruct.create('div', { + 'class': 'icon-node', + title: item.label, + settingId: item.id + }, pageNode); + domConstruct.create('img', { + 'src': item.icon + }, node); + domConstruct.create('div', { + 'class': 'node-label', + 'title': item.label, + 'innerHTML': item.label + }, node); + + node.config = item; + this.setItemNodePosition(node, i); + on(node, 'click', lang.hitch(this, function() { + this.onNodeClicked(node); + })); + + this.nodes.push(node); + }, + + createEmptyItemNode: function(i, pageNode) { + var node; + node = domConstruct.create('div', { + 'class': 'icon-node' + }, pageNode); + this.setItemNodePosition(node, i); + this.nodes.push(node); + return node; + }, + + createCloseBtn: function() { + var node; + node = domConstruct.create('div', { + 'class': 'close' + }, this.domNode); + domConstruct.create('div', { + 'class': 'close-inner' + }, node); + + on(node, 'click', lang.hitch(this, function() { + this.hide(); + })); + + return node; + }, + + hide: function() { + html.setStyle(this.domNode, 'display', 'none'); + }, + + show: function() { + html.setStyle(this.domNode, 'display', 'block'); + }, + + onNodeClicked: function(node) { + /* jshint unused: false*/ + this.hide(); + } + + }); + }); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/Widget.html b/theme/templates/_widgets/HeaderController/Widget.html new file mode 100644 index 0000000..8cb88d5 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/Widget.html @@ -0,0 +1,22 @@ +
+
+ +
+
+
+
+ +
+
+
diff --git a/theme/templates/_widgets/HeaderController/Widget.js b/theme/templates/_widgets/HeaderController/Widget.js new file mode 100644 index 0000000..dd3f83f --- /dev/null +++ b/theme/templates/_widgets/HeaderController/Widget.js @@ -0,0 +1,936 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define([ + 'dojo/_base/declare', + 'dojo/_base/lang', + 'dojo/_base/array', + 'dojo/_base/html', + 'dojo/topic', + 'dojo/aspect', + 'dojo/Deferred', + 'dojo/query', + 'dojo/NodeList-dom', + 'dojo/NodeList-manipulate', + 'dojo/on', + 'dojo/mouse', + 'dojo/dom-attr', + 'dojo/dom-construct', + 'dojo/dom-geometry', + 'dijit/registry', + 'jimu/BaseWidget', + 'jimu/PoolControllerMixin', + 'jimu/tokenUtils', + 'jimu/portalUtils', + 'jimu/portalUrlUtils', + 'jimu/utils', + 'jimu/dijit/Message', + './PopupTileNodes' + ], + function(declare, lang, array, html, topic, aspect, Deferred, query, nld, nlm, on, mouse, domAttr, + domConstruct, domGeometry, registry, BaseWidget, PoolControllerMixin, tokenUtils, portalUtils, + portalUrlUtils, utils, Message, PopupTileNodes) { + /* global jimuConfig */ + /* jshint scripturl:true */ + var clazz = declare([BaseWidget, PoolControllerMixin], { + + baseClass: 'jimu-widget-header-controller jimu-main-bgcolor', + + maxIconCount: -1, + + //whether need to create more icon + createMoreIcon: false, + + //title, links are switchable depends the browser width + switchableElements: {}, + + //the default height of the widget + height: 40, + + //the opened group/widget's id + openedId: '', + + postCreate: function() { + this.inherited(arguments); + + this._processGroupSetting(); + + this.switchableElements.title = this.titleNode; + this.switchableElements.links = this.linksNode; + this.switchableElements.subtitle = this.subtitleNode; + + if (this.position && this.position.height) { + this.height = this.position.height; + } + + // if (!this.appConfig.portalUrl) { + html.setStyle(this.signInSectionNode, 'display', 'none'); + // } else { + // html.setStyle(this.signInSectionNode, 'display', ''); + // } + + html.setAttr(this.logoNode, 'src', this.appConfig.logo ? this.appConfig.logo : this.folderUrl + 'images/app-logo.png'); + this.switchableElements.title.innerHTML = this.appConfig.title ? this.appConfig.title : ''; + this.switchableElements.subtitle.innerHTML = this.appConfig.subtitle ? this.appConfig.subtitle : ''; + + this._createDynamicLinks(this.appConfig.links); + if (this.appConfig.about) { + html.setStyle(this.aboutNode, 'display', ''); + this.aboutNode.visible = true; + } else { + html.setStyle(this.aboutNode, 'display', 'none'); + this.aboutNode.visible = false; + } + + this._setElementsSize(); + + this.own(on(this.domNode, mouse.enter, lang.hitch(this, function() { + var title = ''; + var portalUrl = this.appConfig && this.appConfig.portalUrl || ''; + var server = portalUrlUtils.getServerByUrl(portalUrl); + if (portalUrlUtils.isArcGIScom(server)) { + server = 'ArcGIS.com'; + } + if (server) { + title = this.nls.signInTo + ' ' + server; + } + this.signinLinkNode.title = title; + }))); + }, + + startup: function() { + this.inherited(arguments); + + this.timeoutHandle = setTimeout(lang.hitch(this, this.resize), 100); + }, + + onAction: function(action, data) { + /*jshint unused: false*/ + if (action === 'highLight' && data) { + var node = query('div[settingid="' + data.widgetId + '"]')[0]; + this._highLight(node); + } + if (action === 'removeHighLight') { + this._removeHighLight(); + } + }, + + onSignIn: function(credential) { + this.inherited(arguments); + + html.setStyle(this.signinLinkNode, 'display', 'none'); + html.setStyle(this.userNameLinkNode, 'display', ''); + html.setStyle(this.signoutLinkNode, 'display', ''); + + this.userNameLinkNode.innerHTML = credential.userId; + html.setAttr(this.userNameLinkNode, 'href', this.appConfig.portalUrl + 'home/user.html'); + + //popup + if (this.popupLinkNode) { + html.setStyle(this.popupSigninNode, 'display', 'none'); + html.setStyle(this.popupUserNameNode, 'display', ''); + html.setStyle(this.popupSignoutNode, 'display', ''); + + query('a', this.popupUserNameNode).html(credential.userId) + .attr('href', this.appConfig.portalUrl + 'home/user.html'); + } + + this.resize(); + }, + + onSignOut: function() { + this.inherited(arguments); + + this._onSignOut(this.nls.signin); + + var portal = portalUtils.getPortal(this.appConfig.portalUrl); + portal.loadSelfInfo().then(lang.hitch(this, function(selfInfo) { + var name = selfInfo.name; + var signInTip = this.nls.signInTo + ' ' + name; + this._onSignOut(signInTip); + }), lang.hitch(this, function(err) { + console.error(err); + })); + }, + + _onSignOut: function(signInTip) { + html.setStyle(this.signinLinkNode, 'display', ''); + html.setAttr(this.signinLinkNode, 'innerHTML', signInTip); + html.setStyle(this.userNameLinkNode, 'display', 'none'); + html.setStyle(this.signoutLinkNode, 'display', 'none'); + + this.userNameLinkNode.innerHTML = ''; + + //popup + if (this.popupLinkNode) { + html.setStyle(this.popupSigninNode, 'display', ''); + html.setAttr(this.popupSigninNode, 'innerHTML', signInTip); + html.setStyle(this.popupUserNameNode, 'display', 'none'); + html.setStyle(this.popupSignoutNode, 'display', 'none'); + + query('a', this.popupUserNameNode).html(''); + } + + this.resize(); + }, + + resize: function() { + var box = html.getContentBox(this.domNode); + // console.log('header width:', box.w); + + //by default, we show all elements + this._showSwitchableElements(['title', 'links', 'subtitle']); + + // this.timeoutHandle = setTimeout(lang.hitch(this, function(){ + // this._createIconNodes(box); + // }), 50); + + this._createIconNodes(box); + + if (this.morePane) { + html.setStyle(this.morePane.domNode, utils.getPositionStyle(this._getMorePanelSize())); + this.morePane.resize(); + } + if (this.popupLinkNode) { + html.setStyle(jimuConfig.layoutId, { + left: html.getContentBox(this.popupLinkNode).w + 'px' + }); + } + }, + + destroy: function() { + if (this.timeoutHandle) { + clearTimeout(this.timeoutHandle); + this.timeoutHandle = null; + } + if (this.morePane) { + this.morePane.destroy(); + } + this.inherited(arguments); + }, + + onAppConfigChanged: function(appConfig, reason, changedData) { + switch (reason) { + case 'attributeChange': + this._onAttributeChange(appConfig, changedData); + break; + default: + return; + } + this.resize(); + }, + + getOpenedIds: function() { + this.inherited(arguments); + if (this.openedId === '') { + return []; + } + return [this.openedId]; + }, + + setOpenedIds: function(ids) { + if (ids.length === 0) { + return; + } + this.openedId = ids[0]; + var config = this.getConfigById(this.openedId); + if (!config) { + return; + } + if (config.widgets && config.openType === 'openAll') { + this._showIconContent(config); + } else if (!config.widgets) { + this._showIconContent(config); + } + }, + + _highLight: function(node) { + if (this.hlDiv) { + this._removeHighLight(); + } + if (!node) { + return; + } + var position = domGeometry.getMarginBox(node); + var hlStyle = { + position: 'absolute', + left: (position.l) + 'px', + top: (position.t) + 'px', + width: (position.w) + 'px', + height: (position.h) + 'px' + }; + this.hlDiv = domConstruct.create('div', { + "style": hlStyle, + "class": 'icon-highlight' + }, node, 'before'); + }, + + _removeHighLight: function() { + if (this.hlDiv) { + domConstruct.destroy(this.hlDiv); + this.hlDiv = null; + } + }, + + + _onAttributeChange: function(appConfig, changedData) { + if (changedData.title !== undefined && changedData.title !== this.appConfig.title) { + this.titleNode.innerHTML = changedData.title; + } + if (changedData.subtitle !== undefined && changedData.subtitle !== this.appConfig.subtitle) { + this.subtitleNode.innerHTML = changedData.subtitle; + } + if (changedData.logo) { + html.setAttr(this.logoNode, 'src', changedData.logo); + } + if (changedData.links) { + this._createDynamicLinks(changedData.links); + } + }, + + _setElementsSize: function() { + html.setStyle(this.logoNode, { + height: '30px', + minWidth: '30px', + marginTop: ((this.height - 30) / 2) + 'px' + }); + + html.setStyle(this.titleNode, { + lineHeight: this.height + 'px' + }); + + html.setStyle(this.subtitleNode, { + lineHeight: this.height + 'px' + }); + + query('.link', this.domNode).style({ + lineHeight: this.height + 'px' + }); + }, + + _processGroupSetting: function() { + function getOpenType(gLabel) { + for (var i = 0; i < this.config.groupSetting.length; i++) { + if (this.config.groupSetting[i].label === gLabel) { + return this.config.groupSetting[i].type; + } + } + //this is the default open type + return 'openAll'; + } + array.forEach(this.appConfig.widgetPool.groups, function(g) { + g.openType = getOpenType.call(this, g.label); + }, this); + }, + + _createDynamicLinks: function(links) { + html.empty(this.dynamicLinksNode); + array.forEach(links, function(link) { + html.create('a', { + href: link.url, + target: '_blank', + innerHTML: link.label, + 'class': "link", + style: { + lineHeight: this.height + 'px' + } + }, this.dynamicLinksNode); + }, this); + }, + + _showSwitchableElements: function(showElement) { + var es = this.switchableElements; + + for (var p in es) { + if (es.hasOwnProperty(p)) { + if (showElement.indexOf(p) > -1) { + html.setStyle(es[p], 'display', 'block'); + es[p].visible = true; + } else { + html.setStyle(es[p], 'display', 'none'); + es[p].visible = false; + } + } + } + //links is hidden + if (this.logoClickHandle) { + this.logoClickHandle.remove(); + } + + if (showElement.indexOf('links') < 0) { + this.logoClickHandle = on(this.logoNode, 'click', lang.hitch(this, this._onLogoClick)); + // html.setStyle(this.logoNode, { + // cursor: 'pointer' + // }); + } else { + if (this.popupLinksVisible) { + this._hidePopupLink(); + } + html.setStyle(this.logoNode, { + cursor: 'default' + }); + } + }, + + _switchSignin: function() { + var credential = tokenUtils.getPortalCredential(this.appConfig.portalUrl); + if (credential) { + this.onSignIn(credential); + } else { + this.onSignOut(); + } + }, + + _onLogoClick: function() { + return; + // if (!this.popupLinkNode) { + // this.popupLinkNode = this._createPopupLinkNode(); + // this._switchSignin(); + // } + + // if (this.popupLinksVisible) { + // this.popupLinksVisible = false; + // this._hidePopupLink(); + // } else { + // this.popupLinksVisible = true; + // this._showPopupLink(); + // } + }, + + _hidePopupLink: function() { + html.setStyle(this.popupLinkNode, 'display', 'none'); + html.setStyle(jimuConfig.layoutId, { + left: 0 + }); + }, + + _showPopupLink: function() { + html.setStyle(this.popupLinkNode, 'display', ''); + html.setStyle(jimuConfig.layoutId, { + left: html.getContentBox(this.popupLinkNode).w + 'px' + }); + }, + + _createPopupLinkNode: function() { + var node, titleNode, box; + box = html.getContentBox(jimuConfig.mainPageId); + + node = html.create('div', { + 'class': 'popup-links jimu-main-bgcolor', + style: { + position: 'absolute', + zIndex: 100, + left: 0, + top: 0, + bottom: 0, + right: '50px' + } + }, jimuConfig.mainPageId); + + titleNode = html.create('div', { + 'class': 'popup-title', + style: { + height: this.height + 'px', + width: '100%' + } + }, node); + + html.create('img', { + 'class': 'logo', + src: this.appConfig.logo ? this.appConfig.logo : this.folderUrl + 'images/app-logo.png', + style: { + width: '30px', + height: '30px', + marginTop: ((this.height - 30) / 2) + 'px' + } + }, titleNode); + + html.create('div', { + 'class': 'title', + innerHTML: this.appConfig.title, + style: { + lineHeight: this.height + 'px' + } + }, titleNode); + + array.forEach(this.appConfig.links, function(link) { + this._createLinkNode(node, link, false); + }, this); + + this.popupSigninNode = this._createLinkNode(node, { + label: 'SignIn', + url: '#' + }, true); + this.popupUserNameNode = this._createLinkNode(node, { + label: '', + url: '#' + }, true); + this.popupSignoutNode = this._createLinkNode(node, { + label: 'SignOut', + url: '#' + }, true); + + this.own(on(this.popupSigninNode, 'click', lang.hitch(this, '_onSigninClick'))); + this.own(on(this.popupSignoutNode, 'click', lang.hitch(this, '_onSignoutClick'))); + + //empty + this._createLinkNode(node, { + label: '', + url: '#' + }, false); + return node; + }, + + _createLinkNode: function(containerNode, link, isSign) { + var node, lineNode, linkSectionNode, className; + + node = html.place('', containerNode); + + lineNode = html.place('
', node); + if (isSign) { + className = 'link-section signin'; + } else { + className = 'link-section'; + } + linkSectionNode = html.place('
', node); + html.create('a', { + href: link.url, + target: '_blank', + innerHTML: link.label, + style: { + lineHeight: '66px' + } + }, linkSectionNode); + + return node; + }, + + _onSigninClick: function() { + tokenUtils.signInPortal(this.appConfig.portalUrl, this.appConfig.appId); + }, + + _onSignoutClick: function() { + var isDepolyedApp = !this.appConfig.mode; + + if (isDepolyedApp) { + //tokenUtils.signOutPortal(this.appConfig.portalUrl); + tokenUtils.signOutAll(); + } else { + new Message({ + message: this.nls.cantSignOutTip + }); + } + }, + + _onAboutClick: function() { + var widgetConfig = { + id: this.appConfig.about + '_1', + uri: this.appConfig.about, + label: 'About' + }; + this.widgetManager.loadWidget(widgetConfig).then(lang.hitch(this, function(widget) { + html.place(widget.domNode, jimuConfig.mainPageId); + widget.startup(); + })); + }, + + _onUserNameClick: function() { + + }, + + _getHeaderSectionWidth: function() { + var width; + width = html.getMarginBox(this.headerNode).w; + // console.log('header width: ' + width, ', float: ' + html.getStyle(this.headerNode, 'float')); + return width; + }, + + _getContainerWidth: function(box) { + var headSectionWidth = this._getHeaderSectionWidth(); + //the container width + var containerWidth = box.w - headSectionWidth - this._getEmptyWidth(box); + return containerWidth; + }, + + _calcContainerAndEmptyWidth: function(box) { + var containerWidth = this._getContainerWidth(box); + var emptyWidth = this._getEmptyWidth(box); + //here, we need put at least two icons + if (containerWidth < this.iconWidth * 2) { + if (this.switchableElements.subtitle.visible) { + //hiden subtitle first + this._showSwitchableElements(['title', 'links']); + containerWidth = this._getContainerWidth(box); + + if (containerWidth < this.iconWidth * 2) { + //hiden the title, subtitle, links + this._showSwitchableElements([]); + containerWidth = this._getContainerWidth(box); + if (containerWidth < this.iconWidth * 2) { + //all of the elements is hidden, but the it's still can hold two icons(too small screen???), + //use the empty space + //the emptyWidth may be negative + emptyWidth = emptyWidth - (this.iconWidth * 2 - containerWidth); + containerWidth = this.iconWidth * 2; + } + } + } else { + //hiden the title, subtitle, links + this._showSwitchableElements([]); + containerWidth = this._getContainerWidth(box); + if (containerWidth < this.iconWidth * 2) { + //all of the elements is hidden, but the it's still can hold two icons(too small screen???), + //use the empty space + //the emptyWidth may be negative + emptyWidth = emptyWidth - (this.iconWidth * 2 - containerWidth); + containerWidth = this.iconWidth * 2; + } + } + } + // console.log('containerWidth: %f, emptyWidth: %f', containerWidth, emptyWidth); + return { + containerWidth: containerWidth, + emptyWidth: emptyWidth + }; + }, + + _getEmptyWidth: function(box) { + return 1 / 10 * box.w; + }, + + _createIconNodes: function(box) { + html.empty(this.containerNode); + this._closeDropMenu(); + + var i, iconConfig, allIconConfigs = this.getAllConfigs(); + //by default, the icon is square + this.iconWidth = box.h; + + var ret = this._calcContainerAndEmptyWidth(box); + + html.setStyle(this.containerNode, { + width: ret.containerWidth + 'px', + marginLeft: (ret.emptyWidth - 5) + 'px' //add some margein to avoid mess layout + }); + + this.maxIconCount = Math.floor(ret.containerWidth / this.iconWidth); + if (this.maxIconCount >= allIconConfigs.length) { + this.headerIconCount = allIconConfigs.length; + this.createMoreIcon = false; + } else { + this.headerIconCount = this.maxIconCount - 1; + this.createMoreIcon = true; + } + if (this.createMoreIcon) { + this._createIconNode({ + label: 'more' + }); + } + + var openAtStartNode; + for (i = this.headerIconCount - 1; i >= 0; i--) { + iconConfig = allIconConfigs[i]; + var node = this._createIconNode(iconConfig); + + if (iconConfig.openAtStart) { + openAtStartNode = node; + } + } + //open the first openatstart widget + if (openAtStartNode && !this.openAtStartWidget) { + this._onIconClick(openAtStartNode); + this.openAtStartWidget = openAtStartNode.config.name; + this.openedId = openAtStartNode.config.id; + } + }, + + _createIconNode: function(iconConfig) { + var node, iconUrl; + if (iconConfig.label === 'more') { + iconUrl = this.folderUrl + 'images/more_icon.png'; + } else { + iconUrl = iconConfig.icon; + } + + node = html.create('div', { + 'class': 'icon-node', + title: iconConfig.label, + settingId: iconConfig.id, + style: { + width: this.height + 'px', + height: this.height + 'px' + } + }, this.containerNode); + + html.create('img', { + src: iconUrl, + style: { + marginTop: ((this.height - 24) / 2) + 'px' + } + }, node); + + if (iconConfig.label === 'more') { + on(node, 'click', lang.hitch(this, this._showMorePane, iconConfig)); + } else { + on(node, 'click', lang.hitch(this, function() { + this._onIconClick(node); + })); + } + node.config = iconConfig; + // if(iconConfig.defaultState){ + // this.openedId = iconConfig.id; + // this._switchNodeToOpen(this.openedId); + // } + if (node.config.widgets && node.config.widgets.length > 1 && node.config.openType === 'dropDown') { + this._createDropTriangle(node); + } + + //set current open node + if (this.openedId === iconConfig.id) { + html.addClass(node, 'jimu-state-selected'); + if (node.config.widgets && node.config.widgets.length > 1 && node.config.openType === 'dropDown') { + this._openDropMenu(node); + } + } + return node; + }, + + _createDropTriangle: function(node) { + var box = html.getMarginBox(node); + var triangleLeft = box.l + box.w / 2 - 4; + html.create('div', { + 'class': 'drop-triangle', + style: { + left: triangleLeft + 'px' + } + }, node); + }, + + _onIconClick: function(node) { + if (!node.config.widgets || node.config.widgets.length === 1 || node.config.openType === 'openAll') { + //widget or group with 'openAll' open type + if (this.openedId && this.openedId === node.config.id) { + return; + } else { + if (this.openedId) { + this._switchNodeToClose(this.openedId).then(lang.hitch(this, function() { + this._closeDropMenu(); + this._switchNodeToOpen(node.config.id); + })); + } else { + this._switchNodeToOpen(node.config.id); + } + } + } else { + if (this.openedId && this.openedId === node.config.id) { + this.openedId = ''; + this._closeDropMenu(); + } else { + this.openedId = node.config.id; + this._openDropMenu(node); + } + } + }, + + _closeDropMenu: function() { + if (this.dropMenuNode) { + html.destroy(this.dropMenuNode); + this.dropMenuNode = null; + } + }, + + _openDropMenu: function(pnode) { + this.dropMenuNode = html.create('div', { + 'class': 'jimu-drop-menu', + title: pnode.config.label, + style: { + position: 'absolute', + zIndex: '101' + } + }); + + html.place(this.dropMenuNode, this.containerNode); + + this._setDropMenuPosition(pnode); + + array.forEach(pnode.config.widgets, function(widgetConfig) { + this._createDropMenuItem(widgetConfig); + }, this); + + if (this.morePane) { + this.morePane.hide(); + } + }, + + _createDropMenuItem: function(sconfig) { + var node = html.create('div', { + 'class': 'menu-item', + title: sconfig.label, + style: { + height: this.height + 'px' + } + }, this.dropMenuNode); + + html.create('img', { + src: sconfig.icon + }, node); + + html.create('div', { + 'class': 'label', + innerHTML: sconfig.label + }, node); + + this.own(on(node, 'click', lang.hitch(this, function() { + this._closeDropMenu(); + this._showIconContent(node.config); + }))); + node.config = sconfig; + return node; + }, + + _setDropMenuPosition: function(pnode) { + var position = {}, + box = html.getMarginBox(pnode), + thisBox = html.getMarginBox(this.domNode); + position.right = thisBox.w - box.l - box.w; + position.top = this.height + 1; + html.setStyle(this.dropMenuNode, utils.getPositionStyle(position)); + }, + + _switchNodeToOpen: function(id) { + var node = this._getIconNodeById(id); + query('.icon-node', this.domNode).removeClass('jimu-state-selected'); + html.addClass(node, 'jimu-state-selected'); + this._showIconContent(node.config); + }, + + _switchNodeToClose: function(id) { + query('.icon-node', this.domNode).removeClass('jimu-state-selected'); + + return this.panelManager.closePanel(id + '_panel'); + }, + + _getIconNodeById: function(id) { + var node = query('.icon-node[settingId="' + id + '"]', this.domNode); + if (node.length === 0) { + return; + } + return node[0]; + }, + + _onPanelClose: function(id) { + query('.icon-node[settingId="' + id + '"]', this.domNode).removeClass('jimu-state-selected'); + this.openedId = ''; + }, + + _showIconContent: function(iconConfig) { + this.panelManager.showPanel(iconConfig).then(lang.hitch(this, function(panel) { + this.openedId = iconConfig.id; + this.own(aspect.after(panel, 'onClose', lang.hitch(this, function() { + this._onPanelClose(iconConfig.id); + }))); + })); + }, + + _showMorePane: function() { + var i, iconConfig, moreItems = [], + allIconConfigs = this.getAllConfigs(); + + for (i = this.headerIconCount; i < allIconConfigs.length; i++) { + iconConfig = allIconConfigs[i]; + moreItems.push(iconConfig); + } + if (this.morePane) { + this.morePane.destroy(); + } + if (this.moreIconPaneCoverNode) { + html.destroy(this.moreIconPaneCoverNode); + } + + this._closeDropMenu(); + + this.morePane = new PopupTileNodes({ + openedId: this.openedId, + items: moreItems + }); + this._createCoverNode(); + html.place(this.morePane.domNode, jimuConfig.mapId); + html.setStyle(this.morePane.domNode, utils.getPositionStyle(this._getMorePanelSize())); + this.morePane.startup(); + + aspect.after(this.morePane, 'onNodeClicked', lang.hitch(this, function(node) { + this._moveConfigToHeader(node.config); + this._createIconNodes(html.getContentBox(this.domNode)); + this._onIconClick(this._getIconNodeById(node.config.id)); + }), true); + aspect.after(this.morePane, 'hide', lang.hitch(this, function() { + html.destroy(this.moreIconPaneCoverNode); + }), true); + }, + + _moveConfigToHeader: function(config) { + var allIconConfigs = this.getAllConfigs(); + + var tempIndex = config.index; + config.index = allIconConfigs[this.headerIconCount - 1].index; + allIconConfigs[this.headerIconCount - 1].index = tempIndex; + }, + + _createCoverNode: function() { + this.moreIconPaneCoverNode = html.create('div', { + 'class': 'jimu-more-icon-cover' + }, jimuConfig.layoutId); + }, + + _getMorePanelSize: function() { + var mapBox, minLen, position; + mapBox = html.getContentBox(jimuConfig.mapId); + minLen = Math.min(mapBox.w, mapBox.h); + if (minLen < 600) { + if (mapBox.w < mapBox.h) { + position = { + left: 20, + right: 20, + top: (mapBox.h - (mapBox.w - 40)) / 2, + height: mapBox.w - 40, + width: '', + bottom: '' + }; + } else { + position = { + top: 20, + bottom: 20, + left: (mapBox.w - (mapBox.h - 40)) / 2, + width: mapBox.h - 40, + height: '', + right: '' + }; + } + } else { + position = { + top: (mapBox.h - 560) / 2, + left: (mapBox.w - 560) / 2, + width: 560, + height: 560, + right: '', + bottom: '' + }; + } + return position; + } + }); + return clazz; + }); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/config.json b/theme/templates/_widgets/HeaderController/config.json new file mode 100644 index 0000000..5f7b91b --- /dev/null +++ b/theme/templates/_widgets/HeaderController/config.json @@ -0,0 +1,8 @@ +{ + "groupSetting": [ + { + "label": "AttributeTable", + "type": "dropDown" + } + ] +} \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/css/images/arrow.png b/theme/templates/_widgets/HeaderController/css/images/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..893b6a0df6b81f1c670aa1a1fd7b92536c20a7fb GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W>!3HD`Pv18eNJ*BsMwA5Srreehqxzc?f{z4;OXk;vd$@?2>^>@HRJ#Q literal 0 HcmV?d00001 diff --git a/theme/templates/_widgets/HeaderController/css/images/close.png b/theme/templates/_widgets/HeaderController/css/images/close.png new file mode 100644 index 0000000000000000000000000000000000000000..28b1ed587703723b48ec19d88d7e6d917cc5d180 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{Vk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X7J0fjhE&{2+Ee+RQJR_ASyJFT<41EgmIq9aloZ}2F$z6( zxWjVfo5LIaP>!Gtj2*F!GdejvzA$~1Qz&D6)a#(bwA7L78&e@acgS-45T+#`^aMUT znl|~SHQnM5lHfcdzmUt$>1Tquk)mahq`+t9kLntGWwiLhj>pD BRTKaK literal 0 HcmV?d00001 diff --git a/theme/templates/_widgets/HeaderController/css/style.css b/theme/templates/_widgets/HeaderController/css/style.css new file mode 100644 index 0000000..63fa3fb --- /dev/null +++ b/theme/templates/_widgets/HeaderController/css/style.css @@ -0,0 +1,305 @@ +.jimu-widget-header-controller{ + box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.4); +} +.jimu-widget-header-controller .header-section{ + height: 100%; + float: left; + overflow: hidden; +} +.jimu-widget-header-controller .container-section{ + height: 100%; + float: left; +} +.jimu-widget-header-controller .logo{ + float: left; + margin-left: 14px; + cursor: pointer; +} + +.jimu-widget-header-controller .titles{ + margin-left: 14px; + height: 100%; + float: left; + overflow: hidden; +} + +.jimu-widget-header-controller .title{ + float: left; + color:#fff; + text-align: center; + height: 100%; + font-size: 18px; + font-weight: bold; +} + +.jimu-widget-header-controller .subtitle{ + float: left; + margin-left: 20px; + color:#6d7685; + font-size: 12px; + text-align: center; + height: 100%; + font-weight: bold; +} +.jimu-widget-header-controller .links{ + float: left; + height: 100%; + margin-left: 40px; + overflow: hidden; +} +.jimu-widget-header-controller .dynamic-section, +.jimu-widget-header-controller .about-section, +.jimu-widget-header-controller .signin-section{ + float: left; + height: 100%; +} +.jimu-widget-header-controller .links .link{ + color:#6d7685; + font-size: 14px; + font-weight: bold; + margin-left: 12px; + text-decoration: none; + height: 100%; +} +.jimu-widget-header-controller .signin-section .link{ + color: #d9dde0; +} + +.jimu-widget-header-controller .icon-node{ + float: right; + cursor: pointer; + opacity: 0.6; + text-align: center; + border-right: 1px solid #323e4f; +} +.jimu-widget-header-controller .icon-node img{ + height: 24px; + width: 24px; +} +.jimu-widget-header-controller .icon-node:first-child{ + border: none; +} +.jimu-widget-header-controller .icon-node:hover{ + opacity: 1; +} +.jimu-widget-header-controller .icon-node.jimu-state-selected{ + background-color: #697a8c; + opacity: 1; + border: none; + border-top: 2px solid #8491a1; +} + +.jimu-widget-header-controller .drop-triangle{ + position: absolute; + width: 0px; + height: 0px; + bottom: 1px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid white; +} + +/****/ +.jimu-widget-header-controller .jimu-drop-menu{ + background-color: #363455; + box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.4); +} +.jimu-widget-header-controller .jimu-drop-menu .menu-item{ + overflow: hidden; + border-top: 1px solid #435063; +} +.jimu-widget-header-controller .jimu-drop-menu .menu-item:hover{ + background-color: #485566; +} +.jimu-widget-header-controller .jimu-drop-menu .menu-item img{ + width: 24px; + height: 24px; + cursor: pointer; + margin: 8px; + float: left; +} +.jimu-widget-header-controller .jimu-drop-menu .menu-item .label{ + float: left; + cursor: pointer; + margin-top: 12px; + font-size: 14px; + color: white; + min-width: 50px; +} + +/**the popup link panel is not appended to container, so, don't add .jimu-widget-header-controller here**/ +.popup-links .popup-title{ + +} +.popup-links .logo{ + float: left; + margin-left: 5.26315789473684%;/*14/266*/ + height: 30px; +} +.popup-links .title{ + float: left; + color:#fff; + text-align: center; + font-size: 16px; + margin-left: 5.26315789473684%;/*14/266*/ + width: 71.42857142857143%;/*190/266*/ + overflow: hidden; + white-space: nowrap; + height: 100%; +} +.popup-links .line{ + width: 100%; + height: 4px; + border-bottom: 1px solid #393c40; +} +.popup-links .link-section{ + width: 100%; + height: 66px; +} +.popup-links a{ + color: #fff; + margin-left: 20px; + font-size: 14px; + height: 100%; + display: inline-block; +} +.popup-links .link-section.signin a{ + color: #d9dde0; +} + +/***/ +.jimu-header-more-popup{ + position: absolute; + border-radius: 2px; + z-index: 200;/*on the top of the pane, which z-index is 100*/ + background-color: #516070; +} +.jimu-header-more-popup .pages{ + position: relative; + overflow: hidden; + padding: 2px; +} +.jimu-header-more-popup .points{ + position: absolute; + overflow: hidden; + bottom: -18px; + left: 0px; + right: 0px; + text-align: center; +} +.jimu-header-more-popup .points-inner{ + display: inline-block; + overflow: hidden; +} +.jimu-header-more-popup .point{ + float: left; + width: 8px; + height: 8px; + margin-left: 5px; + border-radius: 4px; + background-color: #f2f6f9; + cursor: pointer; +} +.jimu-header-more-popup .point-selected{ + background-color: #485566; +} +.jimu-header-more-popup .page{ + position: relative; + overflow: hidden; +} +.jimu-header-more-popup .close{ + position: absolute; + width: 08.92857142857143%;/*50/560*/ + height: 08.92857142857143%; + top: -04.46428571428571%;/**/ + right: -04.46428571428571%; + border-radius: 50%;/*the context is the node itself*/ + background-color: #697a8c; + cursor: pointer; +} +.jimu-header-more-popup .close-inner{ + width: 80%;/*40/50*/ + height: 80%; + margin-left: 10%;/*5/50*/ + margin-top: 10%;/*5/50*/ + border-radius: 50%;/*20/50*/ + background: #1d2123 url(images/close.png) no-repeat center center; +} +.jimu-header-more-popup .icon-node{ + float: left; + background-color: #697a8c; + cursor: pointer; +} +.jimu-header-more-popup .icon-node.jimu-state-selected{ + background-color: red; +} +.jimu-header-more-popup img{ + width: 27.17391304347826%;/*50/184*/ + margin-left: 36.41304347826087%;/*67/184*/ + margin-top: 30.97826086956522%;/*57/184*/ +} +.jimu-header-more-popup .node-label{ + width: 100%; + text-align: center; + font-size: 16px; + margin-top: 10px; + color: white; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + display: inline-block; +} +@media screen and (max-width:600px){ + .jimu-header-more-popup .node-label{ + font-size: 14px; + } +} +.jimu-more-icon-cover{ + z-index: 199; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +/*rules for style*/ +.FoldableTheme.cyan .jimu-widget-header-controller .subtitle{ + color: #e8e7e6; +} + +.FoldableTheme.cyan .jimu-widget-header-controller .links .link{ + color: #e8e7e6; +} + +.FoldableTheme.cyan .jimu-widget-header-controller .signin-section .link{ + color: #ffffff; +} + +.FoldableTheme.cyan .jimu-widget-header-controller .icon-node{ + border-right: 1px solid #abcecf; +} + +.FoldableTheme.cyan .jimu-widget-header-controller .icon-node.jimu-state-selected{ + background-color: #8db8b9; +} + +.FoldableTheme.green .jimu-widget-header-controller .subtitle{ + color: #70dec3; +} + +.FoldableTheme.green .jimu-widget-header-controller .links .link{ + color: #70dec3; +} + +.FoldableTheme.green .jimu-widget-header-controller .signin-section .link{ + color: #fcc931; +} + +.FoldableTheme.green .jimu-widget-header-controller .icon-node{ + border-right: 1px solid #229d7b; +} + +.FoldableTheme.green .jimu-widget-header-controller .icon-node.jimu-state-selected{ + background-color: #1c9678; +} \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/images/app-logo.png b/theme/templates/_widgets/HeaderController/images/app-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c637db73fbb7fe798212ca505f22bd90c80fa2 GIT binary patch literal 66870 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 F?|;&6lw|+_ literal 0 HcmV?d00001 diff --git a/theme/templates/_widgets/HeaderController/images/group_icon.png b/theme/templates/_widgets/HeaderController/images/group_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba3a17a43838c4e02ecd5b05618d8cc5aafa4e0 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@jH#Y3jv*Dd-po4fb=X0oHQ2Gc`rz88*eO+!6*sk7m3DmL zU6MWjAo~Z`tUKJh1j?0m1;+eh+MC1T_$b$AdCE)&rkO8OEZFUs8trGUuTP)FnJba3 zlp;T;S$Bg#=yb&!43AF~Jv*SdgLSv4x54QLIzOJ`uE`8S*Inh3O>GQRXB8~U1?H_(xaNIlR8{flmt6HT$F?+dXyz?;G6Z* z@Y@Qu+iQ|`K5;H$6PLT<6CAQ+a&dDXyXj?-yZsx^#!Ei`dC7Waq3=q|OInrpQh~J4 z^DQ+G9D$6aOWj)!)>O$^3i_ROdnY=>lggE0|Rta(>uz z;AFLw4i_)iaW!cbPPR_g;-|BHcTV}F&QWwTbD#dtGbQE5`{%x#an0&^PdM|xw%-Np z>t<)YVtM|7>0cwi&=$ER?EVjzU0iBw(=?q)X{v^ZQ;Wg;nfc2llHQ))7RYc(M>1gI z)ZNztZs~rware}oljrw+KXuDhJ9BOFhK);w?si11+SVHFcxKdX6^&FWUFr7Dy0^wbx#daShLtfk*4zdRxeVX-?9`r@4h(h%Pgg&ebxsLQ E07Yo5!~g&Q literal 0 HcmV?d00001 diff --git a/theme/templates/_widgets/HeaderController/images/more_icon.png b/theme/templates/_widgets/HeaderController/images/more_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d255c5905143d9ce3dfd71a6270ec1ef4171557c GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GD?D8sLn>~)x%H5%L4n6Du=if{{W~TGU7M6x&3DW5{85#W zdE_9S)N}8~o*8Ep7@1g3_$z$=$Mx8yfdR`q~!v~PM3^k5kX0zmMQT*9Tu8r16%$s)n<_t};gucu#s2Xr%or>mdKI;Vst E0Kc +
${nls.groupSetLabel}
+
+
${nls.noGroup}
+ \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/Setting.js b/theme/templates/_widgets/HeaderController/setting/Setting.js new file mode 100644 index 0000000..0e9cf96 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/Setting.js @@ -0,0 +1,122 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define([ + 'dojo/_base/declare', + 'dojo/_base/html', + 'jimu/BaseWidgetSetting', + 'dijit/_WidgetsInTemplateMixin', + 'jimu/dijit/SimpleTable', + 'dijit/form/Button', + 'dijit/form/ValidationTextBox' + ], + function( + declare, html, + BaseWidgetSetting, + _WidgetsInTemplateMixin, + Table) { + return declare([BaseWidgetSetting, _WidgetsInTemplateMixin], { + + baseClass: 'jimu-widget-headercontroller-setting', + openAll: "openAll", + dropDown: "dropDown", + + startup: function() { + this.inherited(arguments); + if (!this.config.groupSetting) { + this.config.groupSetting = []; + } + + var fields = [{ + name: 'group', + title: this.nls.group, + type: 'text' + }, { + name: 'openAll', + title: this.nls.openAll, + type: 'radio', + radio: 'row' + }, { + name: 'dropDown', + title: this.nls.dropDown, + type: 'radio', + radio: 'row' + }]; + var args = { + fields: fields, + selectable: false + }; + this.displayFieldsTable = new Table(args); + this.displayFieldsTable.placeAt(this.tableInfo); + this.displayFieldsTable.startup(); + this.setConfig(this.config); + }, + + setConfig: function(config) { + this.config = config; + this.displayFieldsTable.clear(); + if(this.appConfig.widgetPool.groups === undefined || this.appConfig.widgetPool.groups.length === 0){ + html.setStyle(this.noGroupTip, 'display', 'block'); + html.setStyle(this.tableInfo, 'display', 'none'); + }else{ + html.setStyle(this.noGroupTip, 'display', 'none'); + html.setStyle(this.tableInfo, 'display', 'block'); + var len = this.appConfig.widgetPool.groups.length; + for (var i = 0; i < len; i++) { + var json = {}; + json.group = this.appConfig.widgetPool.groups[i].label; + json.openAll = this.isOpenAll(config, json.group); + json.dropDown = !this.isOpenAll(config, json.group); + this.displayFieldsTable.addRow(json); + } + } + }, + + isOpenAll: function(config, label) { + var len = config.groupSetting.length; + for (var i = 0; i < len; i++) { + if (config.groupSetting[i].label === label) { + if (config.groupSetting[i].type === this.openAll) { + return true; + } else { + return false; + } + } + } + return true; + }, + + getConfig: function() { + var data = this.displayFieldsTable.getData(); + var json = []; + var len = data.length; + for (var i = 0; i < len; i++) { + var g = {}; + g.label = data[i].group; + if (data[i].openAll) { + g.type = this.openAll; + } else { + g.type = this.dropDown; + } + json.push(g); + } + this.config.groupSetting = json; + return this.config; + } + + + }); + }); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/css/style.css b/theme/templates/_widgets/HeaderController/setting/css/style.css new file mode 100644 index 0000000..d5764bc --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/css/style.css @@ -0,0 +1,20 @@ +/* jimu-widget-coordinate-setting */ +.jimu-widget-headercontroller-setting{ + margin:0; + padding:0; + font-size:15px; +} + +.jimu-widget-headercontroller-setting .group{ + width: 120px; +} + +.jimu-widget-headercontroller-setting .main-label{ + font-size:16px; + margin-bottom: 20px; +} + +.jimu-widget-headercontroller-setting .tip-message{ + margin-top: 100px; + margin-left: 100px; +} \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/ar/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/ar/strings.js new file mode 100644 index 0000000..7f15e80 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/ar/strings.js @@ -0,0 +1,7 @@ +define({ + group: "بيت_Name_لاحقة", + openAll: "بيت_Open All in Panel_لاحقة", + dropDown: "بيت_Show in Drop-down Menu_لاحقة", + noGroup: "بيت_There is no widget group set._لاحقة", + groupSetLabel: "بيت_Set widget groups properties_لاحقة" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/cs/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/cs/strings.js new file mode 100644 index 0000000..83d1a19 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/cs/strings.js @@ -0,0 +1,7 @@ +define({ + group: "Ř_Name_ů", + openAll: "Ř_Open All in Panel_ů", + dropDown: "Ř_Show in Drop-down Menu_ů", + noGroup: "Ř_There is no widget group set._ů", + groupSetLabel: "Ř_Set widget groups properties_ů" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/da/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/da/strings.js new file mode 100644 index 0000000..1ae7a8a --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/da/strings.js @@ -0,0 +1,7 @@ +define({ + group: "ø_Name_å", + openAll: "ø_Open All in Panel_å", + dropDown: "ø_Show in Drop-down Menu_å", + noGroup: "ø_There is no widget group set._å", + groupSetLabel: "ø_Set widget groups properties_å" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/de/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/de/strings.js new file mode 100644 index 0000000..630d195 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/de/strings.js @@ -0,0 +1,7 @@ +define({ + group: "ä_Name_Ü", + openAll: "ä_Open All in Panel_Ü", + dropDown: "ä_Show in Drop-down Menu_Ü", + noGroup: "ä_There is no widget group set._Ü", + groupSetLabel: "ä_Set widget groups properties_Ü" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/es/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/es/strings.js new file mode 100644 index 0000000..39e6865 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/es/strings.js @@ -0,0 +1,7 @@ +define({ + group: "á_Name_Ó", + openAll: "á_Open All in Panel_Ó", + dropDown: "á_Show in Drop-down Menu_Ó", + noGroup: "á_There is no widget group set._Ó", + groupSetLabel: "á_Set widget groups properties_Ó" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/et/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/et/strings.js new file mode 100644 index 0000000..5cfefec --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/et/strings.js @@ -0,0 +1,7 @@ +define({ + group: "Š_Name_ä", + openAll: "Š_Open All in Panel_ä", + dropDown: "Š_Show in Drop-down Menu_ä", + noGroup: "Š_There is no widget group set._ä", + groupSetLabel: "Š_Set widget groups properties_ä" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/fi/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/fi/strings.js new file mode 100644 index 0000000..0f336f3 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/fi/strings.js @@ -0,0 +1,7 @@ +define({ + group: "Å_Name_ö", + openAll: "Å_Open All in Panel_ö", + dropDown: "Å_Show in Drop-down Menu_ö", + noGroup: "Å_There is no widget group set._ö", + groupSetLabel: "Å_Set widget groups properties_ö" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/fr/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/fr/strings.js new file mode 100644 index 0000000..de800e1 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/fr/strings.js @@ -0,0 +1,7 @@ +define({ + group: "æ_Name_Â", + openAll: "æ_Open All in Panel_Â", + dropDown: "æ_Show in Drop-down Menu_Â", + noGroup: "æ_There is no widget group set._Â", + groupSetLabel: "æ_Set widget groups properties_Â" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/he/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/he/strings.js new file mode 100644 index 0000000..bf88f16 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/he/strings.js @@ -0,0 +1,7 @@ +define({ + group: "כן_Name_ש", + openAll: "כן_Open All in Panel_ש", + dropDown: "כן_Show in Drop-down Menu_ש", + noGroup: "כן_There is no widget group set._ש", + groupSetLabel: "כן_Set widget groups properties_ש" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/it/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/it/strings.js new file mode 100644 index 0000000..d900bee --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/it/strings.js @@ -0,0 +1,7 @@ +define({ + group: "é_Name_È", + openAll: "é_Open All in Panel_È", + dropDown: "é_Show in Drop-down Menu_È", + noGroup: "é_There is no widget group set._È", + groupSetLabel: "é_Set widget groups properties_È" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/ja/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/ja/strings.js new file mode 100644 index 0000000..0d4dca0 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/ja/strings.js @@ -0,0 +1,7 @@ +define({ + group: "須_Name_鷗", + openAll: "須_Open All in Panel_鷗", + dropDown: "須_Show in Drop-down Menu_鷗", + noGroup: "須_There is no widget group set._鷗", + groupSetLabel: "須_Set widget groups properties_鷗" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/ko/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/ko/strings.js new file mode 100644 index 0000000..1ad1dd7 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/ko/strings.js @@ -0,0 +1,7 @@ +define({ + group: "한_Name_빠", + openAll: "한_Open All in Panel_빠", + dropDown: "한_Show in Drop-down Menu_빠", + noGroup: "한_There is no widget group set._빠", + groupSetLabel: "한_Set widget groups properties_빠" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/lt/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/lt/strings.js new file mode 100644 index 0000000..2aae2ef --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/lt/strings.js @@ -0,0 +1,7 @@ +define({ + group: "Į_Name_š", + openAll: "Į_Open All in Panel_š", + dropDown: "Į_Show in Drop-down Menu_š", + noGroup: "Į_There is no widget group set._š", + groupSetLabel: "Į_Set widget groups properties_š" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/lv/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/lv/strings.js new file mode 100644 index 0000000..7e51349 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/lv/strings.js @@ -0,0 +1,7 @@ +define({ + group: "ķ_Name_ū", + openAll: "ķ_Open All in Panel_ū", + dropDown: "ķ_Show in Drop-down Menu_ū", + noGroup: "ķ_There is no widget group set._ū", + groupSetLabel: "ķ_Set widget groups properties_ū" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/nb/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/nb/strings.js new file mode 100644 index 0000000..a9fbab1 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/nb/strings.js @@ -0,0 +1,7 @@ +define({ + group: "å_Name_ø", + openAll: "å_Open All in Panel_ø", + dropDown: "å_Show in Drop-down Menu_ø", + noGroup: "å_There is no widget group set._ø", + groupSetLabel: "å_Set widget groups properties_ø" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/nl/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/nl/strings.js new file mode 100644 index 0000000..9d85c67 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/nl/strings.js @@ -0,0 +1,7 @@ +define({ + group: "IJ_Name_ä", + openAll: "IJ_Open All in Panel_ä", + dropDown: "IJ_Show in Drop-down Menu_ä", + noGroup: "IJ_There is no widget group set._ä", + groupSetLabel: "IJ_Set widget groups properties_ä" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/pl/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/pl/strings.js new file mode 100644 index 0000000..8e5fc08 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/pl/strings.js @@ -0,0 +1,7 @@ +define({ + group: "ł_Name_ą", + openAll: "ł_Open All in Panel_ą", + dropDown: "ł_Show in Drop-down Menu_ą", + noGroup: "ł_There is no widget group set._ą", + groupSetLabel: "ł_Set widget groups properties_ą" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/pt-BR/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/pt-BR/strings.js new file mode 100644 index 0000000..33c5a2a --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/pt-BR/strings.js @@ -0,0 +1,7 @@ +define({ + group: "ã_Name_Ç", + openAll: "ã_Open All in Panel_Ç", + dropDown: "ã_Show in Drop-down Menu_Ç", + noGroup: "ã_There is no widget group set._Ç", + groupSetLabel: "ã_Set widget groups properties_Ç" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/pt-PT/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/pt-PT/strings.js new file mode 100644 index 0000000..33c5a2a --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/pt-PT/strings.js @@ -0,0 +1,7 @@ +define({ + group: "ã_Name_Ç", + openAll: "ã_Open All in Panel_Ç", + dropDown: "ã_Show in Drop-down Menu_Ç", + noGroup: "ã_There is no widget group set._Ç", + groupSetLabel: "ã_Set widget groups properties_Ç" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/ro/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/ro/strings.js new file mode 100644 index 0000000..b80fce0 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/ro/strings.js @@ -0,0 +1,7 @@ +define({ + group: "Ă_Name_ș", + openAll: "Ă_Open All in Panel_ș", + dropDown: "Ă_Show in Drop-down Menu_ș", + noGroup: "Ă_There is no widget group set._ș", + groupSetLabel: "Ă_Set widget groups properties_ș" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/ru/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/ru/strings.js new file mode 100644 index 0000000..d833851 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/ru/strings.js @@ -0,0 +1,7 @@ +define({ + group: "Ж_Name_Я", + openAll: "Ж_Open All in Panel_Я", + dropDown: "Ж_Show in Drop-down Menu_Я", + noGroup: "Ж_There is no widget group set._Я", + groupSetLabel: "Ж_Set widget groups properties_Я" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/strings.js new file mode 100644 index 0000000..04663f0 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/strings.js @@ -0,0 +1,34 @@ +define({ + root: { + group: "Name", + openAll: "Open All in Panel", + dropDown: "Show in Drop-down Menu", + noGroup: "There is no widget group set.", + groupSetLabel: "Set widget groups properties" + }, + "ar": false, + "cs": false, + "da": false, + "de": false, + "es": false, + "et": false, + "fi": false, + "fr": false, + "he": false, + "it": false, + "ja": false, + "ko": false, + "lt": false, + "lv": false, + "nb": false, + "nl": false, + "pl": false, + "pt-BR": false, + "pt-PT": false, + "ro": false, + "ru": false, + "sv": false, + "th": false, + "tr": false, + "zh-cn": false +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/sv/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/sv/strings.js new file mode 100644 index 0000000..0f336f3 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/sv/strings.js @@ -0,0 +1,7 @@ +define({ + group: "Å_Name_ö", + openAll: "Å_Open All in Panel_ö", + dropDown: "Å_Show in Drop-down Menu_ö", + noGroup: "Å_There is no widget group set._ö", + groupSetLabel: "Å_Set widget groups properties_ö" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/th/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/th/strings.js new file mode 100644 index 0000000..8052457 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/th/strings.js @@ -0,0 +1,7 @@ +define({ + group: "ก้_Name_ษฺ", + openAll: "ก้_Open All in Panel_ษฺ", + dropDown: "ก้_Show in Drop-down Menu_ษฺ", + noGroup: "ก้_There is no widget group set._ษฺ", + groupSetLabel: "ก้_Set widget groups properties_ษฺ" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/tr/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/tr/strings.js new file mode 100644 index 0000000..a8fd1e8 --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/tr/strings.js @@ -0,0 +1,7 @@ +define({ + group: "ı_Name_İ", + openAll: "ı_Open All in Panel_İ", + dropDown: "ı_Show in Drop-down Menu_İ", + noGroup: "ı_There is no widget group set._İ", + groupSetLabel: "ı_Set widget groups properties_İ" +}); \ No newline at end of file diff --git a/theme/templates/_widgets/HeaderController/setting/nls/zh-cn/strings.js b/theme/templates/_widgets/HeaderController/setting/nls/zh-cn/strings.js new file mode 100644 index 0000000..0acedac --- /dev/null +++ b/theme/templates/_widgets/HeaderController/setting/nls/zh-cn/strings.js @@ -0,0 +1,7 @@ +define({ + group: "试_Name_验", + openAll: "试_Open All in Panel_验", + dropDown: "试_Show in Drop-down Menu_验", + noGroup: "试_There is no widget group set._验", + groupSetLabel: "试_Set widget groups properties_验" +}); \ No newline at end of file From 5d13f882a43fa0d0f06464fc54be8f83aa2537b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20P=C3=B8hner=20Henriksen?= Date: Wed, 15 Oct 2014 12:49:54 +0200 Subject: [PATCH 2/8] Corrected folder name for theme subgenerator --- theme/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/theme/index.js b/theme/index.js index d6d7fe0..9ea8d93 100644 --- a/theme/index.js +++ b/theme/index.js @@ -42,8 +42,8 @@ var ThemeGenerator = yeoman.generators.Base.extend({ ]; this.prompt(prompts, function (props) { + this.themeNameClean = this._.classify(props.themeName); this.themeName = props.themeName.match(/([A-Z]?[^A-Z]*)/g).slice(0,-1).join(' '); - this.themeNameClean = this._.classify(this.themeName); this.author = props.author; this.description = props.desc; done(); @@ -51,7 +51,7 @@ var ThemeGenerator = yeoman.generators.Base.extend({ }, app: function () { - this.dest.mkdir(this.themeName); + this.dest.mkdir(this.themeNameClean); }, projectfiles: function () { @@ -59,7 +59,7 @@ var ThemeGenerator = yeoman.generators.Base.extend({ // see: https://github.com/lodash/lodash/issues/399 this._.templateSettings.interpolate = /<%=([\s\S]+?)%>/g; - var basePath = path.join('themes', this.themeName); + var basePath = path.join('themes', this.themeNameClean); //css this.src.copy('_common.css', path.join(basePath, 'common.css')); //folders From 1f5591667c51658dc151e29a3fdb64f952acd149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20P=C3=B8hner=20Henriksen?= Date: Wed, 15 Oct 2014 13:08:32 +0200 Subject: [PATCH 3/8] Added mkdir for themes in generator and cleaned away dev comments --- app/index.js | 1 + theme/index.js | 8 -------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/app/index.js b/app/index.js index 3570ef3..78e904a 100644 --- a/app/index.js +++ b/app/index.js @@ -39,6 +39,7 @@ module.exports = yeoman.generators.Base.extend({ app: function () { this.mkdir('widgets'); + this.mkdir('themes'); this.template('_package.json', 'package.json'); }, diff --git a/theme/index.js b/theme/index.js index 9ea8d93..1ee5142 100644 --- a/theme/index.js +++ b/theme/index.js @@ -6,15 +6,10 @@ var yosay = require('yosay'); var chalk = require('chalk'); var ThemeGenerator = yeoman.generators.Base.extend({ - initializing: function () { - this.pkg = require('../package.json'); - }, - prompting: function () { var done = this.async(); var dasherize = this._.dasherize; - // Have Yeoman greet the user. this.log(yosay( 'Welcome to the ArcGIS Web AppBuilder theme generator!' )); @@ -68,9 +63,6 @@ var ThemeGenerator = yeoman.generators.Base.extend({ this.directory('_panels', path.join(basePath, 'panels')); this.directory('_styles', path.join(basePath, 'styles')); this.directory('_widgets', path.join(basePath, 'widgets')); - //Dev dependencies - //this.src.copy('_package.json',this.themeNameClean + '/package.json'); - //this.src.copy('_bower.json',this.themeNameClean + '/bower.json'); var context = { themeName: this.themeName, From 4cce3c011e4c27572510a2c71a6cb9845bf55194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20P=C3=B8hner=20Henriksen?= Date: Wed, 15 Oct 2014 15:18:51 +0200 Subject: [PATCH 4/8] Added tests for theme generator --- test/test-theme.js | 222 +++++++++++++++++++++++++++++++++ theme/index.js | 4 +- theme/listfiles.txt | 171 +++++++++++++++++++++++++ theme/templates/_bower.json | 6 - theme/templates/_manifest.json | 4 +- theme/templates/_package.json | 5 - 6 files changed, 398 insertions(+), 14 deletions(-) create mode 100644 test/test-theme.js create mode 100644 theme/listfiles.txt delete mode 100644 theme/templates/_bower.json delete mode 100644 theme/templates/_package.json diff --git a/test/test-theme.js b/test/test-theme.js new file mode 100644 index 0000000..4eaf007 --- /dev/null +++ b/test/test-theme.js @@ -0,0 +1,222 @@ +/*global describe, beforeEach, it */ +'use strict'; +var path = require('path'); +var helpers = require('yeoman-generator').test; + +describe('esri-appbuilder-js:theme subgenerator', function() { + beforeEach(function(done) { + helpers.testDirectory(path.join(__dirname, 'temp'), function(err) { + if (err) { + return done(err); + } + + this.theme = helpers.createGenerator('esri-appbuilder-js:theme', [ + '../../theme' + ]); + console.log('cleared folder and created theme generator'); + done(); + }.bind(this)); + }); + + describe('when scaffolding theme', function() { + + beforeEach(function(done) { + helpers.mockPrompt(this.theme, { + themeName: 'TestTheme', + desc: 'A test theme.', + author: 'Test Authorsen' + }); + this.theme.run({}, function() { + done(); + }); + }); + + it('it creates expected files', function( /*done*/ ) { + var expected = [ + // add files you expect to exist here.' + 'themes/Testtheme/common.css', + 'themes/Testtheme/layouts/default/config.json', + 'themes/Testtheme/images', + 'themes/Testtheme/layouts', + 'themes/Testtheme/manifest.json', + 'themes/Testtheme/panels', + 'themes/Testtheme/styles', + 'themes/Testtheme/widgets', + 'themes/Testtheme/images/cancel.png', + 'themes/Testtheme/images/close.png', + 'themes/Testtheme/images/double_arrow.png', + 'themes/Testtheme/images/icon.png', + 'themes/Testtheme/layouts/default', + 'themes/Testtheme/layouts/default/icon.png', + 'themes/Testtheme/panels/DockablePanel', + 'themes/Testtheme/panels/FoldablePanel', + 'themes/Testtheme/panels/SimpleBorderPanel', + 'themes/Testtheme/panels/TitlePanel', + 'themes/Testtheme/panels/DockablePanel/images', + 'themes/Testtheme/panels/DockablePanel/Panel.html', + 'themes/Testtheme/panels/DockablePanel/Panel.js', + 'themes/Testtheme/panels/DockablePanel/images/bar_down.png', + 'themes/Testtheme/panels/DockablePanel/images/bar_left.png', + 'themes/Testtheme/panels/DockablePanel/images/bar_right.png', + 'themes/Testtheme/panels/DockablePanel/images/bar_up.png', + 'themes/Testtheme/panels/DockablePanel/images/nav_down.png', + 'themes/Testtheme/panels/DockablePanel/images/nav_left.png', + 'themes/Testtheme/panels/DockablePanel/images/nav_right.png', + 'themes/Testtheme/panels/DockablePanel/images/nav_up.png', + 'themes/Testtheme/panels/FoldablePanel/FoldableDijit.js', + 'themes/Testtheme/panels/FoldablePanel/FoldableWidgetFrame.js', + 'themes/Testtheme/panels/FoldablePanel/Panel.js', + 'themes/Testtheme/panels/SimpleBorderPanel/Panel.js', + 'themes/Testtheme/panels/TitlePanel/Panel.js', + 'themes/Testtheme/styles/black', + 'themes/Testtheme/styles/cyan', + 'themes/Testtheme/styles/default', + 'themes/Testtheme/styles/green', + 'themes/Testtheme/styles/black/style.css', + 'themes/Testtheme/styles/cyan/style.css', + 'themes/Testtheme/styles/default/style.css', + 'themes/Testtheme/styles/green/style.css', + 'themes/Testtheme/widgets/HeaderController', + 'themes/Testtheme/widgets/HeaderController/config.json', + 'themes/Testtheme/widgets/HeaderController/css', + 'themes/Testtheme/widgets/HeaderController/images', + 'themes/Testtheme/widgets/HeaderController/manifest.json', + 'themes/Testtheme/widgets/HeaderController/nls', + 'themes/Testtheme/widgets/HeaderController/PopupTileNodes.js', + 'themes/Testtheme/widgets/HeaderController/setting', + 'themes/Testtheme/widgets/HeaderController/Widget.html', + 'themes/Testtheme/widgets/HeaderController/Widget.js', + 'themes/Testtheme/widgets/HeaderController/css/images', + 'themes/Testtheme/widgets/HeaderController/css/style.css', + 'themes/Testtheme/widgets/HeaderController/css/images/arrow.png', + 'themes/Testtheme/widgets/HeaderController/css/images/close.png', + 'themes/Testtheme/widgets/HeaderController/images/app-logo.png', + 'themes/Testtheme/widgets/HeaderController/images/group_icon.png', + 'themes/Testtheme/widgets/HeaderController/images/icon.png', + 'themes/Testtheme/widgets/HeaderController/images/more_icon.png', + 'themes/Testtheme/widgets/HeaderController/nls/ar', + 'themes/Testtheme/widgets/HeaderController/nls/cs', + 'themes/Testtheme/widgets/HeaderController/nls/da', + 'themes/Testtheme/widgets/HeaderController/nls/de', + 'themes/Testtheme/widgets/HeaderController/nls/es', + 'themes/Testtheme/widgets/HeaderController/nls/et', + 'themes/Testtheme/widgets/HeaderController/nls/fi', + 'themes/Testtheme/widgets/HeaderController/nls/fr', + 'themes/Testtheme/widgets/HeaderController/nls/he', + 'themes/Testtheme/widgets/HeaderController/nls/it', + 'themes/Testtheme/widgets/HeaderController/nls/ja', + 'themes/Testtheme/widgets/HeaderController/nls/ko', + 'themes/Testtheme/widgets/HeaderController/nls/lt', + 'themes/Testtheme/widgets/HeaderController/nls/lv', + 'themes/Testtheme/widgets/HeaderController/nls/nb', + 'themes/Testtheme/widgets/HeaderController/nls/nl', + 'themes/Testtheme/widgets/HeaderController/nls/pl', + 'themes/Testtheme/widgets/HeaderController/nls/pt-BR', + 'themes/Testtheme/widgets/HeaderController/nls/pt-PT', + 'themes/Testtheme/widgets/HeaderController/nls/ro', + 'themes/Testtheme/widgets/HeaderController/nls/ru', + 'themes/Testtheme/widgets/HeaderController/nls/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/sv', + 'themes/Testtheme/widgets/HeaderController/nls/th', + 'themes/Testtheme/widgets/HeaderController/nls/tr', + 'themes/Testtheme/widgets/HeaderController/nls/zh-cn', + 'themes/Testtheme/widgets/HeaderController/nls/ar/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/cs/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/da/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/de/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/es/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/et/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/fi/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/fr/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/he/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/it/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/ja/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/ko/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/lt/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/lv/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/nb/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/nl/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/pl/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/pt-BR/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/pt-PT/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/ro/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/ru/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/sv/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/th/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/tr/strings.js', + 'themes/Testtheme/widgets/HeaderController/nls/zh-cn/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/css', + 'themes/Testtheme/widgets/HeaderController/setting/nls', + 'themes/Testtheme/widgets/HeaderController/setting/Setting.html', + 'themes/Testtheme/widgets/HeaderController/setting/Setting.js', + 'themes/Testtheme/widgets/HeaderController/setting/css/style.css', + 'themes/Testtheme/widgets/HeaderController/setting/nls/ar', + 'themes/Testtheme/widgets/HeaderController/setting/nls/cs', + 'themes/Testtheme/widgets/HeaderController/setting/nls/da', + 'themes/Testtheme/widgets/HeaderController/setting/nls/de', + 'themes/Testtheme/widgets/HeaderController/setting/nls/es', + 'themes/Testtheme/widgets/HeaderController/setting/nls/et', + 'themes/Testtheme/widgets/HeaderController/setting/nls/fi', + 'themes/Testtheme/widgets/HeaderController/setting/nls/fr', + 'themes/Testtheme/widgets/HeaderController/setting/nls/he', + 'themes/Testtheme/widgets/HeaderController/setting/nls/it', + 'themes/Testtheme/widgets/HeaderController/setting/nls/ja', + 'themes/Testtheme/widgets/HeaderController/setting/nls/ko', + 'themes/Testtheme/widgets/HeaderController/setting/nls/lt', + 'themes/Testtheme/widgets/HeaderController/setting/nls/lv', + 'themes/Testtheme/widgets/HeaderController/setting/nls/nb', + 'themes/Testtheme/widgets/HeaderController/setting/nls/nl', + 'themes/Testtheme/widgets/HeaderController/setting/nls/pl', + 'themes/Testtheme/widgets/HeaderController/setting/nls/pt-BR', + 'themes/Testtheme/widgets/HeaderController/setting/nls/pt-PT', + 'themes/Testtheme/widgets/HeaderController/setting/nls/ro', + 'themes/Testtheme/widgets/HeaderController/setting/nls/ru', + 'themes/Testtheme/widgets/HeaderController/setting/nls/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/sv', + 'themes/Testtheme/widgets/HeaderController/setting/nls/th', + 'themes/Testtheme/widgets/HeaderController/setting/nls/tr', + 'themes/Testtheme/widgets/HeaderController/setting/nls/zh-cn', + 'themes/Testtheme/widgets/HeaderController/setting/nls/ar/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/cs/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/da/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/de/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/es/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/et/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/fi/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/fr/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/he/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/it/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/ja/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/ko/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/lt/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/lv/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/nb/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/nl/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/pl/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/pt-BR/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/pt-PT/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/ro/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/ru/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/sv/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/th/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/tr/strings.js', + 'themes/Testtheme/widgets/HeaderController/setting/nls/zh-cn/strings.js' + ]; + helpers.assertFile(expected); + }); + + it('should set author in manifest.json ', function() { + helpers.assertFileContent('themes/Testtheme/manifest.json', /"author": "Test Authorsen"/g); + }); + + it('should set themeName in manifest.json ', function() { + helpers.assertFileContent('themes/Testtheme/manifest.json', /"name": "Testtheme"/g); + }); + + it('should set description in manifest.json ', function() { + helpers.assertFileContent('themes/Testtheme/manifest.json', /"description": "A test theme."/g); + }); + + }); + +}); \ No newline at end of file diff --git a/theme/index.js b/theme/index.js index 1ee5142..42f0a5b 100644 --- a/theme/index.js +++ b/theme/index.js @@ -66,7 +66,9 @@ var ThemeGenerator = yeoman.generators.Base.extend({ var context = { themeName: this.themeName, - themeNameClean: this.themeNameClean + themeNameClean: this.themeNameClean, + author: this.author, + desc: this.description }; this.template('_manifest.json', path.join(basePath, 'manifest.json'), context); diff --git a/theme/listfiles.txt b/theme/listfiles.txt new file mode 100644 index 0000000..e352e75 --- /dev/null +++ b/theme/listfiles.txt @@ -0,0 +1,171 @@ +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\index.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\listfiles.txt +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_common.css +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_config.json +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_images +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_layouts +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_manifest.json +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_package.json +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_images\cancel.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_images\close.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_images\double_arrow.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_images\icon.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_layouts\default +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_layouts\default\icon.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\FoldablePanel +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\SimpleBorderPanel +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\TitlePanel +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\Panel.html +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\Panel.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\bar_down.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\bar_left.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\bar_right.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\bar_up.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\nav_down.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\nav_left.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\nav_right.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\nav_up.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\FoldablePanel\FoldableDijit.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\FoldablePanel\FoldableWidgetFrame.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\FoldablePanel\Panel.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\SimpleBorderPanel\Panel.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\TitlePanel\Panel.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\black +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\cyan +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\default +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\green +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\black\style.css +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\cyan\style.css +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\default\style.css +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\green\style.css +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\config.json +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\css +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\images +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\manifest.json +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\PopupTileNodes.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\Widget.html +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\Widget.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\css\images +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\css\style.css +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\css\images\arrow.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\css\images\close.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\images\app-logo.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\images\group_icon.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\images\icon.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\images\more_icon.png +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ar +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\cs +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\da +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\de +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\es +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\et +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\fi +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\fr +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\he +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\it +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ja +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ko +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\lt +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\lv +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\nb +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\nl +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pl +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pt-BR +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pt-PT +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ro +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ru +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\sv +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\th +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\tr +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\zh-cn +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ar\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\cs\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\da\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\de\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\es\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\et\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\fi\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\fr\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\he\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\it\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ja\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ko\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\lt\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\lv\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\nb\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\nl\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pl\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pt-BR\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pt-PT\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ro\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ru\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\sv\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\th\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\tr\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\zh-cn\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\css +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\Setting.html +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\Setting.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\css\style.css +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ar +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\cs +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\da +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\de +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\es +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\et +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\fi +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\fr +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\he +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\it +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ja +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ko +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\lt +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\lv +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\nb +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\nl +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pl +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pt-BR +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pt-PT +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ro +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ru +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\sv +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\th +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\tr +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\zh-cn +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ar\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\cs\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\da\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\de\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\es\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\et\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\fi\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\fr\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\he\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\it\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ja\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ko\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\lt\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\lv\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\nb\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\nl\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pl\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pt-BR\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pt-PT\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ro\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ru\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\sv\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\th\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\tr\strings.js +C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\zh-cn\strings.js diff --git a/theme/templates/_bower.json b/theme/templates/_bower.json deleted file mode 100644 index 2b4eb38..0000000 --- a/theme/templates/_bower.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "package", - "version": "0.0.0", - "dependencies": {} -} - diff --git a/theme/templates/_manifest.json b/theme/templates/_manifest.json index 1a06c7b..176b609 100644 --- a/theme/templates/_manifest.json +++ b/theme/templates/_manifest.json @@ -46,8 +46,8 @@ } ], "version": "0.0.1", - "author": "<=% author %>", - "description": "<=% desc %>", + "author": "<%= author %>", + "description": "<%= desc %>", "copyright": "", "license": "http://www.apache.org/licenses/LICENSE-2.0" } diff --git a/theme/templates/_package.json b/theme/templates/_package.json deleted file mode 100644 index fba8e01..0000000 --- a/theme/templates/_package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "package", - "version": "0.0.0", - "dependencies": {} -} From d0b19924ba21e2a7454649935d299e6244960341 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20P=C3=B8hner=20Henriksen?= Date: Wed, 15 Oct 2014 15:26:16 +0200 Subject: [PATCH 5/8] Appened theme generator section into README --- README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 21ff044..096bf60 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## About -This generator scaffolds out the boilerplate files that are needed when you are customizing the Web AppBuilder. This includes [generators](#running-the-generators) to creates project files (`package.json`, `.jshintrc`, etc) and scaffold out the files needed to create a new custom widget +This generator scaffolds out the boilerplate files that are needed when you are customizing the Web AppBuilder. This includes [generators](#running-the-generators) to creates project files (`package.json`, `.jshintrc`, etc) and scaffold out the files needed to create a new custom widget and custom theme. ![Screenshot](https://raw.githubusercontent.com/Esri/generator-esri-appbuilder-js/master/docs/images/running-the-generators.png) @@ -83,6 +83,20 @@ The next time you run the Web AppBuilder, you will see something like the follow ![Widget in the Builder](https://raw.githubusercontent.com/Esri/generator-esri-appbuilder-js/master/docs/images/widget-in-builder.png) +### Theme Generator + +Scaffolds out the files needed to create a new custom theme. + +1. Navigate into either `stemapp` or `builder/apps/[appId]` under your local Web AppBuilder installation +2. Run the generator with `yo esri-appbuilder-js:theme` +3. Answer the man's questions! + +|Prompt|Description|Default| +|------|-----------|-------| +|Theme Name|Folder name for output files and theme identifier|DefaultThemeName| +|Description|Give a description of your custom theme|A good description of my theme...| +|Author|Your name or organization to be associated with the theme|My organization| + ## Issues Find a bug or want to request a new feature? Please let us know by [submitting an issue](https://github.com/Esri/generator-esri-appbuilder-js/issues). From e6a1e05f6a1c835ceac240a0cff5bb2afd277ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20P=C3=B8hner=20Henriksen?= Date: Wed, 15 Oct 2014 15:29:57 +0200 Subject: [PATCH 6/8] added a more detailed theme generator section in Readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 096bf60..73a7063 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ The next time you run the Web AppBuilder, you will see something like the follow ### Theme Generator -Scaffolds out the files needed to create a new custom theme. +Scaffolds out the files needed to create a new custom theme based on the default Foldable Theme by Esri. 1. Navigate into either `stemapp` or `builder/apps/[appId]` under your local Web AppBuilder installation 2. Run the generator with `yo esri-appbuilder-js:theme` From 269abf42d5a752579fc10ea42c8b7b9a56c71158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20P=C3=B8hner=20Henriksen?= Date: Wed, 15 Oct 2014 15:37:08 +0200 Subject: [PATCH 7/8] Removing unwanted files --- theme/listfiles.txt | 171 -------------------------------------------- 1 file changed, 171 deletions(-) delete mode 100644 theme/listfiles.txt diff --git a/theme/listfiles.txt b/theme/listfiles.txt deleted file mode 100644 index e352e75..0000000 --- a/theme/listfiles.txt +++ /dev/null @@ -1,171 +0,0 @@ -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\index.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\listfiles.txt -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_common.css -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_config.json -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_images -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_layouts -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_manifest.json -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_package.json -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_images\cancel.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_images\close.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_images\double_arrow.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_images\icon.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_layouts\default -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_layouts\default\icon.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\FoldablePanel -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\SimpleBorderPanel -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\TitlePanel -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\Panel.html -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\Panel.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\bar_down.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\bar_left.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\bar_right.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\bar_up.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\nav_down.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\nav_left.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\nav_right.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\DockablePanel\images\nav_up.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\FoldablePanel\FoldableDijit.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\FoldablePanel\FoldableWidgetFrame.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\FoldablePanel\Panel.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\SimpleBorderPanel\Panel.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_panels\TitlePanel\Panel.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\black -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\cyan -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\default -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\green -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\black\style.css -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\cyan\style.css -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\default\style.css -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_styles\green\style.css -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\config.json -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\css -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\images -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\manifest.json -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\PopupTileNodes.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\Widget.html -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\Widget.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\css\images -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\css\style.css -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\css\images\arrow.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\css\images\close.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\images\app-logo.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\images\group_icon.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\images\icon.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\images\more_icon.png -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ar -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\cs -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\da -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\de -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\es -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\et -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\fi -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\fr -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\he -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\it -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ja -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ko -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\lt -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\lv -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\nb -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\nl -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pl -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pt-BR -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pt-PT -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ro -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ru -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\sv -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\th -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\tr -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\zh-cn -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ar\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\cs\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\da\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\de\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\es\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\et\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\fi\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\fr\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\he\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\it\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ja\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ko\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\lt\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\lv\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\nb\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\nl\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pl\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pt-BR\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\pt-PT\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ro\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\ru\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\sv\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\th\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\tr\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\nls\zh-cn\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\css -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\Setting.html -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\Setting.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\css\style.css -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ar -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\cs -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\da -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\de -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\es -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\et -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\fi -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\fr -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\he -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\it -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ja -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ko -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\lt -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\lv -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\nb -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\nl -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pl -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pt-BR -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pt-PT -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ro -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ru -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\sv -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\th -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\tr -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\zh-cn -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ar\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\cs\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\da\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\de\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\es\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\et\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\fi\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\fr\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\he\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\it\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ja\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ko\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\lt\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\lv\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\nb\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\nl\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pl\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pt-BR\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\pt-PT\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ro\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\ru\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\sv\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\th\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\tr\strings.js -C:\Users\steffenh\Documents\Prosjekt\generator-esri-appbuilder-js\theme\templates\_widgets\HeaderController\setting\nls\zh-cn\strings.js From 628a784bde2ffc1afeb3b12e86b0ebe3aa07a82b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20P=C3=B8hner=20Henriksen?= Date: Thu, 16 Oct 2014 15:04:25 +0200 Subject: [PATCH 8/8] fix for redundant folder --- theme/index.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/theme/index.js b/theme/index.js index 42f0a5b..ed856b8 100644 --- a/theme/index.js +++ b/theme/index.js @@ -45,10 +45,6 @@ var ThemeGenerator = yeoman.generators.Base.extend({ }.bind(this)); }, - app: function () { - this.dest.mkdir(this.themeNameClean); - }, - projectfiles: function () { // NOTE: this is needed b/c _Widget.html has ES6 style interpolation delimiters // see: https://github.com/lodash/lodash/issues/399