designer 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06c10fc816f6482724649727d5821e2d1a8b94830424bb3a80599481f9880ef1
4
- data.tar.gz: 286a7149c4c6259ca391738680f4159204ea59a32c33f46ceb15574d7cf89a04
3
+ metadata.gz: ee447f7be3f902533ff04eb6ea3d02c850fd109d6e68ed9e96027ded4ce58e9c
4
+ data.tar.gz: 76a65f82c623196057d743d4972f08fcfb0cb03ace8d3104f35564aa1c54a891
5
5
  SHA512:
6
- metadata.gz: 5ba179dc8959b91f61a87ded776d299fec8089eef56406d21bc0d1861e00c106e79ec9521b702da938124ba67aaffb3543642a55a50fd7d153c58e8a19673f7e
7
- data.tar.gz: 7bbe1e69658e7d843f900a710e431456f8228aff2c2e7d5ad758331e6ccda6b3368bc8fd1e5bdf19e49bde9cbaa324f81108aa3937d1f9f3523803e8611fba41
6
+ metadata.gz: 6f4622a6fdaeeb6209576100c25ae6d6dcdc10ed44af51e9654faafc2f9f840bcd3cd2a3b46fce18b7b6df76228e6c34919218c1b127c8c2002f71710ee8d251
7
+ data.tar.gz: c8fb00bbf03d9eeca7930085672d6b807ed6374975f798120d5e13879dc33baebfcfbb0b169c4ce7658c1cf1dda8b3ca2de2e77975f1f636336b3b4f557d383f
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  node_modules/
3
3
  pkg/
4
4
  bak/
5
+ .gem
@@ -23,6 +23,11 @@ module Designer
23
23
  end
24
24
 
25
25
  def resource_params
26
+ if params[:resource] &&
27
+ params[:resource][:elements].present? &&
28
+ params[:resource][:elements].is_a?(String)
29
+ params[:resource][:elements] = JSON.parse(params[:resource][:elements])
30
+ end
26
31
  params.require(:resource).permit!
27
32
  end
28
33
 
@@ -9,7 +9,7 @@ module Designer
9
9
  end
10
10
 
11
11
  def update
12
- if @resource.update(resource_params.merge(elements: resource_elements))
12
+ if @resource.update(resource_params)
13
13
  render_success
14
14
  else
15
15
  render_error
@@ -22,13 +22,6 @@ module Designer
22
22
 
23
23
  protected
24
24
 
25
- def resource_elements
26
- # BUG: The front end stringifies the elements JSON, but this is getting
27
- # auto-parsed by Rails only in production, so check if it's a string first.
28
- @resource_elements ||= params[:resource][:elements]&.is_a?(String) ?
29
- JSON.parse(params[:resource][:elements]) : params[:resource][:elements]
30
- end
31
-
32
25
  def render_success message = nil
33
26
  if request.xhr?
34
27
  flash.now[:notice] = message || "#{resource_type.classify} saved"
@@ -2,7 +2,7 @@
2
2
  <Draggable v-model="object" :options="{handle:'.drag-handle-child'}" @update="onUpdate">
3
3
  <div class="section-heading d-flex align-items-center">
4
4
  <div class="title flex-fill">{{ spec.label || spec.name }}</div>
5
- <a class="btn btn-sm btn-success" @click.prevent="object.push({})" href="#"><i class="fa fa-plus"></i> Add</a>
5
+ <a class="btn btn-sm btn-success mr-2 my-2" @click.prevent="object.push({})" href="#">Add</a>
6
6
  </div>
7
7
  <div class="card child" v-for="(data, index) in object">
8
8
  <div class="card-header drag-handle-child">
@@ -1,4 +1,5 @@
1
1
  import SimpleMDE from 'simplemde/dist/simplemde.min'
2
+ import $ from 'jquery'
2
3
 
