iatelier 0.4.1 → 0.5.1

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: cf2a3e13466024972464ce80dc545beab13203ab42f8cb51e13ffb34e65a6561
4
- data.tar.gz: bfcbb96c4ef9d4236ae13ecad8c7ffa56139bd94046f5a8c990a2141bd294b7d
3
+ metadata.gz: ed28dbef7ef701012377ac3667d29462566f8cd5e584848623838f02179a8a7a
4
+ data.tar.gz: 10a1bb0842d7674b34f19f48b1b236b4bbd5adba4dd957e230065f61b4a30f3b
5
5
  SHA512:
6
- metadata.gz: f44e99a5815ca873c662a6fd7c0ebe0629dcbf7eadf719df8e5aafc70bdf639c624abcb0c55c8b390dfb8fb5c1dd0188166efaa8e009948bdf75c3094a3f9f2b
7
- data.tar.gz: fe1a7a594f9ff6a8db3ffcf40139bdfafb4b0d5c5dab3ce3eafb3f0fbf07664c737091655984adaf39360b8b192dc1f685132eec49de60b46c928e9bc774ce65
6
+ metadata.gz: b385c4b8220993a73f65a4d8d4c8a7a400bdf213d53493ff361d3d9c0411ee12345b1ddfb30abad3985992781cadeb869fa9e7c4b448378aa77f9db143cbb748
7
+ data.tar.gz: 5d2db6aa4275540ce4cbf610142e0aa665d855c3959ff31315d9bb2d70bc8c4a648cd01df1493d6871df6bfa8d5c251a976dc7d25758a4a3c1340dba4d184596
data/iatelier.gemspec CHANGED
@@ -40,4 +40,5 @@ Gem::Specification.new do |spec|
40
40
  spec.add_development_dependency "rspec", "~> 3.9"
41
41
  spec.add_development_dependency "hanami", "~> 1.3"
42
42
  spec.add_runtime_dependency "redcarpet", "~>3.5"
43
+ spec.add_runtime_dependency "mime-types", "~>3.3"
43
44
  end
@@ -521,6 +521,516 @@ a:hover {
521
521
  background-color: rgba(255, 255, 255, 0.2);
522
522
  }
523
523
 
