diff --git a/extensions/mistral/static/mistral/js/angular-templates/collapsible-panel.html b/extensions/mistral/static/mistral/js/angular-templates/collapsible-panel.html
new file mode 100644
index 0000000..33e4c48
--- /dev/null
+++ b/extensions/mistral/static/mistral/js/angular-templates/collapsible-panel.html
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/extensions/mistral/static/mistral/js/controllers.js b/extensions/mistral/static/mistral/js/controllers.js
new file mode 100644
index 0000000..286fe9e
--- /dev/null
+++ b/extensions/mistral/static/mistral/js/controllers.js
@@ -0,0 +1,71 @@
+/**
+ * Created by tsufiev on 12/29/14.
+ */
+
+(function() {
+ angular.module('hz')
+
+ .controller('actionsCtrl', function($scope) {
+ $scope.actions = [
+ [{
+ name: 'Name',
+ type: 'string',
+ value: 'Action1'
+ }, {
+ name: 'Base',
+ type: 'string',
+ value: 'nova.create_server'
+ }, {
+ name: 'Base Input',
+ type: 'fixedlist'
+ }, {
+ name: 'Input',
+ type: 'list',
+ value: [{
+ type: 'string',
+ value: ''
+ }]
+ }, {
+ name: 'Output',
+ type: 'varlist',
+ value: [{
+ type: 'string',
+ value: ''
+ }, {
+ type: 'dictionary',
+ value: [{
+ name: 'key1',
+ type: 'string',
+ value: ''
+ }, {
+ name: 'key2',
+ type: 'string',
+ value: ''
+ }]
+ }, {
+ type: 'list',
+ value: [{
+ type: 'string',
+ value: ''
+ }, {
+ type: 'string',
+ value: ''
+ }]
+ }]
+ }]];
+
+ $scope.baseTypes = {
+ 'nova.create_server': [{
+ name: 'Flavor Id',
+ type: 'string'
+ }, {
+ name: 'Image Id',
+ type: 'string'
+ }]
+ }
+ })
+
+ .controller('workflowsCtrl', function() {
+
+ });
+})();
\ No newline at end of file
diff --git a/extensions/mistral/static/mistral/js/directives.js b/extensions/mistral/static/mistral/js/directives.js
index 6f4817a..e7be3e8 100644
--- a/extensions/mistral/static/mistral/js/directives.js
+++ b/extensions/mistral/static/mistral/js/directives.js
@@ -52,4 +52,26 @@
}
})
+ .directive('action', function() {
+ return {
+ restrict: 'E',
+ scope: {}
+ }
+ })
+
+ .directive('collapsiblePanel', function($parse, idGenerator) {
+ return {
+ restrict: 'E',
+ templateUrl: '/static/mistral/js/angular-templates/collapsible-panel.html',
+ transclude: true,
+ scope: {
+ panelTitle: '@',
+ removable: '='
+ },
+ link: function(scope) {
+ scope.panelId = idGenerator();
+ }
+ }
+ })
+
})();
diff --git a/extensions/mistral/static/mistral/js/services.js b/extensions/mistral/static/mistral/js/services.js
new file mode 100644
index 0000000..e5143ea
--- /dev/null
+++ b/extensions/mistral/static/mistral/js/services.js
@@ -0,0 +1,14 @@
+/**
+ * Created by tsufiev on 12/29/14.
+ */
+
+(function() {
+ angular.module('hz')
+ .factory('idGenerator', function() {
+ var id = 0;
+ return function() {
+ id++;
+ return 'elem-id-'+id;
+ };
+ })
+})();
\ No newline at end of file
diff --git a/extensions/mistral/templates/mistral/create.html b/extensions/mistral/templates/mistral/create.html
index 4c54877..3741419 100644
--- a/extensions/mistral/templates/mistral/create.html
+++ b/extensions/mistral/templates/mistral/create.html
@@ -22,7 +22,9 @@
});
+
+
{% endblock %}
{% block css %}
@@ -81,533 +83,516 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
-
-
-
-
-
+
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+