3
4
  export default class Editor {
4
5
  constructor(element) {
@@ -6,7 +7,7 @@ export default class Editor {
6
7
 
7
8
  this.mde = new SimpleMDE({
8
9
  element: element,
9
- forceSync: true,
10
+ // forceSync: true,
10
11
  autoDownloadFontAwesome: false,
11
12
  toolbar: ['bold', 'italic', 'strikethrough', 'heading', '|',
12
13
  'unordered-list', 'ordered-list', 'quote', 'code', 'table', 'link', '|',
@@ -23,8 +24,21 @@ export default class Editor {
23
24
 
24
25
  var coords = cm.coordsChar({ left: event.x, top: event.y })
25
26
  cm.replaceRange(embed, coords)
26
- event.preventDefault()
27
+ // event.preventDefault()
27
28
  })
29
+
30
+ // this.mde.codemirror.on('beforeChange', function() {
31
+ // // element.trigger('input')
32
+ // // element.trigger('change')
33
+ // console.log('beforeChange')
34
+ // element.change()
35
+ // })
36
+
37
+ // Trigger changed on the textarea
38
+ this.mde.codemirror.on('change', function() {
39
+ var event = new Event('change')
40
+ element.dispatchEvent(event)
41
+ })
28
42
  }
29
43
  destroy() {
30
44
  this.mde.toTextArea()
@@ -22,6 +22,9 @@ export default {
22
22
 
23
23
  editor.mde.codemirror.on('change', function() {
24
24
  $textarea.val(editor.value())
25
+
26
+ $textarea[0].dispatchEvent(new Event('input', { bubbles: true }));
27
+ $textarea[0].dispatchEvent(new Event('change', { bubbles: true }));
25
28
  })
26
29
 
27
30
  $modal.on('hidden.bs.modal', function(e) {
@@ -1,4 +1,4 @@
1
- import $ from 'jquery/dist/jquery'
1
+ import $ from 'jquery'
2
2
  // import Rails from 'rails-ujs/lib/assets/compiled/rails-ujs'
3
3
  import 'popper.js/dist/popper'
4
4
  import 'bootstrap/dist/js/bootstrap'
@@ -7,11 +7,16 @@ import 'jquery-resizable-dom/src/jquery-resizable'
7
7
  import * as toastr from 'toastr/toastr'
8
8
  import Vue from 'vue/dist/vue.esm.js'
9
9
 
10
- import MediaGallery from '../designer/components/MediaGallery.vue'
11
- import DefaultForm from '../designer/components/DefaultForm.vue'
10
+ // import MediaGallery from '../designer/components/MediaGallery.vue'
11
+ // import DefaultForm from '../designer/components/DefaultForm.vue'
12
+
13
+ // import MediaGallery from '@/designer/components/MediaGallery.vue'
14
+ import MediaGallery from './components/MediaGallery.vue'
15
+ import DefaultForm from './components/DefaultForm.vue'
12
16
 
13
17
  import Draggable from 'vuedraggable'
14
- import Helpers from '../designer/helpers'
18
+ // import Helpers from '../designer/helpers'
19
+ import Helpers from './helpers'
15
20
 
16
21
 
17
22
  export default {
@@ -22,12 +22,14 @@
22
22
  a.nav-link.active data-toggle="tab" href="#elements" role="tab" Elements
23
23
  li.nav-item
24
24
  a.nav-link data-toggle="tab" href="#gallery" role="tab" Gallery
25
- - if lookup_context.exists?('nav', designer_option(:designer_template_path), true)
26
- = render "#{designer_option(:designer_template_path)}/nav", resource: @resource
27
25
  li.nav-item
28
26
  a.nav-link data-toggle="tab" href="#editor" role="tab" Editor
27
+ - if lookup_context.exists?('nav_items', designer_option(:designer_template_path), true)
28
+ = render "#{designer_option(:designer_template_path)}/nav_items", resource: @resource
29
29
  / = yield(:designer_nav)
30
30
  li.nav-item.flex-fill
31
+ - if lookup_context.exists?('nav_icons', designer_option(:designer_template_path), true)
32
+ = render "#{designer_option(:designer_template_path)}/nav_icons", resource: @resource
31
33
  li.nav-item
32
34
  a.nav-link href="#" @click="refreshPreview()" title="Refresh Preview"
33
35
  i class="fa fa-sync"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Designer
4
- VERSION = '0.1.2'
4
+ VERSION = '0.1.3'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: designer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kam Low
@@ -102,7 +102,6 @@ files:
102
102
  - app/controllers/designer/editor_controller.rb
103
103
  - app/controllers/designer/images_controller.rb
104
104
  - app/helpers/designer/designer_helper.rb
105
- - app/javascript/designer/DefaultInput.vue
106
105
  - app/javascript/designer/components/DefaultForm.vue
107
106
  - app/javascript/designer/components/DefaultInput.vue
108
107
  - app/javascript/designer/components/MediaGallery.vue
@@ -1,82 +0,0 @@
1
- <template>
2
- <div class="w-100">
3
- <div v-if="spec.type == 'string' && spec.multiline" class="form-group">
4
- <a href="#" @click="openMarkdownEditor('#textarea-' + object.id)" class="float-right"><i class="fa fa-edit"></i></a>
5
- <label :for="'textarea-' + object.id" class="control-label">{{ spec.label || name | titleize }}</label>
6
- <textarea :id="'textarea-' + object.id" v-model="object[name]" :placeholder="spec.placeholder" @change="$emit('change')" rows="5" class="form-control"></textarea>
7
-
8
- <!-- <div class="col-sm-3 col-form-label">
9
- {{ spec.label || name | titleize }}
10
- <small><a href="#" @click="openMarkdownEditor('#textarea-' + object.id)">Editor</a></small>
11
- </div>
12
- <div class="col-sm-9">
13
- <textarea :id="'textarea-' + object.id" :type="spec.type" v-model="object[name]" :placeholder="spec.placeholder" @change="$emit('change')" class="form-control"></textarea>
14
- </div> -->
15
- </div>
16
- <div v-else-if="spec.type == 'array'" class="form-group form-row">
17
- <label class="col-sm-3 col-form-label">{{ spec.label || name | titleize }}</label>
18
- <div class="col-sm-9">
19
- <tags-input element-id="tags"
20
- v-model="object[name]"
21
- :existing-tags="tagArrayToObject(spec.enum)"
22
- :typeahead="true"
23
- :typeahead-activation-threshold="0"
24
- :only-existing-tags="!spec.custom"></tags-input>
25
- </div>
26
- </div>
27
- <div v-else-if="spec.enum" class="form-group form-row">
28
- <label class="col-sm-3 col-form-label">{{ spec.label || name | titleize }}</label>
29
- <div class="col-sm-9">
30
- <select v-model="object[name]" class="form-control">
31
- <option value="">Please select one</option>
32
- <option v-for="(value, index) in spec.enum">{{ value }}</option>
33
- </select>
34
- </div>
35
- </div>
36
- <div v-else-if="spec.type == 'boolean'" class="form-check">
37
- <input type="checkbox" value="true" :id="name" v-model="object[name]" @change="$emit('change')" class="form-check-input">
38
- <label class="form-check-label" :for="name">{{ spec.label || name | titleize }}</label>
39
- </div>
40
- <div v-else class="form-group form-row">
41
- <label class="col-sm-3 col-form-label">{{ spec.label || name | titleize }}</label>
42
- <div class="col-sm-9">
43
- <input :type="spec.type" v-model="object[name]" :placeholder="spec.placeholder" class="form-control">
44
- </div>
45
- </div>
46
- </div>
47
- </template>
48
-
49
- <script>
50
- import Vue from 'vue/dist/vue.esm.js'
51
- import VoerroTagsInput from '@voerro/vue-tagsinput'
52
- // import Helpers from '../helpers'
53
-
54
- Vue.component('tags-input', VoerroTagsInput)
55
-
56
- export default {
57
- props: ['spec', 'name', 'item'],
58
- components: {
59
- VoerroTagsInput
60
- },
61
- data() {
62
- return {
63
- object: this.item || {}
64
- }
65
- },
66
- // beforeMount() {
67
- // // console.log('DefaultInput', this.object, this.spec.default)
68
- // // this.object[this.name] = this.object[this.name] || this.spec.default
69
- // },
70
- // created() {
71
- // console.log('DefaultInput', this, this.spec, this.name, this.item)
72
- // },
73
- methods: {
74
- tagArrayToObject(tags) {
75
- return tags.reduce((acc, cur, i) => {
76
- acc[cur] = cur
77
- return acc
78
- }, {})
79
- }
80
- }
81
- }
82
- </script>