524
+ .selectable-text {
525
+ cursor: text;
526
+ -webkit-user-select: text;
527
+ }
528
+
529
+ .text-center {
530
+ text-align: center;
531
+ }
532
+
533
+ .text-right {
534
+ text-align: right;
535
+ }
536
+
537
+ .text-left {
538
+ text-align: left;
539
+ }
540
+
541
+ .pull-left {
542
+ float: left;
543
+ }
544
+
545
+ .pull-right {
546
+ float: right;
547
+ }
548
+
549
+ .padded {
550
+ padding: 10px;
551
+ }
552
+
553
+ .padded-less {
554
+ padding: 5px;
555
+ }
556
+
557
+ .padded-more {
558
+ padding: 20px;
559
+ }
560
+
561
+ .padded-vertically {
562
+ padding-top: 10px;
563
+ padding-bottom: 10px;
564
+ }
565
+
566
+ .padded-vertically-less {
567
+ padding-top: 5px;
568
+ padding-bottom: 5px;
569
+ }
570
+
571
+ .padded-vertically-more {
572
+ padding-top: 20px;
573
+ padding-bottom: 20px;
574
+ }
575
+
576
+ .padded-horizontally {
577
+ padding-right: 10px;
578
+ padding-left: 10px;
579
+ }
580
+
581
+ .padded-horizontally-less {
582
+ padding-right: 5px;
583
+ padding-left: 5px;
584
+ }
585
+
586
+ .padded-horizontally-more {
587
+ padding-right: 20px;
588
+ padding-left: 20px;
589
+ }
590
+
591
+ .padded-top {
592
+ padding-top: 10px;
593
+ }
594
+
595
+ .padded-top-less {
596
+ padding-top: 5px;
597
+ }
598
+
599
+ .padded-top-more {
600
+ padding-top: 20px;
601
+ }
602
+
603
+ .padded-bottom {
604
+ padding-bottom: 10px;
605
+ }
606
+
607
+ .padded-bottom-less {
608
+ padding-bottom: 5px;
609
+ }
610
+
611
+ .padded-bottom-more {
612
+ padding-bottom: 20px;
613
+ }
614
+
615
+ .sidebar {
616
+ background-color: #f5f5f4;
617
+ }
618
+
619
+ .draggable {
620
+ -webkit-app-region: drag;
621
+ }
622
+
623
+ .clearfix:before,
624
+ .clearfix:after {
625
+ display: table;
626
+ content: " ";
627
+ }
628
+
629
+ .clearfix:after {
630
+ clear: both;
631
+ }
632
+
633
+ * {
634
+ cursor: default;
635
+ box-sizing: border-box;
636
+ }
637
+
638
+ html {
639
+ height: 100%;
640
+ width: 100%;
641
+ overflow: hidden;
642
+ }
643
+
644
+ body {
645
+ height: 100%;
646
+ padding: 0;
647
+ margin: 0;
648
+ font-family: system, -apple-system, ".SFNSDisplay-Regular", "Helvetica Neue", Helvetica, "Segoe UI", sans-serif;
649
+ font-size: 13px;
650
+ line-height: 1.6;
651
+ color: #333;
652
+ background-color: transparent;
653
+ }
654
+
655
+ hr {
656
+ margin: 15px 0;
657
+ overflow: hidden;
658
+ background: transparent;
659
+ border: 0;
660
+ border-bottom: 1px solid #ddd;
661
+ }
662
+
663
+ h1,
664
+ h2,
665
+ h3,
666
+ h4,
667
+ h5,
668
+ h6 {
669
+ margin-top: 20px;
670
+ margin-bottom: 10px;
671
+ font-weight: 500;
672
+ white-space: nowrap;
673
+ overflow: hidden;
674
+ text-overflow: ellipsis;
675
+ }
676
+
677
+ h1 {
678
+ font-size: 36px;
679
+ }
680
+
681
+ h2 {
682
+ font-size: 30px;
683
+ }
684
+
685
+ h3 {
686
+ font-size: 24px;
687
+ }
688
+
689
+ h4 {
690
+ font-size: 18px;
691
+ }
692
+
693
+ h5 {
694
+ font-size: 14px;
695
+ }
696
+
697
+ h6 {
698
+ font-size: 12px;
699
+ }
700
+
701
+ /*
702
+ .window {
703
+ position: absolute;
704
+ top: 0;
705
+ right: 0;
706
+ bottom: 0;
707
+ left: 0;
708
+ display: flex;
709
+ flex-direction: column;
710
+ background-color: $chrome-color;
711
+ }
712
+ */
713
+
714
+ .window-content {
715
+ position: relative;
716
+ overflow-y: auto;
717
+ display: -webkit-box;
718
+ display: flex;
719
+ -webkit-box-flex: 1;
720
+ flex: 1;
721
+ }
722
+
723
+ .toolbar {
724
+ min-height: 22px;
725
+ box-shadow: inset 0 1px 0 #f5f4f5;
726
+ background-color: #e8e6e8;
727
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e6e8), to(#d1cfd1));
728
+ background-image: linear-gradient(to bottom, #e8e6e8 0%, #d1cfd1 100%);
729
+ }
730
+
731
+ .toolbar:before,
732
+ .toolbar:after {
733
+ display: table;
734
+ content: " ";
735
+ }
736
+
737
+ .toolbar:after {
738
+ clear: both;
739
+ }
740
+
741
+ .toolbar-header {
742
+ border-bottom: 1px solid #b3b2b3;
743
+ }
744
+
745
+ .toolbar-header .title {
746
+ margin-top: 1px;
747
+ }
748
+
749
+ .toolbar-footer {
750
+ border-top: 1px solid #b3b2b3;
751
+ -webkit-app-region: drag;
752
+ }
753
+
754
+ .title {
755
+ margin: 0;
756
+ font-size: 12px;
757
+ font-weight: 400;
758
+ text-align: center;
759
+ color: #555;
760
+ cursor: default;
761
+ }
762
+
763
+ .toolbar-borderless {
764
+ border-top: 0;
765
+ border-bottom: 0;
766
+ }
767
+
768
+ .toolbar-actions {
769
+ margin-top: 4px;
770
+ margin-bottom: 3px;
771
+ padding-right: 3px;
772
+ padding-left: 3px;
773
+ padding-bottom: 3px;
774
+ -webkit-app-region: drag;
775
+ }
776
+
777
+ .toolbar-actions:before,
778
+ .toolbar-actions:after {
779
+ display: table;
780
+ content: " ";
781
+ }
782
+
783
+ .toolbar-actions:after {
784
+ clear: both;
785
+ }
786
+
787
+ .toolbar-actions > .btn,
788
+ .toolbar-actions > .btn-group {
789
+ margin-left: 4px;
790
+ margin-right: 4px;
791
+ }
792
+
793
+ .menu-bar {
794
+ margin: 0px;
795
+ padding: 0px;
796
+ font-size: 12px;
797
+ background-color: #d3d3d3;
798
+ border-bottom: 1px solid black;
799
+ }
800
+
801
+ .menu-bar a {
802
+ display: inline-block;
803
+ margin: 0px 0px;
804
+ padding: 1px 8px;
805
+ border: none;
806
+ background-color: transparent;
807
+ }
808
+
809
+ .menu-bar a:hover {
810
+ color: white;
811
+ background-color: #345EF2;
812
+ border: none;
813
+ }
814
+
815
+ .window .bar {
816
+ box-shadow: inset 0 1px 0 #f5f4f5;
817
+ background-color: #e8e6e8;
818
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e6e8), to(#d1cfd1));
819
+ background-image: linear-gradient(to bottom, #e8e6e8 0%, #d1cfd1 100%);
820
+ }
821
+
822
+ .window .bar > .menu {
823
+ height: 22px;
824
+ }
825
+
826
+ .window .bar > .buttons {
827
+ height: 44px;
828
+ }
829
+
830
+ .window .bar > .tabs {
831
+ border-top: 1px solid gray;
832
+ }
833
+
834
+ .window .bar > .tabs > a {
835
+ display: inline-block;
836
+ font-size: 12px;
837
+ margin: 4px 1px;
838
+ padding: 0px 8px;
839
+ border-radius: 4px;
840
+ border: none;
841
+ background-color: transparent;
842
+ }
843
+
844
+ .window .bar > .tabs > a:hover {
845
+ background-color: rgba(0, 0, 0, 0.2);
846
+ color: white;
847
+ }
848
+
849
+ .window .bar > .tabs > a:active {
850
+ background-color: rgba(0, 0, 0, 0.4);
851
+ color: white;
852
+ }
853
+
854
+ #os {
855
+ display: -ms-grid;
856
+ display: grid;
857
+ -ms-grid-rows: 20px auto;
858
+ grid-template-rows: 20px auto;
859
+ height: 100vh;
860
+ width: 100vw;
861
+ }
862
+
863
+ #os .menu-bar {
864
+ margin: 0px;
865
+ padding: 0px;
866
+ font-size: 12px;
867
+ background-color: #d3d3d3;
868
+ border-bottom: 1px solid black;
869
+ }
870
+
871
+ #os .menu-bar a {
872
+ display: inline-block;
873
+ margin: 0px 0px;
874
+ padding: 1px 8px;
875
+ border: none;
876
+ background-color: transparent;
877
+ }
878
+
879
+ #os .menu-bar a:hover {
880
+ color: white;
881
+ background-color: #345EF2;
882
+ border: none;
883
+ }
884
+
885
+ #os .desk {
886
+ min-height: 0;
887
+ }
888
+
889
+ .window {
890
+ height: 100%;
891
+ max-height: 100%;
892
+ max-width: 100%;
893
+ display: -ms-grid;
894
+ display: grid;
895
+ -ms-grid-rows: min-content 1fr min-content;
896
+ grid-template-rows: -webkit-min-content 1fr -webkit-min-content;
897
+ grid-template-rows: min-content 1fr min-content;
898
+ }
899
+
900
+ .window .bar {
901
+ box-shadow: inset 0 1px 0 #f5f4f5;
902
+ background-color: #e8e6e8;
903
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e6e8), to(#d1cfd1));
904
+ background-image: linear-gradient(to bottom, #e8e6e8 0%, #d1cfd1 100%);
905
+ }
906
+
907
+ .window .bar > .menu {
908
+ height: 22px;
909
+ text-align: center;
910
+ }
911
+
912
+ .window .bar > .buttons {
913
+ height: 44px;
914
+ }
915
+
916
+ .window .bar > .tabs {
917
+ border-top: 1px solid gray;
918
+ }
919
+
920
+ .window .bar > .tabs > a {
921
+ display: inline-block;
922
+ font-size: 12px;
923
+ margin: 4px 1px;
924
+ padding: 0px 8px;
925
+ border-radius: 4px;
926
+ border: none;
927
+ background-color: transparent;
928
+ }
929
+
930
+ .window .bar > .tabs > a:hover {
931
+ background-color: rgba(0, 0, 0, 0.2);
932
+ color: white;
933
+ }
934
+
935
+ .window .bar > .tabs > a:active {
936
+ background-color: rgba(0, 0, 0, 0.4);
937
+ color: white;
938
+ }
939
+
940
+ .window .content {
941
+ min-height: 0;
942
+ }
943
+
944
+ .window-drawer-top {
945
+ margin: 0.5rem auto;
946
+ padding: 0.4rem;
947
+ max-width: 40rem;
948
+ text-align: left;
949
+ background-color: #e8e6e8;
950
+ }
951
+
952
+ .window > .content {
953
+ display: -ms-grid;
954
+ display: grid;
955
+ -ms-grid-columns: 1fr;
956
+ grid-template-columns: 1fr;
957
+ }
958
+
959
+ @media screen and (min-width: 35.5em) {
960
+ .window > .content {
961
+ -ms-grid-columns: 14.4rem 1fr;
962
+ grid-template-columns: 14.4rem 1fr;
963
+ }
964
+ }
965
+
966
+ .window > .content > .sidebar {
967
+ display: none;
968
+ overflow-y: scroll;
969
+ }
970
+
971
+ @media screen and (min-width: 35.5em) {
972
+ .window > .content > .sidebar {
973
+ display: block;
974
+ }
975
+ }
976
+
977
+ .window > .content > .panel {
978
+ overflow: scroll;
979
+ min-width: 0px;
980
+ }
981
+
982
+ .text-editor {
983
+ min-height: 80vh;
984
+ }
985
+
986
+ .panel-edit > .form-box {
987
+ padding: 0.8rem;
988
+ background-color: #cdcdcd;
989
+ border-radius: 0.4rem;
990
+ box-shadow: inset 0px 0px 1px grey;
991
+ }
992
+
993
+ .os-form-group {
994
+ margin: 0.4rem 0.4rem;
995
+ white-space: nowrap;
996
+ }
997
+
998
+ .os-form-group > label {
999
+ display: inline-block;
1000
+ width: 5em;
1001
+ vertical-align: middle;
1002
+ text-align: end;
1003
+ white-space: normal;
1004
+ word-wrap: break-word;
1005
+ }
1006
+
1007
+ .os-form-group > .form-control {
1008
+ display: inline-block;
1009
+ width: calc(100% - 5em);
1010
+ box-sizing: border-box;
1011
+ vertical-align: middle;
1012
+ white-space: normal;
1013
+ }
1014
+
1015
+ /*
1016
+ @import '~purecss/build/pure-min.css';
1017
+ @import '~purecss/build/grids-responsive-min.css';
1018
+ @import '/pure/grids/xx';
1019
+
1020
+ // BlazeCSS
1021
+ // @import '~blaze';
1022
+
1023
+ // font
1024
+ @import '/fonts';
1025
+
1026
+ // variables & basics
1027
+ @import '/shadow';
1028
+ @import '/colors/style';
1029
+
1030
+ @import '/components/link-button';
1031
+ @import '/components/insection';
1032
+ */
1033
+
524
1034
  .text-editor {
525
1035
  min-height: 80vh;
526
1036
  }
@@ -4,10 +4,12 @@ module Iatelier
4
4
  module DbConnector
5
5
  def set_database database
6
6
  tmp_config = ActiveRecord::Base.connection_config
7
- tmp_config[:database] = database
8
- ActiveRecord::Base.establish_connection tmp_config
7
+ if !database.nil?
8
+ tmp_config[:database] = database
9
+ ActiveRecord::Base.establish_connection tmp_config
10
+ end
9
11
  end
10
12
  end
11
13
  end
12
14
  end
13
- end
15
+ end
@@ -4,11 +4,46 @@ module Iatelier
4
4
  class Create
5
5
  include Iatelier::Action
6
6
  include Iatelier::Controllers::Books::DbConnector
7
+ expose :book, :book_type, :database, :errors
7
8
  def call(params)
8
- self.set_database params[:database]
9
+ # [optional] setting the database
10
+ @database = params.get(:database)
11
+ self.set_database @database
12
+
13
+ #
9
14
  @book = Object.const_get(params[:book_type].capitalize).new
10
- @book.save
11
- @book.create(params)
15
+ @book.namespace = database
16
+
17
+ # p 'starting everything'
18
+ @book.dimensions.each do |dimension|
19
+ method_name = 'setup_' + dimension
20
+ action = @book.public_send(method_name.to_sym, params)
21
+ p 'what is the status = ' + action.valid?.to_s
22
+ if !action.valid?
23
+ puts 'the error is ' + action.errors.messages.to_s
24
+ @errors = action.errors.messages
25
+ self.status = 422
26
+ return 'caught an error!'
27
+ end
28
+ end
29
+
30
+ @book.save
31
+
32
+ @book.dimensions.each do |dimension|
33
+ action = @book.public_send(dimension.to_sym)
34
+ if !action.save
35
+ @errors = action.errors.messages
36
+ self.status = 422
37
+ return 'caught an error!'
38
+ end
39
+ end
40
+
41
+ @book.sync_keywords params
42
+ @book.sync_individuals params
43
+ @book.sync_content params
44
+ @book.store_attachment params
45
+
46
+ redirect_to '/iatelier/' + @database + '/' + params[:book_type]
12
47
  end
13
48
  end
14
49
  end
@@ -6,10 +6,13 @@ module Iatelier
6
6
  include Iatelier::Controllers::Books::DbConnector
7
7
  expose :book, :database
8
8
  def call(params)
9
- @database = params[:database]
10
- self.set_database database
9
+ # [optional] setting the database
10
+ @database = params.get(:database)
11
+ self.set_database @database
12
+
13
+ #
11
14
  @book = Object.const_get(params[:book_type].capitalize).find(params[:id])
12
- @book.namespace = @database
15
+ @book.namespace = @database
13
16
  end
14
17
  end
15
18
  end
@@ -4,10 +4,17 @@ module Iatelier
4
4
  class Manage
5
5
  include Iatelier::Action
6
6
  include Iatelier::Controllers::Books::DbConnector
7
- expose :books
7
+ expose :books, :uri
8
8
  def call(params)
9
- self.set_database params[:database]
10
- @books = Object.const_get(params[:book_type].capitalize).all
9
+ # [optional] setting the database
10
+ @database = params.get(:database)
11
+ self.set_database @database
12
+
13
+ #
14
+ @books = Object.const_get(params[:book_type].capitalize).includes(:timestamp).all.order("timestamps.publish desc")
15
+
16
+ #
17
+ @uri = '/iatelier/' + @database + '/' + params[:book_type] + '/'
11
18
  end
12
19
  end
13
20
  end
@@ -6,8 +6,10 @@ module Iatelier
6
6
  include Iatelier::Controllers::Books::DbConnector
7
7
  expose :book, :book_type, :database
8
8
  def call(params)
9
- @database = params[:database]
10
- self.set_database database
9
+ # [optional] setting the database
10
+ @database = params.get(:database)
11
+ self.set_database @database
12
+
11
13
  @book_type = params[:book_type].capitalize;
12
14
  @book = Object.const_get(@book_type).new
13
15
  @book.namespace = @database
@@ -15,4 +17,4 @@ module Iatelier
15
17
  end
16
18
  end
17
19
  end
18
- end
20
+ end
@@ -4,12 +4,35 @@ module Iatelier
4
4
  class Update
5
5
  include Iatelier::Action
6
6
  include Iatelier::Controllers::Books::DbConnector
7
+ expose :book, :database, :errors
7
8
  def call(params)
8
- self.set_database params[:database]
9
+ # [optional] setting the database
10
+ @database = params.get(:database)
11
+ self.set_database @database
12
+
13
+ # setting up the book
9
14
  @book = Object.const_get(params[:book_type].capitalize).find(params[:id])
10
- @book.revise(params)
11
- @book.save
12
- self.body = @book.save.to_json
15
+ @book.namespace = @database
16
+
17
+ @book.dimensions.each do |dimension|
18
+ if @book.public_send(dimension.to_sym)
19
+ method_name = 'revise_' + dimension
20
+ else
21
+ method_name = 'setup_' + dimension
22
+ end
23
+ @book.public_send(method_name.to_sym, params)
24
+ end
25
+ @book.dimensions.each do |dimension|
26
+ action = @book.public_send(dimension.to_sym)
27
+ if !action.save
28
+ @errors = action.errors.messages
29
+ self.status = 422
30
+ end
31
+ end
32
+ @book.sync_keywords params
33
+ @book.sync_individuals params
34
+ @book.sync_content params
35
+ @book.store_attachment params
13
36
  end
14
37
  end
15
38
  end
@@ -5,10 +5,6 @@ class Book < ActiveRecord::Base
5
5
  DIMENSIONS = []
6
6
  GROUPINGS = []
7
7
  ROLES = []
8
-
9
- @content_raw = ''
10
-
11
- @namespace = nil
12
8
 
13
9
  has_one :title, as: :titleable, class_name: 'Dimensions::Title'
14
10
  has_one :slug, as: :slugable, class_name: 'Dimensions::Slug'
@@ -22,23 +18,22 @@ class Book < ActiveRecord::Base
22
18
 
23
19
  has_many :peopleables, as: :peopleable, dependent: :destroy
24
20
  has_many :peoples, through: :peopleables
25
-
21
+
26
22
  has_many :bundleables, as: :bundleable, dependent: :destroy
27
23
  has_many :bundles, through: :bundleables
28
-
24
+
29
25
  accepts_nested_attributes_for :title, :slug, :subtitle, :description, :thumbnail, :timestamp
30
26
  validates_associated :slug
31
27
 
32
28
  attr_accessor :namespace
33
29
 
34
-
35
30
  def kind
36
31
  self.class.to_s
37
32
  end
38
33
  def uniq
39
34
  self.class.to_s + self.id.to_s
40
35
  end
41
-
36
+
42
37
  def dimensions
43
38
  self.class::DIMENSIONS
44
39
  end
@@ -53,66 +48,24 @@ class Book < ActiveRecord::Base
53
48
  @query = '`peopleables`.`role` = "' + requested_role.to_s + '"'
54
49
  self.peoples.includes(:peopleables).where(@query)
55
50
  end
56
-
51
+
57
52
  def content_raw
58
- puts 'trying to open content'
59
53
  unless self.id.nil?
60
- puts 'id passed'
61
54
  path = Iatelier.configuration.storage_dir + @namespace.to_s + self.class.name.downcase + '/' + self.id.to_s + '/main.md'
62
- puts 'path is set to ' + path
55
+ puts 'triving to retrive the content from the path = ' + path.to_s
63
56
  if File.exists? path
64
- puts 'reading content'
65
- @content = File.open(path).read
57
+ return File.open(path).read
66
58
  else
67
- @content = nil
59
+ return nil
68
60
  end
69
61
  else
70
- @content = nil
62
+ return nil
71
63
  end
72
64
  end
73
-
65
+
74
66
  def content
75
67
  markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, tables: true)
