瀏覽代碼

Add generator

Andrea Fazzi 6 年之前
父節點
當前提交
923d7ef772
共有 5 個文件被更改,包括 113 次插入0 次删除
  1. 2 0
      generator/.gitignore
  2. 70 0
      generator/main.go
  3. 0 0
      generator/templates/add_update.tpl
  4. 41 0
      generator/templates/all.tpl
  5. 0 0
      generator/templates/show.tpl

+ 2 - 0
generator/.gitignore

@@ -0,0 +1,2 @@
+./generator
+test/

+ 70 - 0
generator/main.go

@@ -0,0 +1,70 @@
+package main
+
+import (
+	"flag"
+	"fmt"
+	"log"
+	"os"
+	"path/filepath"
+	"text/template"
+
+	"github.com/jinzhu/inflection"
+	"gogs.carducci-dante.gov.it/karmen/core/renderer"
+	tpl_util "gogs.carducci-dante.gov.it/karmen/util/template"
+)
+
+var (
+	fnPatterns = map[string]string{
+		"all":        "%s",
+		"show":       "%s_show",
+		"add_update": "%s_add_update",
+	}
+)
+
+func main() {
+	flag.Usage = func() {
+		fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
+		flag.PrintDefaults()
+	}
+	outDir := flag.String("outdir", "./templates", "Output directory")
+	tplDir := flag.String("tpldir", "./generator/templates", "Generator template directory")
+	flag.Parse()
+
+	if len(flag.Args()) == 0 {
+		flag.Usage()
+		return
+	}
+
+	model := flag.Args()[0]
+
+	for tplName, pattern := range fnPatterns {
+		name := fmt.Sprintf(pattern, model)
+
+		funcMap := template.FuncMap{
+			"query": renderer.Query,
+		}
+
+		tpl, err := tpl_util.LoadTextTemplate(filepath.Join(*tplDir, tplName+".tpl"), funcMap)
+		if err != nil {
+			panic(err)
+		}
+		filename := filepath.Join(*outDir, name+".html.tpl")
+		oFn, err := os.Create(filename)
+		if err != nil {
+			panic(err)
+		}
+		defer oFn.Close()
+
+		log.Printf("Generating html template %s for model %s...", filename, name)
+
+		var data struct {
+			Model  string
+			Models string
+		}
+
+		data.Model = inflection.Singular(name)
+		data.Models = inflection.Plural(name)
+
+		tpl.Execute(oFn, data)
+	}
+}

+ 0 - 0
generator/templates/add_update.tpl


+ 41 - 0
generator/templates/all.tpl

@@ -0,0 +1,41 @@
+{{"{{ define \"content\" }}"}}
+
+<div class="container">
+  
+  <div class="karmen-info-header">
+    <div class="row">
+      <div class="col-md-8">
+	<h1>{{.Models}}</h1>
+      </div>
+      <div class="col-md-4">
+	<a href="/{{.Models}}/add/?{{"{{query \"tpl_layout\" \"base\" \"tpl_content\" \""}}{{.Models}}{{"_add_update\"}}\""}} class="btn btn-primary pull-right">
+	  <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
+	  Crea nuovo {{.Model}}
+	</a>
+      </div>
+    </div>
+  </div>
+
+  <div class="input-group" style="margin-bottom: 20px">
+    <span class="input-group-addon" id="search-query"><span class="glyphicon glyphicon-search"></span></span>
+    <input type="text" id="myInput" class="form-control" aria-describedby="search-query">
+  </div>
+  
+  {{"{{if not .Data}}"}}
+  <p>Non c'è alcun elemento da visualizzare</p>
+  {{"{{else}}"}}
+  <div class="list-group" id="myUL">
+    {{"{{range "}}${{.Model}}{{" := .Data}}"}}
+    <a class="list-group-item clearfix" href="/{{.Models}}/{{"{{"}}${{.Model}}{{".ID}}"}}?{{query "tpl_layout" "base" "tpl_content" "{{.Models}}_show"}}">
+      <span class="glyphicon glyphicon-briefcase"></span>
+      {{"{{$"}}{{.Model}}{{".Name}}"}}
+      <div class="text-right">
+	<small>optional tag goes here</small>
+      </div>
+    </a>
+    {{"{{end}}"}}
+  </div>
+  {{"{{end}}"}}
+</div>
+  
+{{"{{ end }}"}}

+ 0 - 0
generator/templates/show.tpl