matestack-ui-core 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of matestack-ui-core might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +230 -0
- data/Rakefile +34 -0
- data/app/assets/config/basemate_ui_core_manifest.js +2 -0
- data/app/assets/javascripts/basemate/ui/core/application.js +15 -0
- data/app/assets/stylesheets/basemate/ui/core/application.css +15 -0
- data/app/concepts/absolute/cell/absolute.rb +17 -0
- data/app/concepts/absolute/view/absolute.haml +3 -0
- data/app/concepts/action/cell/action.rb +52 -0
- data/app/concepts/action/js/action.js +49 -0
- data/app/concepts/action/view/action.haml +3 -0
- data/app/concepts/app/cell/app.rb +76 -0
- data/app/concepts/app/js/app.js +27 -0
- data/app/concepts/app/js/store.js +71 -0
- data/app/concepts/app/utils/app_node.rb +53 -0
- data/app/concepts/app/view/app.haml +4 -0
- data/app/concepts/async/cell/async.rb +10 -0
- data/app/concepts/async/js/async.js +57 -0
- data/app/concepts/async/view/async.haml +2 -0
- data/app/concepts/br/cell/br.rb +5 -0
- data/app/concepts/br/view/br.haml +5 -0
- data/app/concepts/button/cell/button.rb +5 -0
- data/app/concepts/button/view/button.haml +7 -0
- data/app/concepts/component/cell/dynamic.rb +226 -0
- data/app/concepts/component/cell/static.rb +16 -0
- data/app/concepts/component/js/anonym-dynamic-component.js +10 -0
- data/app/concepts/component/js/component.js +60 -0
- data/app/concepts/component/utils/component_node.rb +69 -0
- data/app/concepts/component/view/children.haml +2 -0
- data/app/concepts/component/view/dynamic.haml +6 -0
- data/app/concepts/component/view/dynamic_without_rerender.haml +2 -0
- data/app/concepts/component/view/response.haml +2 -0
- data/app/concepts/component/view/response_dynamic.haml +7 -0
- data/app/concepts/component/view/response_dynamic_without_rerender.haml +3 -0
- data/app/concepts/component/view/static.haml +1 -0
- data/app/concepts/core/js/core.js +27 -0
- data/app/concepts/core/js/event-hub.js +5 -0
- data/app/concepts/div/cell/div.rb +6 -0
- data/app/concepts/div/view/div.haml +3 -0
- data/app/concepts/footer/cell/footer.rb +5 -0
- data/app/concepts/footer/view/footer.haml +3 -0
- data/app/concepts/form/cell/form.rb +71 -0
- data/app/concepts/form/cell/inline.rb +9 -0
- data/app/concepts/form/cell/input.rb +74 -0
- data/app/concepts/form/cell/select.rb +73 -0
- data/app/concepts/form/cell/submit.rb +9 -0
- data/app/concepts/form/js/form.js +136 -0
- data/app/concepts/form/view/form.haml +2 -0
- data/app/concepts/form/view/inline.haml +6 -0
- data/app/concepts/form/view/input.haml +29 -0
- data/app/concepts/form/view/select.haml +72 -0
- data/app/concepts/form/view/submit.haml +3 -0
- data/app/concepts/header/cell/header.rb +5 -0
- data/app/concepts/header/view/header.haml +3 -0
- data/app/concepts/heading/cell/heading.rb +5 -0
- data/app/concepts/heading/view/heading.haml +50 -0
- data/app/concepts/html/cell/html.rb +17 -0
- data/app/concepts/html/js/html.js +10 -0
- data/app/concepts/html/view/html.haml +3 -0
- data/app/concepts/icon/cell/icon.rb +5 -0
- data/app/concepts/icon/view/icon.haml +6 -0
- data/app/concepts/img/cell/img.rb +5 -0
- data/app/concepts/img/view/img.haml +1 -0
- data/app/concepts/input/cell/input.rb +5 -0
- data/app/concepts/input/view/input.haml +3 -0
- data/app/concepts/label/cell/label.rb +5 -0
- data/app/concepts/label/view/label.haml +7 -0
- data/app/concepts/li/cell/li.rb +5 -0
- data/app/concepts/li/view/li.haml +6 -0
- data/app/concepts/link/cell/link.rb +24 -0
- data/app/concepts/link/view/link.haml +6 -0
- data/app/concepts/main/cell/main.rb +5 -0
- data/app/concepts/main/view/main.haml +3 -0
- data/app/concepts/nav/cell/nav.rb +5 -0
- data/app/concepts/nav/view/nav.haml +3 -0
- data/app/concepts/ol/cell/ol.rb +5 -0
- data/app/concepts/ol/view/ol.haml +3 -0
- data/app/concepts/onclick/cell/onclick.rb +6 -0
- data/app/concepts/onclick/js/onclick.js +21 -0
- data/app/concepts/onclick/view/onclick.haml +2 -0
- data/app/concepts/page/cell/content.rb +5 -0
- data/app/concepts/page/cell/page.rb +128 -0
- data/app/concepts/page/js/content.js +17 -0
- data/app/concepts/page/utils/page_node.rb +66 -0
- data/app/concepts/page/view/content.haml +7 -0
- data/app/concepts/page/view/page.haml +9 -0
- data/app/concepts/partial/cell/partial.rb +5 -0
- data/app/concepts/partial/view/partial.haml +2 -0
- data/app/concepts/pg/cell/pg.rb +5 -0
- data/app/concepts/pg/view/pg.haml +8 -0
- data/app/concepts/plain/cell/plain.rb +10 -0
- data/app/concepts/progress/cell/progress.rb +5 -0
- data/app/concepts/progress/view/progress.haml +3 -0
- data/app/concepts/section/cell/section.rb +5 -0
- data/app/concepts/section/view/section.haml +3 -0
- data/app/concepts/shared/utils/to_cell.rb +126 -0
- data/app/concepts/slot/cell/slot.rb +10 -0
- data/app/concepts/slot/view/slot.haml +2 -0
- data/app/concepts/span/cell/span.rb +5 -0
- data/app/concepts/span/view/span.haml +3 -0
- data/app/concepts/table/cell/table.rb +5 -0
- data/app/concepts/table/view/table.haml +3 -0
- data/app/concepts/td/cell/td.rb +5 -0
- data/app/concepts/td/view/td.haml +8 -0
- data/app/concepts/th/cell/th.rb +5 -0
- data/app/concepts/th/view/th.haml +8 -0
- data/app/concepts/tr/cell/tr.rb +5 -0
- data/app/concepts/tr/view/tr.haml +3 -0
- data/app/concepts/transition/cell/transition.rb +31 -0
- data/app/concepts/transition/js/transition.js +26 -0
- data/app/concepts/transition/view/transition.haml +7 -0
- data/app/concepts/ul/cell/ul.rb +5 -0
- data/app/concepts/ul/view/ul.haml +3 -0
- data/app/concepts/view/cell/view.rb +7 -0
- data/app/concepts/view/js/view.js +42 -0
- data/app/concepts/view/view/view.haml +2 -0
- data/app/controllers/basemate/ui/core/application_controller.rb +9 -0
- data/app/controllers/basemate/ui/core/docs_controller.rb +17 -0
- data/app/helpers/matestack/ui/core/application_helper.rb +35 -0
- data/config/routes.rb +3 -0
- data/lib/matestack/ui/core.rb +15 -0
- data/lib/matestack/ui/core/engine.rb +19 -0
- data/lib/matestack/ui/core/version.rb +7 -0
- data/lib/tasks/matestack/ui/core_tasks.rake +4 -0
- data/vendor/assets/javascripts/manifest.json +4 -0
- data/vendor/assets/javascripts/matestack-ui-core.js +15055 -0
- data/vendor/assets/javascripts/matestack-ui-core.js.map +1 -0
- metadata +277 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
module App::Cell
|
2
|
+
class App < Trailblazer::Cell
|
3
|
+
include ActionView::Helpers::ActiveModelHelper
|
4
|
+
include ActionView::Helpers::ActiveModelInstanceTag
|
5
|
+
include ActionView::Helpers::AssetTagHelper
|
6
|
+
include ActionView::Helpers::AssetUrlHelper
|
7
|
+
include ActionView::Helpers::AtomFeedHelper
|
8
|
+
include ActionView::Helpers::CacheHelper
|
9
|
+
include ActionView::Helpers::CaptureHelper
|
10
|
+
include ActionView::Helpers::CspHelper
|
11
|
+
include ActionView::Helpers::CsrfHelper
|
12
|
+
include ActionView::Helpers::DateHelper
|
13
|
+
include ActionView::Helpers::DebugHelper
|
14
|
+
include ActionView::Helpers::FormHelper
|
15
|
+
include ActionView::Helpers::FormOptionsHelper
|
16
|
+
include ActionView::Helpers::FormTagHelper
|
17
|
+
include ActionView::Helpers::JavaScriptHelper
|
18
|
+
include ActionView::Helpers::NumberHelper
|
19
|
+
include ActionView::Helpers::OutputSafetyHelper
|
20
|
+
include ActionView::Helpers::RecordTagHelper
|
21
|
+
# include ActionView::Helpers::RenderingHelper
|
22
|
+
include ActionView::Helpers::SanitizeHelper
|
23
|
+
include ActionView::Helpers::TagHelper
|
24
|
+
include ActionView::Helpers::TextHelper
|
25
|
+
include ActionView::Helpers::TranslationHelper
|
26
|
+
include ActionView::Helpers::UrlHelper
|
27
|
+
include ::Cell::Haml
|
28
|
+
include ::Matestack::Ui::Core::ApplicationHelper
|
29
|
+
include Shared::Utils::ToCell
|
30
|
+
# include ::Rails.application.routes.url_helpers
|
31
|
+
|
32
|
+
view_paths << "#{Matestack::Ui::Core::Engine.root}/app/concepts"
|
33
|
+
|
34
|
+
def initialize(model=nil, options={})
|
35
|
+
super
|
36
|
+
@nodes = {}
|
37
|
+
@cells = {}
|
38
|
+
@page_block = nil
|
39
|
+
@page_id = ""
|
40
|
+
setup
|
41
|
+
end
|
42
|
+
|
43
|
+
def setup
|
44
|
+
true
|
45
|
+
end
|
46
|
+
|
47
|
+
def prepare
|
48
|
+
true
|
49
|
+
end
|
50
|
+
|
51
|
+
def show(page_id, page_nodes, &block)
|
52
|
+
@page_id = page_id
|
53
|
+
@page_nodes = page_nodes
|
54
|
+
prepare
|
55
|
+
response
|
56
|
+
render(view: :app, &block)
|
57
|
+
end
|
58
|
+
|
59
|
+
def page_nodes
|
60
|
+
@page_nodes
|
61
|
+
end
|
62
|
+
|
63
|
+
def components(&block)
|
64
|
+
@nodes = ::App::Utils::AppNode.build(self, &block)
|
65
|
+
|
66
|
+
@nodes.each do |key, node|
|
67
|
+
@cells[key] = to_cell(key, node["component_name"], node["config"], node["argument"], node["components"], nil)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def partial(&block)
|
72
|
+
::App::Utils::AppNode.build(self, &block)
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import Vue from 'vue/dist/vue.esm'
|
2
|
+
import axios from 'axios'
|
3
|
+
import VRuntimeTemplate from "v-runtime-template"
|
4
|
+
import Vuex from 'vuex'
|
5
|
+
|
6
|
+
const componentDef = {
|
7
|
+
props: ['appConfig', 'params'],
|
8
|
+
data: function(){
|
9
|
+
return {}
|
10
|
+
},
|
11
|
+
computed: Vuex.mapState({
|
12
|
+
asyncTemplate: state => state.pageTemplate,
|
13
|
+
}),
|
14
|
+
mounted: function(){
|
15
|
+
const self = this;
|
16
|
+
window.onpopstate = function(event) {
|
17
|
+
self.$store.dispatch("navigateTo", {url: document.location.pathname, backwards: true} );
|
18
|
+
}
|
19
|
+
},
|
20
|
+
components: {
|
21
|
+
VRuntimeTemplate: VRuntimeTemplate
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
let component = Vue.component('app-cell', componentDef)
|
26
|
+
|
27
|
+
export default componentDef
|
@@ -0,0 +1,71 @@
|
|
1
|
+
import Vue from 'vue/dist/vue.esm'
|
2
|
+
import Vuex from 'vuex'
|
3
|
+
import axios from 'axios'
|
4
|
+
|
5
|
+
import matestackEventHub from 'core/js/event-hub'
|
6
|
+
|
7
|
+
Vue.use(Vuex)
|
8
|
+
|
9
|
+
const store = new Vuex.Store({
|
10
|
+
state: {
|
11
|
+
pageTemplate: null,
|
12
|
+
currentPath: document.location.pathname
|
13
|
+
},
|
14
|
+
mutations: {
|
15
|
+
setPageTemplate (state, serverResponse){
|
16
|
+
state.pageTemplate = serverResponse
|
17
|
+
},
|
18
|
+
setCurrentPath (state, path){
|
19
|
+
state.currentPath = path
|
20
|
+
}
|
21
|
+
},
|
22
|
+
actions: {
|
23
|
+
navigateTo ({ commit, state }, { url, backwards }) {
|
24
|
+
matestackEventHub.$emit("page_loading", url);
|
25
|
+
if (typeof matestackUiCoreTransitionStart !== 'undefined') {
|
26
|
+
matestackUiCoreTransitionStart(url);
|
27
|
+
}
|
28
|
+
if (!window.history.pushState) {
|
29
|
+
document.location.href = url;
|
30
|
+
return;
|
31
|
+
}
|
32
|
+
return new Promise((resolve, reject) => {
|
33
|
+
axios({
|
34
|
+
method: "get",
|
35
|
+
url: url,
|
36
|
+
headers: {
|
37
|
+
'X-CSRF-Token': document.getElementsByName("csrf-token")[0].getAttribute('content')
|
38
|
+
},
|
39
|
+
params: {"only_page": true}
|
40
|
+
})
|
41
|
+
.then(function(response){
|
42
|
+
if (backwards){
|
43
|
+
window.history.replaceState({matestackApp: true, url: url}, null, url);
|
44
|
+
} else {
|
45
|
+
window.history.pushState({matestackApp: true, url: url}, null, url);
|
46
|
+
}
|
47
|
+
setTimeout(function () {
|
48
|
+
resolve(response["data"])
|
49
|
+
commit('setPageTemplate', response["data"])
|
50
|
+
commit('setCurrentPath', url)
|
51
|
+
matestackEventHub.$emit("page_loaded", url);
|
52
|
+
if (typeof matestackUiCoreTransitionSuccess !== 'undefined') {
|
53
|
+
matestackUiCoreTransitionSuccess(url);
|
54
|
+
}
|
55
|
+
}, 5);
|
56
|
+
})
|
57
|
+
.catch(function(error){
|
58
|
+
setTimeout(function () {
|
59
|
+
resolve(error)
|
60
|
+
matestackEventHub.$emit("page_loading_error", error);
|
61
|
+
if (typeof matestackUiCoreTransitionError !== 'undefined') {
|
62
|
+
matestackUiCoreTransitionError(url);
|
63
|
+
}
|
64
|
+
}, 5);
|
65
|
+
})
|
66
|
+
})
|
67
|
+
}
|
68
|
+
}
|
69
|
+
})
|
70
|
+
|
71
|
+
export default store
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module App::Utils
|
2
|
+
class AppNode
|
3
|
+
|
4
|
+
def self.build(app_instance, &block)
|
5
|
+
node = AppNode.new(app_instance)
|
6
|
+
node.instance_eval(&block)
|
7
|
+
node.hash
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :hash
|
11
|
+
|
12
|
+
def initialize(app_instance)
|
13
|
+
@hash = {}
|
14
|
+
@node_start_id = 0
|
15
|
+
@app_instance = app_instance
|
16
|
+
app_instance.instance_variables.each do |app_instance_var_key|
|
17
|
+
self.instance_variable_set(app_instance_var_key, app_instance.instance_variable_get(app_instance_var_key))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def method_missing meth, *args, &block
|
22
|
+
begin
|
23
|
+
@app_instance.send(meth, *args, &block)
|
24
|
+
rescue
|
25
|
+
node_id = @node_start_id + 1
|
26
|
+
@node_start_id = node_id
|
27
|
+
current_node = "#{meth}_#{@node_start_id}"
|
28
|
+
@hash[current_node] = {}
|
29
|
+
@hash[current_node]["component_name"] = meth.to_s
|
30
|
+
@hash[current_node]["config"] = {}
|
31
|
+
@hash[current_node]["argument"] = nil
|
32
|
+
|
33
|
+
if meth == :page_content
|
34
|
+
@hash[current_node]["components"] = @app_instance.send(:page_nodes)
|
35
|
+
elsif meth == :partial
|
36
|
+
@hash[current_node]["components"] = @app_instance.send(args.first, *args.drop(1))
|
37
|
+
else
|
38
|
+
if args.first.is_a?(Hash)
|
39
|
+
@hash[current_node]["config"] = args.first
|
40
|
+
else
|
41
|
+
@hash[current_node]["argument"] = args.first
|
42
|
+
end
|
43
|
+
|
44
|
+
if block_given?
|
45
|
+
@hash[current_node]["components"] = AppNode.build(@app_instance, &block)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import Vue from 'vue/dist/vue.esm'
|
2
|
+
|
3
|
+
import matestackEventHub from 'core/js/event-hub'
|
4
|
+
|
5
|
+
import componentMixin from 'component/js/component'
|
6
|
+
|
7
|
+
const componentDef = {
|
8
|
+
mixins: [componentMixin],
|
9
|
+
data: function(){
|
10
|
+
return {
|
11
|
+
showing: true,
|
12
|
+
hide_after_timeout: null,
|
13
|
+
event: {
|
14
|
+
data: {}
|
15
|
+
}
|
16
|
+
}
|
17
|
+
},
|
18
|
+
methods: {
|
19
|
+
show: function(event_data){
|
20
|
+
const self = this
|
21
|
+
this.showing = true
|
22
|
+
this.event.data = event_data
|
23
|
+
if(this.componentConfig["hide_after"] != undefined){
|
24
|
+
self.hide_after_timeout = setTimeout(function () {
|
25
|
+
self.hide()
|
26
|
+
}, parseInt(this.componentConfig["hide_after"]));
|
27
|
+
}
|
28
|
+
},
|
29
|
+
hide: function(){
|
30
|
+
this.showing = false
|
31
|
+
this.event.data = {}
|
32
|
+
}
|
33
|
+
},
|
34
|
+
created: function () {
|
35
|
+
const self = this
|
36
|
+
matestackEventHub.$on(this.componentConfig["rerender_on"], self.rerender)
|
37
|
+
matestackEventHub.$on(this.componentConfig["show_on"], self.show)
|
38
|
+
matestackEventHub.$on(this.componentConfig["hide_on"], self.hide)
|
39
|
+
if(this.componentConfig["show_on"] != undefined){
|
40
|
+
this.showing = false
|
41
|
+
}
|
42
|
+
if(this.componentConfig["hide_on"] != undefined){
|
43
|
+
this.showing = true
|
44
|
+
}
|
45
|
+
},
|
46
|
+
beforeDestroy: function() {
|
47
|
+
const self = this
|
48
|
+
clearTimeout(self.hide_after_timeout)
|
49
|
+
matestackEventHub.$off(this.componentConfig["rerender_on"], self.rerender);
|
50
|
+
matestackEventHub.$off(this.componentConfig["show_on"], self.show);
|
51
|
+
matestackEventHub.$off(this.componentConfig["hide_on"], self.hide);
|
52
|
+
},
|
53
|
+
}
|
54
|
+
|
55
|
+
let component = Vue.component('async-cell', componentDef)
|
56
|
+
|
57
|
+
export default componentDef
|
@@ -0,0 +1,226 @@
|
|
1
|
+
module Component::Cell
|
2
|
+
class Dynamic < Trailblazer::Cell
|
3
|
+
include ActionView::Helpers::ActiveModelHelper
|
4
|
+
include ActionView::Helpers::ActiveModelInstanceTag
|
5
|
+
include ActionView::Helpers::AssetTagHelper
|
6
|
+
include ActionView::Helpers::AssetUrlHelper
|
7
|
+
include ActionView::Helpers::AtomFeedHelper
|
8
|
+
include ActionView::Helpers::CacheHelper
|
9
|
+
include ActionView::Helpers::CaptureHelper
|
10
|
+
include ActionView::Helpers::CspHelper
|
11
|
+
include ActionView::Helpers::CsrfHelper
|
12
|
+
include ActionView::Helpers::DateHelper
|
13
|
+
include ActionView::Helpers::DebugHelper
|
14
|
+
include ActionView::Helpers::FormHelper
|
15
|
+
include ActionView::Helpers::FormOptionsHelper
|
16
|
+
include ActionView::Helpers::FormTagHelper
|
17
|
+
include ActionView::Helpers::JavaScriptHelper
|
18
|
+
include ActionView::Helpers::NumberHelper
|
19
|
+
include ActionView::Helpers::OutputSafetyHelper
|
20
|
+
include ActionView::Helpers::RecordTagHelper
|
21
|
+
# include ActionView::Helpers::RenderingHelper
|
22
|
+
include ActionView::Helpers::SanitizeHelper
|
23
|
+
include ActionView::Helpers::TagHelper
|
24
|
+
include ActionView::Helpers::TextHelper
|
25
|
+
include ActionView::Helpers::TranslationHelper
|
26
|
+
include ActionView::Helpers::UrlHelper
|
27
|
+
# include ActionView::Helpers::UrlHelper
|
28
|
+
# include ActionView::Helpers::TranslationHelper
|
29
|
+
include ::Cell::Haml
|
30
|
+
include ::Matestack::Ui::Core::ApplicationHelper
|
31
|
+
include Shared::Utils::ToCell
|
32
|
+
|
33
|
+
view_paths << "#{Matestack::Ui::Core::Engine.root}/app/concepts"
|
34
|
+
view_paths << "#{::Rails.root}/app/matestack"
|
35
|
+
|
36
|
+
def initialize(model=nil, options={})
|
37
|
+
super
|
38
|
+
@component_config = options.except(:context, :children, :url_params, :included_config)
|
39
|
+
@url_params = options[:url_params].except(:action, :controller, :component_key)
|
40
|
+
@component_key = options[:component_key]
|
41
|
+
@children_cells = {}
|
42
|
+
@controller_context = context[:controller_context]
|
43
|
+
@argument = model
|
44
|
+
@static = false
|
45
|
+
@nodes = {}
|
46
|
+
@cells = {}
|
47
|
+
@included_config = options[:included_config]
|
48
|
+
@rerender = false
|
49
|
+
@options = options
|
50
|
+
generate_component_name
|
51
|
+
generate_children_cells
|
52
|
+
set_tag_attributes
|
53
|
+
validate_options
|
54
|
+
setup
|
55
|
+
end
|
56
|
+
|
57
|
+
def validate_options
|
58
|
+
if defined? self.class::REQUIRED_KEYS
|
59
|
+
self.class::REQUIRED_KEYS.each do |key|
|
60
|
+
raise "required key '#{key}' is missing" if options[key].nil?
|
61
|
+
end
|
62
|
+
end
|
63
|
+
custom_options_validation
|
64
|
+
end
|
65
|
+
|
66
|
+
def custom_options_validation
|
67
|
+
true
|
68
|
+
end
|
69
|
+
|
70
|
+
def setup
|
71
|
+
true
|
72
|
+
end
|
73
|
+
|
74
|
+
def show(&block)
|
75
|
+
if respond_to? :prepare
|
76
|
+
prepare
|
77
|
+
end
|
78
|
+
if respond_to? :response
|
79
|
+
response &block
|
80
|
+
if @static
|
81
|
+
render :response
|
82
|
+
else
|
83
|
+
if @rerender
|
84
|
+
render :response_dynamic
|
85
|
+
else
|
86
|
+
render :response_dynamic_without_rerender
|
87
|
+
end
|
88
|
+
end
|
89
|
+
else
|
90
|
+
if @static
|
91
|
+
render(view: :static, &block)
|
92
|
+
else
|
93
|
+
if @rerender
|
94
|
+
render(view: :dynamic, &block)
|
95
|
+
else
|
96
|
+
render(view: :dynamic_without_rerender, &block)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def render_children
|
103
|
+
render(view: :children)
|
104
|
+
end
|
105
|
+
|
106
|
+
def render_content(&block)
|
107
|
+
if respond_to? :prepare
|
108
|
+
prepare
|
109
|
+
end
|
110
|
+
if respond_to? :response
|
111
|
+
response &block
|
112
|
+
render :response
|
113
|
+
else
|
114
|
+
render do
|
115
|
+
render_children
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def component_id
|
121
|
+
options[:id] ||= nil
|
122
|
+
end
|
123
|
+
|
124
|
+
def js_action name, arguments
|
125
|
+
argumentString = arguments.join('", "')
|
126
|
+
argumentString = '"' + argumentString + '"'
|
127
|
+
[name, '(', argumentString, ')'].join("")
|
128
|
+
end
|
129
|
+
|
130
|
+
def navigate_to path
|
131
|
+
js_action("navigateTo", [path])
|
132
|
+
end
|
133
|
+
|
134
|
+
def components(&block)
|
135
|
+
@nodes = ::Component::Utils::ComponentNode.build(self, nil, &block)
|
136
|
+
|
137
|
+
@nodes.each do |key, node|
|
138
|
+
@cells[key] = to_cell(key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"])
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def partial(&block)
|
143
|
+
return ::Component::Utils::ComponentNode.build(self, nil, &block)
|
144
|
+
end
|
145
|
+
|
146
|
+
def slot(&block)
|
147
|
+
return ::Component::Utils::ComponentNode.build(self, nil, &block)
|
148
|
+
end
|
149
|
+
|
150
|
+
def get_children
|
151
|
+
return options[:children]
|
152
|
+
end
|
153
|
+
|
154
|
+
def to_css_class(symbol)
|
155
|
+
symbol.to_s.gsub("_", "-")
|
156
|
+
end
|
157
|
+
|
158
|
+
def modifiers
|
159
|
+
result = []
|
160
|
+
return unless defined? self.class::OPTIONS
|
161
|
+
self.class::OPTIONS.select{ |modifer_key, modifier_options|
|
162
|
+
modifier_options[:css_modifier] == true
|
163
|
+
}.each do |modifer_key, modifier_options|
|
164
|
+
if !options[modifer_key] == false || modifier_options[:default] == true
|
165
|
+
result << "#{to_css_class(self.class::CSSClASS)}--#{to_css_class(modifer_key)}"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
result.join(" ")
|
169
|
+
end
|
170
|
+
|
171
|
+
|
172
|
+
private
|
173
|
+
|
174
|
+
def generate_children_cells
|
175
|
+
unless options[:children].nil?
|
176
|
+
#needs refactoring --> in some cases, :component_key, :children, :origin_url, :url_params, :included_config get passed into options[:children] which causes errors
|
177
|
+
#quickfix: except them from iteration
|
178
|
+
options[:children].except(:component_key, :children, :origin_url, :url_params, :included_config).each do |key, node|
|
179
|
+
@children_cells[key] = to_cell("#{@component_key}__#{key}", node["component_name"], node["config"], node["argument"], node["components"], node["included_config"])
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
def generate_component_name
|
185
|
+
name_parts = self.class.name.split("::")
|
186
|
+
module_name = name_parts[0]
|
187
|
+
if module_name == "Components"
|
188
|
+
name_parts.shift
|
189
|
+
end
|
190
|
+
name = name_parts[0] + name_parts[1]
|
191
|
+
if name_parts[0] == name_parts[2]
|
192
|
+
name = name_parts[0] + name_parts[1]
|
193
|
+
@component_class = name.underscore.gsub("_", "-")
|
194
|
+
else
|
195
|
+
name = name_parts[0] + name_parts[2] + name_parts[1]
|
196
|
+
@component_class = name.underscore.gsub("_", "-")
|
197
|
+
end
|
198
|
+
@component_name = @component_class.gsub("-cell", "")
|
199
|
+
end
|
200
|
+
|
201
|
+
def set_tag_attributes
|
202
|
+
default_attributes = {
|
203
|
+
"id": component_id,
|
204
|
+
"class": options[:class]
|
205
|
+
}
|
206
|
+
unless options[:attributes].nil?
|
207
|
+
default_attributes.merge!(options[:attributes])
|
208
|
+
end
|
209
|
+
|
210
|
+
@tag_attributes = default_attributes
|
211
|
+
end
|
212
|
+
|
213
|
+
def dynamic_tag_attributes
|
214
|
+
attrs = {
|
215
|
+
"is": @component_class,
|
216
|
+
"ref": component_id,
|
217
|
+
":params": @url_params.to_json,
|
218
|
+
":component-config": @component_config.to_json,
|
219
|
+
"inline-template": true,
|
220
|
+
}
|
221
|
+
attrs.merge!(options[:attributes]) unless options[:attributes].nil?
|
222
|
+
return attrs
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|
226
|
+
end
|