76
- markdown.render(self.content_raw)
77
- end
78
-
79
- # def initialized
80
- # super()
81
- # puts "content of the dimension: \n"
82
- # puts dimensions.inspect
83
- # dimensions.each do |dimension|
84
- # reference = dimension + able
85
- # hasone dimension.to_sym as: reference.to_sym
86
- # end
87
- # end
88
-
89
- def create params
90
- puts 'these are the stuff were going to add:' + dimensions.to_s
91
- dimensions.each do |dimension|
92
- method_name = 'setup_' + dimension
93
- self.public_send(method_name.to_sym, params)
94
- end
95
- self.save
96
- sync_keywords params
97
- sync_individuals params
98
- sync_content params
99
- end
100
-
101
- def revise params
102
- dimensions.each do |dimension|
103
- if self.public_send(dimension.to_sym)
104
- method_name = 'revise_' + dimension
105
- else
106
- method_name = 'setup_' + dimension
107
- end
108
- self.public_send(method_name.to_sym, params)
109
- end
110
- dimensions.each do |dimension|
111
- self.public_send(dimension.to_sym).save
112
- end
113
- sync_keywords params
114
- sync_individuals params
115
- sync_content params
68
+ return markdown.render(content_raw.to_s)
116
69
  end
117
70
 
118
71
  def sync_keywords params
@@ -172,31 +125,38 @@ class Book < ActiveRecord::Base
172
125
  end
173
126
 
174
127
  def setup_title params
175
- self.build_title({value: params[:title]})
128
+ return self.build_title({value: params[:title]})
176
129
  end
177
130
  def revise_title params
178
- self.title.update(value: params[:title])
131
+ return self.title.update(value: params[:title])
179
132
  end
180
-
133
+
181
134
  def setup_subtitle params
182
- self.build_subtitle({value: params[:subtitle]})
135
+ return self.build_subtitle({value: params[:subtitle]})
183
136
  end
184
137
  def revise_subtitle params
185
- self.subtitle.update(value: params[:subtitle])
138
+ return self.subtitle.update(value: params[:subtitle])
186
139
  end
187
140
 
188
141
  def setup_slug params
189
- self.build_slug({value: params[:slug]})
142
+ return self.build_slug({value: params[:slug]})
190
143
  end
191
144
  def revise_slug params
192
- self.slug.update(value: params[:slug])
145
+ return self.slug.update(value: params[:slug])
193
146
  end
194
-
147
+
148
+ def setup_description params
149
+ self.build_description({value: params[:description]})
150
+ end
151
+ def revise_description params
152
+ self.description.update(value: params[:description])
153
+ end
154
+
195
155
  def setup_thumbnail params
196
156
  end
197
157
  def revise_thumbnail params
198
158
  end
199
-
159
+
200
160
  def setup_timestamp params
201
161
  puts 'setting up timestamp'
202
162
  self.build_timestamp({
@@ -219,10 +179,9 @@ class Book < ActiveRecord::Base
219
179
  self.setup_timestamp params
220
180
  end
221
181
  end
222
-
182
+
223
183
  def sync_content params
224
- puts 'we are trying to sync the content = ' + params[:content]
225
- path = Iatelier.configuration.storage_dir + params[:database].to_s + self.class.name.downcase + '/' + self.id.to_s
184
+ path = Iatelier.configuration.storage_dir + @namespace.to_s + self.class.name.downcase + '/' + self.id.to_s
226
185
  Dir.mkdir(path) unless File.exists?(path)
227
186
  File.open(path + '/main.md', 'w+') do |file|
228
187
  file.puts params[:content]
@@ -232,4 +191,18 @@ class Book < ActiveRecord::Base
232
191
  self.save
233
192
  puts self.loc.to_s
234
193
  end
235
- end
194
+
195
+ def store_attachment params
196
+ path = Iatelier.configuration.storage_dir + @namespace.to_s + self.class.name.downcase + '/' + self.id.to_s + '/'
197
+ if !params.get(:file).nil?
198
+ Dir.mkdir(path) unless File.exists?(path)
199
+ File.open(path + params[:file][:filename], 'wb') do |file|
200
+ file.write params[:file][:tempfile].read
201
+ end
202
+ end
203
+ end
204
+ def get_asset params
205
+ path = Iatelier.configuration.storage_dir + @namespace.to_s + self.class.name.downcase + '/' + self.id.to_s + '/'
206
+ return File.open(path + params[:asset], 'r')
207
+ end
208
+ end
@@ -1,4 +1,10 @@
1
1
  .panel-edit
2
+ - if @locals.include?(:errors)
3
+ .form-box
4
+ .os-form-group
5
+ - errors.each do |value, key|
6
+ %p= value
7
+ %p= key
2
8
  .form-box
3
9
  .os-form-group
4
10
  -if book.dimensions.include? 'title'
@@ -16,9 +22,13 @@
16
22
  -if book.dimensions.include? 'description'
17
23
  %label.label Description
18
24
  %input{:class => "form-control pure-input-1", :name => "description", :type => "text", :placeholder => "Description", :value => book.description.try(:value)}
25
+ .os-form-group
26
+ %label.label Attachments
27
+ %input{:type => 'file', :id => 'file', :name => 'file'}
19
28
  .form-box
20
29
  %label Text
21
- %textarea{:name => "content", :class => "text-editor pure-input-1 form-control", :type => "text", :placeholder => "Content of the book ..."}
30
+ %br
31
+ %textarea{:name => "content", :class => "text-editor pure-input-1 form-control", :type => "text", :placeholder => "Content of the book ...", :style => "width: 100%"}
22
32
  -unless book.content_raw.nil?
23
33
  = book.content_raw
24
34
  %div{:class => "grid-large panel-edit"}
@@ -30,4 +40,3 @@
30
40
  = render :partial => 'grouping/bundles'
31
41
  .form-box
32
42
  = render :partial => 'dimension/timestamp'
33
-
@@ -1,5 +1,4 @@
1
1
  %div
2
- .todo adding errors here!
3
2
  %form{:class => "atelier-main-form pure-form pure-form-aligned", :action => "/iatelier/#{database}/#{book.class.name.downcase}/#{book.id}", :method => "POST", :enctype => "multipart/form-data"}
4
3
  .form-actions
5
4
  <button type="submit" class="btn btn-default">Edit</button>
@@ -1,5 +1,5 @@
1
1
  %div{:class => "c-card__item c-card__item--divider"}
2
- .span Keyword
3
2
  %div{:class => "c-card__item"}
3
+ %label Keywords
4
4
  %input{:id => "keywords", :name => "keywords", :value => book.keywords.pluck(:word).join(", ")}
5
5
  %div{:id => "keywords-field", :name => "keywords", :type => "text", :style => "width: 100%; display: block;"}
@@ -8,5 +8,7 @@
8
8
  - books.each do |book|
9
9
  %tr
10
10
  %td= book.id
11
- %td= book.title.value
11
+ %td
12
+ %a{href: uri + book.id.to_s + '/edit' }
13
+ = book.title.value
12
14
  %td= book.slug.try(:value)
@@ -1,7 +1,5 @@
1
1
  %div
2
- .todo adding errors here!
3
2
  %form{:class => "atelier-main-form pure-form pure-form-aligned", :action => "/iatelier/#{database}/#{book.class.name.downcase}/#{book.id}", :method => "POST", :enctype => "multipart/form-data"}
4
3
  .form-actions
5
4
  <button type="submit" class="btn btn-default">Create</button>
6
- %div
7
- = render :partial => 'engine'
5
+ = render :partial => 'engine'
@@ -1,3 +1,3 @@
1
1
  module Iatelier
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.1"
3
3
  end
@@ -3,6 +3,7 @@ module Iatelier
3
3
  module Books
4
4
  class Create
5
5
  include Iatelier::View
6
+ template 'books/new'
6
7
  end
7
8
  end
8
9
  end
@@ -3,6 +3,9 @@ module Iatelier
3
3
  module Books
4
4
  class Manage
5
5
  include Iatelier::View
6
+ def uri
7
+ raw locals[:uri]
8
+ end
6
9
  end
7
10
  end
8
11
  end
@@ -3,6 +3,7 @@ module Iatelier
3
3
  module Books
4
4
  class Update
5
5
  include Iatelier::View
6
+ template 'books/edit'
6
7
  end
7
8
  end
8
9
  end
data/package.json CHANGED
@@ -20,7 +20,7 @@
20
20
  "sass-loader": "^7.3.1"
21
21
  },
22
22
  "dependencies": {
23
- "@piratesatelier/os-ui-oldschool": "0.0.3",
23
+ "@piratesatelier/os-ui-oldschool": "*",
24
24
  "contents": "^4.0.2",
25
25
  "flatpickr": "^4.3.2",
26
26
  "imagesloaded": "4.1.4",
@@ -14,7 +14,7 @@
14
14
  }
15
15
  */
16
16
 
17
- @import "@piratesatelier/os-ui-oldschool/src/custom";
17
+ @import "@piratesatelier/os-ui-oldschool/src/style";
18
18
 
19
19
  @import "~flatpickr/dist/flatpickr.min.css";
20
20
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iatelier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Captain Husayn Pinguin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-25 00:00:00.000000000 Z
11
+ date: 2020-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.5'
83
+ - !ruby/object:Gem::Dependency
84
+ name: mime-types
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.3'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.3'
83
97
  description: iAtelier, a simple, yet powerful CMS engine for Hanami
84
98
  email:
85
99
  - captainhusaynpinguin@galacticvisions.xyz
@@ -141,7 +155,6 @@ files:
141
155
  - lib/iatelier/templates/books/grouping/_peoples.html.haml
142
156
  - lib/iatelier/templates/books/manage.html.haml
143
157
  - lib/iatelier/templates/books/new.html.haml
144
- - lib/iatelier/templates/books/update.html.haml
145
158
  - lib/iatelier/version.rb
146
159
  - lib/iatelier/views/application_layout.rb
147
160
  - lib/iatelier/views/books/create.rb
File without changes