Version zu Ende April 2023
23
Makefile
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# Basic Go makefile
|
||||||
|
|
||||||
|
#CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags '-w -extldflags "-static"' -o Toolbox *.go
|
||||||
|
#GOCMD=GOOS=js GOARCH=wasm go
|
||||||
|
#GOCMD=go
|
||||||
|
GOCMD=CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go
|
||||||
|
GOBUILD=$(GOCMD) build
|
||||||
|
GOCLEAN=$(GOCMD) clean
|
||||||
|
GOTEST=$(GOCMD) test
|
||||||
|
GOGET=$(GOCMD) get
|
||||||
|
|
||||||
|
all: build wasm
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(GOBUILD) -a -ldflags '-w -extldflags "-static"' -v -o Toolbox *.go
|
||||||
|
dbg-build:
|
||||||
|
$(GOBUILD) -v -gcflags=all="-N -l" -tags debug
|
||||||
|
test:
|
||||||
|
$(GOTEST) -v ./...
|
||||||
|
clean:
|
||||||
|
$(GOCLEAN)
|
||||||
|
wasm:
|
||||||
|
exec make -C ./goMetrix/app.wasm/ all &
|
2
build.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
// put your build process in here.
|
||||||
|
console.log("my build process");
|
314
defaults/defaults.go
Normal file
|
@ -0,0 +1,314 @@
|
||||||
|
/**
|
||||||
|
= Creative Commons Lizenzvertrag =
|
||||||
|
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
|
||||||
|
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.
|
||||||
|
|
||||||
|
= Creative Commons License =
|
||||||
|
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
|
||||||
|
Individual permissions beyond the scope of this license may be available at https://archium.org.
|
||||||
|
**/
|
||||||
|
|
||||||
|
package defaults
|
||||||
|
|
||||||
|
import (
|
||||||
|
// "errors"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
// "time"
|
||||||
|
//
|
||||||
|
gjs "github.com/tidwall/gjson"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DEF_log == 0 -> log aus
|
||||||
|
const DEF_lognone = 0 // -> log aus
|
||||||
|
const DEF_logerro = 1 // -> log an + fehler
|
||||||
|
const DEF_logwarn = 2 // -> log an + warnungen
|
||||||
|
const DEF_loginfo = 3 // -> log an + nachrichten
|
||||||
|
const DEF_logdebg = 4 // -> log an + alles
|
||||||
|
var DEF_log int = DEF_logerro // >0 = log an
|
||||||
|
var DEF_alias string = ":root" // start.alias
|
||||||
|
var DEF_apikey string = "00000000-0000-0000-0000-000000000000" // start.apikey
|
||||||
|
var DEF_siteurl string = "http://127.0.0.1:8080" // start.siteurl
|
||||||
|
var DEF_routeurl string = "https://planetary-data-portal.org" // start.routeurl
|
||||||
|
var DEF_idletime float64 = 1800 // start.release (sekunden)
|
||||||
|
var DEF_codebase string = "static" // root für verzeichnisse
|
||||||
|
var DEF_toolboxdirs string = ";/fubagDataset;" //
|
||||||
|
var DEF_metrixdirs string = "/fubagMetrix" // replacement for former metrixToolbox
|
||||||
|
var DEF_wasmdirs_www string = "/wasm/"
|
||||||
|
var DEF_wasmdirs_fs string = "static/wasm"
|
||||||
|
|
||||||
|
var DEF_httphost string = "127.0.0.1"
|
||||||
|
var DEF_httpport int = 8085
|
||||||
|
var DEF_dbhost string = "127.0.0.1"
|
||||||
|
var DEF_dbport int = 6414
|
||||||
|
var DEF_dbuser string = "postgres"
|
||||||
|
var DEF_dbpassword string = "postgres"
|
||||||
|
var DEF_dbname string = "fubagTools"
|
||||||
|
|
||||||
|
const DEF_dateISO = "2006-01-02"
|
||||||
|
const DEF_timeISO = "15:04:05"
|
||||||
|
const DEF_stampISO = "2006-01-02 15:04:05"
|
||||||
|
|
||||||
|
const (
|
||||||
|
DEF_customerid = 1
|
||||||
|
DEF_project = "archium"
|
||||||
|
DEF_coninfo = "sslmode=disable host=%s port=%d user=%s password=%s dbname=%s sslmode=disable"
|
||||||
|
DEF_schema = "html"
|
||||||
|
DEF_tablecustomer = "html_customer"
|
||||||
|
DEF_tablelayout = "html_layout"
|
||||||
|
DEF_tablecontent = "html_content"
|
||||||
|
DEF_fieldsiteurl = "hla_siteurl"
|
||||||
|
DEF_fieldrouteurl = "hla_routeurl"
|
||||||
|
DEF_fieldlayout = "hla_layout"
|
||||||
|
DEF_fieldsource = "hla_source"
|
||||||
|
DEF_fieldcontent = "hco_content"
|
||||||
|
DEF_fieldalias = "hcu_aliasroot"
|
||||||
|
DEF_fieldapikey = "hcu_apikey"
|
||||||
|
DEF_fieldidletime = "hcu_idleseconds"
|
||||||
|
DEF_fieldproject = "hcu_project"
|
||||||
|
DEF_sqllayout = "SELECT hcu.*, hla.* " +
|
||||||
|
"FROM %schema%.%tablecustomer% hcu " +
|
||||||
|
"LEFT JOIN %schema%.%tablelayout% hla ON hla.hla_customerid = hcu.hcu_customerid " +
|
||||||
|
"WHERE hcu.hcu_customerid = %customerid%;"
|
||||||
|
DEF_sqlcontent = "SELECT hcu.*, hla.*, hco.* " +
|
||||||
|
"FROM %schema%.%tablecustomer% hcu " +
|
||||||
|
"LEFT JOIN %schema%.%tablelayout% hla ON hla.hla_customerid = hcu.hcu_customerid " +
|
||||||
|
"LEFT JOIN %schema%.%tablecontent% hco ON hco.hco_customerid = hcu.hcu_customerid " +
|
||||||
|
"WHERE hcu.hcu_customerid = %customerid% AND hco.hco_type = '%type%' " +
|
||||||
|
"ORDER BY hco_layoutid ASC, hco_contentid ASC;"
|
||||||
|
DEF_sqlproject = "SELECT hcu.* " +
|
||||||
|
"FROM %schema%.%tablecustomer% hcu " +
|
||||||
|
"WHERE hcu.hcu_customerid = %customerid%;"
|
||||||
|
DEF_sqlgetjson = "SELECT html.\"GetJson\";('%json%');"
|
||||||
|
DEF_sqlgetsvg = "SELECT * FROM html.\"GetSvg\"(%shadow%,%width%,%height%,'%matrix%','%viewbox%','%names%');"
|
||||||
|
//
|
||||||
|
DEF_sqlUserParam = "id,userIdentifier,lastName,firstName"
|
||||||
|
DEF_sqlUserAdd = "SELECT html.\"AddUser\"('%id%', '%userIdentifier%', '%lastName%', '%firstName%');"
|
||||||
|
)
|
||||||
|
|
||||||
|
func MenuRoot(_alias, _name string) string {
|
||||||
|
return "{\n" + //
|
||||||
|
"\t"success": true,\n" + //
|
||||||
|
"\t"rows":[{\n" + //
|
||||||
|
"\t\t"id":1,\n" + //
|
||||||
|
"\t\t"text":"" + _name + "",\n" + // start-dataverse
|
||||||
|
"\t\t"iconCls":"icon-package",\n" +
|
||||||
|
"\t\t"attributes":{"level":1,"alias":"" + _alias + "","name":"" + _name + "","datasetPid":"%datasetPid%"},\n" + //
|
||||||
|
"\t\t"children":%children%\n" + //
|
||||||
|
"\t}]\n" + //
|
||||||
|
"}"
|
||||||
|
}
|
||||||
|
|
||||||
|
func MenuChildDataverse() string {
|
||||||
|
return "{\n" + //
|
||||||
|
"%tabb%"id":%id%,\n" + //
|
||||||
|
"%tabb%"text":"%count%%title%",\n" + //
|
||||||
|
"%icon%" + //
|
||||||
|
"%tabb%"attributes":{"level":%level%,"type":"%type%"," + //
|
||||||
|
""title":"%title%","alias":"%alias%","name":"%name%"},\n" + //
|
||||||
|
"%tabb%"children":%children%\n" + //
|
||||||
|
"%taba%}"
|
||||||
|
}
|
||||||
|
|
||||||
|
func MenuChildDataset() string {
|
||||||
|
return "{\n" +
|
||||||
|
"%tabb%"id":%id%,\n" + //
|
||||||
|
"%tabb%"text":"%count%%title%",\n" + //
|
||||||
|
"%icon%" + //
|
||||||
|
"%tabb%"attributes":{"level":%level%,"type":"%type%"," + //
|
||||||
|
""datasetPid":"%datasetPid%","datasetId":"%datasetId%"," + //
|
||||||
|
""title":"%title%","subject":%subjects%},\n" + //
|
||||||
|
"%tabb%"children":%children%\n" + //
|
||||||
|
"%taba%}"
|
||||||
|
}
|
||||||
|
|
||||||
|
func MenuChildFile() string {
|
||||||
|
return "{\n" + //
|
||||||
|
"%tabb%"id":%id%,\n" + //
|
||||||
|
"%tabb%"text":"%label%",\n" + //
|
||||||
|
"%icon%" + //
|
||||||
|
"%tabb%"attributes":{"level":%level%,"type":"%type%"},\n" + //
|
||||||
|
"%tabb%"children":[]\n" + //
|
||||||
|
"%taba%}"
|
||||||
|
}
|
||||||
|
|
||||||
|
func MenuChildFileSimple() string {
|
||||||
|
return "{\n" + //
|
||||||
|
"%tabb%"text":"%label%",\n" + //
|
||||||
|
"%icon%" + //
|
||||||
|
"%tabb%"attributes":{"level":%level%,"type":"%type%"},\n" + //
|
||||||
|
"%tabb%"children":[]\n" + //
|
||||||
|
"%taba%}"
|
||||||
|
}
|
||||||
|
|
||||||
|
func MenuChildUser() string {
|
||||||
|
return "{\n" +
|
||||||
|
"\t"id":%id%,\n" +
|
||||||
|
"\t"text":"%name%",\n" +
|
||||||
|
"\t"attributes":{"level":%level%,"lastname":"%lastname%","firstname":"%firstname%"}\n" +
|
||||||
|
"}"
|
||||||
|
}
|
||||||
|
|
||||||
|
func LogToggle(_logging int) int {
|
||||||
|
oldlog := DEF_log
|
||||||
|
//
|
||||||
|
if _logging != 0 {
|
||||||
|
log.SetOutput(os.Stdout)
|
||||||
|
} else {
|
||||||
|
log.SetOutput(ioutil.Discard)
|
||||||
|
}
|
||||||
|
DEF_log = _logging
|
||||||
|
//
|
||||||
|
return oldlog
|
||||||
|
}
|
||||||
|
|
||||||
|
func LogMessage(_label, _message string, _loglevel int) {
|
||||||
|
if _loglevel > 0 {
|
||||||
|
if _loglevel <= DEF_log {
|
||||||
|
// DEF_log == 1 -> log an + fehler
|
||||||
|
// DEF_log == 2 -> log an + warnungen
|
||||||
|
// DEF_log == 3 -> log an + nachrichten
|
||||||
|
// DEF_log == 4 -> log an + mimimi
|
||||||
|
if len(_label) > 0 {
|
||||||
|
switch _loglevel {
|
||||||
|
case 1:
|
||||||
|
log.Printf("( ERROR ) > %v: %v \n", _label, _message)
|
||||||
|
case 2:
|
||||||
|
log.Printf("( WARN ) > %v: %v \n", _label, _message)
|
||||||
|
case 3:
|
||||||
|
log.Printf("( INFO ) > %v: %v \n", _label, _message)
|
||||||
|
case 4:
|
||||||
|
log.Printf("( DEBG ) > %v: %v \n", _label, _message)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch _loglevel {
|
||||||
|
case 1:
|
||||||
|
log.Printf("( ERROR ) > %v \n", _message)
|
||||||
|
case 2:
|
||||||
|
log.Printf("( WARN ) > %v \n", _message)
|
||||||
|
case 3:
|
||||||
|
log.Printf("( INFO ) > %v \n", _message)
|
||||||
|
case 4:
|
||||||
|
log.Printf("( DEBG ) > %v \n", _message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func LogMessage2Level(_label, _message string, _loglevel int) {
|
||||||
|
oldlog := LogToggle(_loglevel)
|
||||||
|
LogMessage(_label, _message, _loglevel)
|
||||||
|
LogToggle(oldlog)
|
||||||
|
}
|
||||||
|
|
||||||
|
func LogError(_label string, _error error) {
|
||||||
|
oldlog := LogToggle(1)
|
||||||
|
LogMessage(_label, fmt.Sprintf("%v", _error), DEF_logerro)
|
||||||
|
LogToggle(oldlog)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetArguments() {
|
||||||
|
allArgs := os.Args[1:]
|
||||||
|
if len(allArgs) > 0 {
|
||||||
|
log.Println("Initialize package - Parameter..")
|
||||||
|
//LogToggle(1)
|
||||||
|
for i, vparam := range allArgs {
|
||||||
|
mparam := strings.Split(vparam, ":")
|
||||||
|
switch mparam[0] {
|
||||||
|
case "log":
|
||||||
|
iint, err := strconv.Atoi(mparam[1])
|
||||||
|
if err == nil {
|
||||||
|
LogToggle(1)
|
||||||
|
log.Printf("\t[%v]: '%v:%v'\n", i, mparam[0], mparam[1])
|
||||||
|
LogToggle(iint)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
case "host":
|
||||||
|
DEF_httphost = mparam[1]
|
||||||
|
case "port":
|
||||||
|
iint, err := strconv.Atoi(mparam[1])
|
||||||
|
if err == nil {
|
||||||
|
DEF_httpport = iint
|
||||||
|
}
|
||||||
|
case "codebase":
|
||||||
|
DEF_codebase = mparam[1]
|
||||||
|
case "toolboxdirs":
|
||||||
|
DEF_toolboxdirs = mparam[1]
|
||||||
|
case "metrixdirs":
|
||||||
|
DEF_metrixdirs = mparam[1]
|
||||||
|
case "dbpassword":
|
||||||
|
DEF_dbpassword = mparam[1]
|
||||||
|
case "dbuser":
|
||||||
|
DEF_dbuser = mparam[1]
|
||||||
|
case "dbname":
|
||||||
|
DEF_dbname = mparam[1]
|
||||||
|
case "dbhost":
|
||||||
|
DEF_dbhost = mparam[1]
|
||||||
|
case "dbport":
|
||||||
|
iint, err := strconv.Atoi(mparam[1])
|
||||||
|
if err == nil {
|
||||||
|
DEF_dbport = iint
|
||||||
|
}
|
||||||
|
case "dataverse":
|
||||||
|
DEF_alias = mparam[1]
|
||||||
|
default:
|
||||||
|
oldlog := LogToggle(DEF_logerro)
|
||||||
|
LogMessage("GetArguments()", fmt.Sprintf("\t[%v]: '%v:%v' is unknown.\n", i, mparam[0], mparam[1]), DEF_logerro)
|
||||||
|
LogToggle(oldlog)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
//log.Printf("\t[%v]: '%v:%v'\n", i, mparam[0], mparam[1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fehler bereitstellen (momentan 20210316)
|
||||||
|
func get_error(_error string, _type string) string {
|
||||||
|
json := "\t" + `"success":false,` + "\n"
|
||||||
|
json = json + "\t" + `"msg":` + "{\n"
|
||||||
|
status := gjs.Get(_error, "status")
|
||||||
|
if status.String() == "ERROR" {
|
||||||
|
message := gjs.Get(_error, "message")
|
||||||
|
if len(message.String()) > 0 {
|
||||||
|
json = json + "\t\t" + `"title"` + ":" + `"Error"` + ",\n"
|
||||||
|
json = json + "\t\t" + `"msg"` + ":" + `"%message%"` + ",\n"
|
||||||
|
json = json + "\t\t" + `"type"` + ":" + `"%type%"`
|
||||||
|
json = strings.Replace(json, "%message%", strings.Replace(message.String(), """, "'", -1), -1)
|
||||||
|
json = strings.Replace(json, "%type%", _type, -1)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if status.Type == gjs.Null {
|
||||||
|
message := fmt.Sprintf("%v", _error)
|
||||||
|
if len(message) > 0 {
|
||||||
|
json = json + "\t\t" + `"title"` + ":" + `"Error"` + ",\n"
|
||||||
|
json = json + "\t\t" + `"msg"` + ":" + `"%message%"` + ",\n"
|
||||||
|
json = json + "\t\t" + `"type"` + ":" + `"%type%"`
|
||||||
|
json = strings.Replace(json, "%message%", strings.Replace(message, """, "'", -1), -1)
|
||||||
|
json = strings.Replace(json, "%type%", _type, -1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
json = json + "\n\t}"
|
||||||
|
//
|
||||||
|
return json
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetError(_error error, _type, _label string) string {
|
||||||
|
//
|
||||||
|
sjson := "{\n" + get_error(fmt.Sprintf("%v:<BR><BR> %v", _label, _error), _type) + "\n}"
|
||||||
|
//
|
||||||
|
return sjson
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetErrorByString(_error, _type, _label string) string {
|
||||||
|
//
|
||||||
|
sjson := get_error(fmt.Sprintf("%v:<BR><BR> %v", _label, _error), _type)
|
||||||
|
//
|
||||||
|
return sjson
|
||||||
|
}
|
157
goDataverse/connect/connect.go
Normal file
|
@ -0,0 +1,157 @@
|
||||||
|
/**
|
||||||
|
= Creative Commons Lizenzvertrag =
|
||||||
|
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
|
||||||
|
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.
|
||||||
|
|
||||||
|
= Creative Commons License =
|
||||||
|
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
|
||||||
|
Individual permissions beyond the scope of this license may be available at https://archium.org.
|
||||||
|
**/
|
||||||
|
|
||||||
|
package connect
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
// "log"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
// "net/url"
|
||||||
|
def "Toolbox/defaults"
|
||||||
|
tol "Toolbox/goDataverse/tools"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetRequest(url string, params, header tol.ColMap) ([]byte, error) {
|
||||||
|
client := &http.Client{}
|
||||||
|
req, _ := http.NewRequest("GET", url, nil)
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
query := req.URL.Query()
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
req.URL.RawQuery = query.Encode()
|
||||||
|
def.LogMessage("GetRequest(url.encode)", url, def.DEF_logdebg)
|
||||||
|
res, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
def.LogError("GetRequest(do)", err)
|
||||||
|
} else {
|
||||||
|
defer res.Body.Close()
|
||||||
|
b, err := ioutil.ReadAll(res.Body)
|
||||||
|
if err == nil {
|
||||||
|
return b, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return []byte(""), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetRequestMap(_url string, params tol.ColMapInt, header tol.ColMap) ([]byte, error) {
|
||||||
|
client := &http.Client{}
|
||||||
|
// _url = _url + "&fq=(title:1)"
|
||||||
|
// _url = strings.Replace(_url, "*", `((title:2.+OR+title:Ebene))`, -1)
|
||||||
|
def.LogMessage("GetRequestMap(map)", _url, def.DEF_logdebg)
|
||||||
|
req, _ := http.NewRequest("GET", _url, nil)
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
query := req.URL.Query()
|
||||||
|
for _, ival := range params {
|
||||||
|
for k, v := range ival {
|
||||||
|
def.LogMessage("GetRequestMap(values)", fmt.Sprintf("%v: %v (%v)", k, v, ival), def.DEF_logdebg)
|
||||||
|
query.Add(k, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
req.URL.RawQuery = query.Encode()
|
||||||
|
def.LogMessage("GetRequestmap(encode)", req.URL.String(), def.DEF_logdebg)
|
||||||
|
req.URL.RawQuery = strings.Replace(req.URL.RawQuery, "_q_=", "q=", -1)
|
||||||
|
def.LogMessage("GetRequestMap(replac)", req.URL.String(), def.DEF_logdebg)
|
||||||
|
res, err := client.Do(req)
|
||||||
|
if err == nil {
|
||||||
|
defer res.Body.Close()
|
||||||
|
b, err := ioutil.ReadAll(res.Body)
|
||||||
|
if err == nil {
|
||||||
|
return b, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return []byte(""), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func PostRequest(url string, params, header tol.ColMap) ([]byte, error) {
|
||||||
|
client := &http.Client{}
|
||||||
|
postData, err := json.Marshal(params)
|
||||||
|
def.LogMessage("PostRequest(data)", fmt.Sprintf("%v", postData), def.DEF_logdebg)
|
||||||
|
req, _ := http.NewRequest("POST", url, bytes.NewReader(postData))
|
||||||
|
if err == nil {
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
res, err := client.Do(req)
|
||||||
|
if err == nil {
|
||||||
|
defer res.Body.Close()
|
||||||
|
b, err := ioutil.ReadAll(res.Body)
|
||||||
|
if err == nil {
|
||||||
|
return b, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return []byte(""), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func PostRequestB(url string, postData []byte, header tol.ColMap) ([]byte, error) {
|
||||||
|
client := &http.Client{}
|
||||||
|
req, err := http.NewRequest("POST", url, bytes.NewReader(postData))
|
||||||
|
if err == nil {
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
res, err := client.Do(req)
|
||||||
|
if err == nil {
|
||||||
|
defer res.Body.Close()
|
||||||
|
b, err := ioutil.ReadAll(res.Body)
|
||||||
|
return b, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return []byte(""), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteRequest(url string, header tol.ColMap) ([]byte, error) {
|
||||||
|
client := &http.Client{}
|
||||||
|
req, _ := http.NewRequest("DELETE", url, nil)
|
||||||
|
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
def.LogMessage("DeleteRequest(url)", req.URL.String(), def.DEF_logdebg)
|
||||||
|
res, _ := client.Do(req)
|
||||||
|
//def.LogMessage("DeleteRequest(do)", res.Request.Header., def.DEF_logdebg)
|
||||||
|
b, err := ioutil.ReadAll(res.Body)
|
||||||
|
res.Body.Close()
|
||||||
|
|
||||||
|
return b, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func Redirect(_w http.ResponseWriter, _r *http.Request, _url string) {
|
||||||
|
// remove/add not default ports from _r.Host
|
||||||
|
target := _url
|
||||||
|
// if len(_r.URL.RawQuery) > 0 {
|
||||||
|
// target += "?" + _r.URL.RawQuery
|
||||||
|
// }
|
||||||
|
log.Printf("redirect to: %s", target)
|
||||||
|
reponse, err := http.Get(_url)
|
||||||
|
body, err := ioutil.ReadAll(reponse.Body)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
fmt.Println("response body", reponse.Body)
|
||||||
|
_w.Write(body)
|
||||||
|
log.Printf("redirect to: %s, %v, %v", target, string(body), err)
|
||||||
|
//http.Redirect(_w, _r, target, http.StatusSeeOther)
|
||||||
|
}
|
142
goDataverse/dataset/dataset.go
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
/**
|
||||||
|
= Creative Commons Lizenzvertrag =
|
||||||
|
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
|
||||||
|
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.
|
||||||
|
|
||||||
|
= Creative Commons License =
|
||||||
|
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
|
||||||
|
Individual permissions beyond the scope of this license may be available at https://archium.org.
|
||||||
|
**/
|
||||||
|
|
||||||
|
package dataset
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
// "log"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
def "Toolbox/defaults"
|
||||||
|
con "Toolbox/goDataverse/connect"
|
||||||
|
tol "Toolbox/goDataverse/tools"
|
||||||
|
|
||||||
|
gjs "github.com/tidwall/gjson"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetDatasetLastVersion(_dp tol.TDVParams, _id string) (string, error) {
|
||||||
|
var imajor int64 = 1
|
||||||
|
var iminor int64 = 0
|
||||||
|
var state string = "draft"
|
||||||
|
var url string = tol.GetSiteUrl(_dp) + "/api/datasets/" + _id + "/versions"
|
||||||
|
res, err := con.GetRequest(url, tol.ColMap{},
|
||||||
|
tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
if err == nil {
|
||||||
|
var ver = tol.GetObjectFromStr(fmt.Sprintf("%s", res))
|
||||||
|
if ver.IsObject() {
|
||||||
|
status := gjs.Get(ver.String(), "status")
|
||||||
|
if status.String() == "OK" {
|
||||||
|
lst := gjs.Get(ver.String(), "data")
|
||||||
|
if lst.IsArray() {
|
||||||
|
for _, entry := range lst.Array() {
|
||||||
|
if entry.IsObject() {
|
||||||
|
tmpstate := gjs.Get(entry.String(), "versionState")
|
||||||
|
switch tmpstate.String() {
|
||||||
|
case "DRAFT":
|
||||||
|
break
|
||||||
|
case "RELEASED":
|
||||||
|
tmpmajor := gjs.Get(entry.String(), "versionNumber")
|
||||||
|
if tmpmajor.Int() > imajor {
|
||||||
|
imajor = tmpmajor.Int()
|
||||||
|
iminor = gjs.Get(entry.String(), "versionMinorNumber").Int()
|
||||||
|
} else {
|
||||||
|
if tmpmajor.Int() == imajor {
|
||||||
|
tmpminor := gjs.Get(entry.String(), "versionMinorNumber")
|
||||||
|
if tmpminor.Int() > iminor {
|
||||||
|
iminor = tmpminor.Int()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
state = tmpstate.String()
|
||||||
|
break
|
||||||
|
//fmt.Println("GetDatasetLastVersion():", _id, imajor, iminor, state, gjs.Get(entry.String(), "id"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// auswertung: falls keine "released" version vorhanden, dann draft zurück
|
||||||
|
var version string = ":" + state
|
||||||
|
switch state {
|
||||||
|
case "RELEASED":
|
||||||
|
version = fmt.Sprintf("%v.%v", imajor, iminor)
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return version, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDatasetByPersistentId(_dp tol.TDVParams, _persist, _version string) (string, error) {
|
||||||
|
var persist string = _persist
|
||||||
|
var version string = _version
|
||||||
|
if len(persist) == 0 {
|
||||||
|
persist = _dp.DP_datasetPid
|
||||||
|
}
|
||||||
|
var url string = tol.GetSiteUrl(_dp) + "/api/datasets/:persistentId/%versions%?persistentId=" + persist
|
||||||
|
if len(version) > 0 {
|
||||||
|
version = "versions/" + version + "/"
|
||||||
|
} else {
|
||||||
|
if len(_dp.DP_datasetVersion) > 0 {
|
||||||
|
version = "versions/" + _dp.DP_datasetVersion + "/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
url = strings.Replace(url, "%versions%", version, -1)
|
||||||
|
def.LogMessage("GetDatasetByPersistentId(url)", url, def.DEF_logdebg)
|
||||||
|
res, err := con.GetRequest(url, tol.ColMap{},
|
||||||
|
tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDatasetMetadata(_dp tol.TDVParams, _id, _version string) (string, error) {
|
||||||
|
var version string = _version
|
||||||
|
var url string = tol.GetSiteUrl(_dp) + "/api/datasets/" + _id + "/%versions%/metadata"
|
||||||
|
if len(version) > 0 {
|
||||||
|
version = "versions/" + version
|
||||||
|
} else {
|
||||||
|
if len(_dp.DP_datasetVersion) > 0 {
|
||||||
|
version = "versions/" + _dp.DP_datasetVersion
|
||||||
|
} else {
|
||||||
|
version = "versions/1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
url = strings.Replace(url, "%versions%", version, -1)
|
||||||
|
def.LogMessage("GetDatasetMetadata(url)", url, def.DEF_logdebg)
|
||||||
|
res, err := con.GetRequest(url, tol.ColMap{},
|
||||||
|
tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDatasetMetafield(_dp tol.TDVParams, _id string) (string, error) {
|
||||||
|
var url string = tol.GetSiteUrl(_dp) + "/api/admin/datasetfield/" + _id
|
||||||
|
def.LogMessage("GetDatasetMetafield(url)", url, def.DEF_logdebg)
|
||||||
|
res, err := con.GetRequest(url, tol.ColMap{},
|
||||||
|
tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateDataset(_dp tol.TDVParams, _parent, _params string) (string, error) {
|
||||||
|
res, err := con.PostRequestB(tol.GetSiteUrl(_dp)+"/api/dataverses/"+_parent+"/datasets",
|
||||||
|
[]byte(_params), tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
func DownloadByDataset(_dp tol.TDVParams) ([]byte, error) {
|
||||||
|
res, err := con.GetRequest(tol.GetSiteUrl(_dp)+"/api/access/dataset/:persistentId/?persistentId="+_dp.DP_datasetPid,
|
||||||
|
tol.ColMap{}, tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return res, err
|
||||||
|
}
|
80
goDataverse/dataverse/dataverse.go
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
/**
|
||||||
|
= Creative Commons Lizenzvertrag =
|
||||||
|
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
|
||||||
|
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.
|
||||||
|
|
||||||
|
= Creative Commons License =
|
||||||
|
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
|
||||||
|
Individual permissions beyond the scope of this license may be available at https://archium.org.
|
||||||
|
**/
|
||||||
|
|
||||||
|
package dataverse
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
//
|
||||||
|
con "Toolbox/goDataverse/connect"
|
||||||
|
tol "Toolbox/goDataverse/tools"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ListDataverses(_dp tol.TDVParams) (string, error) {
|
||||||
|
res, err := con.GetRequest(tol.GetSiteUrl(_dp)+"/api/search?q=*&types=dataverse&per_page=1000",
|
||||||
|
tol.ColMap{}, tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func ListDataverses2(server_url, api_token string) string {
|
||||||
|
response, _ := con.GetRequest(server_url+"/api/search?q=*&types=dataverse&per_page=1000",
|
||||||
|
tol.ColMap{}, tol.ColMap{"X-Dataverse-key": api_token})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", response))
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetContentByAlias(_dp tol.TDVParams, _alias string) (string, error) {
|
||||||
|
res, err := con.GetRequest(tol.GetSiteUrl(_dp)+"/api/dataverses/"+_alias+"/contents",
|
||||||
|
tol.ColMap{}, tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDataverseByIdOrAlias(_dp tol.TDVParams, _id string) (string, error) {
|
||||||
|
res, err := con.GetRequest(tol.GetSiteUrl(_dp)+"/api/dataverses/"+_id,
|
||||||
|
tol.ColMap{}, tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDataverseByIdOrAlias2(server_url, api_token, id string) string {
|
||||||
|
response, _ := con.GetRequest(server_url+"/api/dataverses/"+id, map[string]string{}, map[string]string{"X-Dataverse-key": api_token})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", response))
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDataverseStoragesizeById(_dp tol.TDVParams, _id string) (string, error) {
|
||||||
|
res, err := con.GetRequest(tol.GetSiteUrl(_dp)+"/api/dataverses/"+_id+"/storagesize",
|
||||||
|
tol.ColMap{}, tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsDataverseRoot(_dp tol.TDVParams, _alias string) (string, error) {
|
||||||
|
res, err := con.GetRequest(tol.GetSiteUrl(_dp)+"/api/dataverses/"+_alias+"/metadatablocks/isRoot",
|
||||||
|
tol.ColMap{}, tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateDataverse(_dp tol.TDVParams, _parent, _params string) (string, error) {
|
||||||
|
res, err := con.PostRequestB(tol.GetSiteUrl(_dp)+"/api/dataverses/"+_parent,
|
||||||
|
[]byte(_params), tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteDataverseById(_dp tol.TDVParams, _id string) (string, error) {
|
||||||
|
res, err := con.DeleteRequest(tol.GetSiteUrl(_dp)+"/api/dataverses/"+_id,
|
||||||
|
tol.ColMap{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
48
goDataverse/files/files.go
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/**
|
||||||
|
= Creative Commons Lizenzvertrag =
|
||||||
|
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
|
||||||
|
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.
|
||||||
|
|
||||||
|
= Creative Commons License =
|
||||||
|
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
|
||||||
|
Individual permissions beyond the scope of this license may be available at https://archium.org.
|
||||||
|
**/
|
||||||
|
|
||||||
|
package files
|
||||||
|
|
||||||
|
import (
|
||||||
|
con "Toolbox/goDataverse/connect"
|
||||||
|
tol "Toolbox/goDataverse/tools"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
gjs "github.com/tidwall/gjson"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetFilesByDatasetId(_dp tol.TDVParams, _datasetid, _version string,
|
||||||
|
_citation gjs.Result) (string, error) {
|
||||||
|
if len(_datasetid) == 0 {
|
||||||
|
return "", errors.New("No datasetId found.")
|
||||||
|
}
|
||||||
|
var datasetid string = _datasetid
|
||||||
|
var version string = _version
|
||||||
|
var url string = tol.GetSiteUrl(_dp) + "/api/datasets/" + datasetid + "/%versions%/files"
|
||||||
|
if len(version) > 0 {
|
||||||
|
version = "versions/" + version
|
||||||
|
} else {
|
||||||
|
if len(_dp.DP_datasetVersion) > 0 {
|
||||||
|
version = "versions/" + _dp.DP_datasetVersion
|
||||||
|
} else {
|
||||||
|
version = "versions/:latest"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
url = strings.Replace(url, "%versions%", version, -1)
|
||||||
|
|
||||||
|
//fmt.Println("URL-files:", url)
|
||||||
|
res, err := con.GetRequest(url, map[string]string{},
|
||||||
|
map[string]string{"X-Dataverse-key": tol.GetApiKey(_dp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", res)), err
|
||||||
|
}
|
BIN
goDataverse/goDataverse.debug
Normal file
1807
goDataverse/goDataverse.go
Normal file
76
goDataverse/search/search.go
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
/**
|
||||||
|
= Creative Commons Lizenzvertrag =
|
||||||
|
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
|
||||||
|
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.
|
||||||
|
|
||||||
|
= Creative Commons License =
|
||||||
|
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
|
||||||
|
Individual permissions beyond the scope of this license may be available at https://archium.org.
|
||||||
|
**/
|
||||||
|
|
||||||
|
package search
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
//
|
||||||
|
def "Toolbox/defaults"
|
||||||
|
con "Toolbox/goDataverse/connect"
|
||||||
|
tol "Toolbox/goDataverse/tools"
|
||||||
|
)
|
||||||
|
|
||||||
|
// #############################################################################
|
||||||
|
//
|
||||||
|
// der parameter "_q_=xxx" wird vor der abfrage in "q=xxx" umgewandelt. hierbei
|
||||||
|
// handelt es sich um einen workaround, der garantiert, dass die
|
||||||
|
// parameterreihenfolge bei der übergabe an die abfrage passt.
|
||||||
|
// aus diesem grund werden hier auch 2 durchläufe benötigt...
|
||||||
|
//
|
||||||
|
func SearchByParams(_dvp tol.TDVParams, _params tol.ColMapInt) (string, error) {
|
||||||
|
var par tol.ColMapInt = make(tol.ColMapInt, 0)
|
||||||
|
var url string = tol.GetSiteUrl(_dvp) + "/api/search?"
|
||||||
|
// 1. durchlauf query parameter anhängen
|
||||||
|
for _, ival := range _params {
|
||||||
|
// log.Println("SearchByParams(param1):", ival)
|
||||||
|
for key, val := range ival {
|
||||||
|
if key == "_q_" {
|
||||||
|
url = url + key + "=" + val
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 2. durchlauf restliche parameter anhängen
|
||||||
|
for _, ival := range _params {
|
||||||
|
// log.Println("SearchByParams(param2):", ival)
|
||||||
|
for key, val := range ival {
|
||||||
|
if key != "_q_" {
|
||||||
|
if key != "search" {
|
||||||
|
url = url + "&" + key + "=" + val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// def.LogMessage("", fmt.Sprintf("GetSearchResult(%v) > url: %v", "params", url), def.DEF_loginfo)
|
||||||
|
fmt.Printf("GetSearchResult(%v) > url: %v\n", "params", url)
|
||||||
|
response, err := con.GetRequestMap(url, par,
|
||||||
|
map[string]string{"X-Dataverse-key": tol.GetApiKey(_dvp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", response)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func SearchSimple(_dvp tol.TDVParams, _alias string, _type string, _advanced string) (string, error) {
|
||||||
|
var par tol.ColMapInt = make(tol.ColMapInt, 0)
|
||||||
|
var url string = tol.GetSiteUrl(_dvp) + "/api/search?q=*%type%%alias%&per_page=1000%advanced%"
|
||||||
|
//
|
||||||
|
url = strings.ReplaceAll(url, "%alias%", _alias)
|
||||||
|
url = strings.ReplaceAll(url, "%type%", _type)
|
||||||
|
url = strings.ReplaceAll(url, "%advanced%", _advanced)
|
||||||
|
//
|
||||||
|
def.LogMessage("", fmt.Sprintf("GetSearchResult(%v) > url: %v", "params", url), def.DEF_logdebg)
|
||||||
|
// log.Printf("GetSearchSimple(%v) > url: %v\n", "params", url)
|
||||||
|
response, err := con.GetRequestMap(url, par,
|
||||||
|
map[string]string{"X-Dataverse-key": tol.GetApiKey(_dvp)})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", response)), err
|
||||||
|
}
|
281
goDataverse/svg/svg.go
Normal file
641
goDataverse/tools/tools.go
Normal file
|
@ -0,0 +1,641 @@
|
||||||
|
/**
|
||||||
|
= Creative Commons Lizenzvertrag =
|
||||||
|
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
|
||||||
|
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.
|
||||||
|
|
||||||
|
= Creative Commons License =
|
||||||
|
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
|
||||||
|
Individual permissions beyond the scope of this license may be available at https://archium.org.
|
||||||
|
**/
|
||||||
|
|
||||||
|
package tools
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"errors"
|
||||||
|
// "fmt"
|
||||||
|
"html"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"reflect"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
def "Toolbox/defaults"
|
||||||
|
pog "Toolbox/postgres"
|
||||||
|
sql "database/sql"
|
||||||
|
|
||||||
|
gjs "github.com/tidwall/gjson"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TJson []map[string]interface{}
|
||||||
|
|
||||||
|
type TDVParams struct {
|
||||||
|
DP_datasetId string //
|
||||||
|
DP_datasetPid string //
|
||||||
|
DP_datasetVersion string //
|
||||||
|
DP_localeCode string //
|
||||||
|
DP_fileId string //
|
||||||
|
DP_filePid string //
|
||||||
|
DP_apiKey string //
|
||||||
|
DP_siteUrl string //
|
||||||
|
DP_alias string //
|
||||||
|
DP_routeUrl string //
|
||||||
|
}
|
||||||
|
|
||||||
|
type TFVParams struct {
|
||||||
|
FP_suid string // generierte suid (js)
|
||||||
|
FP_type string // 'json', 'html'..
|
||||||
|
FP_info string // optionale info (bsp.: 'read json grid')
|
||||||
|
FP_func string // 'getHtml', 'getValues'..
|
||||||
|
FP_modl string // 'app.active_module' (js)
|
||||||
|
FP_what string // 'menu', 'datagrid', 'propgrid', 'login'..
|
||||||
|
FP_suff string // 'login'
|
||||||
|
FP_extn string // '.txt'. '.json'..
|
||||||
|
FP_from string // 'db', 'file', 'dataverse'..
|
||||||
|
FP_user string //
|
||||||
|
FP_proj string // 'projektname aus tabelle'
|
||||||
|
FP_who string // art der daten - 'user', 'data'...
|
||||||
|
FP_time string // übergabe zeitpunkt.
|
||||||
|
FP_alias string // alias für dataverse grid
|
||||||
|
FP_dois string // liste der "dois" für sicherung
|
||||||
|
FP_rout string // umleitung beim ausloggen
|
||||||
|
FP_refr bool // refresh der session möglich
|
||||||
|
// für svg
|
||||||
|
FP_shad string // svg-schatten
|
||||||
|
FP_widt string // svg-breite
|
||||||
|
FP_heit string // svg-höhe
|
||||||
|
FP_matx string // svg-transfor.matrix
|
||||||
|
FP_view string // svg-viewbox
|
||||||
|
//
|
||||||
|
FP_qery string // abfrage-string
|
||||||
|
//
|
||||||
|
FP_parm ColMapInt
|
||||||
|
}
|
||||||
|
|
||||||
|
type TFileColumns struct {
|
||||||
|
FC_sequence string
|
||||||
|
FC_field string
|
||||||
|
FC_title string
|
||||||
|
FC_isvisible bool
|
||||||
|
}
|
||||||
|
|
||||||
|
type TValueRow struct {
|
||||||
|
VR_key string
|
||||||
|
VR_value string
|
||||||
|
}
|
||||||
|
|
||||||
|
type TUserEntry struct {
|
||||||
|
UE_Done bool
|
||||||
|
UE_IpAddress string
|
||||||
|
UE_IpPort string
|
||||||
|
UE_IdleTime time.Time
|
||||||
|
UE_Released time.Time
|
||||||
|
UE_DVParams TDVParams
|
||||||
|
UE_FVParams TFVParams
|
||||||
|
UE_DBConn *sql.DB
|
||||||
|
UE_Datasets string
|
||||||
|
}
|
||||||
|
|
||||||
|
type SVGMap map[string]string
|
||||||
|
type ColMap map[string]string
|
||||||
|
type JsnColMap map[string]interface{}
|
||||||
|
type ColMapInt map[int]map[string]string
|
||||||
|
type RowMap map[string]map[string]string
|
||||||
|
type JsnMapInt map[int]map[string]interface{}
|
||||||
|
type TUserEntries map[string]TUserEntry
|
||||||
|
type TDatasetEntries map[string]string
|
||||||
|
|
||||||
|
type TDataverse JsnColMap
|
||||||
|
|
||||||
|
// dataverse
|
||||||
|
var Dp TDVParams
|
||||||
|
var Fp TFVParams
|
||||||
|
var Ue TUserEntries
|
||||||
|
var Ds TDatasetEntries
|
||||||
|
|
||||||
|
var icnt int = 0
|
||||||
|
var Col = ""
|
||||||
|
var Val = ""
|
||||||
|
|
||||||
|
var Source string = "head;menu;grid;propgrid;content;login;"
|
||||||
|
|
||||||
|
//
|
||||||
|
var DataColList ColMap = make(ColMap, 0)
|
||||||
|
var FileColList ColMap = make(ColMap, 0)
|
||||||
|
|
||||||
|
func CheckConnection(_fparam TFVParams) (*sql.DB, error) {
|
||||||
|
var err error = errors.New("SUID not found.")
|
||||||
|
if len(_fparam.FP_suid) > 0 {
|
||||||
|
var ok bool = false
|
||||||
|
var ue TUserEntry
|
||||||
|
//
|
||||||
|
ue, ok = Ue[_fparam.FP_suid]
|
||||||
|
if ok {
|
||||||
|
// fmt.Println("CheckConnection(entry):", _fparam.FP_suid, ue.UE_DBConn)
|
||||||
|
if ue.UE_DBConn == nil {
|
||||||
|
ue.UE_DBConn, err = pog.GetConnection()
|
||||||
|
if err == nil {
|
||||||
|
//fmt.Println("CheckConnection(created 1):", _fparam.FP_suid, ue.UE_DBConn)
|
||||||
|
Ue[_fparam.FP_suid] = ue
|
||||||
|
return ue.UE_DBConn, nil
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ue.UE_DBConn, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func CloseConnection(_fparam TFVParams) error {
|
||||||
|
// var err error = errors.New("SUID not found.")
|
||||||
|
var ue TUserEntry = Ue[_fparam.FP_suid]
|
||||||
|
pog.CloseConnection(ue.UE_DBConn)
|
||||||
|
//
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoveLBR(text string, repl string) string {
|
||||||
|
re := regexp.MustCompile(`\x{000D}\x{000A}|[\x{000A}\x{000B}\x{000C}\x{000D}\x{0085}\x{2028}\x{2029}]`)
|
||||||
|
return re.ReplaceAllString(text, repl)
|
||||||
|
}
|
||||||
|
|
||||||
|
func PrintMap(_map map[string][]string) {
|
||||||
|
for key, value := range _map {
|
||||||
|
for fkey, fvalue := range value {
|
||||||
|
log.Println(key, " has ", fkey, ":", fvalue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetIP(_r *http.Request) string {
|
||||||
|
forwarded := _r.Header.Get("X-FORWARDED-FOR")
|
||||||
|
if forwarded != "" {
|
||||||
|
return forwarded
|
||||||
|
}
|
||||||
|
return _r.RemoteAddr
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetApiKey(_dp TDVParams) string {
|
||||||
|
var apikey string = def.DEF_apikey
|
||||||
|
if len(_dp.DP_apiKey) > 0 {
|
||||||
|
apikey = _dp.DP_apiKey
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return apikey
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetSiteUrl(_dp TDVParams) string {
|
||||||
|
var siteurl string = def.DEF_siteurl
|
||||||
|
if len(_dp.DP_siteUrl) > 0 {
|
||||||
|
siteurl = _dp.DP_siteUrl
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return siteurl
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetRouteUrl(_dp TDVParams) string {
|
||||||
|
var siteurl string = def.DEF_routeurl
|
||||||
|
if len(_dp.DP_routeUrl) > 0 {
|
||||||
|
siteurl = _dp.DP_routeUrl
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return siteurl
|
||||||
|
}
|
||||||
|
|
||||||
|
// get string between (tools)
|
||||||
|
func GetstringBetween(_string string, _start string, _end string) string {
|
||||||
|
var str = "" + _string
|
||||||
|
var s = strings.Index(str, _start)
|
||||||
|
if s == -1 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
s += len(_start)
|
||||||
|
e := strings.Index(str, _end)
|
||||||
|
if e == -1 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return str[s:e]
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddStrings(_sum, _val string, _sep string) string {
|
||||||
|
if len(_sum) > 0 {
|
||||||
|
return _sum + _sep + _val
|
||||||
|
}
|
||||||
|
return _val
|
||||||
|
}
|
||||||
|
|
||||||
|
func UniqueStrings(_str, _sep string) string {
|
||||||
|
m := make(map[string]bool)
|
||||||
|
keys := make([]string, 0)
|
||||||
|
for _, c := range strings.Split(_str, _sep) {
|
||||||
|
if _, ok := m[c]; !ok {
|
||||||
|
m[c] = true
|
||||||
|
keys = append(keys, c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return strings.Join(keys, _sep)
|
||||||
|
}
|
||||||
|
|
||||||
|
func JsonEscape(i string) string {
|
||||||
|
b, err := json.Marshal(i)
|
||||||
|
if err != nil {
|
||||||
|
def.LogError("JsonEscape()", err)
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
s := string(b)
|
||||||
|
//
|
||||||
|
return s[1 : len(s)-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetTabLevel(_level int64) string {
|
||||||
|
var tab string = ""
|
||||||
|
for i := 0; i < int(_level); i++ {
|
||||||
|
tab = tab + "\t"
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return tab
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetTab10(_level int) (string, string) {
|
||||||
|
var taba string = "\t"
|
||||||
|
var tabb string = "\t\t"
|
||||||
|
var level int = _level
|
||||||
|
for {
|
||||||
|
if level < 10 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
taba = taba + "\t"
|
||||||
|
tabb = tabb + "\t"
|
||||||
|
level = level / 10
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return taba, tabb
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetJsonResult(_base gjs.Result, _key string) gjs.Result {
|
||||||
|
return gjs.Get(_base.String(), _key)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetJsonString(_base gjs.Result, _key string) string {
|
||||||
|
return GetJsonResult(_base, _key).String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetJsonInt(_base gjs.Result, _key string) int64 {
|
||||||
|
return GetJsonResult(_base, _key).Int()
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetObjectFromStr(_objstr string) gjs.Result {
|
||||||
|
var resobj gjs.Result = gjs.Get(`{"data":`+_objstr+`}`, "data")
|
||||||
|
//
|
||||||
|
return resobj
|
||||||
|
}
|
||||||
|
|
||||||
|
func DoFilterByJsonStr(_objstr gjs.Result) gjs.Result {
|
||||||
|
if _objstr.Type == gjs.String {
|
||||||
|
_objstr = GetObjectFromStr(string(`"` + DoFilterByStr(_objstr.String()) + `"`))
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return _objstr
|
||||||
|
}
|
||||||
|
|
||||||
|
func DoFilterByStr(_str string) string {
|
||||||
|
var svalue string = strings.ReplaceAll(_str, "\n", " ")
|
||||||
|
if reflect.TypeOf(_str).Name() == "string" {
|
||||||
|
if strings.Contains(_str, `"`) {
|
||||||
|
evalarr := strings.Split(_str, `"`)
|
||||||
|
if len(evalarr) > 0 {
|
||||||
|
smarshall, err := json.Marshal(_str)
|
||||||
|
if err != nil {
|
||||||
|
svalue = "Wrong count of double quoted sign."
|
||||||
|
} else {
|
||||||
|
svalue = strings.Trim(string(smarshall), `"`)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
svalue = html.EscapeString(svalue)
|
||||||
|
// svalue = strings.ReplaceAll(svalue, `"`, """)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
svalue = strings.ReplaceAll(svalue, "\t", "	")
|
||||||
|
//
|
||||||
|
return svalue
|
||||||
|
}
|
||||||
|
|
||||||
|
func JsonSearch(_json gjs.Result, _key, _value string, _level int64, _caption gjs.Result) (gjs.Result, bool) {
|
||||||
|
if _level == 0 {
|
||||||
|
_caption.Type = gjs.Null
|
||||||
|
} else {
|
||||||
|
if _caption.Type != gjs.Null {
|
||||||
|
_caption = DoFilterByJsonStr(_caption)
|
||||||
|
//
|
||||||
|
return _caption, true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var result bool = false
|
||||||
|
if _json.IsObject() {
|
||||||
|
var keysearch bool = (len(_key) > 0)
|
||||||
|
_json.ForEach(func(jkey, jvalue gjs.Result) bool {
|
||||||
|
if jvalue.IsArray() {
|
||||||
|
_caption, result = JsonSearch(jvalue, _key, _value, _level+1, _caption)
|
||||||
|
// fmt.Println(GetTabLevel(_level), "(oa)", jkey, "=", _caption)
|
||||||
|
} else {
|
||||||
|
if jvalue.IsObject() {
|
||||||
|
_caption, result = JsonSearch(jvalue, _key, _value, _level+1, _caption)
|
||||||
|
// fmt.Println(GetTabLevel(_level), "(oo)", jkey, "=", _caption)
|
||||||
|
} else {
|
||||||
|
// fmt.Println(GetTabLevel(_level), "(ov)", _key, _value, jkey, "=", jvalue)
|
||||||
|
if keysearch {
|
||||||
|
if jkey.String() == _key {
|
||||||
|
if jvalue.String() == _value {
|
||||||
|
_caption = gjs.Get(_json.String(), "value")
|
||||||
|
result = (_caption.Type != gjs.Null)
|
||||||
|
// fmt.Println(GetTabLevel(_level), "(< [", _level, "] ov >)", _key, ".", _value, "=", _caption, _value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if jkey.String() == _value {
|
||||||
|
_caption = jvalue
|
||||||
|
result = (_caption.Type != gjs.Null)
|
||||||
|
// fmt.Println(GetTabLevel(_level), "(< [", _level, "] ov >)", _key, ".", _value, "=", _caption, _value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _caption.Type != gjs.Null {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
if _json.IsArray() {
|
||||||
|
for jkey, jvalue := range _json.Array() {
|
||||||
|
jkey = jkey
|
||||||
|
if jvalue.IsArray() {
|
||||||
|
// log.Println(GetTabLevel(_level), "(aa)", jkey, "=")
|
||||||
|
_caption, result = JsonSearch(jvalue, _key, _value, _level+1, _caption)
|
||||||
|
} else {
|
||||||
|
if jvalue.IsObject() {
|
||||||
|
// log.Println(GetTabLevel(_level), "(ao)", jkey, "=")
|
||||||
|
_caption, result = JsonSearch(jvalue, _key, _value, _level+1, _caption)
|
||||||
|
} else {
|
||||||
|
// log.Println(GetTabLevel(_level), "(av)", jkey, "=", jvalue)
|
||||||
|
if jvalue.String() == _value {
|
||||||
|
_caption = gjs.Get(_json.String(), "value")
|
||||||
|
// log.Println(GetTabLevel(_level), "(< [", _level, "] av >)", _key, ".", _value, "=", _caption, _value)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _caption.Type != gjs.Null {
|
||||||
|
_caption = DoFilterByJsonStr(_caption)
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// fmt.Println(GetTabLevel(_level), "(res)", _key, _value, "=", _caption)
|
||||||
|
return _caption, result
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddValues(_col, _val string, _caption, _value gjs.Result) (string, string) {
|
||||||
|
_col = AddStrings(_col, `"`+_caption.String(), `",`)
|
||||||
|
_val = AddStrings(_val, `"`+_caption.String()+`":"`+DoFilterByStr(_value.String())+`",`, `,`)
|
||||||
|
//
|
||||||
|
return _col, _val
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddColumnToMap(_col ColMap, _key, _value gjs.Result) ColMap {
|
||||||
|
if len(_key.String()) > 0 {
|
||||||
|
if _value.IsObject() {
|
||||||
|
return _col
|
||||||
|
}
|
||||||
|
if len(_col) == 0 {
|
||||||
|
_col = make(ColMap)
|
||||||
|
}
|
||||||
|
_value = DoFilterByJsonStr(_value)
|
||||||
|
_col[`"`+_key.String()+`"`] = `"` + _value.String() + `"`
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return _col
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddColumnToMapAsString(_col ColMap, _key, _value string) ColMap {
|
||||||
|
if len(_key) > 0 {
|
||||||
|
if len(_col) == 0 {
|
||||||
|
_col = make(ColMap)
|
||||||
|
}
|
||||||
|
// _col[_key] = _value
|
||||||
|
_value = DoFilterByStr(_value)
|
||||||
|
_col[`"`+_key+`"`] = `"` + _value + `"`
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return _col
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddValueToMap(_row RowMap, _col ColMap,
|
||||||
|
_index, _key, _value gjs.Result, _exclude, _include string) (RowMap, ColMap) {
|
||||||
|
if len(_key.String()) > 0 {
|
||||||
|
if _value.IsObject() {
|
||||||
|
// log.Println("object:", _key, ",", _value)
|
||||||
|
_value.ForEach(func(fkey, fvalue gjs.Result) bool {
|
||||||
|
if fkey.String() == "typeName" {
|
||||||
|
var typevalue gjs.Result
|
||||||
|
typevalue, _ = JsonSearch(_value, "", "value", 0, typevalue)
|
||||||
|
// log.Println("type(1):", fvalue, ",", typevalue)
|
||||||
|
if typevalue.IsObject() || typevalue.IsArray() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
_row, _col = AddValueToMap(_row, _col, _index, fvalue, typevalue, _exclude, _include)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// log.Println("type(2):", fkey, ",", fvalue)
|
||||||
|
_row, _col = AddValueToMap(_row, _col, _index, fkey, fvalue, _exclude, _include)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
return _row, _col
|
||||||
|
} else {
|
||||||
|
if _value.IsArray() {
|
||||||
|
for _, avalue := range _value.Array() {
|
||||||
|
// log.Println("array(3):", _key, ",", avalue)
|
||||||
|
_row, _col = AddValueToMap(_row, _col, _index, _key, avalue, _exclude, _include)
|
||||||
|
}
|
||||||
|
return _row, _col
|
||||||
|
} else {
|
||||||
|
var typevalue gjs.Result = DoFilterByJsonStr(_value)
|
||||||
|
// fmt.Println("AddValueToMap()", _key, ":", typevalue)
|
||||||
|
if len(_row) == 0 {
|
||||||
|
_row = make(RowMap)
|
||||||
|
}
|
||||||
|
if len(_row[`"`+_index.String()+`"`]) == 0 {
|
||||||
|
_row[`"`+_index.String()+`"`] = make(ColMap)
|
||||||
|
}
|
||||||
|
_row[`"`+_index.String()+`"`][`"`+_key.String()+`"`] = `"` + typevalue.String() + `"`
|
||||||
|
_col = AddColumnToMap(_col, _key, _key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return _row, _col
|
||||||
|
}
|
||||||
|
|
||||||
|
func JsonSearchSet(_json gjs.Result, _key, _val string, _level int64, _caption, _value gjs.Result) (gjs.Result, gjs.Result, bool) {
|
||||||
|
if _level == 0 {
|
||||||
|
_value.Type = gjs.Null
|
||||||
|
} else {
|
||||||
|
if _value.Type != gjs.Null {
|
||||||
|
return _caption, _value, true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var result bool = false
|
||||||
|
if _json.IsObject() {
|
||||||
|
_json.ForEach(func(jkey, jvalue gjs.Result) bool {
|
||||||
|
// log.Println(GetTabLevel(_level), "(oo)", _key, _val, jkey, jvalue)
|
||||||
|
if jvalue.IsArray() {
|
||||||
|
// log.Println(GetTabLevel(_level), "(oa)", _key, _val, jkey, "=", jvalue, _caption, _value)
|
||||||
|
_caption, _value, result = JsonSearchSet(jvalue, _key, _val, _level+1, _caption, _value)
|
||||||
|
} else {
|
||||||
|
if jvalue.IsObject() {
|
||||||
|
var oocaption gjs.Result
|
||||||
|
var oovalue gjs.Result
|
||||||
|
_caption, _value, result = JsonSearchSet(jvalue, _key, _val, _level+1, oocaption, oovalue)
|
||||||
|
if result {
|
||||||
|
// log.Println(GetTabLevel(_level), "(ooo)", jkey, "=", jvalue, _caption, _value)
|
||||||
|
icnt = icnt + 1
|
||||||
|
Col, Val = AddValues(Col, Val, _caption, _value)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// log.Println(GetTabLevel(_level), "(oo)", jkey, "=", jvalue, _caption, _value)
|
||||||
|
} else {
|
||||||
|
// log.Println(GetTabLevel(_level), "(ov)", _key, _val, jkey, "=", jvalue)
|
||||||
|
if jkey.String() == _key {
|
||||||
|
_caption = gjs.Get(_json.String(), _key)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if jkey.String() == _val {
|
||||||
|
// log.Println(GetTabLevel(_level), "(< [", _level, "] ov >)", _key, ".", _val, "=", _caption, ".", _value)
|
||||||
|
_value = gjs.Get(_json.String(), _val)
|
||||||
|
icnt = icnt + 1
|
||||||
|
Col, Val = AddValues(Col, Val, _caption, _value)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// log.Println(GetTabLevel(_level), "(< [", _level, "] ov >)", _key, ".", _val, "=", _caption, ".", _value)
|
||||||
|
if _value.Type != gjs.Null {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
if _value.Type != gjs.Null {
|
||||||
|
// log.Println("JsonSearchSet(fo):", _level, _caption, _value)
|
||||||
|
return _caption, _value, true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if _json.IsArray() {
|
||||||
|
for _, jvalue := range _json.Array() {
|
||||||
|
// log.Println(GetTabLevel(_level), "(aa)", _key, _val, jkey, "=", jvalue, _caption, _value)
|
||||||
|
if jvalue.IsArray() {
|
||||||
|
// log.Println(GetTabLevel(_level), "(aa)", jkey, "=")
|
||||||
|
_caption, _value, result = JsonSearchSet(jvalue, _key, _val, _level+1, _caption, _value)
|
||||||
|
if result {
|
||||||
|
// log.Println(GetTabLevel(_level), "(ooo)", jkey, "=", jvalue, _caption, _value)
|
||||||
|
icnt = icnt + 1
|
||||||
|
Col, Val = AddValues(Col, Val, _caption, _value)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if jvalue.IsObject() {
|
||||||
|
jvalue.ForEach(func(jjkey, jjvalue gjs.Result) bool {
|
||||||
|
// log.Println(GetTabLevel(_level), "(ooo)", jjkey, jjvalue)
|
||||||
|
if jjvalue.IsObject() {
|
||||||
|
var oocaption gjs.Result
|
||||||
|
var oovalue gjs.Result
|
||||||
|
oocaption, oovalue, result = JsonSearchSet(jjvalue, _key, _val, _level+1, oocaption, oovalue)
|
||||||
|
if result {
|
||||||
|
if oovalue.Type != gjs.Null {
|
||||||
|
icnt = icnt + 1
|
||||||
|
Col, Val = AddValues(Col, Val, _caption, _value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// log.Println(GetTabLevel(_level), "(av)", jkey, "=", jvalue)
|
||||||
|
if jvalue.String() == _val {
|
||||||
|
_value = gjs.Get(_json.String(), "value")
|
||||||
|
icnt = icnt + 1
|
||||||
|
Col, Val = AddValues(Col, Val, _caption, _value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _value.Type != gjs.Null {
|
||||||
|
// log.Println("JsonSearchSet(fa):", _level, _caption, _value)
|
||||||
|
return _caption, _value, true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// log.Println("JsonSearchSet(end):", _level, _caption, _value)
|
||||||
|
return _caption, _value, result
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateLogin(r *http.Request) string {
|
||||||
|
_prefix := r.FormValue("pref")
|
||||||
|
_middle := r.FormValue("midl")
|
||||||
|
_suffix := r.FormValue("suff")
|
||||||
|
//
|
||||||
|
var html []string
|
||||||
|
html = append(html, "<div id=\""+_prefix+_middle+_suffix+"\" class = \"easyui-panel\" style=\"width:400px;\" data-options=\"")
|
||||||
|
// panel
|
||||||
|
html = append(html, " footer:'#"+_prefix+_middle+_suffix+"_footer'")
|
||||||
|
// window
|
||||||
|
html = append(html, ",modal:true")
|
||||||
|
html = append(html, ",resizable:true")
|
||||||
|
html = append(html, ",minimizable:false")
|
||||||
|
html = append(html, ",maximizable:false")
|
||||||
|
html = append(html, ",collapsible:false")
|
||||||
|
html = append(html, ",cache:false")
|
||||||
|
html = append(html, ",draggable:true")
|
||||||
|
html = append(html, ",title:''")
|
||||||
|
html = append(html, "\">")
|
||||||
|
html = append(html, "<div style=\"height:15px;\"> </div>")
|
||||||
|
html = append(html, "<table cellpadding=\"5\" style=\"width:100%;\">")
|
||||||
|
html = append(html, "<tbody>")
|
||||||
|
html = append(html, "<tr>")
|
||||||
|
html = append(html, "<td text=\"L_logon_user\" width=\"30%\" style=\"margin-top:10px;\">Anmeldename:</td>")
|
||||||
|
html = append(html, "<td style=\"margin-top:10px;\">")
|
||||||
|
html = append(html, "<input class=\"easyui-textbox\" id=\"login_frm_user\" name=\"login_frm_user\" value=\"\" autocomplete=\"off\" data-options=\"iconCls:'icon-lock'\" style=\"width:95%\">")
|
||||||
|
html = append(html, "</tr>")
|
||||||
|
html = append(html, "<tr>")
|
||||||
|
html = append(html, "<td text=\"L_logon_pwd\" width=\"30%\">Passwort:</td>")
|
||||||
|
html = append(html, "<td>")
|
||||||
|
html = append(html, "<input class=\"easyui-textbox\" type=\"password\" id=\"login_frm_pwd\" name=\"login_frm_pwd\" value=\"\" autocomplete=\"off\" data-options=\"iconCls:'icon-lock'\" style=\"width:95%\">")
|
||||||
|
html = append(html, "</td>")
|
||||||
|
html = append(html, "</tr>")
|
||||||
|
html = append(html, "<tr>")
|
||||||
|
html = append(html, "<td colspan=\"1\" style=\"text-align:left; padding-top:10px;\" width=\"\">")
|
||||||
|
html = append(html, "<a> </a>")
|
||||||
|
html = append(html, "</td>")
|
||||||
|
html = append(html, "<td colspan=\"1\" align=\"left\" style=\"padding-top:10px;padding-bottom:10px;\">")
|
||||||
|
html = append(html, "<a text=\"AC_host_logon\" id=\"btn_login_frm\" href=\"#\" class=\"easyui-linkbutton\" onclick=\"setLogin();\" style=\"padding:4px 40px 4px 40px;\" group=\"\">")
|
||||||
|
html = append(html, "Anmelden</a>")
|
||||||
|
html = append(html, "</td>")
|
||||||
|
html = append(html, "</tr>")
|
||||||
|
html = append(html, "</tbody>")
|
||||||
|
html = append(html, "</table>")
|
||||||
|
html = append(html, "</div>")
|
||||||
|
html = append(html, "<div id=\""+_prefix+_middle+_suffix+"_footer\" style=\"padding:3px; font-size:75%; text-align:right;\">")
|
||||||
|
html = append(html, "<div id=\""+_prefix+_middle+_suffix+"_copyright\" style=\"padding:2px; font-size:75%; text-align:center;\">Copyright © 2010 <a href=\"http://www.archium.org\" target=\"_blank\">archium GmbH</a></div>")
|
||||||
|
html = append(html, "</div>")
|
||||||
|
//
|
||||||
|
// log.Println("HTML:", strings.Join(html, ""))
|
||||||
|
return strings.Join(html, "")
|
||||||
|
}
|
134
goDataverse/user/user.go
Normal file
|
@ -0,0 +1,134 @@
|
||||||
|
/**
|
||||||
|
= Creative Commons Lizenzvertrag =
|
||||||
|
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
|
||||||
|
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.
|
||||||
|
|
||||||
|
= Creative Commons License =
|
||||||
|
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
|
||||||
|
Individual permissions beyond the scope of this license may be available at https://archium.org.
|
||||||
|
**/
|
||||||
|
|
||||||
|
package user
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
// "log"
|
||||||
|
// "reflect"
|
||||||
|
|
||||||
|
"Toolbox/goDataverse/connect"
|
||||||
|
tol "Toolbox/goDataverse/tools"
|
||||||
|
|
||||||
|
gjs "github.com/tidwall/gjson"
|
||||||
|
// "log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ListUsers(_serverurl, _apitoken string, _sorted bool) (string, error) {
|
||||||
|
response, err := connect.GetRequest(_serverurl+"/api/admin/list-users"+
|
||||||
|
func(s bool) string {
|
||||||
|
if s {
|
||||||
|
return "?sortKey=createdtime"
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}(_sorted), tol.ColMap{}, tol.ColMap{"X-Dataverse-key": _apitoken})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", response)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func ListUser(_serverurl, _apitoken, _id string) (string, error) {
|
||||||
|
response, err := connect.GetRequest(_serverurl+"/api/admin/authenticatedUsers/"+_id,
|
||||||
|
tol.ColMap{}, tol.ColMap{"X-Dataverse-key": _apitoken})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", response)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsValidUser(_serverurl, _apitoken string) (bool, bool, string, error) {
|
||||||
|
var ident string = ""
|
||||||
|
var super bool = false
|
||||||
|
var valid bool = false
|
||||||
|
//
|
||||||
|
response, err := connect.GetRequest(_serverurl+"/api/users/:me",
|
||||||
|
tol.ColMap{}, tol.ColMap{"X-Dataverse-key": _apitoken})
|
||||||
|
//
|
||||||
|
message := tol.GetObjectFromStr("")
|
||||||
|
me := fmt.Sprintf("%v", string(response))
|
||||||
|
status := gjs.Get(me, "status")
|
||||||
|
if status.String() == "OK" {
|
||||||
|
data := gjs.Get(me, "data")
|
||||||
|
if data.IsObject() {
|
||||||
|
ident = strings.ReplaceAll(gjs.Get(data.String(), "identifier").String(), "@", "")
|
||||||
|
super = gjs.Get(data.String(), "superuser").Bool()
|
||||||
|
valid = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if status.String() == "ERROR" {
|
||||||
|
message = gjs.Get(me, "message")
|
||||||
|
err = errors.New(message.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// log.Println("IsValidUser:", message.String(), valid, super, ident, me)
|
||||||
|
//
|
||||||
|
return valid, super, ident, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsSuperUser(_serverurl, _apitoken string) (bool, error) {
|
||||||
|
var super bool = false
|
||||||
|
//
|
||||||
|
response, err := connect.GetRequest(_serverurl+"/api/users/:me",
|
||||||
|
tol.ColMap{}, tol.ColMap{"X-Dataverse-key": _apitoken})
|
||||||
|
//
|
||||||
|
me := fmt.Sprintf("%s", response)
|
||||||
|
status := gjs.Get(me, "status")
|
||||||
|
if status.String() == "OK" {
|
||||||
|
data := gjs.Get(me, "data")
|
||||||
|
if data.IsObject() {
|
||||||
|
super = gjs.Get("superuser", data.String()).Bool()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if status.String() == "ERROR" {
|
||||||
|
message := gjs.Get(me, "message")
|
||||||
|
err = errors.New(message.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return super, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func ToggleSuperUser(_serverurl, _apitoken, _id string) (string, error) {
|
||||||
|
response, err := connect.PostRequest(_serverurl+"/api/admin/superuser/"+_id+"",
|
||||||
|
tol.ColMap{}, tol.ColMap{"X-Dataverse-key": _apitoken})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", response)), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func SearchData(_serverurl, _apitoken string, _sorted bool) (string, error) {
|
||||||
|
response, err := connect.GetRequest(_serverurl+"/api/search?q=*"+
|
||||||
|
func(s bool) string {
|
||||||
|
if s {
|
||||||
|
return "?sortKey=createdtime"
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}(_sorted), tol.ColMap{}, tol.ColMap{"X-Dataverse-key": _apitoken})
|
||||||
|
//
|
||||||
|
return (fmt.Sprintf("%s", response)), err
|
||||||
|
//
|
||||||
|
// curl -H "X-Dataverse-key:$API_TOKEN" $SERVER_URL/api/admin/list-users
|
||||||
|
// # sort it by createdtime (the creation time of the account)
|
||||||
|
// # curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/admin/list-users?sortKey=createdtime"
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
func CreateAuthenticatedUser(server_url, api_token, params string) string {
|
||||||
|
response, err := connect.PostRequestB(server_url+"/api/admin/authenticatedUsers", []byte(params), tol.ColMap{"X-Dataverse-key": api_token})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (fmt.Sprintf("%s", response))
|
||||||
|
}
|
||||||
|
*/
|
173
goDataverseStrict/connect/connect.go
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
package connect
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetRequest(url string, params, header map[string]string) (b []byte, err error, debug string) {
|
||||||
|
client := &http.Client{}
|
||||||
|
req, _ := http.NewRequest("GET", url, nil)
|
||||||
|
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
query := req.URL.Query()
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, v)
|
||||||
|
}
|
||||||
|
req.URL.RawQuery = query.Encode()
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(req.URL.String())
|
||||||
|
debug = req.URL.String()
|
||||||
|
//def.LogMessage("GetRequest(req.URL.String())", req.URL.String(), def.DEF_logdebg)
|
||||||
|
|
||||||
|
res, _ := client.Do(req)
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(res.Request.Header)
|
||||||
|
//def.LogMessage("GetRequest(req.URL.String())", req.URL.String(), def.DEF_logdebg)
|
||||||
|
|
||||||
|
b, err = ioutil.ReadAll(res.Body)
|
||||||
|
res.Body.Close()
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func PostRequest(url string, params, header map[string]string) (b []byte, err error, debug string) {
|
||||||
|
client := &http.Client{}
|
||||||
|
|
||||||
|
postData, err := json.Marshal(params)
|
||||||
|
//fmt.Println(postData)
|
||||||
|
req, _ := http.NewRequest("POST", url, bytes.NewReader(postData))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(req.URL.String())
|
||||||
|
debug = req.URL.String()
|
||||||
|
|
||||||
|
res, _ := client.Do(req)
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(res.Request.Header)
|
||||||
|
|
||||||
|
b, err = ioutil.ReadAll(res.Body)
|
||||||
|
res.Body.Close()
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func PostRequestB(url string, postData []byte, header map[string]string) (b []byte, err error, debug string) {
|
||||||
|
client := &http.Client{}
|
||||||
|
|
||||||
|
req, err := http.NewRequest("POST", url, bytes.NewReader(postData))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(req.URL.String())
|
||||||
|
debug = req.URL.String()
|
||||||
|
|
||||||
|
res, _ := client.Do(req)
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(res.Request.Header)
|
||||||
|
|
||||||
|
b, err = ioutil.ReadAll(res.Body)
|
||||||
|
res.Body.Close()
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func PutRequest(url, body string, header map[string]string) (b []byte, err error, debug string) {
|
||||||
|
client := &http.Client{}
|
||||||
|
|
||||||
|
req, _ := http.NewRequest("PUT", url, bytes.NewReader([]byte(body)))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(req.URL.String())
|
||||||
|
debug = req.URL.String()
|
||||||
|
|
||||||
|
res, _ := client.Do(req)
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(res.Request.Header)
|
||||||
|
|
||||||
|
b, err = ioutil.ReadAll(res.Body)
|
||||||
|
res.Body.Close()
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func PutRequestB(url string, body []byte, header map[string]string) (b []byte, err error, debug string) {
|
||||||
|
client := &http.Client{}
|
||||||
|
|
||||||
|
req, err := http.NewRequest("PUT", url, bytes.NewReader(body))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(req.URL.String())
|
||||||
|
debug = req.URL.String()
|
||||||
|
|
||||||
|
res, _ := client.Do(req)
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(res.Request.Header)
|
||||||
|
|
||||||
|
b, err = ioutil.ReadAll(res.Body)
|
||||||
|
res.Body.Close()
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteRequest(url string, header map[string]string) (b []byte, err error, debug string) {
|
||||||
|
client := &http.Client{}
|
||||||
|
req, _ := http.NewRequest("DELETE", url, nil)
|
||||||
|
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(req.URL.String())
|
||||||
|
debug = req.URL.String()
|
||||||
|
|
||||||
|
res, _ := client.Do(req)
|
||||||
|
|
||||||
|
//DEBUG
|
||||||
|
//fmt.Println(res.Request.Header)
|
||||||
|
|
||||||
|
b, err = ioutil.ReadAll(res.Body)
|
||||||
|
res.Body.Close()
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
656
goDataverseStrict/metrics/metrics.go
Normal file
|
@ -0,0 +1,656 @@
|
||||||
|
package metrics
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Toolbox/goDataverseStrict/connect"
|
||||||
|
"encoding/json"
|
||||||
|
"log"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/exp/slices"
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
MetricsType string // To ensure, that the set of constants is limited (a kind of enumeration)
|
||||||
|
MetricsDataCountType string
|
||||||
|
ReturnformatType string
|
||||||
|
SearchType string
|
||||||
|
)
|
||||||
|
|
||||||
|
const PDPURL = "https://pdp.archium.org"
|
||||||
|
|
||||||
|
// const IDRequestCriteriaPrefix = "input_"
|
||||||
|
const (
|
||||||
|
IDRequestCriteriaPrefix = "get_input_"
|
||||||
|
IDRequestTextPrefix = "text_input_"
|
||||||
|
IDRequestHideDisplayPrefix = "span_input_"
|
||||||
|
IDFormSubmit = "input_form_submit"
|
||||||
|
)
|
||||||
|
|
||||||
|
const StaticMetricsAPIbody = "/api/info/metrics/"
|
||||||
|
|
||||||
|
const (
|
||||||
|
//Level0
|
||||||
|
MT0unset MetricsType = "" //TODO: Platzhalter für unbelegt, eventuell unnötig
|
||||||
|
MT1dataverses MetricsType = "dataverses"
|
||||||
|
MT2datasets MetricsType = "datasets"
|
||||||
|
MT3files MetricsType = "files"
|
||||||
|
MT4downloads MetricsType = "downloads"
|
||||||
|
MT5filedownloads MetricsType = "filedownloads"
|
||||||
|
MT6uniquefiledownloads MetricsType = "uniquefiledownloads"
|
||||||
|
MT7makeDataCount MetricsType = "makeDataCount"
|
||||||
|
|
||||||
|
//Level1
|
||||||
|
MDCT0unset MetricsDataCountType = "" //TODO: Platzhalter für unbelegt, eventuell unnötig
|
||||||
|
MDCT1viewsTotal MetricsDataCountType = "viewsTotal"
|
||||||
|
MDCT2viewsTotalRegular MetricsDataCountType = "viewsTotalRegular"
|
||||||
|
MDCT3viewsTotalMachine MetricsDataCountType = "viewsTotalMachine"
|
||||||
|
MDCT4viewsUnique MetricsDataCountType = "viewsUnique"
|
||||||
|
MDCT5viewsUniqueRegular MetricsDataCountType = "viewsUniqueRegular"
|
||||||
|
MDCT6viewsUniqueMachine MetricsDataCountType = "viewsUniqueMachine"
|
||||||
|
MDCT7downloadsTotal MetricsDataCountType = "downloadsTotal"
|
||||||
|
MDCT8downloadsTotalRegular MetricsDataCountType = "downloadsTotalRegular"
|
||||||
|
MDCT9downloadsTotalMachine MetricsDataCountType = "downloadsTotalMachine"
|
||||||
|
MDCT10downloadsUnique MetricsDataCountType = "downloadsUnique"
|
||||||
|
MDCT11downloadsUniqueRegular MetricsDataCountType = "downloadsUniqueRegular"
|
||||||
|
MDCT12downloadsUniqueMachine MetricsDataCountType = "downloadsUniqueMachine"
|
||||||
|
MDCT13citations MetricsDataCountType = "citations"
|
||||||
|
|
||||||
|
//Level2
|
||||||
|
ST0unset SearchType = "" //TODO: Platzhalter für unbelegt, eventuell unnötig
|
||||||
|
ST1total SearchType = "total" // ISt eigentlich ein Platzhalter. "total" gibt es nicht und wirkt dann, wenn der SearchType weggelassen wird.
|
||||||
|
ST2tomonth SearchType = "toMonth"
|
||||||
|
ST3pastdays SearchType = "pastDays"
|
||||||
|
ST4monthly SearchType = "monthly"
|
||||||
|
ST5tree SearchType = "tree"
|
||||||
|
|
||||||
|
//Level3
|
||||||
|
RT0unset ReturnformatType = "" //TODO: Platzhalter für unbelegt, eventuell unnötig
|
||||||
|
RT1json ReturnformatType = "application/json"
|
||||||
|
RT2csv ReturnformatType = "text/csv"
|
||||||
|
)
|
||||||
|
|
||||||
|
type InputLevel3 = map[ReturnformatType]bool
|
||||||
|
|
||||||
|
var OneJumpPointResultformat = map[ReturnformatType]bool{
|
||||||
|
RT0unset: false,
|
||||||
|
RT1json: false,
|
||||||
|
RT2csv: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
type InputLevel2 = map[SearchType]InputLevel3
|
||||||
|
|
||||||
|
var OneJumpPointSearchType = InputLevel2{
|
||||||
|
ST0unset: OneJumpPointResultformat,
|
||||||
|
ST1total: OneJumpPointResultformat,
|
||||||
|
ST2tomonth: OneJumpPointResultformat,
|
||||||
|
ST3pastdays: OneJumpPointResultformat,
|
||||||
|
ST4monthly: OneJumpPointResultformat,
|
||||||
|
ST5tree: OneJumpPointResultformat,
|
||||||
|
}
|
||||||
|
|
||||||
|
type InputLevel1 = map[MetricsDataCountType]InputLevel2
|
||||||
|
|
||||||
|
var OneJumpPointMetricsDataCountType = InputLevel1{
|
||||||
|
MDCT0unset: OneJumpPointSearchType,
|
||||||
|
MDCT1viewsTotal: OneJumpPointSearchType,
|
||||||
|
MDCT2viewsTotalRegular: OneJumpPointSearchType,
|
||||||
|
MDCT3viewsTotalMachine: OneJumpPointSearchType,
|
||||||
|
MDCT4viewsUnique: OneJumpPointSearchType,
|
||||||
|
MDCT5viewsUniqueRegular: OneJumpPointSearchType,
|
||||||
|
MDCT6viewsUniqueMachine: OneJumpPointSearchType,
|
||||||
|
MDCT7downloadsTotal: OneJumpPointSearchType,
|
||||||
|
MDCT8downloadsTotalRegular: OneJumpPointSearchType,
|
||||||
|
MDCT9downloadsTotalMachine: OneJumpPointSearchType,
|
||||||
|
MDCT10downloadsUnique: OneJumpPointSearchType,
|
||||||
|
MDCT11downloadsUniqueRegular: OneJumpPointSearchType,
|
||||||
|
MDCT12downloadsUniqueMachine: OneJumpPointSearchType,
|
||||||
|
MDCT13citations: OneJumpPointSearchType,
|
||||||
|
}
|
||||||
|
|
||||||
|
type InputLevel0 = map[MetricsType]InputLevel1
|
||||||
|
|
||||||
|
var OldOneJumpPointSet = InputLevel0{
|
||||||
|
MT0unset: OneJumpPointMetricsDataCountType,
|
||||||
|
MT1dataverses: OneJumpPointMetricsDataCountType,
|
||||||
|
MT2datasets: OneJumpPointMetricsDataCountType,
|
||||||
|
MT3files: OneJumpPointMetricsDataCountType,
|
||||||
|
MT4downloads: OneJumpPointMetricsDataCountType,
|
||||||
|
MT5filedownloads: OneJumpPointMetricsDataCountType,
|
||||||
|
MT6uniquefiledownloads: OneJumpPointMetricsDataCountType,
|
||||||
|
MT7makeDataCount: OneJumpPointMetricsDataCountType,
|
||||||
|
}
|
||||||
|
|
||||||
|
type OneJumpPointSet struct {
|
||||||
|
Level0 MetricsType
|
||||||
|
Level1 MetricsDataCountType
|
||||||
|
Level2 SearchType
|
||||||
|
Level3 ReturnformatType
|
||||||
|
Active bool
|
||||||
|
}
|
||||||
|
|
||||||
|
var OneJumpPoints []OneJumpPointSet
|
||||||
|
|
||||||
|
// Presets
|
||||||
|
func init() {
|
||||||
|
//OneJumpPoints = make([]OneJumpPointSet, 910, 910)
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT1dataverses, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT1dataverses, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT1dataverses, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT1dataverses, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT1dataverses, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT2datasets, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT2datasets, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT2datasets, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT2datasets, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT2datasets, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT3files, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT3files, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT3files, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT3files, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT3files, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT4downloads, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT4downloads, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT4downloads, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT4downloads, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT4downloads, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT5filedownloads, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT5filedownloads, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT5filedownloads, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT5filedownloads, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT5filedownloads, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT6uniquefiledownloads, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT6uniquefiledownloads, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT6uniquefiledownloads, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT6uniquefiledownloads, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT6uniquefiledownloads, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST0unset, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT2viewsTotalRegular, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT2viewsTotalRegular, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT2viewsTotalRegular, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT2viewsTotalRegular, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT2viewsTotalRegular, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT3viewsTotalMachine, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT3viewsTotalMachine, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT3viewsTotalMachine, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT3viewsTotalMachine, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT3viewsTotalMachine, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT4viewsUnique, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT4viewsUnique, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT4viewsUnique, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT4viewsUnique, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT4viewsUnique, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT5viewsUniqueRegular, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT5viewsUniqueRegular, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT5viewsUniqueRegular, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT5viewsUniqueRegular, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT5viewsUniqueRegular, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT6viewsUniqueMachine, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT6viewsUniqueMachine, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT6viewsUniqueMachine, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT6viewsUniqueMachine, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT6viewsUniqueMachine, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT7downloadsTotal, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT7downloadsTotal, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT7downloadsTotal, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT7downloadsTotal, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT7downloadsTotal, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT8downloadsTotalRegular, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT8downloadsTotalRegular, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT8downloadsTotalRegular, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT8downloadsTotalRegular, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT8downloadsTotalRegular, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT9downloadsTotalMachine, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT9downloadsTotalMachine, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT9downloadsTotalMachine, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT9downloadsTotalMachine, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT9downloadsTotalMachine, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT10downloadsUnique, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT10downloadsUnique, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT10downloadsUnique, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT10downloadsUnique, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT10downloadsUnique, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT11downloadsUniqueRegular, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT11downloadsUniqueRegular, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT11downloadsUniqueRegular, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT11downloadsUniqueRegular, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT11downloadsUniqueRegular, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT12downloadsUniqueMachine, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT12downloadsUniqueMachine, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT12downloadsUniqueMachine, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT12downloadsUniqueMachine, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT12downloadsUniqueMachine, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT13citations, Level2: ST1total, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT13citations, Level2: ST2tomonth, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT13citations, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT13citations, Level2: ST4monthly, Level3: RT1json, Active: true})
|
||||||
|
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT13citations, Level2: ST5tree, Level3: RT1json, Active: true})
|
||||||
|
|
||||||
|
//OldOneJumpPointSet[MT1dataverses][MDCT1viewsTotal][ST2_tomonth][RT1json] = true
|
||||||
|
//OldOneJumpPointSet[MT1dataverses][MDCT2viewsTotalRegular][ST3_pastdays][RT2csv] = true
|
||||||
|
//fmt.Println(OneJumpPointSet)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func FilterStacklist(meisleisz []OneJumpPointSet, index int8) (deisleisz []string, activity []bool) {
|
||||||
|
switch index {
|
||||||
|
case 0:
|
||||||
|
for _, v := range meisleisz {
|
||||||
|
if !slices.Contains(deisleisz, string(v.Level0)) {
|
||||||
|
deisleisz = append(deisleisz, string(v.Level0))
|
||||||
|
activity = append(activity, v.Active)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
for _, v := range meisleisz {
|
||||||
|
if !slices.Contains(deisleisz, string(v.Level1)) {
|
||||||
|
deisleisz = append(deisleisz, string(v.Level1))
|
||||||
|
activity = append(activity, v.Active)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
for _, v := range meisleisz {
|
||||||
|
if !slices.Contains(deisleisz, string(v.Level2)) {
|
||||||
|
deisleisz = append(deisleisz, string(v.Level2))
|
||||||
|
activity = append(activity, v.Active)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
for _, v := range meisleisz {
|
||||||
|
if !slices.Contains(deisleisz, string(v.Level3)) {
|
||||||
|
deisleisz = append(deisleisz, string(v.Level3))
|
||||||
|
activity = append(activity, v.Active)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type RequestComponentsType struct {
|
||||||
|
Level0MetricsType, Level1MetricsDataCountType, Level2SearchType, Level21UserInput, Level3ReturnformatType string
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
func JsonStructSelector[resulttype MonthlyJsonData | TotalJsonData | TreeJsonData | struct{}](bjson []byte) (result resulttype) {
|
||||||
|
switch {
|
||||||
|
case json.Unmarshal(bjson, &result) == nil:
|
||||||
|
case json.Unmarshal(bjson, &result) == nil:
|
||||||
|
case json.Unmarshal(bjson, &result) == nil:
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
func MetricsUniversal(server_url, api_token string, rcs RequestComponentsType) {
|
||||||
|
var err error
|
||||||
|
//var header map[string]string
|
||||||
|
header := make(map[string]string)
|
||||||
|
|
||||||
|
if len(api_token) > 0 {
|
||||||
|
header["X-Dataverse-key"] = api_token
|
||||||
|
}
|
||||||
|
if len(rcs.Level3ReturnformatType) > 0 {
|
||||||
|
header["Accept"] = string(rcs.Level3ReturnformatType)
|
||||||
|
}
|
||||||
|
|
||||||
|
stest := func(s ...string) string {
|
||||||
|
|
||||||
|
if (len(s) > 1 && len(s[0]) > 0) || len(s) == 1 {
|
||||||
|
if s[0] == string(ST1total) {
|
||||||
|
return ""
|
||||||
|
} else {
|
||||||
|
return "/" + s[0]
|
||||||
|
}
|
||||||
|
} else if (len(s) == 2 && len(s[1]) > 0) || (len(s) == 3 && len(s[1]) > 0 && len(s[2]) == 0) {
|
||||||
|
return "/" + s[1]
|
||||||
|
} else if len(s) == 3 && len(s[1]) > 0 && len(s[2]) > 0 {
|
||||||
|
if s[0] == string(ST1total) {
|
||||||
|
return ""
|
||||||
|
} else if s[1] == string(ST4monthly) {
|
||||||
|
return "/" + s[1] // bei Monthly werden erstmal ALLE Datensätze gezogen
|
||||||
|
} else {
|
||||||
|
return "/" + s[1] + "/" + s[2]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("DEBUG:", server_url+"/api/info/metrics"+
|
||||||
|
"/"+rcs.Level0MetricsType+
|
||||||
|
stest(rcs.Level1MetricsDataCountType, rcs.Level2SearchType, rcs.Level21UserInput))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}*/
|
||||||
|
|
||||||
|
//func MetricsDataCountType() (response []byte, debug string)
|
||||||
|
|
||||||
|
func MetricsTotal(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string) (response []byte, debug string) {
|
||||||
|
var err error
|
||||||
|
//var header map[string]string
|
||||||
|
header := make(map[string]string)
|
||||||
|
|
||||||
|
if len(api_token) > 0 {
|
||||||
|
header["X-Dataverse-key"] = api_token
|
||||||
|
}
|
||||||
|
if len(return_format) > 0 {
|
||||||
|
header["Accept"] = string(return_format)
|
||||||
|
}
|
||||||
|
|
||||||
|
//log.Println(header)
|
||||||
|
|
||||||
|
response, err, debug = connect.GetRequest(server_url+StaticMetricsAPIbody+mtypeOrMdctypeCombi, map[string]string{}, header)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func MetricsToMonth(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string, timerange time.Time) (response []byte, debug string) {
|
||||||
|
var err error
|
||||||
|
//var header map[string]string
|
||||||
|
header := make(map[string]string)
|
||||||
|
|
||||||
|
if len(api_token) > 0 {
|
||||||
|
header["X-Dataverse-key"] = api_token
|
||||||
|
}
|
||||||
|
if len(return_format) > 0 {
|
||||||
|
header["Accept"] = string(return_format)
|
||||||
|
}
|
||||||
|
|
||||||
|
//log.Println(header)
|
||||||
|
|
||||||
|
response, err, debug = connect.GetRequest(server_url+StaticMetricsAPIbody+mtypeOrMdctypeCombi+"/toMonth/"+timerange.Format("2006-01"), map[string]string{}, header)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func MetricsPastDays(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string, days int) (response []byte, debug string) {
|
||||||
|
var err error
|
||||||
|
//var header map[string]string
|
||||||
|
header := make(map[string]string)
|
||||||
|
|
||||||
|
if len(api_token) > 0 {
|
||||||
|
header["X-Dataverse-key"] = api_token
|
||||||
|
}
|
||||||
|
if len(return_format) > 0 {
|
||||||
|
header["Accept"] = string(return_format)
|
||||||
|
}
|
||||||
|
|
||||||
|
//log.Println(header)
|
||||||
|
|
||||||
|
response, err, debug = connect.GetRequest(server_url+StaticMetricsAPIbody+mtypeOrMdctypeCombi+"/pastDays/"+strconv.Itoa(days), map[string]string{}, header)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func MetricsMonthly(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string) (response []byte, debug string) {
|
||||||
|
var err error
|
||||||
|
//var header map[string]string
|
||||||
|
header := make(map[string]string)
|
||||||
|
|
||||||
|
if len(api_token) > 0 {
|
||||||
|
header["X-Dataverse-key"] = api_token
|
||||||
|
}
|
||||||
|
if len(return_format) > 0 {
|
||||||
|
header["Accept"] = string(return_format)
|
||||||
|
}
|
||||||
|
|
||||||
|
//log.Println(header)
|
||||||
|
response, err, debug = connect.GetRequest(server_url+StaticMetricsAPIbody+mtypeOrMdctypeCombi+"/monthly/", map[string]string{}, header)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type MonthlyJsonData struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Data []struct {
|
||||||
|
Date string `json:"date"`
|
||||||
|
Id int `json:"id"`
|
||||||
|
Pid string `json:"pid"`
|
||||||
|
Counttotal int `json:"count"`
|
||||||
|
Countmonth int `json:"mount"` //Month Count
|
||||||
|
//Intex int `json:"intex"` //Integer Index instead of Date
|
||||||
|
DoiDoi string `json:"doidoi"` //Added to beautify links
|
||||||
|
} `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type TotalJsonData struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Data struct {
|
||||||
|
Counttotal int `json:"count"`
|
||||||
|
} `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type TreeJsonData struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Data struct {
|
||||||
|
Id int `json:"id"`
|
||||||
|
Ownerid int `json:"ownerId"`
|
||||||
|
Alias string `json:"alias"`
|
||||||
|
Depth int `json:"depth"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Children []struct {
|
||||||
|
Id int `json:"id"`
|
||||||
|
Ownerid int `json:"ownerId"`
|
||||||
|
Alias string `json:"alias"`
|
||||||
|
Depth int `json:"depth"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
} `json:"children"`
|
||||||
|
} `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func MetricsReallyMonthly(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string) (response []byte, debug string) {
|
||||||
|
response, debug = MetricsMonthly(server_url, api_token, return_format, mtypeOrMdctypeCombi)
|
||||||
|
|
||||||
|
// var newData map[string]
|
||||||
|
|
||||||
|
res := MonthlyJsonData{}
|
||||||
|
json.Unmarshal(response, &res)
|
||||||
|
|
||||||
|
intexmaker := func(s string) (i int) {
|
||||||
|
i, _ = strconv.Atoi(s[0:4] + s[5:7])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//for i, _ := range res.Data {
|
||||||
|
// res.Data[i].Intex = intexmaker(res.Data[i].Date) //Filtere den Bindestrich heraus
|
||||||
|
//}
|
||||||
|
|
||||||
|
//sort.Slice(res.Data, func(i, j int) bool { return res.Data[i].Intex > res.Data[j].Intex }) // Sortiere rückwärts
|
||||||
|
sort.Slice(res.Data, func(i, j int) bool { return intexmaker(res.Data[i].Date) > intexmaker(res.Data[j].Date) }) // Sortiere rückwärts
|
||||||
|
|
||||||
|
for i, _ := range res.Data {
|
||||||
|
if i+1 < len(res.Data) { // Finde heraus, wieviele Werte für speziell diesen Monat gelten
|
||||||
|
res.Data[i].Countmonth = res.Data[i].Counttotal - res.Data[i+1].Counttotal
|
||||||
|
} else {
|
||||||
|
res.Data[i].Countmonth = res.Data[i].Counttotal
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, f := strings.CutPrefix(res.Data[i].Pid, "doi:"); f { // Erzeuge gleich einen Link zum Doi
|
||||||
|
res.Data[i].DoiDoi = PDPURL + "/file.xhtml?persistentId=" + res.Data[i].Pid
|
||||||
|
} else {
|
||||||
|
res.Data[i].DoiDoi = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//sort.Slice(res.Data, func(i, j int) bool { return res.Data[i].Intex < res.Data[j].Intex }) // Sortiere wieder vorwärts
|
||||||
|
sort.Slice(res.Data, func(i, j int) bool { return intexmaker(res.Data[i].Date) < intexmaker(res.Data[j].Date) }) // Sortiere wieder vorwärts
|
||||||
|
|
||||||
|
//log.Println(res)
|
||||||
|
|
||||||
|
debug += " #enhanced by monthly count (mount)"
|
||||||
|
response, _ = json.Marshal(res)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func MetricsReallyMonthlySpan(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string, timerange_span [2]time.Time) (response []byte, debug string) {
|
||||||
|
|
||||||
|
response, debug = MetricsReallyMonthly(server_url, api_token, return_format, mtypeOrMdctypeCombi)
|
||||||
|
|
||||||
|
//timerange_span[0].Format("2006-01")
|
||||||
|
//timerange_span[1].Format("2006-01")
|
||||||
|
|
||||||
|
//res := monthlyJsonData{}
|
||||||
|
var res, res2 MonthlyJsonData
|
||||||
|
res2.Status = res.Status
|
||||||
|
|
||||||
|
json.Unmarshal(response, &res)
|
||||||
|
|
||||||
|
for _, v := range res.Data { // Finde heraus, wieviele Werte für speziell diesen Monat gelten
|
||||||
|
if func() bool {
|
||||||
|
ts, _ := time.Parse("2006-01", v.Date)
|
||||||
|
|
||||||
|
if !ts.Before(timerange_span[0]) && !ts.After(timerange_span[1]) {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}() {
|
||||||
|
//debug += fmt.Sprintf("gefunden %s", v.Date)
|
||||||
|
res2.Data = append(res2.Data, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//debug += fmt.Sprintln(res2)
|
||||||
|
//debug += fmt.Sprintln("T E S T")
|
||||||
|
|
||||||
|
response, _ = json.Marshal(res2)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func MetricsTree(server_url, api_token string, return_format ReturnformatType, timerange time.Time) (response []byte, debug string) {
|
||||||
|
var err error
|
||||||
|
var header map[string]string
|
||||||
|
header = make(map[string]string)
|
||||||
|
|
||||||
|
if len(api_token) > 0 {
|
||||||
|
header["X-Dataverse-key"] = api_token
|
||||||
|
}
|
||||||
|
if len(return_format) > 0 {
|
||||||
|
header["Accept"] = string(return_format)
|
||||||
|
}
|
||||||
|
|
||||||
|
//log.Println(header)
|
||||||
|
|
||||||
|
response, err, debug = connect.GetRequest(server_url+"/api/info/metrics/tree"+func() string {
|
||||||
|
if !timerange.IsZero() {
|
||||||
|
return "/toMonth/" + timerange.Format("2006-01")
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}(), map[string]string{}, header)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
func ListUsers(server_url, api_token string, sorted bool) string {
|
||||||
|
response, err, _ := connect.GetRequest(server_url+"/api/admin/list-users"+func(s bool) string {
|
||||||
|
if s {
|
||||||
|
return "?sortKey=createdtime"
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}(sorted), map[string]string{}, map[string]string{"X-Dataverse-key": api_token})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (fmt.Sprintf("%s", response))
|
||||||
|
|
||||||
|
//curl -H "X-Dataverse-key:$API_TOKEN" $SERVER_URL/api/admin/list-users
|
||||||
|
|
||||||
|
//# sort by createdtime (the creation time of the account)
|
||||||
|
//#curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/admin/list-users?sortKey=createdtime"
|
||||||
|
}
|
||||||
|
|
||||||
|
func ListUser(server_url, api_token, id string) string {
|
||||||
|
response, err, _ := connect.GetRequest(server_url+"/api/admin/authenticatedUsers/"+id, map[string]string{}, map[string]string{"X-Dataverse-key": api_token})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (fmt.Sprintf("%s", response))
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
func ToggleSuperuser(server_url, api_token, id string) string {
|
||||||
|
response, err := connect.PostRequest(server_url+"/api/admin/superuser/"+id+"", map[string]string{}, map[string]string{"X-Dataverse-key": api_token})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (fmt.Sprintf("%s", response))
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
func CreateAuthenticatedUser(server_url, api_token, params string) string {
|
||||||
|
response, err := connect.PostRequestB(server_url+"/api/admin/authenticatedUsers", []byte(params), map[string]string{"X-Dataverse-key": api_token})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (fmt.Sprintf("%s", response))
|
||||||
|
}
|
||||||
|
*/
|
22
goMetrix/app.wasm/Makefile
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# Basic Go makefile
|
||||||
|
|
||||||
|
GOCMD=GOOS=js GOARCH=wasm go
|
||||||
|
GOBUILD=$(GOCMD) build
|
||||||
|
GOCLEAN=$(GOCMD) clean
|
||||||
|
GOTEST=$(GOCMD) test
|
||||||
|
GOGET=$(GOCMD) get
|
||||||
|
|
||||||
|
all: build transmit
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(GOBUILD) -o app.wasm -v
|
||||||
|
dbg-build:
|
||||||
|
$(GOBUILD) -v -gcflags=all="-N -l" -tags debug
|
||||||
|
test:
|
||||||
|
$(GOTEST) -v ./...
|
||||||
|
clean:
|
||||||
|
$(GOCLEAN)
|
||||||
|
transmit:
|
||||||
|
scp -r app.wasm root@10.23.45.27:/srv/Data/ArchiumToolbox/Toolbox/static/wasm/
|
||||||
|
# scp -r app.wasm root@10.23.45.26:/srv/Data/ArchiumToolbox/Toolbox/static/wasm/
|
||||||
|
|
BIN
goMetrix/app.wasm/app.wasm
Executable file
174
goMetrix/app.wasm/aux.go
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
// Tux
|
||||||
|
const imageByteArrayAsBase64 = `
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAJgAAAC0CAMAAABfch
|
||||||
|
VeAAAC/VBMVEUGAwkBAg8ABgkEAAYLBAIIBQsCCQwICwYMCQ4GDA8QCggTCgEVDg
|
||||||
|
ULERMPEQ0SDxMUDw4aEgMQFBYTFBIWGBUgFwYbGBcaGBsaHBknGwUgHiEeIB0iHh
|
||||||
|
0tHgMiJCEvIgkoJCMnJSg1JQYmKCU8KgcrLSovKyo+KBMrLS87LBBBLgU3LxtHLg
|
||||||
|
gwMzUyNDE3MzJMMgVJNwk4OTdMOQJSNgM4Oz0+Ojk8PDVYNwdVOQdSPAg+QD1ePA
|
||||||
|
RDPz9YQgVTQRpBQ0JeQAZlQgJGR0VuRAdrRgdKS0loSwl0SQNUTz5yTAJTTk1NUV
|
||||||
|
NPUU5uUQV7TwBVV1RaV0qAUwV9VwaFVgCLVgNhXlFdXlxsXUNdYGOLWwWBXhGGYQ
|
||||||
|
aPXgCTXABlZmSZYQSWZASPaQqVaA6baAxsbmyhaAGMayuWbgCPcBKbbQKfawN0cW
|
||||||
|
SYbCGkbwlzdXKbdQmscACocwCidA2GeGJ6e3ilewOhfQSeeSezdgF4fX+veAmsew
|
||||||
|
qyewCKf1x+gH2ifDiygAW3fgSthQO1fhOZgVKEhYOygiC8gw2+hQC4hRK7hwDDiQ
|
||||||
|
WMjou4kQSli1u/kAPCjQ3HjA3KjgC7jyrHkQC5jjnNkQKUlpO1k0/UkQrJmAfRlA
|
||||||
|
rOlwvWmADFoQDKngXTmwCvmm7GmjDRngCdn5zXngTbnAWinZyunYC3nmTaoQ3Vni
|
||||||
|
7OqA7VpQzepADApGXUrQDipwOnqKXbrQTZpyvgqwfmqw3qrQDisgDnsACur6y7rZ
|
||||||
|
TZtxHrtAPfuwHwsgbkugW9sp+7s6bquQrVt071twDvuA7ztg/pvgDuvADzugC2uL
|
||||||
|
S8trPxvgDpwwD2vQDLuonuwgDuvSb0wQO7vbrBvLruyAjDv7HwxB3rywvqv1nAwr
|
||||||
|
/Gwb/1zgHtzSTFx8TKxcTx0Rr10wXsx2bMybrJy8j02A/x1yD01zDO0M312DvV0c
|
||||||
|
P22EbT1dHl17Hc2MnY2tfk4NHe4d3x4rnj5eLo6ubr7ur18eLw8u/19/P5+/f6/P
|
||||||
|
n7/fr8//sGU4jmAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx
|
||||||
|
MAAAsTAQCanBgAAAAHdElNRQfUChwRIgJBXOpUAAAcEUlEQVR42u2cfVzT953A2y
|
||||||
|
SQEDUqoCCxKMV0zmlKc7ZXDV2t1IezUjkfxs2paFtYW1ao6bAPyFhpx0grtoWu0h
|
||||||
|
pZ6QS6ccoVLGBoU6gcwQbR4xrYPGxTvbFKb9xlGUmT38PrPt+HXx4oIJaH+Ee/rR
|
||||||
|
ESye+dz/Pn8/3+uOmm79Z368ZfYv91Y1LdOHDiUdYNihVstLG4JEFEGxVKJBHBQ9
|
||||||
|
CkNipXqCJCESoKmj5H5ZIqlCqVMkKCvr75RrIvabRqzeYktVIqCQrZGGBKdXJa2m
|
||||||
|
aNUhEMbY7hj2FKbWp2dmqSKloaBLKxwGIBLD01SR0bKZ12sLEimBTA0lOTtWpVtE
|
||||||
|
Iy3WRjcIkUsdrk5CSNKlYZKRdNM9hYAhMrlGqNWgVUirBpz05jgkkjlbHzFdKgpM
|
||||||
|
2xuEQSqUIuCXjq5htCYEAWtFJDfN3rO7AbHUwi+YY9wVMSuTQ0JChkFEEqV0RGyi
|
||||||
|
UjBYx4dVRIsMAk0hBJmHJpfIQowB1DZGGyEFGE9h6lKDhgqHgODZXNilPN9yvzZb
|
||||||
|
Pj71q/fkVU6Oylt0cESWIh4bcnaeNnzYpXyb2Xn61OTs8vLi5O14bNWhwTGhyJxa
|
||||||
|
YUVlbmr4maFaMQ5BWlTcsvrqyv7zz3rnaWfL40KGBRKcX11r7mws1REqmIgIUnZQ
|
||||||
|
NW87ke2xfWfA04pygIYDJ1TuU5W19Pff4aeQgBCFWll527NDBotzsGrGVp0SJRMC
|
||||||
|
Q2J6Xs3OCQy+n4olIpGFh6/aDLwzIehvE4Owu1sumPF2Bhiwu/cDqHnB6OcW6mko
|
||||||
|
mrdzA85+yrbB70MG5bekwwwMTqTpejOC2n2c2x7yLRSEQibZ+L453ZMbNvS2l285
|
||||||
|
7OO0VBAAtNHnQWxyxcn1rv5m0xEkkINJGbbW7eVRYVEpeamtLMcI7U0CCAyX48ZL
|
||||||
|
tHFJudktLPOdRSqSJSKnkAwGx3isXh63MeeABElh8eDLA0Z2WMWJaSqqn0OLQRkX
|
||||||
|
Ga25UAxhTOBvuLSU6OHeCYypjggBWDQFTJmhyXXatQRCpV8Vqr2/PjUDy7UEc3s0
|
||||||
|
x9XBDAwn48VBwtFs1ZEZPq6FwokUqg0I/MtrtTSE0RFlrJMM3BAJOlOupjwQeiIl
|
||||||
|
L6f7bkjtU/XP0Pdyz6kdWVKgQvJLH4IICFJA323YOkI/mndx579SRab7/w2Dv/lz
|
||||||
|
+bYIQ7OE9ZMGxMvMLqKIwSiWYs+cmBo8a2ttOnTx49/PaJf//DD3DmnpXGsM6ccF
|
||||||
|
EQwGLKnPbk0JmrHj740nFTa1tr64nDT/+2te3E06vnIgsc4Jn+zcEIsCCTQU//P2
|
||||||
|
/SvVbRYDQD10cfffjeh+d7u1tPvPDgvT8bAIGVxQUlJYnubHb+7c28Q1VNJnNbW+
|
||||||
|
v58xc///zzq5cvX+49e+rt3/3H/wzZHgidfrCbUd2T9vEbBSVIXiCws+cvXv7yy6
|
||||||
|
tffXX1L1c+6+1qO3X89ceWSYMiMbH03mee1xtqGoymtk/Onu+9eOXLqwD25V+uwP
|
||||||
|
rss+62mgPLJMEAk966TVdUWlFrNAEYKPLilatf/RUERteV3j+demiBJAj12LxNug
|
||||||
|
IQWJ0RTAwJ7PLlr/76V4HrypWPPvxT24FbgyAyybLMPH1JeZ0RwM52g8AuX/Xjun
|
||||||
|
jihVcbGp5cFAQw+X1IYFVegV0BgV2l0rry0eHDr1bUHN81LwiBTLEht6CkvAZiBQ
|
||||||
|
LDAgOHxFggrpePVNRUVeyaK5p2vxRLVz988DdVtQD2SdfZ3l6wsKtXsENe+fDw86
|
||||||
|
Xl5TVV1YZtc3FfHDKtYJK5CdsOHK9rMZu7upBLfknixMWPfvt8AXBVVZUbXlqNTC
|
||||||
|
wsbml4yDSCiSULEoHMZLZ0dYMiL2Pjuvjh4QMH9Yby6qqqilL9T+bhnm59+gPxsm
|
||||||
|
nbikON5R0Pbnv0aENbd+/FzwEMCeuFA0/lHjKAvCoMr73x5s9VSFJhmvTn0pKWhk
|
||||||
|
0bmEj+j7/46bZdTx4+8SHK3ycOv3BQp8vVlxoM5RW/Kfndv31wpjkNNSOhypTn8p
|
||||||
|
9LjZsmkSGw1ObfP7Tv4YeffBqtAwcL9PqS0iMGQ2npodf/8PEfe3qsZWokslB1+n
|
||||||
|
PP5STNnzawOdnWzncezsw6ePS9904eP2aAVfpWaWmJ/qU3P7Da+m191vokVGeLol
|
||||||
|
Py8/PT1LJpIYMooMyxWs+98vAjT7108lQDOOFbb71Vckivf+mNP5yx9vTZBmyXOt
|
||||||
|
PmoOmeRJX+XHpS9LTsKqFaf2F2p9V65pUnHtG9XGo4AqI6VFRQUPDSGx+c+2OP1T
|
||||||
|
bgcNj7370NBQxRpDZlfZxsWkIGuhwG6znzzhP7MnOBqCBPl5Gh+/WbH/TAszb7kN
|
||||||
|
vjcQ6k4lmjSBYVJZuWIIuvFplt/aKvp+fc718BtMzMjIxHHnnmzXfOAFffFw43w3
|
||||||
|
Ic46y/LTApiUMkUw4WEp0/MGgD3wO0X/3yiSeeeOaX73xw5lxPp7VvwOFieLQYR9
|
||||||
|
rwcb9kqrnEYSn9TsdAnxWtznNnPv74DESInnNW6xdeLp5n+5XDwEJCp3r3Ia4ejM
|
||||||
|
hOwITVg7zR7nB5OArGu9NnS4Zt/0qnDEyO9kJmpzk5Fsy7z9rjR9bXP+hwun1cPE
|
||||||
|
vadb8lnzJlyiMipSKx1gqXZzyOfiwpynVpwD7k8jA+Lp53Fs4ftpkpmiLPFEsUEX
|
||||||
|
Lx7DInC5fl3P7KtA2CFj2cPxfP2LSS6dmJQ/YbIlvvIPbtGRoQyCBIOFGU4AMW58
|
||||||
|
yZMy17hOSdF1ZSv2PdQwM2hNaDxcWw/PDFNA+PZVNCRo+iZA95JcK4nfbBQWTzDM
|
||||||
|
ePtFxpoVMPRt93hZXxu7LHNQSeOIKwKHpx1JRv+NJ3Dc9xBlzaA1j8qIvrVE/5Vj
|
||||||
|
R9U22nx19rHDOKEunLgw9IppiMvuWsdIeHDQAbk4t1ps2Z2u17IQ2rK4cCwMYk4x
|
||||||
|
iPuzh8Sg8WeI8UpXQOA+NH1yXj8bjd1hjJFJJ5U0pkWieUW34yQVf/pk+yHMswHp
|
||||||
|
fT5XI6/PamJ53Ml+uis5sHnB4a4uHqIBO4vIeBZ6A4RH9YQIKn0fNDDodjaChJLp
|
||||||
|
l6MMniwnqr3QnXZdDyuJ1DaDldEDPQU/DoBinBs1D12wcHBiCx50RIpkpkfmc91G
|
||||||
|
WVzX0DhASBubBU4FuGxaiQChwA1N/fb7N9Yeu7BIVj3wOyqTpZ43urSG1lZX2nzY
|
||||||
|
7qLqQ8hnE50NcMg8wNbIvxOB2OQegr8erpuXRpwNG5AuVLUXjYZIP5lcbKJMSFCx
|
||||||
|
zqAZ4hp8e/qEARggjNBnSXLvXZBofql6KMobkzRja5ZH4FqDK1vqffAdYPRs4jNM
|
||||||
|
7jdLOCJ6IHZP5g+6BixIbEBv++EGJZSIxWs3j2ZA7zqD/i0xbqskuDICEcuRigYB
|
||||||
|
EYeCPHwLfob6xQ7J0QLYbsAzbbpb5Bpz1tFvKcKLVaOYn7EoRLrhCLQ6PTkUuyLE
|
||||||
|
iHAMD1kbEBD/mfQa+guIG/IWiXbHaXVUPMbKlGKZtUMJEyPjJEHKY5Z0dNECYBzb
|
||||||
|
E4jiK5wddYi5iI53j6FYvQ+m39DlcO2TCULb5LOVnDbMy1UBMFOojJB6sn8qF0JF
|
||||||
|
MSFZIvkMBYIkD0N3gpkA04++4k/ZIk/vYI0eSByTXx8L6SpD5UqIKUeEIhMHLCol
|
||||||
|
mKI9LD/4jFZHZnPj6eIRGHxd8mnxyRoZ+O1iJNzCoGO8cSYjiGKA4esVIFvwQf4P
|
||||||
|
xqHvQyz7js/f3OwcXk5ogwhWqSDnDh80RIYKH39DP4asTueWr/DA0VHA1siJbwUv
|
||||||
|
/kGZCZ3Z0uEYcoomOVCuWKSMkkgOG2SI1qqphKt6A4bO3IhGglAQ88eZ4htk+wsP
|
||||||
|
RQ5HAPOVzWKLE0UqVVx0aoVLJJEBk+SLcU3km2eRAZNUvgqOn7LeoCLE+sH8dbYo
|
||||||
|
TgsJAohpLEYdHqNVpVRKQ6SjQpYAu1UXgb3CMgkFCPoxlojaiVoR5J/vD4AT9yNO
|
||||||
|
h58qWKWM0aTXyEVKWWTxgMxZ7bkMDCUga5YQvhQPnKCt7JUfkIXwgP9LXOiAilSh
|
||||||
|
0fKRWFa2MnrEuUfdVUYDy5kt9C1StP3QAD0SIDf0MjHEQXwjyoUkRERqJblkI02o
|
||||||
|
maPwqu8Wpw75C77BxtO+Aa9FI863Z6cM3K0UyJDB5nApzgWQqNjZId2iwSThovvG
|
||||||
|
cSwMI06MjJnHwGAfHE7CkFwzgRGL44iWtCxEDf00iGIwf6xv2c1xnl9ygmqEtUUd
|
||||||
|
wFwTVUY/M5HieUEVBaOBleICLZCHsBkhtCw17CYMVCHfKud1og0ign5pdo0qZeCu
|
||||||
|
+hSHcJSdAvBbGeIRfDe1O3gOv9gmRRXqhDOr1nRETqCfolZDdFUjjq2jpZGu1JJc
|
||||||
|
ETJ3CjmZj3yn6LRjPsD96P03+nl2XpXWET0SXacVFqIRuJtEM4QvE879UoXJh1gc
|
||||||
|
RIuPAGMPLPSJRgacSlIc2+3gemDp0YmFisug2l7xwSXBksLJIxUU3jRLNzqjbshw
|
||||||
|
zOULiqIFJDLkKyOcc5Un1gKyZS++DKToPSZHwzQ4Ilqb9YoQlHYCxeWDBC4Y9qDK
|
||||||
|
El9jUqnDPdBzah43jISudrQOaipAGGVK2kXmBxOmIJGIVkKTkvkCAHJbGWIb7Ju7
|
||||||
|
K90WvpRE69kdL1dniz0LQhv4xNY6YXjKXmzuL6mhdsn+YCIb7Av/IUCvqTqSdwFp
|
||||||
|
X4tfIuAFMUu3nW3/VYkrahuYUWwD9J0aDmq9a81g9/PMWCxcs0E2iWSImu1MKnVN
|
||||||
|
Z7hLKCxeGJ+B/rcRAwlvNBEzLGh0vUjzVfLMSIWZpv3/jSSKhMgmih6mSoy/OCKr
|
||||||
|
EVITCGhg6O98Z/jmZyocmkjRPPlAk5ab5GMkEwWUxyKBQDaE6N8x1DjJshRi6A8Y
|
||||||
|
QEtQK0mhZc1VeHw1dMGT30KY5Vf2sw732v6wFsjY2hiQgbNcPjcM5gVeJwgZXH+H
|
||||||
|
I5683l6AmBj60UTF6lFE8MLCRSlTJLLEseEPprnhcuii7kcQzh6SInVNuckB5pHi
|
||||||
|
KRT4h6jAAmWzpngmCKeE1alDgsddDPvIWmA6VKDMZyrPd51uuznM/sWJqnmEpaXk
|
||||||
|
TFhU4UTJWUvlgcnu7gaGlP+gshqLkIGKkdAuoOb8zwCySgSgImiosO+bZgwt3789
|
||||||
|
Vpt2MwkpNJvUDbEF6QGCvELZrl+UDF4qiL4j/zLjH+WfHh4gmCoVMTWnFEtsNbvH
|
||||||
|
DeOYUXjCiQ9JmC/Lx1tjeWweueYhIulPGyCYOJQ6DsicLbbbThpx0HEgLrdjjJzF
|
||||||
|
/wQ5IjfRsTRO0sKYA4d6GM3EiulIVIJZKJgYlDlSpluoNWyXg6R6plXFkjidH6AS
|
||||||
|
dxrDV4meX90ipt03kWVRei8Di1KlIeqYyNjZxFD5Zdp+1L5i66ddFcKbSV2nQ7S6
|
||||||
|
dOdC5HOn+QGN4loTMDGipw98F48xN1YKRkR4pYFqlSRigk4jBFhDI2Pj52/nUfRp
|
||||||
|
LOW73r1aOvPnaHVCxfmj5AClSGJZenvSSyMQ/jl7xZau8kLxDDopU4UrHtztDIaO
|
||||||
|
HAg0gSFhWnTdYorhMsYdvLdWaLxXh0w0zx7HveddL8yPpPKDAYG9ics976InCyAR
|
||||||
|
r3VMZERIX6V66hMcmp6jnXd7Ag97UG8wVYluMPSkWK9fVummpw/hOCLQITQggv5H
|
||||||
|
YqO9arSogUX/8d1v/+Yl70sFG/VLNeO//6wEpqmlouULKZoghNpYujhSpNMixVJR
|
||||||
|
2QMXiITbthGoGF2pb9+3/9J1rvP/b9wCPr4gg1mmVcD5jeUGvqsAhkM0RhQMYIOZ
|
||||||
|
LHWRlMDoORKpoXGih4iYyLOU5oxj3/bepGh9a7374jECwkVhU7Z8EPr4cLnaM2E7
|
||||||
|
ALlrfBzsJUhXa0xYYLGooHKQnN1lnS2WEx+jI89VCE/PVJ46efoXOyhwOP0osUyu
|
||||||
|
gI+Ya3z18H2JHqRkFiFy6YX10tFUtVOQN45wGXfFgcOPKz3okdyadC+mY5Wldy/N
|
||||||
|
c1deau7s8+630h8Fy4eHakVLroydYrV8bLVVRiqG00WSyUrKvt6SUSsSQ21eqmEY
|
||||||
|
H2RO4haHj9jD+w8vfmVAAzWS582tv65IJAMIlIPPPBE71XrlwcryLRSX1Bk4js1G
|
||||||
|
NzxSJp5Pp3XSznN5pg0IiApmvvhhLrq44o5NfvI7Cus8PuPcBoyw63dvd+NrYyi4
|
||||||
|
peLkInIIGrug4J7IKP7PgGeMsQubrSKYwHsMEzHkYoCPHIwDsLYoWZNcL8+v1aeL
|
||||||
|
dP2o4/futwsHm7TnV3d33adnRUqgJQ37FjBkNpSYmhoqquqcUPC9bZV5fgiLg4fc
|
||||||
|
C7CchhYZF2VtjdYv2CBM0SHtff3q9tsVjMDVUHV84YFscePNra2vaJxfTaaFzP6w
|
||||||
|
3lNbW1tTVVVVW1dY3GAHnB6m59lBzPD0+1erCvsST8g8GTighPEqmQyIAAq5dxOf
|
||||||
|
r/DBIzm011VUXbbvEvKiQzVr/W0NpmNlsaRgUrMlQDT1NTXWNdXZPJZA7AAsju3p
|
||||||
|
MPzsQ3g4etqXeSRttrVzwntEp09E83wBCy226z/fH9WqPZZKwt1+s2LJCIvFi3bC
|
||||||
|
qqajgNzO2NJaNwvagvr200tphMJmMTWL3FMhysq7f1BRqEZmuKB8n4i+YcYYPSO0
|
||||||
|
eneQFXGY5+DAYftqmuvKQgc9Mtc2fI5RL5zHlL7ttVYKhFNzZZLC0Vo4GVoPs/Ot
|
||||||
|
rBEszDqASRnT+1ay79qMq0AY9vHMBw3pqCZFOMxpJw6wGBAVgNGEdTXVWpviB336
|
||||||
|
b7Vq1cuWrDtsdzC0prQD3oguaG0cBKqxpN5naLxSesYTLr6v3osJBQQiJTOz0BG2
|
||||||
|
64ria9LS9MY/GLBOxfqwGgqbGmHMgKcnWZmZlZuXnP60ur6lpM5JrGUcEgZ3cgJv
|
||||||
|
hD0ALkZkHx8b2H5gnmEZ7U6abbRwwxfroHQIYWtJQGh3UPIrDfldc2GY2NtRWG0k
|
||||||
|
N6PQ5J+kOlx4DLTERhaRlFZC++VgUm9g0V+pN92n3+7R96c3BYUqeHZ/z3/1hfNq
|
||||||
|
djAVT0UzADAmuqqylH58UhIsEDRIG6FuHTm83GmhHBfo1szGyxjAFm6epuPbBIcC
|
||||||
|
mRPBXsDOMwFJCEC2GuT1IX47Ej438dlGZEIqupLi834FUBUanJ7Hv7UazsIICBGV
|
||||||
|
4Ya3V1nz+5yzsEFy0sdFEDJ5pjhLkwJ4QObGPYK18vQbo0GRvqIFBWl1dUVFTV1P
|
||||||
|
oHcQAzjUhWcKgc3WQ0hi6xMluP+m5OlCc7yGiK9kBCee81OLw8QwMIDN7eaESxqK
|
||||||
|
6WrroGo9/1QCEdppFCRgGKYy0dY4OByE4/usAbt1cMcv7CoS2a0KrT/M24Bm2X6n
|
||||||
|
/9MlQrLRAmW4wQwNGCWG4MEATIbEQzQ3f+XQsMQsb5ow96RaYaIDWXcMqCZ/2ada
|
||||||
|
FIY1x227kfPaXHYB3mjhYwNSNAGdHtfJZAMLO5oWaEyjCw0BmRDBLT6eeXCMluhZ
|
||||||
|
2kbs67l0RHjkJHggd9AJbzg8cBDCofFCfNKL2A6Fpa0LfDPvkIQisqrR5bYhYUcb
|
||||||
|
u6e089uoiOkgpdgvsRj2ToZgNHWkoWj1FYV3/+4iVZyFJMLThmteMwbvaP5T4yi6
|
||||||
|
Xh+DfBxpQYjruW7t6zRzfMEIlFsphsO8Mx3szN0bpCaJGE0sgzmLNYvuRxDCYkOx
|
||||||
|
xRR7WXtpo3AsHAb8YGQ3+6ui+2Hlg2P0aT3uwku6QkXPCM/+Yz560WGXt2FLpLVF
|
||||||
|
9R22CyWMY0FeFC5sYAG3sL4kXH6B9FcEyw/5MP/UuZbYgRqmnWe1SA8wsaWIispz
|
||||||
|
89SiSWr0RgTSbzeMig0ggEK62uNVpoorSMQXb2fOvRZ/7si6Uke/uqC1/RD9HVuh
|
||||||
|
lN6mbcl/lyBWluLNfEGg52qLS8rkWwR8uFkd8Cvdx1/vypl15xCzuB3uztd7yHap
|
||||||
|
R1V5JNyblrEZjR1D4eLrO5sc6PKw+D+VWII7+HhYjs+FNnGI4O7+jQHz+SkQVLn3
|
||||||
|
MWx5FJ67wNmUVUldcEM7c01tUERH4ULtqvJWz0+icgst/81OZt0lhe4ON8Z4941t
|
||||||
|
m8Xhig3LLpkYKKOuO1jd9iMTXWVRsCc+WR2qYWyzWtAIGdPX/6+FO/sjO+0bQQHz
|
||||||
|
i6PQmJyJYT5x1MI7BjUCNc81O3tzTWlhv0ga13eZ1pPFgg7LbW0xXP/+Tng4wQLv
|
||||||
|
zOtBFGt61wsW8MJlmyaR+AGVvaxy6r2s0tdTWG0hcDc/iRGqNlfGAW0+lTx4t23f
|
||||||
|
uzTifjOxslbIFBBTbUV7zGf1wOYCCx2rEkhoqLFhBXxZGSEYc710TD7mpsaDj+cu
|
||||||
|
baRZqcPrdv9w8fLmA9LltZ2l2BU3zp8k2PFx3DljJa4Aabh4Ko2lDyjaIHfLKRtg
|
||||||
|
WjBDILxYI409BQ9Zpua8LMcHVqcXO/3ely4/PedltzWXby0hhZ4K6HZObyTZkAZm
|
||||||
|
wxj9B9kf4HhFVtKC158ZtlYikqx8wdQps00mejz4MqmxqqSnQ7E+dJxLLZcZr1qe
|
||||||
|
k52WmpKclJ6phwecg3f4/0vJVbsqC6GMErkV11tLebm8AVS4oKRioTS6ARh4KpxQ
|
||||||
|
z/dXSMqVIAq60oyd297lbpuH6FouSWu7fq0G/GMFlGiFq4dKw2FOWOPFCBXqocmp
|
||||||
|
a6xkZUwplaoOs1+xQ7PNY01Fbodbs3LZ8xTrDE7boi1I20BxaGFlQ1NmLTyhulq8
|
||||||
|
zDbZ6hvAqNVVDd29gI5Zy5o8Pc7rM5mkbB+OuqDAVZOzfePU80TrCtWQWoG/Ere3
|
||||||
|
BwQFQ11YZDBVmjz87z8qAHPYRv9C4vr66pwXhQlZtAdu3U7Ohqaaw5VpKXuXNj4g
|
||||||
|
LJeMCkAJaRh0t3rxYs7R0Yq7rcUKrXjTWz02Vl6nS5zxbg29AJXhUSHsC1CJMDEl
|
||||||
|
7NTbXlpQX7920fL5jkllVb9u5H9R4aQrTjGrbdbGpqRO1vqf7ZzGsOOPdlZGRm6P
|
||||||
|
Y/ixSrR+IzYOUCXAuGa4fP2W5GitTnZuzZuu7u8Ups5cY9+/MOgXvBp4RSvwNiqd
|
||||||
|
FYi2xLX6Ab51R4377MTN3+/bm5uaDbgiIQn6GiGiTXBLEEUgqKg1WGkoKsvTs2rk
|
||||||
|
0Yr40lbNyRuR/93g5sHdDFNUE0RdLK02Vex4h/547dgJeRkZGl268DPgglBjC7Wu
|
||||||
|
QSSPyl+oL9e3dsuf/uZdf0ypsx2ILla7fv3Z9XVIpmg3gR2yrQZW693tNGW3du37
|
||||||
|
lz9x4iP8QGZgdqra4uP1KifxZxbUxMuEUynq2Wm6ULlidu2ZOxP09fcgT9io6qqo
|
||||||
|
pjpaDE3Mx9277VsclNGzdu2YrEh9wiD6kV1qEiEP8e4Fq7asnM8d4nvGzVxh17s/
|
||||||
|
YTv4d1CA3Jsh7Z+e24CByi274bS04Hhper02Xs3bEVuEBg8vG+y5KEtSCyLGq36N
|
||||||
|
cD7Ndl7tyyboJ3siSuBbadu3fvfSRz7969e3aAuNYl3p2wfPzv8P1lq+7fuicjM0
|
||||||
|
uHrBY+XFbGvp2bEifhPi7EtnXr1u3bd2zdumXLxvsTVy7/3vX8/LLlq9Zu2b4nMy
|
||||||
|
MT/Z+ZuW/nlk2TdK/gqsS1a9dtROv++9cmrky49fp+fNmyhMR1SO579+3ZvXP7ln
|
||||||
|
WJCZN2e2VCwt2JeN29MmHZ9677x5ctT0gEwW/cuGnd2vtWLb9pUlcCXsuXfbufXg
|
||||||
|
Y/u3LlqpXw103fre/WjbD+HzRGTE72Fay5AAAAAElFTkSuQmCC
|
||||||
|
`
|
162
goMetrix/app.wasm/echarts.go
Normal file
|
@ -0,0 +1,162 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Toolbox/goDataverseStrict/metrics"
|
||||||
|
"errors"
|
||||||
|
"syscall/js"
|
||||||
|
|
||||||
|
"git.archium.org/archium_public/ebkTools/wasm"
|
||||||
|
archiumwasm "git.archium.org/archium_public/ebkTools/wasm"
|
||||||
|
)
|
||||||
|
|
||||||
|
const ca0 = `<canvas id="barChart"></canvas>`
|
||||||
|
|
||||||
|
const insebody0 = ` const ctx = document.getElementById('barChart');
|
||||||
|
|
||||||
|
//var labelsa = ['A','B','C','D','E','F','G','H'];
|
||||||
|
//var dataaa = [860,1140,1060,1060,1070,1110,1330,2210,7830,2478];
|
||||||
|
//var dataab = [1600,1700,1700,1900,2000,2700,4000,5000,6000,7000];
|
||||||
|
|
||||||
|
var dataa = {
|
||||||
|
labels: [], //labelsa,
|
||||||
|
datasets: [{
|
||||||
|
label: "Gesamtanzahl",
|
||||||
|
data: [], //[1,11,10,60,10,70,111,13],
|
||||||
|
borderColor: "red",
|
||||||
|
backgroundColor: "red",
|
||||||
|
borderWidth: 1,
|
||||||
|
fill: true
|
||||||
|
},{
|
||||||
|
label: "Differenz",
|
||||||
|
data: [], //[16,17,17,19,20,27,40,50],
|
||||||
|
borderColor: "blue",
|
||||||
|
backgroundColor: "blue",
|
||||||
|
borderWidth: 1,
|
||||||
|
fill: false
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
var fubagchart = new Chart(ctx, {
|
||||||
|
type: 'bar',
|
||||||
|
data: dataa,
|
||||||
|
options: {
|
||||||
|
scales: {
|
||||||
|
y: {
|
||||||
|
beginAtZero: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
`
|
||||||
|
|
||||||
|
func helpTpGetLevelStatus(injectpoint js.Value, meisleisz *[]metrics.OneJumpPointSet, level int8) (result0 []wasm.Checkerboard, result1 string) {
|
||||||
|
a, _ := metrics.FilterStacklist(*meisleisz, level)
|
||||||
|
var b []string
|
||||||
|
for _, v := range a {
|
||||||
|
b = append(b, metrics.IDRequestCriteriaPrefix+v)
|
||||||
|
}
|
||||||
|
|
||||||
|
result0 = wasm.GetStatusFromBulkOfIds(injectpoint, b)
|
||||||
|
|
||||||
|
for _, v := range wasm.GetStatusFromBulkOfIds(injectpoint, b) {
|
||||||
|
if v.Checked {
|
||||||
|
result1 = v.Value
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gothis *lokalRequestType) changeTicker(s string, l int8) {
|
||||||
|
dombase := js.Global().Get("document")
|
||||||
|
|
||||||
|
//closureGetIdWhichJustChanged := getIdWhichJustChanged()
|
||||||
|
//log.Println("DIE BACK:", s, l)
|
||||||
|
//s, l := closureGetIdWhichJustChanged(dombase, metrics.OneJumpPoints)
|
||||||
|
|
||||||
|
//FIXME: Aktivierung und Deaktivierung von Datensätzen pro Level funktioniert nicht mehr!? Neu machen, im Moment ignoriere ich das, damit Elfrun arbeiten kann.
|
||||||
|
actualizeForms(dombase, metrics.OneJumpPoints, int8(l), s)
|
||||||
|
//actualizeForms(dombase, metrics.OneJumpPoints, 2, s)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gothis *lokalRequestType) pseudoSubmit(jsthis js.Value, args []js.Value) any {
|
||||||
|
dombase := js.Global().Get("document")
|
||||||
|
|
||||||
|
gothis.Level0MetricsType, gothis.Level1MetricsDataCountType, gothis.Level2SearchType, gothis.Level21UserInput, gothis.Level3ReturnformatType = func() string {
|
||||||
|
_, b := helpTpGetLevelStatus(dombase, &metrics.OneJumpPoints, 0)
|
||||||
|
return b
|
||||||
|
}(),
|
||||||
|
func() string {
|
||||||
|
_, b := helpTpGetLevelStatus(dombase, &metrics.OneJumpPoints, 1)
|
||||||
|
return b
|
||||||
|
}(),
|
||||||
|
func() string {
|
||||||
|
_, b := helpTpGetLevelStatus(dombase, &metrics.OneJumpPoints, 2)
|
||||||
|
return b
|
||||||
|
}(),
|
||||||
|
func() string {
|
||||||
|
_, b := helpTpGetLevelStatus(dombase, &metrics.OneJumpPoints, 2)
|
||||||
|
switch b {
|
||||||
|
case string(metrics.ST1total):
|
||||||
|
return ""
|
||||||
|
default:
|
||||||
|
//case string(metrics.ST2_tomonth):
|
||||||
|
//case string(metrics.ST3_pastdays):
|
||||||
|
//case string(metrics.ST4_monthly):
|
||||||
|
//case string(metrics.ST5_tree):
|
||||||
|
return dombase.Call(archiumwasm.DOCUMENTS_METHOD_getElementById, metrics.IDRequestTextPrefix+b).Get("value").String()
|
||||||
|
}
|
||||||
|
}(),
|
||||||
|
func() string {
|
||||||
|
_, b := helpTpGetLevelStatus(dombase, &metrics.OneJumpPoints, 3)
|
||||||
|
return b
|
||||||
|
}()
|
||||||
|
|
||||||
|
//triggerResultprintation(metrics.MetricsType(checked_type), metrics.ReturnformatType(checked_result), newcheckers, bodyInject)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func removeAllDataGo(this js.Value, args []js.Value) interface{} {
|
||||||
|
chart := args[0]
|
||||||
|
//log.Println(len(args))
|
||||||
|
//log.Printf("%v\n", args)
|
||||||
|
//_ = js.Global().Call("alert", countDatasets)
|
||||||
|
|
||||||
|
for datasetCounter, countDatasets, countDatas := 0, chart.Get("data").Get("datasets").Index(0).Get("data").Get("length").Int(), chart.Get("data").Get("datasets").Get("length").Int(); datasetCounter < countDatasets; datasetCounter++ {
|
||||||
|
|
||||||
|
chart.Get("data").Get("labels").Call("pop")
|
||||||
|
|
||||||
|
for i := 0; i < countDatas; i++ {
|
||||||
|
chart.Get("data").Get("datasets").Index(i).Get("data").Call("pop")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
chart.Call("update")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func addAllDataGo(this js.Value, args []js.Value) any {
|
||||||
|
chart, newdata := args[0], args[1]
|
||||||
|
|
||||||
|
var numberOfValues int
|
||||||
|
|
||||||
|
if numberOfValues = newdata.Index(0).Get("length").Int(); numberOfValues != newdata.Index(0).Get("length").Int() || numberOfValues != newdata.Index(2).Get("length").Int() {
|
||||||
|
return errors.New("Inconsistent input data array!")
|
||||||
|
} else {
|
||||||
|
for i := 0; i < numberOfValues; i++ {
|
||||||
|
chart.Get("data").Get("labels").Call("push", newdata.Index(0).Index(i))
|
||||||
|
chart.Get("data").Get("datasets").Index(0).Get("data").Call("push", newdata.Index(1).Index(i))
|
||||||
|
chart.Get("data").Get("datasets").Index(1).Get("data").Call("push", newdata.Index(2).Index(i))
|
||||||
|
}
|
||||||
|
|
||||||
|
//log.Println(chart, newdata)
|
||||||
|
//log.Println(newdata.Index(0), newdata.Index(0).Index(0))
|
||||||
|
|
||||||
|
chart.Call("update")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
252
goMetrix/app.wasm/main.go
Normal file
|
@ -0,0 +1,252 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
"syscall/js"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"Toolbox/goDataverseStrict/metrics"
|
||||||
|
|
||||||
|
"git.archium.org/archium_public/ebkTools/wasm"
|
||||||
|
archiumwasm "git.archium.org/archium_public/ebkTools/wasm"
|
||||||
|
//_ nwa "git.archium.org/archium_public/ebkTools/nhooyrioWebsocketAddons"
|
||||||
|
//"Toolbox/goDataverseStrict/metrics"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Setze und lese aus ID
|
||||||
|
const (
|
||||||
|
//ENHANCErecords = false
|
||||||
|
//ENHANCEebenen = false
|
||||||
|
DEBUG = true
|
||||||
|
LOOPTAKT = "0.6s" //Kontschi sagt "0.7s"
|
||||||
|
PDPURL = "https://pdp.archium.org" //"http://localhost:8080"
|
||||||
|
SPANSEPARATOR = "bis"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
var signal = make(chan int)
|
||||||
|
|
||||||
|
func keepAlive() {
|
||||||
|
for {
|
||||||
|
<-signal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
func getIdWhichJustChanged() func(js.Value, []metrics.OneJumpPointSet) (string, int8) {
|
||||||
|
var oldIds, newIds []wasm.Checkerboard
|
||||||
|
|
||||||
|
internalClosureFunction := func(injectpoint js.Value, ojpsdata []metrics.OneJumpPointSet) (string, int8) {
|
||||||
|
var founditS string
|
||||||
|
var founditI int8 = -1 //Default
|
||||||
|
|
||||||
|
var tmpIdsS []string
|
||||||
|
var tmpIdsI []int8
|
||||||
|
|
||||||
|
for l := int8(0); l <= 3; l++ {
|
||||||
|
a, _ := metrics.FilterStacklist(ojpsdata, l)
|
||||||
|
|
||||||
|
for _, v := range a {
|
||||||
|
tmpIdsS = append(tmpIdsS, metrics.IDRequestCriteriaPrefix+v)
|
||||||
|
tmpIdsI = append(tmpIdsI, l)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//log.Println(tmpIdsS)
|
||||||
|
newIds = wasm.GetStatusFromBulkOfIds(injectpoint, tmpIdsS)
|
||||||
|
|
||||||
|
if len(oldIds) > 0 && !reflect.DeepEqual(oldIds, newIds) {
|
||||||
|
for i, n := range newIds {
|
||||||
|
if oldIds[i].Checked != n.Checked && !oldIds[i].Checked && n.Checked { //newIds[i].Checked
|
||||||
|
founditS = strings.TrimPrefix(n.Id, metrics.IDRequestCriteriaPrefix)
|
||||||
|
founditI = tmpIdsI[i]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
oldIds = newIds
|
||||||
|
|
||||||
|
return founditS, founditI
|
||||||
|
|
||||||
|
}
|
||||||
|
return internalClosureFunction
|
||||||
|
}
|
||||||
|
|
||||||
|
func barseTuration(s string) time.Duration {
|
||||||
|
d, err := time.ParseDuration(s)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
var (
|
||||||
|
dombase, bodyInject, scriptarea, chartarea, submitbutton js.Value
|
||||||
|
//dombase, body, body2, butt, , bodyDatabase, bodyTectonics, js.Value
|
||||||
|
|
||||||
|
/*TODO: WICHTIG nicht löschen
|
||||||
|
oldcheckers, newcheckers []archiumwasm.Checkerboard
|
||||||
|
checked_type, oldchecked_type, checked_result string
|
||||||
|
*/
|
||||||
|
)
|
||||||
|
|
||||||
|
closureGetIdWhichJustChanged := getIdWhichJustChanged()
|
||||||
|
|
||||||
|
//log.Println("started")
|
||||||
|
|
||||||
|
//connectionReceive, _, errReceive := websocket.Dial(ctx, "ws://"+configs["websockeIp"]+":"+configs["websocketPort0S"], nil)
|
||||||
|
//connectionSend, _, errSend := websocket.Dial(ctx, "ws://"+configs["websockeIp"]+":"+configs["websocketPort1R"], nil)
|
||||||
|
|
||||||
|
dombase = js.Global().Get("document")
|
||||||
|
|
||||||
|
//bodyDatabase = dombase.Call("getElementById", vectorIdDatabase) //.Index(0)
|
||||||
|
//bodyTectonics = dombase.Call("getElementById", vectorIdDescription)
|
||||||
|
bodyInject = dombase.Call(wasm.DOCUMENTS_METHOD_getElementById, "injectarea")
|
||||||
|
scriptarea = dombase.Call(wasm.DOCUMENTS_METHOD_getElementById, "scriptarea")
|
||||||
|
//formarea = dombase.Call("getElementById", "formarea")
|
||||||
|
//testarea = dombase.Call(wasm.DOCUMENTS_METHOD_getElementById, "testarea")
|
||||||
|
|
||||||
|
chartarea = dombase.Call(archiumwasm.DOCUMENTS_METHOD_getElementById, "chartarea")
|
||||||
|
submitbutton = dombase.Call(archiumwasm.DOCUMENTS_METHOD_getElementById, metrics.IDFormSubmit)
|
||||||
|
|
||||||
|
var oldPseudoSubmitData, pseudoSubmitData lokalRequestType
|
||||||
|
|
||||||
|
//butt = dombase.Call("getElementById", "runButton")
|
||||||
|
//lmog.Println(butt)
|
||||||
|
|
||||||
|
// tmpRohtext := bodyDatabase.Get("innerText").String()
|
||||||
|
//tmpRohtextTectonics := bodyTectonics.Get("innerText").String()
|
||||||
|
|
||||||
|
//bodyInject.Set("innerText", fmt.Sprintf("%v", os.Args))
|
||||||
|
|
||||||
|
if DEBUG { // Zeige Pinguin als Zeichen dafür, daß das Programm vollständig durchlaufen wurde
|
||||||
|
image := dombase.Call("createElement", "img")
|
||||||
|
image.Set("src", "data:image/png;base64,"+imageByteArrayAsBase64)
|
||||||
|
bodyInject.Call("appendChild", image)
|
||||||
|
}
|
||||||
|
|
||||||
|
//image2 := dombase.Call("createElement", "img")
|
||||||
|
//image2.Set("src", "data:image/png;base64,"+imageByteArrayAsBase64)
|
||||||
|
//body2.Call("appendChild", image)
|
||||||
|
|
||||||
|
//js.Global().Get("console").Call("log", "Just another way to send a string to console-log!")
|
||||||
|
//js.Global().Get("document").Call("getElementsByTagName", "body").Index(0).Set("innerText", time.Now().String())
|
||||||
|
|
||||||
|
//keepAlive()
|
||||||
|
/*
|
||||||
|
fmt.Println("HIER")
|
||||||
|
fmt.Println(js.Global().Get("dataaa").Index(1))
|
||||||
|
fmt.Println("BIER")
|
||||||
|
fmt.Println(windowbase.Get("dataaa"))
|
||||||
|
|
||||||
|
dataaaJS := windowbase.Get("dataaa")
|
||||||
|
var bb []byte
|
||||||
|
fmt.Println(dataaaJS)
|
||||||
|
fmt.Println(bb)
|
||||||
|
|
||||||
|
// windowbase.Set("dataaa", js.ValueOf([]interface{}{1, 2, 3, 4, 5, 6, 7, 9}))
|
||||||
|
fmt.Println("GIER")
|
||||||
|
*/
|
||||||
|
//chartarea.Set("innerHTML", "")
|
||||||
|
chartarea.Set("innerHTML", ca0)
|
||||||
|
scriptarea.Set("innerHTML", insebody0)
|
||||||
|
|
||||||
|
js.Global().Set("removeAllData", js.FuncOf(removeAllDataGo))
|
||||||
|
js.Global().Set("addAllData", js.FuncOf(addAllDataGo))
|
||||||
|
js.Global().Set("pseudoSubmit", js.FuncOf(pseudoSubmitData.pseudoSubmit))
|
||||||
|
//log.Println( submitbutton Set("onclick", "pseudoSubmit"))
|
||||||
|
submitbutton.Call(archiumwasm.ELEMENTS_METHOD_setAttribute, "onclick", "pseudoSubmit()")
|
||||||
|
|
||||||
|
/*TODO: WICHTIG nicht löschen
|
||||||
|
_, _, checked_result = archiumwasm.GetCheckedRadioOrCheckbox(dombase.Call(archiumwasm.DOCUMENTS_METHOD_getElementsByName, "form_results_radio")) //Ändert sich nach neuer Arbeitsweise ja nicht mehr.
|
||||||
|
var firstTimeEqual bool
|
||||||
|
*/
|
||||||
|
|
||||||
|
for ; true; time.Sleep(barseTuration(LOOPTAKT)) {
|
||||||
|
s, l := closureGetIdWhichJustChanged(dombase, metrics.OneJumpPoints)
|
||||||
|
|
||||||
|
//log.Println("Websocket loop started")
|
||||||
|
|
||||||
|
//botz := dombase.Call("getElementById", "input_"+string(metrics.MT1dataverses))
|
||||||
|
//botz := dombase.Call("getElementById", "form_types") //.Get("innerHTML")
|
||||||
|
//dombase.Call("getElementById", "form_types")
|
||||||
|
//botz.Call("createAttribute", "checked")
|
||||||
|
//botz.Call("setAttribute", "checked", "true")
|
||||||
|
//fmt.Println(botz.Call("getAttribute", "checked").String())
|
||||||
|
|
||||||
|
// log.Println(botz.Index(0).Get("checked"))
|
||||||
|
// log.Println(botz.Index(1).Get("checked"))
|
||||||
|
// log.Println(botz.Index(2).IsUndefined())
|
||||||
|
|
||||||
|
//log.Println(dombase.Call(archiumwasm.DOCUMENTS_METHOD_getElementById, "input_"+string(metrics.ST1_total)).Get("value").String())
|
||||||
|
|
||||||
|
/*FIXME: Wichtig Nicht löschen
|
||||||
|
|
||||||
|
_, _, checked_type = archiumwasm.GetCheckedRadioOrCheckbox(dombase.Call(archiumwasm.DOCUMENTS_METHOD_getElementsByName, "form_types_radio"))
|
||||||
|
newcheckers = archiumwasm.GetStatusFromBulkOfIds(dombase, []string{
|
||||||
|
//"input_" + string(metrics.MT1dataverses),
|
||||||
|
//"input_" + string(metrics.MT2datasets),
|
||||||
|
//"input_" + string(metrics.MT3files),
|
||||||
|
//"input_" + string(metrics.MT4downloads),
|
||||||
|
//"input_" + string(metrics.MT5filedownloads),
|
||||||
|
//"input_" + string(metrics.MT6uniquefiledownloads),
|
||||||
|
//"input_" + string(metrics.RT1json),
|
||||||
|
//"input_" + string(metrics.RT2csv),
|
||||||
|
"input_" + string(metrics.ST1_total),
|
||||||
|
"input_" + string(metrics.ST2_tomonth),
|
||||||
|
"input_" + string(metrics.ST3_pastdays),
|
||||||
|
"input_" + string(metrics.ST4_monthly),
|
||||||
|
"input_" + string(metrics.ST5_tree),
|
||||||
|
})
|
||||||
|
*/
|
||||||
|
|
||||||
|
//dombase.Call("getElementById", metrics.IDRequestCriteriaPrefix+metrics.MT1dataverses).Call("setAttribute", "checked", "true")
|
||||||
|
//wasm.GetStatusFromBulkOfIds(dombase, metrics.FilterStacklist(metrics.OneJumpPoints, 0))
|
||||||
|
|
||||||
|
//testarea.Set("innerHTML", fmt.Sprintf("OneJumpPointSet: %v<br><br>", "TEST"))
|
||||||
|
|
||||||
|
//log.Println(oldcheckers)
|
||||||
|
//log.Println(newcheckers)
|
||||||
|
//log.Println(reflect.DeepEqual(oldcheckers, newcheckers))
|
||||||
|
|
||||||
|
/*TODO: Wichtig nicht löschen
|
||||||
|
if reflect.DeepEqual(oldcheckers, newcheckers) && oldchecked_type == checked_type {
|
||||||
|
if !firstTimeEqual {
|
||||||
|
firstTimeEqual = true
|
||||||
|
|
||||||
|
//_, _, checked_type = archiumwasm.GetCheckedRadioOrCheckbox(dombase.Call(archiumwasm.DOCUMENTS_METHOD_getElementsByName, "form_types_radio"))
|
||||||
|
//_, _, checked_result = archiumwasm.GetCheckedRadioOrCheckbox(dombase.Call(archiumwasm.DOCUMENTS_METHOD_getElementsByName, "form_results_radio"))
|
||||||
|
|
||||||
|
triggerResultprintation(metrics.MetricsType(checked_type), metrics.ReturnformatType(checked_result), newcheckers, bodyInject)
|
||||||
|
|
||||||
|
}
|
||||||
|
//windowbase.Set("dataaa", js.ValueOf([]interface{}{9, 2, 3, 8, 5, 6, 2, 1}))
|
||||||
|
// _ = windowbase.Get("fubagchart").Call("update", "")
|
||||||
|
} else {
|
||||||
|
oldcheckers = newcheckers
|
||||||
|
oldchecked_type = checked_type
|
||||||
|
firstTimeEqual = false
|
||||||
|
//scriptarea.Set("innerHTML", insebody0)
|
||||||
|
|
||||||
|
//dataaaJS := windowbase.Get("fubagchart")
|
||||||
|
//_ = dataaaJS.Call("update", "")
|
||||||
|
|
||||||
|
//_ =js.Global().Call("alert", 123)
|
||||||
|
//windowbase.Set("dataaa", js.ValueOf([]interface{}{1, 2, 3, 4, 5, 6, 7, 9}))
|
||||||
|
//_ = windowbase.Get("fubagchart").Call("update", "")
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
pseudoSubmitData.changeTicker(s, l)
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(oldPseudoSubmitData, pseudoSubmitData) {
|
||||||
|
pseudoSubmitData.triggerResultprintationGedöhnz(bodyInject)
|
||||||
|
}
|
||||||
|
oldPseudoSubmitData = pseudoSubmitData
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
267
goMetrix/app.wasm/output.go
Normal file
|
@ -0,0 +1,267 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Toolbox/goDataverseStrict/metrics"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"syscall/js"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.archium.org/archium_public/ebkTools/wasm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type lokalRequestType metrics.RequestComponentsType
|
||||||
|
|
||||||
|
func metricsSelectDispatcher(server_url, api_token string, rcs metrics.RequestComponentsType) (mdat []byte, mres string) {
|
||||||
|
var err error
|
||||||
|
var mtypeOrMdctypeCombi string
|
||||||
|
|
||||||
|
//var header map[string]string
|
||||||
|
header := make(map[string]string)
|
||||||
|
|
||||||
|
if len(api_token) > 0 {
|
||||||
|
header["X-Dataverse-key"] = api_token
|
||||||
|
}
|
||||||
|
if len(rcs.Level3ReturnformatType) > 0 {
|
||||||
|
header["Accept"] = string(rcs.Level3ReturnformatType)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch rcs.Level0MetricsType {
|
||||||
|
case string(metrics.MT7makeDataCount):
|
||||||
|
mtypeOrMdctypeCombi = rcs.Level0MetricsType + "/" + rcs.Level1MetricsDataCountType
|
||||||
|
default:
|
||||||
|
mtypeOrMdctypeCombi = rcs.Level0MetricsType
|
||||||
|
}
|
||||||
|
|
||||||
|
switch rcs.Level2SearchType {
|
||||||
|
case string(metrics.ST1total):
|
||||||
|
mdat, mres = metrics.MetricsTotal(PDPURL, "", metrics.ReturnformatType(rcs.Level3ReturnformatType), mtypeOrMdctypeCombi)
|
||||||
|
case string(metrics.ST2tomonth):
|
||||||
|
ts, _ := time.Parse("2006-01", rcs.Level21UserInput)
|
||||||
|
mdat, mres = metrics.MetricsToMonth(PDPURL, "", metrics.ReturnformatType(rcs.Level3ReturnformatType), mtypeOrMdctypeCombi, ts)
|
||||||
|
case string(metrics.ST3pastdays):
|
||||||
|
mdat, mres = metrics.MetricsPastDays(PDPURL, "", metrics.ReturnformatType(rcs.Level3ReturnformatType), mtypeOrMdctypeCombi, func() int {
|
||||||
|
r, _ := strconv.Atoi(rcs.Level21UserInput)
|
||||||
|
return r
|
||||||
|
}())
|
||||||
|
case string(metrics.ST4monthly):
|
||||||
|
if len(rcs.Level21UserInput) >= 17 && strings.ContainsAny(strings.ToLower(rcs.Level21UserInput), strings.ToLower(SPANSEPARATOR)) {
|
||||||
|
ts := func(s string) [2]time.Time {
|
||||||
|
defer recover()
|
||||||
|
rowvalues := make([]string, 2, 2)
|
||||||
|
rowvalues = strings.SplitN(s, strings.ToLower(SPANSEPARATOR), 2)
|
||||||
|
|
||||||
|
return [2]time.Time{func() (r time.Time) {
|
||||||
|
r, _ = time.Parse("2006-01", strings.TrimSpace(rowvalues[0]))
|
||||||
|
return
|
||||||
|
}(), func() (r time.Time) {
|
||||||
|
r, _ = time.Parse("2006-01", strings.TrimSpace(rowvalues[1]))
|
||||||
|
return
|
||||||
|
}()}
|
||||||
|
}(strings.ToLower(rcs.Level21UserInput))
|
||||||
|
|
||||||
|
mdat, mres = metrics.MetricsReallyMonthlySpan(PDPURL, "", metrics.ReturnformatType(rcs.Level3ReturnformatType), mtypeOrMdctypeCombi, ts)
|
||||||
|
} else {
|
||||||
|
mdat, mres = metrics.MetricsReallyMonthly(PDPURL, "", metrics.ReturnformatType(rcs.Level3ReturnformatType), mtypeOrMdctypeCombi)
|
||||||
|
}
|
||||||
|
case string(metrics.ST5tree):
|
||||||
|
ts, _ := time.Parse("2006-01", rcs.Level21UserInput)
|
||||||
|
mdat, mres = metrics.MetricsTree(PDPURL, "", metrics.ReturnformatType(rcs.Level3ReturnformatType), ts)
|
||||||
|
}
|
||||||
|
|
||||||
|
//log.Println("DEBUG:", mtypeOrMdctypeCombi)
|
||||||
|
|
||||||
|
//res := metrics.MonthlyJsonData{}
|
||||||
|
//json.Unmarshal([]byte(data), &res)
|
||||||
|
//log.Println("TIE BREAK", metrics.JsonStructSelector(mdat))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *lokalRequestType) triggerResultprintationGedöhnz(injectpoint js.Value) {
|
||||||
|
|
||||||
|
injectpoint.Set("innerHTML", fmt.Sprintf("%v<br>%v<br>%v %v<br>%v<br><br>", this.Level0MetricsType, this.Level1MetricsDataCountType, this.Level2SearchType, this.Level21UserInput, this.Level3ReturnformatType))
|
||||||
|
|
||||||
|
data, request := metricsSelectDispatcher(PDPURL, "", metrics.RequestComponentsType(*this))
|
||||||
|
|
||||||
|
//res := metrics.MonthlyJsonData{}
|
||||||
|
//log.Println(json.Unmarshal(data, &res))
|
||||||
|
//fmt.Println(res)
|
||||||
|
|
||||||
|
htmlstring := fmt.Sprintf("DIE BAQUE %s<br> %s<br><br>", request, data)
|
||||||
|
//log.Println("DIE BAQUE", htmlstring)
|
||||||
|
|
||||||
|
//res := metrics.MonthlyJsonData{}
|
||||||
|
//json.Unmarshal([]byte(data), &res)
|
||||||
|
//log.Println("TIE BREAK", metrics.LinkifyDoiDoi(data))
|
||||||
|
|
||||||
|
//https://planetary-data-portal.org/file.xhtml?persistentId=
|
||||||
|
|
||||||
|
//var htmlstring string
|
||||||
|
//windowbase := js.Global().Get("window")
|
||||||
|
|
||||||
|
injectpoint.Set("innerHTML", time.Now().String()+"<br>"+htmlstring)
|
||||||
|
//res := metrics.MonthlyJsonData{}
|
||||||
|
/*
|
||||||
|
|
||||||
|
json.Unmarshal(md, &res)
|
||||||
|
|
||||||
|
label := make([]interface{}, len(res.Data), len(res.Data))
|
||||||
|
bar0 := make([]any, len(res.Data), len(res.Data))
|
||||||
|
bar1 := make([]any, len(res.Data), len(res.Data))
|
||||||
|
for i := 0; i < len(res.Data); i++ {
|
||||||
|
label[i] = res.Data[i].Date
|
||||||
|
bar0[i] = res.Data[i].Counttotal
|
||||||
|
bar1[i] = res.Data[i].Countmonth
|
||||||
|
}
|
||||||
|
//log.Println(res.Data[0].)
|
||||||
|
|
||||||
|
_ = windowbase.Call("removeAllData", windowbase.Get("fubagchart"))
|
||||||
|
//_ = windowbase.Call("addAllData", windowbase.Get("fubagchart"), js.ValueOf([]interface{}{[]interface{}{"Aa", "Bb"}, []interface{}{9, 2}, []interface{}{2, 9}}))
|
||||||
|
|
||||||
|
_ = windowbase.Call("addAllData", windowbase.Get("fubagchart"), js.ValueOf([]interface{}{label, bar0, bar1}))
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
func triggerResultprintation(teip metrics.MetricsType, riesaltformat metrics.ReturnformatType, deineCheckers []archiumwasm.Checkerboard, injectpoint js.Value) {
|
||||||
|
|
||||||
|
var htmlstring string
|
||||||
|
var windowbase js.Value
|
||||||
|
|
||||||
|
windowbase = js.Global().Get("window")
|
||||||
|
|
||||||
|
for _, v := range deineCheckers {
|
||||||
|
if v.Disabled == false { //= the single one, that is enabled
|
||||||
|
switch v.Id {
|
||||||
|
case "input_" + string(metrics.ST1total):
|
||||||
|
md, me := metrics.MetricsTotal(PDPURL, "", riesaltformat, teip)
|
||||||
|
htmlstring = fmt.Sprintf("%s<br> %s<br><br>", me, md)
|
||||||
|
case "input_" + string(metrics.ST2tomonth):
|
||||||
|
ts, _ := time.Parse("2006-01", v.Value)
|
||||||
|
md, me := metrics.MetricsToMonth(PDPURL, "", riesaltformat, teip, ts)
|
||||||
|
htmlstring = fmt.Sprintf("%s<br> %s<br><br>", me, md)
|
||||||
|
case "input_" + string(metrics.ST3pastdays):
|
||||||
|
md, me := metrics.MetricsPastDays(PDPURL, "", riesaltformat, teip, func() int {
|
||||||
|
r, _ := strconv.Atoi(v.Value)
|
||||||
|
return r
|
||||||
|
}())
|
||||||
|
htmlstring = fmt.Sprintf("%s<br> %s<br><br>", me, md)
|
||||||
|
case "input_" + string(metrics.ST4monthly):
|
||||||
|
var me string
|
||||||
|
var md []byte
|
||||||
|
|
||||||
|
if len(v.Value) >= 17 && strings.ContainsAny(strings.ToLower(v.Value), strings.ToLower(SPANSEPARATOR)) {
|
||||||
|
ts := func(s string) [2]time.Time {
|
||||||
|
defer recover()
|
||||||
|
rowvalues := make([]string, 2, 2)
|
||||||
|
rowvalues = strings.SplitN(s, strings.ToLower(SPANSEPARATOR), 2)
|
||||||
|
|
||||||
|
return [2]time.Time{func() (r time.Time) {
|
||||||
|
r, _ = time.Parse("2006-01", strings.TrimSpace(rowvalues[0]))
|
||||||
|
return
|
||||||
|
}(), func() (r time.Time) {
|
||||||
|
r, _ = time.Parse("2006-01", strings.TrimSpace(rowvalues[1]))
|
||||||
|
return
|
||||||
|
}()}
|
||||||
|
}(strings.ToLower(v.Value))
|
||||||
|
|
||||||
|
md, me = metrics.MetricsReallyMonthlySpan(PDPURL, "", riesaltformat, teip, ts)
|
||||||
|
} else {
|
||||||
|
md, me = metrics.MetricsReallyMonthly(PDPURL, "", riesaltformat, teip)
|
||||||
|
}
|
||||||
|
|
||||||
|
res := metrics.MonthlyJsonData{}
|
||||||
|
json.Unmarshal(md, &res)
|
||||||
|
|
||||||
|
label := make([]interface{}, len(res.Data), len(res.Data))
|
||||||
|
bar0 := make([]any, len(res.Data), len(res.Data))
|
||||||
|
bar1 := make([]any, len(res.Data), len(res.Data))
|
||||||
|
for i := 0; i < len(res.Data); i++ {
|
||||||
|
label[i] = res.Data[i].Date
|
||||||
|
bar0[i] = res.Data[i].Counttotal
|
||||||
|
bar1[i] = res.Data[i].Countmonth
|
||||||
|
}
|
||||||
|
//log.Println(res.Data[0].)
|
||||||
|
|
||||||
|
_ = windowbase.Call("removeAllData", windowbase.Get("fubagchart"))
|
||||||
|
//_ = windowbase.Call("addAllData", windowbase.Get("fubagchart"), js.ValueOf([]interface{}{[]interface{}{"Aa", "Bb"}, []interface{}{9, 2}, []interface{}{2, 9}}))
|
||||||
|
|
||||||
|
_ = windowbase.Call("addAllData", windowbase.Get("fubagchart"), js.ValueOf([]interface{}{label, bar0, bar1}))
|
||||||
|
|
||||||
|
htmlstring = fmt.Sprintf("%s<br> %s<br><br>", me, md)
|
||||||
|
case "input_" + string(metrics.ST5tree):
|
||||||
|
ts, _ := time.Parse("2006-01", v.Value)
|
||||||
|
md, me := metrics.MetricsTree(PDPURL, "", riesaltformat, ts)
|
||||||
|
htmlstring = fmt.Sprintf("%s<br> %s<br><br>", me, md)
|
||||||
|
}
|
||||||
|
|
||||||
|
//md, me := metrics.MetricsTree("https://pdp.archium.org", "", metrics.RT1json, time.Time{})
|
||||||
|
injectpoint.Set("innerHTML", time.Now().String()+"<br>"+htmlstring)
|
||||||
|
//log.Printf("WASM: %s<br> %s<br><br>", me, md)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
func actualizeForms[dings metrics.MetricsType | metrics.MetricsDataCountType | metrics.SearchType | metrics.ReturnformatType | string](injectpoint js.Value, ojpsdata []metrics.OneJumpPointSet, startlevel int8, startindex dings) {
|
||||||
|
//disable all
|
||||||
|
//log.Println(startlevel)
|
||||||
|
//log.Println("HIER")
|
||||||
|
if startlevel >= 0 {
|
||||||
|
for i := int8(startlevel) + 1; i <= 3; i++ {
|
||||||
|
list, _ := metrics.FilterStacklist(ojpsdata, i)
|
||||||
|
for _, idmark := range list {
|
||||||
|
injectpoint.Call(wasm.DOCUMENTS_METHOD_getElementById, metrics.IDRequestCriteriaPrefix+idmark).Call(wasm.ELEMENTS_METHOD_setAttribute, "disabled", "")
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
for i := 0; i < len(ojpsdata); i++ {
|
||||||
|
log.Println(startlevel, ojpsdata[i], startindex)
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
//enable any
|
||||||
|
for i := 0; i < len(ojpsdata); i++ {
|
||||||
|
if ojpsdata[i].Active {
|
||||||
|
switch startlevel {
|
||||||
|
case 0:
|
||||||
|
injectpoint.Call(wasm.DOCUMENTS_METHOD_getElementById, metrics.IDRequestCriteriaPrefix+string(ojpsdata[i].Level0)).Call(wasm.ELEMENTS_METHOD_removeAttribute, "disabled", "")
|
||||||
|
fallthrough
|
||||||
|
case 1:
|
||||||
|
if startindex == dings(ojpsdata[i].Level0) {
|
||||||
|
injectpoint.Call(wasm.DOCUMENTS_METHOD_getElementById, metrics.IDRequestCriteriaPrefix+string(ojpsdata[i].Level1)).Call(wasm.ELEMENTS_METHOD_removeAttribute, "disabled", "")
|
||||||
|
}
|
||||||
|
fallthrough
|
||||||
|
case 2:
|
||||||
|
if startindex == dings(ojpsdata[i].Level0) || startindex == dings(ojpsdata[i].Level1) {
|
||||||
|
injectpoint.Call(wasm.DOCUMENTS_METHOD_getElementById, metrics.IDRequestCriteriaPrefix+string(ojpsdata[i].Level2)).Call(wasm.ELEMENTS_METHOD_removeAttribute, "disabled", "")
|
||||||
|
}
|
||||||
|
fallthrough
|
||||||
|
default: // ist in diesem Fall identisch mit case 3:
|
||||||
|
if startindex == dings(ojpsdata[i].Level0) || startindex == dings(ojpsdata[i].Level1) || startindex == dings(ojpsdata[i].Level2) {
|
||||||
|
injectpoint.Call(wasm.DOCUMENTS_METHOD_getElementById, metrics.IDRequestCriteriaPrefix+string(ojpsdata[i].Level3)).Call(wasm.ELEMENTS_METHOD_removeAttribute, "disabled", "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// for idindex, idmark := range list {
|
||||||
|
// if activity[idindex] {
|
||||||
|
// injectpoint.Call(wasm.DOCUMENTS_METHOD_getElementById, metrics.IDRequestCriteriaPrefix+idmark).Call(wasm.ELEMENTS_METHOD_removeAttribute, "disabled", "")
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
injectpoint.Call(wasm.DOCUMENTS_METHOD_getElementById, metrics.IDRequestCriteriaPrefix+string(metrics.MDCT2viewsTotalRegular)).Call(wasm.ELEMENTS_METHOD_setAttribute, "disabled", "")
|
||||||
|
injectpoint.Call(wasm.DOCUMENTS_METHOD_getElementById, metrics.IDRequestCriteriaPrefix+string(metrics.MDCT2viewsTotalRegular)).Call(wasm.ELEMENTS_METHOD_removeAttribute, "disabled", "")
|
||||||
|
*/
|
||||||
|
}
|
626
goMetrix/app.wasm/wasm_exec.js
Normal file
|
@ -0,0 +1,626 @@
|
||||||
|
// Copyright 2018 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
(() => {
|
||||||
|
// Map multiple JavaScript environments to a single common API,
|
||||||
|
// preferring web standards over Node.js API.
|
||||||
|
//
|
||||||
|
// Environments considered:
|
||||||
|
// - Browsers
|
||||||
|
// - Node.js
|
||||||
|
// - Electron
|
||||||
|
// - Parcel
|
||||||
|
// - Webpack
|
||||||
|
|
||||||
|
if (typeof global !== "undefined") {
|
||||||
|
// global already exists
|
||||||
|
} else if (typeof window !== "undefined") {
|
||||||
|
window.global = window;
|
||||||
|
} else if (typeof self !== "undefined") {
|
||||||
|
self.global = self;
|
||||||
|
} else {
|
||||||
|
throw new Error("cannot export Go (neither global, window nor self is defined)");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!global.require && typeof require !== "undefined") {
|
||||||
|
global.require = require;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!global.fs && global.require) {
|
||||||
|
const fs = require("fs");
|
||||||
|
if (typeof fs === "object" && fs !== null && Object.keys(fs).length !== 0) {
|
||||||
|
global.fs = fs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const enosys = () => {
|
||||||
|
const err = new Error("not implemented");
|
||||||
|
err.code = "ENOSYS";
|
||||||
|
return err;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!global.fs) {
|
||||||
|
let outputBuf = "";
|
||||||
|
global.fs = {
|
||||||
|
constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused
|
||||||
|
writeSync(fd, buf) {
|
||||||
|
outputBuf += decoder.decode(buf);
|
||||||
|
const nl = outputBuf.lastIndexOf("\n");
|
||||||
|
if (nl != -1) {
|
||||||
|
console.log(outputBuf.substr(0, nl));
|
||||||
|
outputBuf = outputBuf.substr(nl + 1);
|
||||||
|
}
|
||||||
|
return buf.length;
|
||||||
|
},
|
||||||
|
write(fd, buf, offset, length, position, callback) {
|
||||||
|
if (offset !== 0 || length !== buf.length || position !== null) {
|
||||||
|
callback(enosys());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const n = this.writeSync(fd, buf);
|
||||||
|
callback(null, n);
|
||||||
|
},
|
||||||
|
chmod(path, mode, callback) { callback(enosys()); },
|
||||||
|
chown(path, uid, gid, callback) { callback(enosys()); },
|
||||||
|
close(fd, callback) { callback(enosys()); },
|
||||||
|
fchmod(fd, mode, callback) { callback(enosys()); },
|
||||||
|
fchown(fd, uid, gid, callback) { callback(enosys()); },
|
||||||
|
fstat(fd, callback) { callback(enosys()); },
|
||||||
|
fsync(fd, callback) { callback(null); },
|
||||||
|
ftruncate(fd, length, callback) { callback(enosys()); },
|
||||||
|
lchown(path, uid, gid, callback) { callback(enosys()); },
|
||||||
|
link(path, link, callback) { callback(enosys()); },
|
||||||
|
lstat(path, callback) { callback(enosys()); },
|
||||||
|
mkdir(path, perm, callback) { callback(enosys()); },
|
||||||
|
open(path, flags, mode, callback) { callback(enosys()); },
|
||||||
|
read(fd, buffer, offset, length, position, callback) { callback(enosys()); },
|
||||||
|
readdir(path, callback) { callback(enosys()); },
|
||||||
|
readlink(path, callback) { callback(enosys()); },
|
||||||
|
rename(from, to, callback) { callback(enosys()); },
|
||||||
|
rmdir(path, callback) { callback(enosys()); },
|
||||||
|
stat(path, callback) { callback(enosys()); },
|
||||||
|
symlink(path, link, callback) { callback(enosys()); },
|
||||||
|
truncate(path, length, callback) { callback(enosys()); },
|
||||||
|
unlink(path, callback) { callback(enosys()); },
|
||||||
|
utimes(path, atime, mtime, callback) { callback(enosys()); },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!global.process) {
|
||||||
|
global.process = {
|
||||||
|
getuid() { return -1; },
|
||||||
|
getgid() { return -1; },
|
||||||
|
geteuid() { return -1; },
|
||||||
|
getegid() { return -1; },
|
||||||
|
getgroups() { throw enosys(); },
|
||||||
|
pid: -1,
|
||||||
|
ppid: -1,
|
||||||
|
umask() { throw enosys(); },
|
||||||
|
cwd() { throw enosys(); },
|
||||||
|
chdir() { throw enosys(); },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!global.crypto && global.require) {
|
||||||
|
const nodeCrypto = require("crypto");
|
||||||
|
global.crypto = {
|
||||||
|
getRandomValues(b) {
|
||||||
|
nodeCrypto.randomFillSync(b);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (!global.crypto) {
|
||||||
|
throw new Error("global.crypto is not available, polyfill required (getRandomValues only)");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!global.performance) {
|
||||||
|
global.performance = {
|
||||||
|
now() {
|
||||||
|
const [sec, nsec] = process.hrtime();
|
||||||
|
return sec * 1000 + nsec / 1000000;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!global.TextEncoder && global.require) {
|
||||||
|
global.TextEncoder = require("util").TextEncoder;
|
||||||
|
}
|
||||||
|
if (!global.TextEncoder) {
|
||||||
|
throw new Error("global.TextEncoder is not available, polyfill required");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!global.TextDecoder && global.require) {
|
||||||
|
global.TextDecoder = require("util").TextDecoder;
|
||||||
|
}
|
||||||
|
if (!global.TextDecoder) {
|
||||||
|
throw new Error("global.TextDecoder is not available, polyfill required");
|
||||||
|
}
|
||||||
|
|
||||||
|
// End of polyfills for common API.
|
||||||
|
|
||||||
|
const encoder = new TextEncoder("utf-8");
|
||||||
|
const decoder = new TextDecoder("utf-8");
|
||||||
|
|
||||||
|
global.Go = class {
|
||||||
|
constructor() {
|
||||||
|
this.argv = ["js"];
|
||||||
|
this.env = {};
|
||||||
|
this.exit = (code) => {
|
||||||
|
if (code !== 0) {
|
||||||
|
console.warn("exit code:", code);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this._exitPromise = new Promise((resolve) => {
|
||||||
|
this._resolveExitPromise = resolve;
|
||||||
|
});
|
||||||
|
this._pendingEvent = null;
|
||||||
|
this._scheduledTimeouts = new Map();
|
||||||
|
this._nextCallbackTimeoutID = 1;
|
||||||
|
|
||||||
|
const setInt64 = (addr, v) => {
|
||||||
|
this.mem.setUint32(addr + 0, v, true);
|
||||||
|
this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
const getInt64 = (addr) => {
|
||||||
|
const low = this.mem.getUint32(addr + 0, true);
|
||||||
|
const high = this.mem.getInt32(addr + 4, true);
|
||||||
|
return low + high * 4294967296;
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadValue = (addr) => {
|
||||||
|
const f = this.mem.getFloat64(addr, true);
|
||||||
|
if (f === 0) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
if (!isNaN(f)) {
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
const id = this.mem.getUint32(addr, true);
|
||||||
|
return this._values[id];
|
||||||
|
}
|
||||||
|
|
||||||
|
const storeValue = (addr, v) => {
|
||||||
|
const nanHead = 0x7FF80000;
|
||||||
|
|
||||||
|
if (typeof v === "number" && v !== 0) {
|
||||||
|
if (isNaN(v)) {
|
||||||
|
this.mem.setUint32(addr + 4, nanHead, true);
|
||||||
|
this.mem.setUint32(addr, 0, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.mem.setFloat64(addr, v, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (v === undefined) {
|
||||||
|
this.mem.setFloat64(addr, 0, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let id = this._ids.get(v);
|
||||||
|
if (id === undefined) {
|
||||||
|
id = this._idPool.pop();
|
||||||
|
if (id === undefined) {
|
||||||
|
id = this._values.length;
|
||||||
|
}
|
||||||
|
this._values[id] = v;
|
||||||
|
this._goRefCounts[id] = 0;
|
||||||
|
this._ids.set(v, id);
|
||||||
|
}
|
||||||
|
this._goRefCounts[id]++;
|
||||||
|
let typeFlag = 0;
|
||||||
|
switch (typeof v) {
|
||||||
|
case "object":
|
||||||
|
if (v !== null) {
|
||||||
|
typeFlag = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "string":
|
||||||
|
typeFlag = 2;
|
||||||
|
break;
|
||||||
|
case "symbol":
|
||||||
|
typeFlag = 3;
|
||||||
|
break;
|
||||||
|
case "function":
|
||||||
|
typeFlag = 4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
this.mem.setUint32(addr + 4, nanHead | typeFlag, true);
|
||||||
|
this.mem.setUint32(addr, id, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadSlice = (addr) => {
|
||||||
|
const array = getInt64(addr + 0);
|
||||||
|
const len = getInt64(addr + 8);
|
||||||
|
return new Uint8Array(this._inst.exports.mem.buffer, array, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadSliceOfValues = (addr) => {
|
||||||
|
const array = getInt64(addr + 0);
|
||||||
|
const len = getInt64(addr + 8);
|
||||||
|
const a = new Array(len);
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
a[i] = loadValue(array + i * 8);
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadString = (addr) => {
|
||||||
|
const saddr = getInt64(addr + 0);
|
||||||
|
const len = getInt64(addr + 8);
|
||||||
|
return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len));
|
||||||
|
}
|
||||||
|
|
||||||
|
const timeOrigin = Date.now() - performance.now();
|
||||||
|
this.importObject = {
|
||||||
|
go: {
|
||||||
|
// Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters)
|
||||||
|
// may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported
|
||||||
|
// function. A goroutine can switch to a new stack if the current stack is too small (see morestack function).
|
||||||
|
// This changes the SP, thus we have to update the SP used by the imported function.
|
||||||
|
|
||||||
|
// func wasmExit(code int32)
|
||||||
|
"runtime.wasmExit": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
const code = this.mem.getInt32(sp + 8, true);
|
||||||
|
this.exited = true;
|
||||||
|
delete this._inst;
|
||||||
|
delete this._values;
|
||||||
|
delete this._goRefCounts;
|
||||||
|
delete this._ids;
|
||||||
|
delete this._idPool;
|
||||||
|
this.exit(code);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func wasmWrite(fd uintptr, p unsafe.Pointer, n int32)
|
||||||
|
"runtime.wasmWrite": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
const fd = getInt64(sp + 8);
|
||||||
|
const p = getInt64(sp + 16);
|
||||||
|
const n = this.mem.getInt32(sp + 24, true);
|
||||||
|
fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));
|
||||||
|
},
|
||||||
|
|
||||||
|
// func resetMemoryDataView()
|
||||||
|
"runtime.resetMemoryDataView": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
this.mem = new DataView(this._inst.exports.mem.buffer);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func nanotime1() int64
|
||||||
|
"runtime.nanotime1": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func walltime1() (sec int64, nsec int32)
|
||||||
|
"runtime.walltime1": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
const msec = (new Date).getTime();
|
||||||
|
setInt64(sp + 8, msec / 1000);
|
||||||
|
this.mem.setInt32(sp + 16, (msec % 1000) * 1000000, true);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func scheduleTimeoutEvent(delay int64) int32
|
||||||
|
"runtime.scheduleTimeoutEvent": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
const id = this._nextCallbackTimeoutID;
|
||||||
|
this._nextCallbackTimeoutID++;
|
||||||
|
this._scheduledTimeouts.set(id, setTimeout(
|
||||||
|
() => {
|
||||||
|
this._resume();
|
||||||
|
while (this._scheduledTimeouts.has(id)) {
|
||||||
|
// for some reason Go failed to register the timeout event, log and try again
|
||||||
|
// (temporary workaround for https://github.com/golang/go/issues/28975)
|
||||||
|
console.warn("scheduleTimeoutEvent: missed timeout event");
|
||||||
|
this._resume();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getInt64(sp + 8) + 1, // setTimeout has been seen to fire up to 1 millisecond early
|
||||||
|
));
|
||||||
|
this.mem.setInt32(sp + 16, id, true);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func clearTimeoutEvent(id int32)
|
||||||
|
"runtime.clearTimeoutEvent": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
const id = this.mem.getInt32(sp + 8, true);
|
||||||
|
clearTimeout(this._scheduledTimeouts.get(id));
|
||||||
|
this._scheduledTimeouts.delete(id);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func getRandomData(r []byte)
|
||||||
|
"runtime.getRandomData": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
crypto.getRandomValues(loadSlice(sp + 8));
|
||||||
|
},
|
||||||
|
|
||||||
|
// func finalizeRef(v ref)
|
||||||
|
"syscall/js.finalizeRef": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
const id = this.mem.getUint32(sp + 8, true);
|
||||||
|
this._goRefCounts[id]--;
|
||||||
|
if (this._goRefCounts[id] === 0) {
|
||||||
|
const v = this._values[id];
|
||||||
|
this._values[id] = null;
|
||||||
|
this._ids.delete(v);
|
||||||
|
this._idPool.push(id);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// func stringVal(value string) ref
|
||||||
|
"syscall/js.stringVal": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
storeValue(sp + 24, loadString(sp + 8));
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueGet(v ref, p string) ref
|
||||||
|
"syscall/js.valueGet": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));
|
||||||
|
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||||
|
storeValue(sp + 32, result);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueSet(v ref, p string, x ref)
|
||||||
|
"syscall/js.valueSet": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32));
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueDelete(v ref, p string)
|
||||||
|
"syscall/js.valueDelete": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16));
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueIndex(v ref, i int) ref
|
||||||
|
"syscall/js.valueIndex": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16)));
|
||||||
|
},
|
||||||
|
|
||||||
|
// valueSetIndex(v ref, i int, x ref)
|
||||||
|
"syscall/js.valueSetIndex": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24));
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueCall(v ref, m string, args []ref) (ref, bool)
|
||||||
|
"syscall/js.valueCall": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
try {
|
||||||
|
const v = loadValue(sp + 8);
|
||||||
|
const m = Reflect.get(v, loadString(sp + 16));
|
||||||
|
const args = loadSliceOfValues(sp + 32);
|
||||||
|
const result = Reflect.apply(m, v, args);
|
||||||
|
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||||
|
storeValue(sp + 56, result);
|
||||||
|
this.mem.setUint8(sp + 64, 1);
|
||||||
|
} catch (err) {
|
||||||
|
storeValue(sp + 56, err);
|
||||||
|
this.mem.setUint8(sp + 64, 0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueInvoke(v ref, args []ref) (ref, bool)
|
||||||
|
"syscall/js.valueInvoke": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
try {
|
||||||
|
const v = loadValue(sp + 8);
|
||||||
|
const args = loadSliceOfValues(sp + 16);
|
||||||
|
const result = Reflect.apply(v, undefined, args);
|
||||||
|
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||||
|
storeValue(sp + 40, result);
|
||||||
|
this.mem.setUint8(sp + 48, 1);
|
||||||
|
} catch (err) {
|
||||||
|
storeValue(sp + 40, err);
|
||||||
|
this.mem.setUint8(sp + 48, 0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueNew(v ref, args []ref) (ref, bool)
|
||||||
|
"syscall/js.valueNew": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
try {
|
||||||
|
const v = loadValue(sp + 8);
|
||||||
|
const args = loadSliceOfValues(sp + 16);
|
||||||
|
const result = Reflect.construct(v, args);
|
||||||
|
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||||
|
storeValue(sp + 40, result);
|
||||||
|
this.mem.setUint8(sp + 48, 1);
|
||||||
|
} catch (err) {
|
||||||
|
storeValue(sp + 40, err);
|
||||||
|
this.mem.setUint8(sp + 48, 0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueLength(v ref) int
|
||||||
|
"syscall/js.valueLength": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
setInt64(sp + 16, parseInt(loadValue(sp + 8).length));
|
||||||
|
},
|
||||||
|
|
||||||
|
// valuePrepareString(v ref) (ref, int)
|
||||||
|
"syscall/js.valuePrepareString": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
const str = encoder.encode(String(loadValue(sp + 8)));
|
||||||
|
storeValue(sp + 16, str);
|
||||||
|
setInt64(sp + 24, str.length);
|
||||||
|
},
|
||||||
|
|
||||||
|
// valueLoadString(v ref, b []byte)
|
||||||
|
"syscall/js.valueLoadString": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
const str = loadValue(sp + 8);
|
||||||
|
loadSlice(sp + 16).set(str);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueInstanceOf(v ref, t ref) bool
|
||||||
|
"syscall/js.valueInstanceOf": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
this.mem.setUint8(sp + 24, (loadValue(sp + 8) instanceof loadValue(sp + 16)) ? 1 : 0);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func copyBytesToGo(dst []byte, src ref) (int, bool)
|
||||||
|
"syscall/js.copyBytesToGo": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
const dst = loadSlice(sp + 8);
|
||||||
|
const src = loadValue(sp + 32);
|
||||||
|
if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) {
|
||||||
|
this.mem.setUint8(sp + 48, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const toCopy = src.subarray(0, dst.length);
|
||||||
|
dst.set(toCopy);
|
||||||
|
setInt64(sp + 40, toCopy.length);
|
||||||
|
this.mem.setUint8(sp + 48, 1);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func copyBytesToJS(dst ref, src []byte) (int, bool)
|
||||||
|
"syscall/js.copyBytesToJS": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
|
const dst = loadValue(sp + 8);
|
||||||
|
const src = loadSlice(sp + 16);
|
||||||
|
if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) {
|
||||||
|
this.mem.setUint8(sp + 48, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const toCopy = src.subarray(0, dst.length);
|
||||||
|
dst.set(toCopy);
|
||||||
|
setInt64(sp + 40, toCopy.length);
|
||||||
|
this.mem.setUint8(sp + 48, 1);
|
||||||
|
},
|
||||||
|
|
||||||
|
"debug": (value) => {
|
||||||
|
console.log(value);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async run(instance) {
|
||||||
|
if (!(instance instanceof WebAssembly.Instance)) {
|
||||||
|
throw new Error("Go.run: WebAssembly.Instance expected");
|
||||||
|
}
|
||||||
|
this._inst = instance;
|
||||||
|
this.mem = new DataView(this._inst.exports.mem.buffer);
|
||||||
|
this._values = [ // JS values that Go currently has references to, indexed by reference id
|
||||||
|
NaN,
|
||||||
|
0,
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
global,
|
||||||
|
this,
|
||||||
|
];
|
||||||
|
this._goRefCounts = new Array(this._values.length).fill(Infinity); // number of references that Go has to a JS value, indexed by reference id
|
||||||
|
this._ids = new Map([ // mapping from JS values to reference ids
|
||||||
|
[0, 1],
|
||||||
|
[null, 2],
|
||||||
|
[true, 3],
|
||||||
|
[false, 4],
|
||||||
|
[global, 5],
|
||||||
|
[this, 6],
|
||||||
|
]);
|
||||||
|
this._idPool = []; // unused ids that have been garbage collected
|
||||||
|
this.exited = false; // whether the Go program has exited
|
||||||
|
|
||||||
|
// Pass command line arguments and environment variables to WebAssembly by writing them to the linear memory.
|
||||||
|
let offset = 4096;
|
||||||
|
|
||||||
|
const strPtr = (str) => {
|
||||||
|
const ptr = offset;
|
||||||
|
const bytes = encoder.encode(str + "\0");
|
||||||
|
new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes);
|
||||||
|
offset += bytes.length;
|
||||||
|
if (offset % 8 !== 0) {
|
||||||
|
offset += 8 - (offset % 8);
|
||||||
|
}
|
||||||
|
return ptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
const argc = this.argv.length;
|
||||||
|
|
||||||
|
const argvPtrs = [];
|
||||||
|
this.argv.forEach((arg) => {
|
||||||
|
argvPtrs.push(strPtr(arg));
|
||||||
|
});
|
||||||
|
argvPtrs.push(0);
|
||||||
|
|
||||||
|
const keys = Object.keys(this.env).sort();
|
||||||
|
keys.forEach((key) => {
|
||||||
|
argvPtrs.push(strPtr(`${key}=${this.env[key]}`));
|
||||||
|
});
|
||||||
|
argvPtrs.push(0);
|
||||||
|
|
||||||
|
const argv = offset;
|
||||||
|
argvPtrs.forEach((ptr) => {
|
||||||
|
this.mem.setUint32(offset, ptr, true);
|
||||||
|
this.mem.setUint32(offset + 4, 0, true);
|
||||||
|
offset += 8;
|
||||||
|
});
|
||||||
|
|
||||||
|
this._inst.exports.run(argc, argv);
|
||||||
|
if (this.exited) {
|
||||||
|
this._resolveExitPromise();
|
||||||
|
}
|
||||||
|
await this._exitPromise;
|
||||||
|
}
|
||||||
|
|
||||||
|
_resume() {
|
||||||
|
if (this.exited) {
|
||||||
|
throw new Error("Go program has already exited");
|
||||||
|
}
|
||||||
|
this._inst.exports.resume();
|
||||||
|
if (this.exited) {
|
||||||
|
this._resolveExitPromise();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_makeFuncWrapper(id) {
|
||||||
|
const go = this;
|
||||||
|
return function () {
|
||||||
|
const event = { id: id, this: this, args: arguments };
|
||||||
|
go._pendingEvent = event;
|
||||||
|
go._resume();
|
||||||
|
return event.result;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
typeof module !== "undefined" &&
|
||||||
|
global.require &&
|
||||||
|
global.require.main === module &&
|
||||||
|
global.process &&
|
||||||
|
global.process.versions &&
|
||||||
|
!global.process.versions.electron
|
||||||
|
) {
|
||||||
|
if (process.argv.length < 3) {
|
||||||
|
console.error("usage: go_js_wasm_exec [wasm binary] [arguments]");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const go = new Go();
|
||||||
|
go.argv = process.argv.slice(2);
|
||||||
|
go.env = Object.assign({ TMPDIR: require("os").tmpdir() }, process.env);
|
||||||
|
go.exit = process.exit;
|
||||||
|
WebAssembly.instantiate(fs.readFileSync(process.argv[2]), go.importObject).then((result) => {
|
||||||
|
process.on("exit", (code) => { // Node.js exits if no event handler is pending
|
||||||
|
if (code === 0 && !go.exited) {
|
||||||
|
// deadlock, make Go print error and stack traces
|
||||||
|
go._pendingEvent = { id: 0 };
|
||||||
|
go._resume();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return go.run(result.instance);
|
||||||
|
}).catch((err) => {
|
||||||
|
console.error(err);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})();
|
282
goMetrix/goMetrix.go
Normal file
|
@ -0,0 +1,282 @@
|
||||||
|
package goMetrix
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Toolbox/goDataverseStrict/metrics"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"sort"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
addr = "localhost:8008"
|
||||||
|
dir = ""
|
||||||
|
//PLATZHALTER = "Þłæŧ←ħæłŧ€¶"
|
||||||
|
)
|
||||||
|
|
||||||
|
func sortMyDingse[dings metrics.MetricsType | metrics.MetricsDataCountType | metrics.SearchType | metrics.ReturnformatType, bums metrics.InputLevel0 | metrics.InputLevel1 | metrics.InputLevel2 | metrics.InputLevel3 | bool](dstring map[dings]bums) (raus []dings) {
|
||||||
|
var klaus []string
|
||||||
|
|
||||||
|
for i, _ := range dstring {
|
||||||
|
klaus = append(klaus, string(i))
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Strings(klaus)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func Handler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
|
var a [4]string
|
||||||
|
|
||||||
|
for i := int8(0); i <= 3; i++ {
|
||||||
|
tmp, _ := metrics.FilterStacklist(metrics.OneJumpPoints, i)
|
||||||
|
for j, v := range tmp {
|
||||||
|
if i == 3 || (i < 3 && len(v) > 0) {
|
||||||
|
log.Println("Hallo", j, v, len(v))
|
||||||
|
}
|
||||||
|
|
||||||
|
a[i] += fmt.Sprintf("<span id=\"%s\" %s>", metrics.IDRequestHideDisplayPrefix+string(v), func() string {
|
||||||
|
if i < 3 && len(v) > 0 {
|
||||||
|
return ""
|
||||||
|
} else { // i == 3 Resolve-Format ist vorerst nicht verhandelbar, nur zu DEBUG-Zwecken sichtbar machen.
|
||||||
|
return "class=\"element-hide\""
|
||||||
|
}
|
||||||
|
}())
|
||||||
|
|
||||||
|
a[i] += fmt.Sprintf("<input type=\"radio\" id=\"%s\" name=\"form_types_radio\" value=\"%s\" %s/><label for=\"%s\"><b>%s</b></label>",
|
||||||
|
metrics.IDRequestCriteriaPrefix+string(v),
|
||||||
|
string(v),
|
||||||
|
func() string {
|
||||||
|
if j == 0 && v != "" {
|
||||||
|
return "checked"
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}(),
|
||||||
|
metrics.IDRequestCriteriaPrefix+string(v),
|
||||||
|
string(v))
|
||||||
|
if i == 2 {
|
||||||
|
switch v {
|
||||||
|
default: //Total ist default //case string(metrics.ST1_tota
|
||||||
|
//a[i] += ""
|
||||||
|
case string(metrics.ST2tomonth):
|
||||||
|
a[i] += `<label for="` + metrics.IDRequestTextPrefix + string(metrics.ST2tomonth) + `"> Bis <yyyy-mm> (inklusive)</label>
|
||||||
|
<input name="form_searches" type="text" size="10" id="` + metrics.IDRequestTextPrefix + string(metrics.ST2tomonth) + `" value="2022-03" onSelect="this.enabled;getElementById('` + metrics.IDRequestTextPrefix + string(metrics.ST1total) + `').checked=false" onchange="checkoneuncheckany(ids,'` + metrics.IDRequestTextPrefix + string(metrics.ST2tomonth) + `')" onmouseover="enableonedisableany(ids, '` + metrics.IDRequestTextPrefix + string(metrics.ST2tomonth) + `')">`
|
||||||
|
case string(metrics.ST3pastdays):
|
||||||
|
a[i] += `<label for="` + metrics.IDRequestTextPrefix + string(metrics.ST3pastdays) + `"> Die letzten Tage</label>
|
||||||
|
<input name="form_searches" type="text" size="10" id="` + metrics.IDRequestTextPrefix + string(metrics.ST3pastdays) + `" value="30" onchange="checkoneuncheckany(ids,'` + metrics.IDRequestTextPrefix + string(metrics.ST3pastdays) + `')" onmouseover="enableonedisableany(ids, '` + metrics.IDRequestTextPrefix + string(metrics.ST3pastdays) + `')">`
|
||||||
|
case string(metrics.ST4monthly):
|
||||||
|
a[i] += `<label for="` + metrics.IDRequestTextPrefix + string(metrics.ST4monthly) + `"> <yyyy-mm> bis <yyyy-mm></label>
|
||||||
|
<input name="form_searches" type="text" size="25" id="` + metrics.IDRequestTextPrefix + string(metrics.ST4monthly) + `" value="2020-11 bis 2021-08" onchange="checkoneuncheckany(ids,'` + metrics.IDRequestTextPrefix + string(metrics.ST4monthly) + `')" onmouseover="enableonedisableany(ids, '` + metrics.IDRequestTextPrefix + string(metrics.ST4monthly) + `')">
|
||||||
|
`
|
||||||
|
case string(metrics.ST5tree):
|
||||||
|
a[i] += `<label for="` + metrics.IDRequestTextPrefix + string(metrics.ST5tree) + `"></label>
|
||||||
|
<input name="form_searches" type="text" size="10" id="` + metrics.IDRequestTextPrefix + string(metrics.ST5tree) + `" value="2022-12" onchange="checkoneuncheckany(ids,'` + metrics.IDRequestTextPrefix + string(metrics.ST5tree) + `')" onmouseover="enableonedisableany(ids, '` + metrics.IDRequestTextPrefix + string(metrics.ST5tree) + `')">`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
a[i] += `<br></span>`
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
<label for="`+metrics.IDRequestTextPrefix+string(metrics.ST1_total)+`">Total</label>
|
||||||
|
<input name="form_searches" type="checkbox" id="`+metrics.IDRequestTextPrefix+string(metrics.ST1_total)+`" onchange="checkoneuncheckany(ids,'`+metrics.IDRequestTextPrefix+string(metrics.ST1_total)+`')" onmouseover="enableonedisableany(ids, '`+metrics.IDRequestTextPrefix+string(metrics.ST1_total)+`')" checked>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
//for i1, v1 := range metrics.OneJumpPointSet {
|
||||||
|
for _, i1 := range sortMyDingse(metrics.OldOneJumpPointSet) {
|
||||||
|
v1 := metrics.OldOneJumpPointSet[i1]
|
||||||
|
|
||||||
|
s1 += fmt.Sprintf("<input type=\"radio\" id=\"input_%s\" name=\"form_types_radio\" value=\"%s\"><label for=\"input_%s\">%s</label><br>", string(i1), string(i1), string(i1), string(i1))
|
||||||
|
if !done2 {
|
||||||
|
done2 = true
|
||||||
|
//for i2, v2 := range v1 {
|
||||||
|
for _, i2 := range sortMyDingse(v1) {
|
||||||
|
v2 := v1[i2]
|
||||||
|
|
||||||
|
s2 += fmt.Sprintf("<input type=\"radio\" id=\"input_%s\" name=\"form_types_radio\" value=\"%s\" disabled><label for=\"input_%s\">%s</label><br>", string(i2), string(i2), string(i2), string(i2))
|
||||||
|
if !done3 {
|
||||||
|
done3 = true
|
||||||
|
//for i3, v3 := range v2 {
|
||||||
|
for _, i3 := range sortMyDingse(v2) {
|
||||||
|
v3 := v2[i3]
|
||||||
|
|
||||||
|
s3 += fmt.Sprintf("<input type=\"radio\" id=\"input_%s\" name=\"form_types_radio\" value=\"%s\" disabled><label for=\"input_%s\">%s</label><br>", string(i3), string(i3), string(i3), string(i3))
|
||||||
|
if !done4 {
|
||||||
|
done4 = true
|
||||||
|
//for i4, _ := range v3 {
|
||||||
|
for _, i4 := range sortMyDingse(v3) {
|
||||||
|
//v4 := v3[i4]
|
||||||
|
|
||||||
|
s4 += fmt.Sprintf("<input type=\"radio\" id=\"input_%s\" name=\"form_types_radio\" value=\"%s\" disabled><label for=\"input_%s\">%s</label><br>", string(i4), string(i4), string(i4), string(i4))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
fmt.Fprintf(w, `<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>goMetrix</title>
|
||||||
|
<link rel="stylesheet" href="/css/metrics.css">
|
||||||
|
<script src="https://golang.org/misc/wasm/wasm_exec.js"></script>
|
||||||
|
<script>
|
||||||
|
if (!WebAssembly.instantiateStreaming) {
|
||||||
|
// polyfill
|
||||||
|
WebAssembly.instantiateStreaming = async (resp, importObject) => {
|
||||||
|
const source = await (await resp).arrayBuffer();
|
||||||
|
return await WebAssembly.instantiate(source, importObject);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const go = new Go();
|
||||||
|
let mod, inst;
|
||||||
|
WebAssembly.instantiateStreaming(fetch("/wasm/app.wasm"), go.importObject)
|
||||||
|
.then((result) => {
|
||||||
|
go.run(result.instance);
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(err);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
const ids = new Array(
|
||||||
|
"`+metrics.IDRequestTextPrefix+string(metrics.ST1total)+`",
|
||||||
|
"`+metrics.IDRequestTextPrefix+string(metrics.ST2tomonth)+`",
|
||||||
|
"`+metrics.IDRequestTextPrefix+string(metrics.ST3pastdays)+`",
|
||||||
|
"`+metrics.IDRequestTextPrefix+string(metrics.ST4monthly)+`",
|
||||||
|
"`+metrics.IDRequestTextPrefix+string(metrics.ST5tree)+`"
|
||||||
|
);
|
||||||
|
|
||||||
|
function pseudoSubmit2(){
|
||||||
|
alert("läuft");
|
||||||
|
}
|
||||||
|
|
||||||
|
function enableonedisableany(ids, id) {
|
||||||
|
for (let i = 0; i < ids.length; i++){
|
||||||
|
//alert(ids[i]);
|
||||||
|
//document.getElementById(ids[i]).checked = false;
|
||||||
|
document.getElementById(ids[i]).disabled = true;
|
||||||
|
}
|
||||||
|
document.getElementById(id).disabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkoneuncheckany(ids,id){
|
||||||
|
for (let i = 0; i < ids.length; i++){
|
||||||
|
document.getElementById(ids[i]).checked = false;
|
||||||
|
}
|
||||||
|
document.getElementById(id).checked = true;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="formarea">
|
||||||
|
<p>
|
||||||
|
<table><tr>
|
||||||
|
<td valign="top" width="20%"><form id="form_metrictype">`+a[0]+`</form></td>
|
||||||
|
<td valign="top" width="20%"><form id="form_metricsdatacount">`+a[1]+`</form></td>
|
||||||
|
<td valign="top" width="50%"><form id="form_searchtype">`+a[2]+`</form></td>
|
||||||
|
<td valign="top" width="5%"><form id="form_returnformat">`+a[3]+`</form></td>
|
||||||
|
<td valign="top" width="5%"><input type="submit" onclick="pseudoSubmit2();" id="`+metrics.IDFormSubmit+`" value="Ok" /></td>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<!--<p>
|
||||||
|
<form id="form_results">
|
||||||
|
<input type="hidden" name="form_results_radio" value="`+string(metrics.RT1json)+`" checked>
|
||||||
|
<input type="radio" id="`+metrics.IDRequestTextPrefix+string(metrics.RT1json)+`" name="form_results_radio" value="`+string(metrics.RT1json)+`" checked>
|
||||||
|
<label for="`+metrics.IDRequestTextPrefix+string(metrics.RT1json)+`">`+string(metrics.RT1json)+`</label><br>
|
||||||
|
<input type="radio" id="`+metrics.IDRequestTextPrefix+string(metrics.RT2csv)+`" name="form_results_radio" value="`+string(metrics.RT2csv)+`">
|
||||||
|
<label for="`+metrics.IDRequestTextPrefix+string(metrics.RT2csv)+`">`+string(metrics.RT2csv)+`</label><br>
|
||||||
|
</form>
|
||||||
|
</p>-->
|
||||||
|
<!--<p>
|
||||||
|
<form id="form_searches">
|
||||||
|
<label for="`+metrics.IDRequestTextPrefix+string(metrics.ST1total)+`">Total</label>
|
||||||
|
<input name="form_searches" type="checkbox" id="`+metrics.IDRequestTextPrefix+string(metrics.ST1total)+`" onchange="checkoneuncheckany(ids,'`+metrics.IDRequestTextPrefix+string(metrics.ST1total)+`')" onmouseover="enableonedisableany(ids, '`+metrics.IDRequestTextPrefix+string(metrics.ST1total)+`')" checked>
|
||||||
|
<label for="`+metrics.IDRequestTextPrefix+string(metrics.ST2tomonth)+`">Bis <yyyy-mm> (inklusive)</label>
|
||||||
|
<input name="form_searches" type="text" size="10" id="`+metrics.IDRequestTextPrefix+string(metrics.ST2tomonth)+`" value="2022-03" onSelect="this.enabled;getElementById('`+metrics.IDRequestTextPrefix+string(metrics.ST1total)+`').checked=false" onchange="checkoneuncheckany(ids,'`+metrics.IDRequestTextPrefix+string(metrics.ST2tomonth)+`')" onmouseover="enableonedisableany(ids, '`+metrics.IDRequestTextPrefix+string(metrics.ST2tomonth)+`')">
|
||||||
|
<label for="`+metrics.IDRequestTextPrefix+string(metrics.ST3pastdays)+`">Die letzten Tage</label>
|
||||||
|
<input name="form_searches" type="text" size="10" id="`+metrics.IDRequestTextPrefix+string(metrics.ST3pastdays)+`" value="30" onchange="checkoneuncheckany(ids,'`+metrics.IDRequestTextPrefix+string(metrics.ST3pastdays)+`')" onmouseover="enableonedisableany(ids, '`+metrics.IDRequestTextPrefix+string(metrics.ST3pastdays)+`')">
|
||||||
|
<label for="`+metrics.IDRequestTextPrefix+string(metrics.ST4monthly)+`"><yyyy-mm> bis <yyyy-mm></label>
|
||||||
|
<input name="form_searches" type="text" size="25" id="`+metrics.IDRequestTextPrefix+string(metrics.ST4monthly)+`" value="2020-11 bis 2021-08" onchange="checkoneuncheckany(ids,'`+metrics.IDRequestTextPrefix+string(metrics.ST4monthly)+`')" onmouseover="enableonedisableany(ids, '`+metrics.IDRequestTextPrefix+string(metrics.ST4monthly)+`')">
|
||||||
|
<label for="`+metrics.IDRequestTextPrefix+string(metrics.ST5tree)+`">Tree</label>
|
||||||
|
<input name="form_searches" type="text" size="10" id="`+metrics.IDRequestTextPrefix+string(metrics.ST5tree)+`" value="2022-12" onchange="checkoneuncheckany(ids,'`+metrics.IDRequestTextPrefix+string(metrics.ST5tree)+`')" onmouseover="enableonedisableany(ids, '`+metrics.IDRequestTextPrefix+string(metrics.ST5tree)+`')">
|
||||||
|
</form>
|
||||||
|
</p>-->
|
||||||
|
</div>
|
||||||
|
<!--<div id="testarea"></div>-->
|
||||||
|
<div id="injectarea">🐧<!--🐧--></div>
|
||||||
|
<div id="chartarea"></div>
|
||||||
|
<script id="scriptarea"></script>
|
||||||
|
</body>
|
||||||
|
</html>`)
|
||||||
|
|
||||||
|
/*
|
||||||
|
DEBUG:
|
||||||
|
|
||||||
|
fmt.Fprintf(w, "😱<br>")
|
||||||
|
|
||||||
|
md, me := metrics.MetricsTotal("http://localhost:8080", "f6933c5d-8e97-4e7a-b21a-c57447cca421", metrics.RT1json, metrics.MT1dataverses)
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
md, me = metrics.MetricsTotal("http://localhost:8080", "f6933c5d-8e97-4e7a-b21a-c57447cca421", metrics.RT2csv, metrics.MT4downloads)
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
md, me = metrics.MetricsTotal("http://localhost:8080", "f6933c5d-8e97-4e7a-b21a-c57447cca421", metrics.RT1json, metrics.MT2datasets)
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
md, me = metrics.MetricsTotal("http://localhost:8080", "f6933c5d-8e97-4e7a-b21a-c57447cca421", metrics.RT2csv, metrics.MT3files)
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
ts, _ := time.Parse("2006-01", "2021-06")
|
||||||
|
md, me = metrics.MetricsToMonth("http://localhost:8080", "", metrics.RT2csv, metrics.MT2datasets, ts)
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
md, me = metrics.MetricsToMonth("http://localhost:8080", "", metrics.RT2csv, metrics.MT4downloads, ts)
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
md, me = metrics.MetricsPastDays("http://localhost:8080", "", metrics.RT2csv, metrics.MT2datasets, 30)
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
md, me = metrics.MetricsMonthly("http://localhost:8080", "", metrics.RT2csv, metrics.MT4downloads)
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
md, me = metrics.MetricsMonthly("http://localhost:8080", "", metrics.RT1json, metrics.MT4downloads)
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
md, me = metrics.MetricsReallyMonthly("http://localhost:8080", "", metrics.RT1json, metrics.MT4downloads)
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
//fmt.Println(metrics.ListUsers("http://localhost:8080", "f6933c5d-8e97-4e7a-b21a-c57447cca421", true))
|
||||||
|
|
||||||
|
ts, _ = time.Parse("2006-01", "2020-12")
|
||||||
|
md, me = metrics.MetricsTree("http://localhost:8080", "", metrics.RT1json, ts)
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
md, me = metrics.MetricsTree("http://localhost:8080", "", metrics.RT1json, time.Time{})
|
||||||
|
fmt.Fprintf(w, "%s<br> %s<br><br>", me, md)
|
||||||
|
|
||||||
|
//fmt.Fprintf(w, "%v", time.Now().Format("2006-02"))
|
||||||
|
*/
|
||||||
|
}
|
58
postgres/postgres.go
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/**
|
||||||
|
= Creative Commons Lizenzvertrag =
|
||||||
|
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
|
||||||
|
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.
|
||||||
|
|
||||||
|
= Creative Commons License =
|
||||||
|
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
|
||||||
|
Individual permissions beyond the scope of this license may be available at https://archium.org.
|
||||||
|
**/
|
||||||
|
|
||||||
|
package postgres
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
// "log"
|
||||||
|
// "strings"
|
||||||
|
|
||||||
|
def "Toolbox/defaults"
|
||||||
|
sql "database/sql"
|
||||||
|
)
|
||||||
|
|
||||||
|
var expdb *sql.DB
|
||||||
|
|
||||||
|
// #############################################################################
|
||||||
|
// get - sql connection
|
||||||
|
// #############################################################################
|
||||||
|
func GetConnection() (*sql.DB, error) {
|
||||||
|
psqlInfo := fmt.Sprintf(def.DEF_coninfo, def.DEF_dbhost, def.DEF_dbport, def.DEF_dbuser, def.DEF_dbpassword, def.DEF_dbname)
|
||||||
|
conn, err := sql.Open("postgres", psqlInfo)
|
||||||
|
//log.Println("GetConnection:", psqlInfo, conn, err)
|
||||||
|
if err != nil {
|
||||||
|
def.LogError("GetConnection()", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return conn, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// #############################################################################
|
||||||
|
// close - sql connection
|
||||||
|
// #############################################################################
|
||||||
|
func CloseConnection(_conn *sql.DB) error {
|
||||||
|
var err error = nil
|
||||||
|
if _conn != nil {
|
||||||
|
err = _conn.Close()
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// #############################################################################
|
||||||
|
// ping - sql connection
|
||||||
|
// #############################################################################
|
||||||
|
func PingConnection(_conn *sql.DB) error {
|
||||||
|
var err error = nil
|
||||||
|
if _conn != nil {
|
||||||
|
err = _conn.Ping()
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
BIN
static/.module_archium_events.txt.kate-swp
Normal file
BIN
static/Toolbox
Executable file
99
static/css/cloud.css
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
/* cloud style */
|
||||||
|
|
||||||
|
html,body {
|
||||||
|
height:100%;
|
||||||
|
overflow:hidden;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
tr.dialog-line td{
|
||||||
|
color:#dddddd;
|
||||||
|
font-size:110%;
|
||||||
|
font-weight:500;
|
||||||
|
height:5px;
|
||||||
|
padding: 0px 0px 5px 10px;
|
||||||
|
margin: 5px 0px 10px 0px;
|
||||||
|
border-bottom: 1px solid #dddddd
|
||||||
|
}
|
||||||
|
.extitem-caption{
|
||||||
|
font-weight:bold;
|
||||||
|
padding-left:5px;
|
||||||
|
}
|
||||||
|
.extitem-unit,
|
||||||
|
.extitem-value{
|
||||||
|
margin:0;
|
||||||
|
padding: 2px 5px 2px 2px;
|
||||||
|
font-size:18px;
|
||||||
|
}
|
||||||
|
.extitem-value{
|
||||||
|
text-align:right;
|
||||||
|
width:1%;
|
||||||
|
font-size:18px;
|
||||||
|
}
|
||||||
|
.extitem-combo{
|
||||||
|
text-align:left;
|
||||||
|
/* width: 100%; */
|
||||||
|
width: 80px;
|
||||||
|
font-size:18px;
|
||||||
|
}
|
||||||
|
.extitem-number{
|
||||||
|
text-align:right;
|
||||||
|
width: 100%;
|
||||||
|
font-size:18px;
|
||||||
|
}
|
||||||
|
.extitem-text{
|
||||||
|
text-align:left;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.mod-tb-btn{
|
||||||
|
min-width: 40px;
|
||||||
|
max-width: 4vW;
|
||||||
|
}
|
||||||
|
.mod-tb-btn-hide{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.mod-tb-btn-show{
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.mod-tb-btn-disable{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.mod-tb-btn-enable{
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tree-file,
|
||||||
|
.tree-folder,
|
||||||
|
.tree-folder-open{
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-package{
|
||||||
|
color: #404080;
|
||||||
|
}
|
||||||
|
.icon-dataverse{
|
||||||
|
color: #c55b28;
|
||||||
|
}
|
||||||
|
.icon-dataset{
|
||||||
|
color: #337ab7;
|
||||||
|
}
|
||||||
|
.icon-astro,
|
||||||
|
.icon-audio,
|
||||||
|
.icon-code,
|
||||||
|
.icon-document,
|
||||||
|
.icon-image,
|
||||||
|
.icon-file,
|
||||||
|
.icon-network,
|
||||||
|
.icon-other,
|
||||||
|
.icon-tabular,
|
||||||
|
.icon-unlock,
|
||||||
|
.icon-video
|
||||||
|
{
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
.icon-package
|
||||||
|
{
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* end pps-cloud style */
|
347
static/css/codemirror.css
Normal file
|
@ -0,0 +1,347 @@
|
||||||
|
/* BASICS */
|
||||||
|
|
||||||
|
.CodeMirror {
|
||||||
|
/* Set height, width, borders, and global font properties here */
|
||||||
|
font-family: monospace;
|
||||||
|
height: 300px;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* PADDING */
|
||||||
|
|
||||||
|
.CodeMirror-lines {
|
||||||
|
padding: 4px 0; /* Vertical padding around content */
|
||||||
|
}
|
||||||
|
.CodeMirror pre {
|
||||||
|
padding: 0 4px; /* Horizontal padding of content */
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
||||||
|
background-color: white; /* The little square between H and V scrollbars */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* GUTTER */
|
||||||
|
|
||||||
|
.CodeMirror-gutters {
|
||||||
|
border-right: 1px solid #ddd;
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.CodeMirror-linenumbers {}
|
||||||
|
.CodeMirror-linenumber {
|
||||||
|
padding: 0 3px 0 5px;
|
||||||
|
min-width: 20px;
|
||||||
|
text-align: right;
|
||||||
|
color: #999;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-guttermarker { color: black; }
|
||||||
|
.CodeMirror-guttermarker-subtle { color: #999; }
|
||||||
|
|
||||||
|
/* CURSOR */
|
||||||
|
|
||||||
|
.CodeMirror-cursor {
|
||||||
|
border-left: 1px solid black;
|
||||||
|
border-right: none;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
/* Shown when moving in bi-directional text */
|
||||||
|
.CodeMirror div.CodeMirror-secondarycursor {
|
||||||
|
border-left: 1px solid silver;
|
||||||
|
}
|
||||||
|
.cm-fat-cursor .CodeMirror-cursor {
|
||||||
|
width: auto;
|
||||||
|
border: 0 !important;
|
||||||
|
background: #7e7;
|
||||||
|
}
|
||||||
|
.cm-fat-cursor div.CodeMirror-cursors {
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-animate-fat-cursor {
|
||||||
|
width: auto;
|
||||||
|
border: 0;
|
||||||
|
-webkit-animation: blink 1.06s steps(1) infinite;
|
||||||
|
-moz-animation: blink 1.06s steps(1) infinite;
|
||||||
|
animation: blink 1.06s steps(1) infinite;
|
||||||
|
background-color: #7e7;
|
||||||
|
}
|
||||||
|
@-moz-keyframes blink {
|
||||||
|
0% {}
|
||||||
|
50% { background-color: transparent; }
|
||||||
|
100% {}
|
||||||
|
}
|
||||||
|
@-webkit-keyframes blink {
|
||||||
|
0% {}
|
||||||
|
50% { background-color: transparent; }
|
||||||
|
100% {}
|
||||||
|
}
|
||||||
|
@keyframes blink {
|
||||||
|
0% {}
|
||||||
|
50% { background-color: transparent; }
|
||||||
|
100% {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Can style cursor different in overwrite (non-insert) mode */
|
||||||
|
.CodeMirror-overwrite .CodeMirror-cursor {}
|
||||||
|
|
||||||
|
.cm-tab { display: inline-block; text-decoration: inherit; }
|
||||||
|
|
||||||
|
.CodeMirror-rulers {
|
||||||
|
position: absolute;
|
||||||
|
left: 0; right: 0; top: -50px; bottom: -20px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.CodeMirror-ruler {
|
||||||
|
border-left: 1px solid #ccc;
|
||||||
|
top: 0; bottom: 0;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DEFAULT THEME */
|
||||||
|
|
||||||
|
.cm-s-default .cm-header {color: blue;}
|
||||||
|
.cm-s-default .cm-quote {color: #090;}
|
||||||
|
.cm-negative {color: #d44;}
|
||||||
|
.cm-positive {color: #292;}
|
||||||
|
.cm-header, .cm-strong {font-weight: bold;}
|
||||||
|
.cm-em {font-style: italic;}
|
||||||
|
.cm-link {text-decoration: underline;}
|
||||||
|
.cm-strikethrough {text-decoration: line-through;}
|
||||||
|
|
||||||
|
.cm-s-default .cm-keyword {color: #708;}
|
||||||
|
.cm-s-default .cm-atom {color: #219;}
|
||||||
|
.cm-s-default .cm-number {color: #164;}
|
||||||
|
.cm-s-default .cm-def {color: #00f;}
|
||||||
|
.cm-s-default .cm-variable,
|
||||||
|
.cm-s-default .cm-punctuation,
|
||||||
|
.cm-s-default .cm-property,
|
||||||
|
.cm-s-default .cm-operator {}
|
||||||
|
.cm-s-default .cm-variable-2 {color: #05a;}
|
||||||
|
.cm-s-default .cm-variable-3 {color: #085;}
|
||||||
|
.cm-s-default .cm-comment {color: #a50;}
|
||||||
|
.cm-s-default .cm-string {color: #a11;}
|
||||||
|
.cm-s-default .cm-string-2 {color: #f50;}
|
||||||
|
.cm-s-default .cm-meta {color: #555;}
|
||||||
|
.cm-s-default .cm-qualifier {color: #555;}
|
||||||
|
.cm-s-default .cm-builtin {color: #30a;}
|
||||||
|
.cm-s-default .cm-bracket {color: #997;}
|
||||||
|
.cm-s-default .cm-tag {color: #170;}
|
||||||
|
.cm-s-default .cm-attribute {color: #00c;}
|
||||||
|
.cm-s-default .cm-hr {color: #999;}
|
||||||
|
.cm-s-default .cm-link {color: #00c;}
|
||||||
|
|
||||||
|
.cm-s-default .cm-error {color: #f00;}
|
||||||
|
.cm-invalidchar {color: #f00;}
|
||||||
|
|
||||||
|
.CodeMirror-composing { border-bottom: 2px solid; }
|
||||||
|
|
||||||
|
/* Default styles for common addons */
|
||||||
|
|
||||||
|
div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
|
||||||
|
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
|
||||||
|
.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
|
||||||
|
.CodeMirror-activeline-background {background: #e8f2ff;}
|
||||||
|
|
||||||
|
/* STOP */
|
||||||
|
|
||||||
|
/* The rest of this file contains styles related to the mechanics of
|
||||||
|
the editor. You probably shouldn't touch them. */
|
||||||
|
|
||||||
|
.CodeMirror {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-scroll {
|
||||||
|
overflow: scroll !important; /* Things will break if this is overridden */
|
||||||
|
/* 30px is the magic margin used to hide the element's real scrollbars */
|
||||||
|
/* See overflow: hidden in .CodeMirror */
|
||||||
|
margin-bottom: -30px; margin-right: -30px;
|
||||||
|
padding-bottom: 30px;
|
||||||
|
height: 100%;
|
||||||
|
outline: none; /* Prevent dragging from highlighting the element */
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.CodeMirror-sizer {
|
||||||
|
position: relative;
|
||||||
|
border-right: 30px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The fake, visible scrollbars. Used to force redraw during scrolling
|
||||||
|
before actual scrolling happens, thus preventing shaking and
|
||||||
|
flickering artifacts. */
|
||||||
|
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 6;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.CodeMirror-vscrollbar {
|
||||||
|
right: 0; top: 0;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
.CodeMirror-hscrollbar {
|
||||||
|
bottom: 0; left: 0;
|
||||||
|
overflow-y: hidden;
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
.CodeMirror-scrollbar-filler {
|
||||||
|
right: 0; bottom: 0;
|
||||||
|
}
|
||||||
|
.CodeMirror-gutter-filler {
|
||||||
|
left: 0; bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-gutters {
|
||||||
|
position: absolute; left: 0; top: 0;
|
||||||
|
min-height: 100%;
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
.CodeMirror-gutter {
|
||||||
|
white-space: normal;
|
||||||
|
height: 100%;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
margin-bottom: -30px;
|
||||||
|
/* Hack to make IE7 behave */
|
||||||
|
*zoom:1;
|
||||||
|
*display:inline;
|
||||||
|
}
|
||||||
|
.CodeMirror-gutter-wrapper {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 4;
|
||||||
|
background: none !important;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
.CodeMirror-gutter-background {
|
||||||
|
position: absolute;
|
||||||
|
top: 0; bottom: 0;
|
||||||
|
z-index: 4;
|
||||||
|
}
|
||||||
|
.CodeMirror-gutter-elt {
|
||||||
|
position: absolute;
|
||||||
|
cursor: default;
|
||||||
|
z-index: 4;
|
||||||
|
}
|
||||||
|
.CodeMirror-gutter-wrapper {
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-lines {
|
||||||
|
cursor: text;
|
||||||
|
min-height: 1px; /* prevents collapsing before first draw */
|
||||||
|
}
|
||||||
|
.CodeMirror pre {
|
||||||
|
/* Reset some styles that the rest of the page might have set */
|
||||||
|
-moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
|
||||||
|
border-width: 0;
|
||||||
|
background: transparent;
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
margin: 0;
|
||||||
|
white-space: pre;
|
||||||
|
word-wrap: normal;
|
||||||
|
line-height: inherit;
|
||||||
|
color: inherit;
|
||||||
|
z-index: 2;
|
||||||
|
position: relative;
|
||||||
|
overflow: visible;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
-webkit-font-variant-ligatures: none;
|
||||||
|
font-variant-ligatures: none;
|
||||||
|
}
|
||||||
|
.CodeMirror-wrap pre {
|
||||||
|
word-wrap: break-word;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
word-break: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-linebackground {
|
||||||
|
position: absolute;
|
||||||
|
left: 0; right: 0; top: 0; bottom: 0;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-linewidget {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-widget {}
|
||||||
|
|
||||||
|
.CodeMirror-code {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Force content-box sizing for the elements where we expect it */
|
||||||
|
.CodeMirror-scroll,
|
||||||
|
.CodeMirror-sizer,
|
||||||
|
.CodeMirror-gutter,
|
||||||
|
.CodeMirror-gutters,
|
||||||
|
.CodeMirror-linenumber {
|
||||||
|
-moz-box-sizing: content-box;
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-measure {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-cursor {
|
||||||
|
position: absolute;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.CodeMirror-measure pre { position: static; }
|
||||||
|
|
||||||
|
div.CodeMirror-cursors {
|
||||||
|
visibility: hidden;
|
||||||
|
position: relative;
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
div.CodeMirror-dragcursors {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-focused div.CodeMirror-cursors {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-selected { background: #d9d9d9; }
|
||||||
|
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
|
||||||
|
.CodeMirror-crosshair { cursor: crosshair; }
|
||||||
|
.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
|
||||||
|
.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
|
||||||
|
|
||||||
|
.cm-searching {
|
||||||
|
background: #ffa;
|
||||||
|
background: rgba(255, 255, 0, .4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* IE7 hack to prevent it from returning funny offsetTops on the spans */
|
||||||
|
.CodeMirror span { *vertical-align: text-bottom; }
|
||||||
|
|
||||||
|
/* Used to force a border model for a node */
|
||||||
|
.cm-force-border { padding-right: .1px; }
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
/* Hide the cursor when printing */
|
||||||
|
.CodeMirror div.CodeMirror-cursors {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* See issue #2901 */
|
||||||
|
.cm-tab-wrap-hack:after { content: ''; }
|
||||||
|
|
||||||
|
/* Help users use markselection to safely style text background */
|
||||||
|
span.CodeMirror-selectedtext { background: none; }
|
68
static/css/fontcustom.css
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
Icon Font: fontcustom
|
||||||
|
*/
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "fontcustom";
|
||||||
|
src: url("/css/resources/fontcustom/fontcustom_47254e4da4fa5ad5e2bb7c085027ce43.eot");
|
||||||
|
src: url("/css/fontcustom/fontcustom_47254e4da4fa5ad5e2bb7c085027ce43.eot?#iefix") format("embedded-opentype"),
|
||||||
|
url("/css/resources/fontcustom/fontcustom_47254e4da4fa5ad5e2bb7c085027ce43.woff2") format("woff2"),
|
||||||
|
url("/css/resources/fontcustom/fontcustom_47254e4da4fa5ad5e2bb7c085027ce43.woff") format("woff"),
|
||||||
|
url("/css/resources/fontcustom/fontcustom_47254e4da4fa5ad5e2bb7c085027ce43.ttf") format("truetype"),
|
||||||
|
url("/css/resources/fontcustom/fontcustom_47254e4da4fa5ad5e2bb7c085027ce43.svg#fontcustom") format("svg");
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||||
|
@font-face {
|
||||||
|
font-family: "fontcustom";
|
||||||
|
src: url("/css/resources/fontcustom/fontcustom_47254e4da4fa5ad5e2bb7c085027ce43.svg#fontcustom") format("svg");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-icon]::before { content: attr(data-icon); }
|
||||||
|
|
||||||
|
[data-icon]::before,
|
||||||
|
.icon-astro::before,
|
||||||
|
.icon-audio::before,
|
||||||
|
.icon-code::before,
|
||||||
|
.icon-dataset::before,
|
||||||
|
.icon-dataverse::before,
|
||||||
|
.icon-document::before,
|
||||||
|
.icon-file::before,
|
||||||
|
.icon-geodata::before,
|
||||||
|
.icon-image::before,
|
||||||
|
.icon-network::before,
|
||||||
|
.icon-other::before,
|
||||||
|
.icon-package::before,
|
||||||
|
.icon-tabular::before,
|
||||||
|
.icon-unlock::before,
|
||||||
|
.icon-video::before {
|
||||||
|
display: inline-block;
|
||||||
|
font-family: "fontcustom";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-variant: normal;
|
||||||
|
line-height: 1;
|
||||||
|
text-decoration: inherit;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
text-transform: none;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-astro::before { content: "\f104"; }
|
||||||
|
.icon-audio::before { content: "\f105"; }
|
||||||
|
.icon-code::before { content: "\f10b"; }
|
||||||
|
.icon-dataset::before { content: "\f102"; }
|
||||||
|
.icon-dataverse::before { content: "\f100"; }
|
||||||
|
.icon-document::before { content: "\f106"; }
|
||||||
|
.icon-file::before { content: "\f10a"; }
|
||||||
|
.icon-geodata::before { content: "\f107"; }
|
||||||
|
.icon-image::before { content: "\f103"; }
|
||||||
|
.icon-network::before { content: "\f10c"; }
|
||||||
|
.icon-other::before { content: "\f10d"; }
|
||||||
|
.icon-package::before { content: "\f10f"; }
|
||||||
|
.icon-tabular::before { content: "\f108"; }
|
||||||
|
.icon-unlock::before { content: "\f10e"; }
|
||||||
|
.icon-video::before { content: "\f109"; }
|
3
static/css/metrics.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.element-hide{
|
||||||
|
display: none;
|
||||||
|
}
|
269
static/css/module.css
Normal file
|
@ -0,0 +1,269 @@
|
||||||
|
body{
|
||||||
|
/* text-size-adjust:auto; */
|
||||||
|
-moz-text-size-adjust:auto;
|
||||||
|
-webkit-text-size-adjust:auto;
|
||||||
|
-ms-text-size-adjust:auto;
|
||||||
|
}
|
||||||
|
label.textbox-label-before{
|
||||||
|
vertical-align:middle;
|
||||||
|
font-size:90%;
|
||||||
|
}
|
||||||
|
tr.wrongcontent{
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
td.wrongcontent{
|
||||||
|
visibility:hidden;
|
||||||
|
}
|
||||||
|
a.tooltip {
|
||||||
|
position:relative;
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
a.tooltip:after {
|
||||||
|
content:attr(data-tooltip);
|
||||||
|
position:absolute;
|
||||||
|
bottom:130%;
|
||||||
|
left:20%;
|
||||||
|
background:#ffcb66;
|
||||||
|
padding:5px 15px;
|
||||||
|
color:black;
|
||||||
|
-webkit-border-radius:10px;
|
||||||
|
-moz-border-radius :10px;
|
||||||
|
border-radius :10px;
|
||||||
|
white-space:nowrap;
|
||||||
|
opacity:0;
|
||||||
|
/* At time of this creation, only Fx4 doing pseduo transitions */
|
||||||
|
-webkit-transition:all 0.4s ease;
|
||||||
|
-moz-transition :all 0.4s ease;
|
||||||
|
}
|
||||||
|
a.tooltip:before {
|
||||||
|
content:"";
|
||||||
|
position:absolute;
|
||||||
|
width:0;
|
||||||
|
height:0;
|
||||||
|
border-top:20px solid #ffcb66;
|
||||||
|
border-left:20px solid transparent;
|
||||||
|
border-right:20px solid transparent;
|
||||||
|
/* At time of this creation, only Fx4 doing pseduo transitions */
|
||||||
|
-webkit-transition:all 0.4s ease;
|
||||||
|
-moz-transition :all 0.4s ease;
|
||||||
|
opacity:0;
|
||||||
|
left:30%;
|
||||||
|
bottom:90%;
|
||||||
|
}
|
||||||
|
a.tooltip:hover:after {
|
||||||
|
bottom:100%;
|
||||||
|
}
|
||||||
|
a.tooltip:hover:before {
|
||||||
|
bottom:70%;
|
||||||
|
}
|
||||||
|
a.tooltip:hover:after, a:hover:before {
|
||||||
|
opacity:1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.svgdelivery1, .svgstore1, .svgmale1, .svgfemale1{
|
||||||
|
fill:white;
|
||||||
|
}.svgdelivery1blur, .svgstore1blur, .svgmale1blur, .svgfemale1blur{
|
||||||
|
fill:black;
|
||||||
|
}
|
||||||
|
.svgsplit{
|
||||||
|
fill:#4040FF; !important;
|
||||||
|
stroke-width:0; !important
|
||||||
|
}
|
||||||
|
|
||||||
|
.footerstatus {
|
||||||
|
float:left;
|
||||||
|
/* font-family:Helvetica,Tahoma,Arial,sans-serif; */
|
||||||
|
font-size:130%;
|
||||||
|
margin-left:10px;
|
||||||
|
}
|
||||||
|
.footerstatuserror {
|
||||||
|
color:#FFFFFF;
|
||||||
|
background-color:#FF0000;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border:none;
|
||||||
|
/* float:left; */
|
||||||
|
height:auto;
|
||||||
|
width:auto;
|
||||||
|
}
|
||||||
|
.toollabel{
|
||||||
|
display:block;
|
||||||
|
margin:auto;
|
||||||
|
margin-left:-5px;
|
||||||
|
margin-top:-6px;
|
||||||
|
margin-bottom:-7px;
|
||||||
|
font-size:1.3vh;
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
table caption{
|
||||||
|
background:rgba(222, 128, 51, 0.75);
|
||||||
|
color:#444;
|
||||||
|
border:1px solid #d4a375;
|
||||||
|
padding:0.25%;
|
||||||
|
padding-left:0.5%;
|
||||||
|
text-align:left;
|
||||||
|
font-size:0.8em;
|
||||||
|
}
|
||||||
|
#tablebox {
|
||||||
|
width:100%;
|
||||||
|
height:100%;
|
||||||
|
margin:0px;
|
||||||
|
clear:both;
|
||||||
|
border-collapse:collapse;
|
||||||
|
border-color:black;
|
||||||
|
table-layout:fixed;
|
||||||
|
/* font-family:Arial,Helvetica,Tahoma,sans-serif; */
|
||||||
|
text-shadow:1px 1px 10px #000, 1px 1px 5px #000;
|
||||||
|
white-space:nowrap;
|
||||||
|
border:1px solid transparent;
|
||||||
|
}
|
||||||
|
#table_shelflist {
|
||||||
|
/* width:100%; */
|
||||||
|
margin-top:5px;
|
||||||
|
table-layout:fixed;
|
||||||
|
white-space:nowrap;
|
||||||
|
border-collapse:collapse;
|
||||||
|
}
|
||||||
|
#table_boxlist {
|
||||||
|
/* width:100%; */
|
||||||
|
table-layout:fixed;
|
||||||
|
/* font-family:Arial,Helvetica,Tahoma,sans-serif; */
|
||||||
|
white-space:nowrap;
|
||||||
|
border-collapse:collapse;
|
||||||
|
}
|
||||||
|
#table_place{
|
||||||
|
table-layout:fixed;
|
||||||
|
width:100%;
|
||||||
|
height:100%;
|
||||||
|
margin:auto;
|
||||||
|
border:0px solid rgb(160,160,160);
|
||||||
|
white-space:nowrap;
|
||||||
|
/* font-family:Arial,Helvetica,Tahoma,sans-serif; */
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.noborder{
|
||||||
|
font-size:110%;
|
||||||
|
}
|
||||||
|
td.noborder{
|
||||||
|
padding:0px;
|
||||||
|
}
|
||||||
|
td.shelfplace{
|
||||||
|
width:10vw;
|
||||||
|
height:9vh;
|
||||||
|
margin:1px;
|
||||||
|
background:transparent;
|
||||||
|
vertical-align:middle;
|
||||||
|
}
|
||||||
|
td.droppable{
|
||||||
|
/* border:1px solid #FFF; */
|
||||||
|
}
|
||||||
|
td.noshelfplace{
|
||||||
|
width:10vw;
|
||||||
|
height:9vh;
|
||||||
|
margin:1px;
|
||||||
|
/* border:4px solid transparent; */
|
||||||
|
}
|
||||||
|
div.contentpanel{
|
||||||
|
width:auto;
|
||||||
|
padding:0.3%;
|
||||||
|
margin:0.5%;
|
||||||
|
border:1px solid #d4a375;
|
||||||
|
}
|
||||||
|
div.contentscroll{
|
||||||
|
width:auto;
|
||||||
|
overflow:auto;
|
||||||
|
}
|
||||||
|
div.contentcaption{
|
||||||
|
width:auto;
|
||||||
|
height:20px;
|
||||||
|
background:rgba(222, 128, 51, 0.75);
|
||||||
|
color:#444;
|
||||||
|
border:1px solid #d4a375;
|
||||||
|
padding:0.25%;
|
||||||
|
font-size:1em;
|
||||||
|
overflow:auto;
|
||||||
|
}
|
||||||
|
div.content{
|
||||||
|
border:0px;
|
||||||
|
font-size:0.6em;
|
||||||
|
}
|
||||||
|
div.dragbox{
|
||||||
|
/* width:96%; */
|
||||||
|
height:100%;
|
||||||
|
border:4px solid transparent;
|
||||||
|
margin:auto;
|
||||||
|
}
|
||||||
|
/* Nur Firefox */
|
||||||
|
@-moz-document url-prefix() {
|
||||||
|
div.dragbox{
|
||||||
|
width:95%;
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
div.nodragbox{
|
||||||
|
width:96%;
|
||||||
|
height:100%;
|
||||||
|
/* border:2px solid #F0F0F0 */
|
||||||
|
border:2px solid inherit;
|
||||||
|
/* margin:auto; */
|
||||||
|
}
|
||||||
|
tspan.place{
|
||||||
|
text-align:left;
|
||||||
|
font-size:1.5vh;
|
||||||
|
position:relative;
|
||||||
|
left:5%;
|
||||||
|
width:25%;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
tspan.placeshelf{
|
||||||
|
width:95%;
|
||||||
|
text-align:center;
|
||||||
|
opacity:0.5;
|
||||||
|
}
|
||||||
|
tspan.number{
|
||||||
|
width:100%;
|
||||||
|
text-align:center;
|
||||||
|
font-size:2.5vh;
|
||||||
|
position:relative;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
tspan.weight{
|
||||||
|
text-align:right;
|
||||||
|
font-size:1.5vh;
|
||||||
|
position:relative;
|
||||||
|
left:8%;
|
||||||
|
width:90%;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
div.sl{
|
||||||
|
border:4px solid #f00;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.legend{
|
||||||
|
width:100%;
|
||||||
|
height:auto;
|
||||||
|
border-spacing:0px;
|
||||||
|
}
|
||||||
|
td.legend{
|
||||||
|
width:10vw;
|
||||||
|
font-size:1.5vh;
|
||||||
|
text-align:center;
|
||||||
|
text-shadow:1px 1px 2px #444;
|
||||||
|
}
|
||||||
|
/************************************************/
|
||||||
|
|
||||||
|
.dontmove{
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
.deliverybox{
|
||||||
|
/* display:inline-block; */
|
||||||
|
text-decoration:none;
|
||||||
|
border:4px solid transparent;
|
||||||
|
}
|
||||||
|
.warehousebox{
|
||||||
|
/* display:inline-block; */
|
||||||
|
text-decoration:none;
|
||||||
|
/* padding-right:1em; */
|
||||||
|
}
|
||||||
|
|
139
static/css/prism.css
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+sql */
|
||||||
|
/**
|
||||||
|
* prism.js default theme for JavaScript, CSS and HTML
|
||||||
|
* Based on dabblet (http://dabblet.com)
|
||||||
|
* @author Lea Verou
|
||||||
|
*/
|
||||||
|
|
||||||
|
code[class*="language-"],
|
||||||
|
pre[class*="language-"] {
|
||||||
|
color: black;
|
||||||
|
background: none;
|
||||||
|
text-shadow: 0 1px white;
|
||||||
|
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||||
|
text-align: left;
|
||||||
|
white-space: pre;
|
||||||
|
word-spacing: normal;
|
||||||
|
word-break: normal;
|
||||||
|
word-wrap: normal;
|
||||||
|
line-height: 1.5;
|
||||||
|
|
||||||
|
-moz-tab-size: 4;
|
||||||
|
-o-tab-size: 4;
|
||||||
|
tab-size: 4;
|
||||||
|
|
||||||
|
-webkit-hyphens: none;
|
||||||
|
-moz-hyphens: none;
|
||||||
|
-ms-hyphens: none;
|
||||||
|
hyphens: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
|
||||||
|
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
|
||||||
|
text-shadow: none;
|
||||||
|
background: #b3d4fc;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
|
||||||
|
code[class*="language-"]::selection, code[class*="language-"] ::selection {
|
||||||
|
text-shadow: none;
|
||||||
|
background: #b3d4fc;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
code[class*="language-"],
|
||||||
|
pre[class*="language-"] {
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Code blocks */
|
||||||
|
pre[class*="language-"] {
|
||||||
|
padding: 1em;
|
||||||
|
margin: .5em 0;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(pre) > code[class*="language-"],
|
||||||
|
pre[class*="language-"] {
|
||||||
|
background: #f5f2f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inline code */
|
||||||
|
:not(pre) > code[class*="language-"] {
|
||||||
|
padding: .1em;
|
||||||
|
border-radius: .3em;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.comment,
|
||||||
|
.token.prolog,
|
||||||
|
.token.doctype,
|
||||||
|
.token.cdata {
|
||||||
|
color: slategray;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.punctuation {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.namespace {
|
||||||
|
opacity: .7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.property,
|
||||||
|
.token.tag,
|
||||||
|
.token.boolean,
|
||||||
|
.token.number,
|
||||||
|
.token.constant,
|
||||||
|
.token.symbol,
|
||||||
|
.token.deleted {
|
||||||
|
color: #905;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.selector,
|
||||||
|
.token.attr-name,
|
||||||
|
.token.string,
|
||||||
|
.token.char,
|
||||||
|
.token.builtin,
|
||||||
|
.token.inserted {
|
||||||
|
color: #690;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.operator,
|
||||||
|
.token.entity,
|
||||||
|
.token.url,
|
||||||
|
.language-css .token.string,
|
||||||
|
.style .token.string {
|
||||||
|
color: #a67f59;
|
||||||
|
background: hsla(0, 0%, 100%, .5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.atrule,
|
||||||
|
.token.attr-value,
|
||||||
|
.token.keyword {
|
||||||
|
color: #07a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.function {
|
||||||
|
color: #DD4A68;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.regex,
|
||||||
|
.token.important,
|
||||||
|
.token.variable {
|
||||||
|
color: #e90;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.important,
|
||||||
|
.token.bold {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.token.italic {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.entity {
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
|
235
static/css/reports/StandardOrderHTML.css
Normal file
|
@ -0,0 +1,235 @@
|
||||||
|
html {BORDER-STYLE:_none; HEIGHT:100%;}
|
||||||
|
body {MARGIN: 5px; FONT-COLOR: black; FONT-FAMILY: Arial; HEIGHT:100%;}
|
||||||
|
|
||||||
|
@media print{
|
||||||
|
body {ZOOM: 87%; BACKGROUND-COLOR: #FFFFFF;}
|
||||||
|
#pagebreak {PAGE-BREAK-AFTER: always;}
|
||||||
|
|
||||||
|
/* popup-menu */
|
||||||
|
#menu {DISPLAY: none; FILTER:blendTrans(Duration=0.3);}
|
||||||
|
input {DISPLAY: none;}
|
||||||
|
#menucaption {DISPLAY: none;}
|
||||||
|
#menuitems {DISPLAY: none;}
|
||||||
|
}
|
||||||
|
@media screen{
|
||||||
|
body {ZOOM: 120%; BACKGROUND-COLOR: #ECE9D8;}
|
||||||
|
#pagebreak {DISPLAY: none;}
|
||||||
|
|
||||||
|
/* popup-menu */
|
||||||
|
#menu,
|
||||||
|
.submenu {BACKGROUND-COLOR: buttonface; POSITION: absolute; WIDTH: 180px; BORDER-STYLE: outset; BORDER-WIDTH: 2px; Z-INDEX: 200; VISIBILITY: hidden; FILTER:blendTrans(Duration=0.3); FONT-SIZE: 70%;}
|
||||||
|
input {CURSOR: hand;}
|
||||||
|
#menucaption {BACKGROUND-COLOR: blue; COLOR: white; TEXT-ALIGN:center;}
|
||||||
|
#menuitems {PADDING: 5px;}
|
||||||
|
#menuitemcaption {WIDTH: 79%;}
|
||||||
|
#menuitemsub {WIDTH: 6%; POSITION: relative; TOP:-3px; CURSOR: hand;}
|
||||||
|
}
|
||||||
|
|
||||||
|
#reporthead {WIDTH: 800px; HEIGHT: 35px; BACKGROUND-COLOR: white; BORDER-BOTTOM: 1px solid black; FONT-SIZE: 100%;}
|
||||||
|
|
||||||
|
#recipehead, #orderhead {WIDTH: 800px; BACKGROUND-COLOR: silver; FONT-SIZE: 70%;}
|
||||||
|
|
||||||
|
#headcaption {FONT-WEIGHT: bolder; TEXT-DECORATION: underline; CLEAR:both;}
|
||||||
|
|
||||||
|
#headline,
|
||||||
|
#recipeheadline,
|
||||||
|
#orderheadline,
|
||||||
|
#runprogsummaryline {LINE-HEIGHT: 90%;}
|
||||||
|
|
||||||
|
#headitem,
|
||||||
|
#recipeheaditem {FLOAT: left; WIDTH: 33%;}
|
||||||
|
#headitemcaption,
|
||||||
|
#recipeheaditemcaption {FLOAT: left; WIDTH: 40%;}
|
||||||
|
#headitemvalue,
|
||||||
|
#recipeheaditemvalue {FLOAT: left; WIDTH: 40%;}
|
||||||
|
#headitemunit,
|
||||||
|
#recipeheaditemunit {WIDTH: 20%;}
|
||||||
|
|
||||||
|
#steps {WIDTH: 800px; BORDER-TOP: 1px solid black; BORDER-BOTTOM: 1px solid black; BACKGROUND-COLOR:white;}
|
||||||
|
#step {CLEAR: both; BORDER-TOP: 1px solid silver; OVERFLOW:hidden;}
|
||||||
|
|
||||||
|
#stepno {FLOAT: left; WIDTH: 4%; PADDING-RIGHT: 2px; CLEAR: both; TEXT-ALIGN: right; FONT-WEIGHT:bold;}
|
||||||
|
|
||||||
|
#stepsubno {FLOAT: left; WIDTH: 2%; FONT-SIZE: 60%}
|
||||||
|
.stepjump {COLOR:yellow; BACKGROUND-COLOR:blue;}
|
||||||
|
|
||||||
|
#time {FLOAT: left; WIDTH: 10%; LETTER-SPACING: 0px; WORD-SPACING: 0px; FONT: 53%; OVERFLOW: visible;}
|
||||||
|
|
||||||
|
#limitsoll,
|
||||||
|
#timesoll {FLOAT: left; WIDTH: 49%; OVERFLOW: hidden; COLOR:blue;}
|
||||||
|
#limitist,
|
||||||
|
#timeist {FLOAT: left; WIDTH: 49%; OVERFLOW: hidden; COLOR:green; FONT: italic;}
|
||||||
|
|
||||||
|
#werte {WIDTH: 100%; FONT: 70%; OVERFLOW: hidden; LINE-HEIGHT:90%}
|
||||||
|
|
||||||
|
|
||||||
|
#value_caption {FLOAT: left; WIDTH: 30%; FONT-WEIGHT: _bolder; }
|
||||||
|
#value_recipe,
|
||||||
|
#value_default,
|
||||||
|
#value_setvalue,
|
||||||
|
#value_current {FLOAT: left; WIDTH: 10%; TEXT-ALIGN:right; MARGIN-RIGHT:1%;}
|
||||||
|
|
||||||
|
#unit_recipe,
|
||||||
|
#unit_default,
|
||||||
|
#unit_setvalue,
|
||||||
|
#unit_current {FLOAT: left; WIDTH: 5%; OVERFLOW:hidden;}
|
||||||
|
|
||||||
|
#value_recipe,
|
||||||
|
#unit_recipe {COLOR:blue;}
|
||||||
|
#value_default,
|
||||||
|
#unit_default {COLOR:gray;}
|
||||||
|
#value_setvalue,
|
||||||
|
#unit_setvalue {}
|
||||||
|
#value_current,
|
||||||
|
#unit_current {COLOR:green; FONT: italic;}
|
||||||
|
|
||||||
|
#steptype016w1i,#steptype017w1i,#steptype018w1i,
|
||||||
|
#steptype019w1i,#steptype020w1i,#steptype021w1i,#steptype022w1i,#steptype023w1i,
|
||||||
|
#steptype024w1i,#steptype027w1i,#steptype029w1i,#steptype030w1i,#steptype031w1i,
|
||||||
|
#steptype032w1i,#steptype033w1i,#steptype050w1i,#steptype051w1i,
|
||||||
|
#steptype016w2i,#steptype017w2i,#steptype018w2i,
|
||||||
|
#steptype019w2i,#steptype020w2i,#steptype021w2i,#steptype022w2i,#steptype023w2i,
|
||||||
|
#steptype024w2i,#steptype027w2i,#steptype029w2i,#steptype030w2i,#steptype031w2i,
|
||||||
|
#steptype032w2i,#steptype033w2i,#steptype050w2i,#steptype051w2i,
|
||||||
|
#steptype016w3i,#steptype017w3i,#steptype018w3i,
|
||||||
|
#steptype019w3i,#steptype020w3i,#steptype021w3i,#steptype022w3i,#steptype023w3i,
|
||||||
|
#steptype024w3i,#steptype027w3i,#steptype029w3i,#steptype030w3i,#steptype031w3i,
|
||||||
|
#steptype032w3i,#steptype033w3i,#steptype050w3i,#steptype051w3i,
|
||||||
|
#steptype016w4i,#steptype017w4i,#steptype018w4i,
|
||||||
|
#steptype019w4i,#steptype020w4i,#steptype021w4i,#steptype022w4i,#steptype023w4i,
|
||||||
|
#steptype024w4i,#steptype027w4i,#steptype029w4i,#steptype030w4i,#steptype031w4i,
|
||||||
|
#steptype032w4i,#steptype033w4i,#steptype050w4i,#steptype051w4i,
|
||||||
|
#steptype016w5i,#steptype017w5i,#steptype018w5i,
|
||||||
|
#steptype019w5i,#steptype020w5i,#steptype021w5i,#steptype022w5i,#steptype023w5i,
|
||||||
|
#steptype024w5i,#steptype027w5i,#steptype029w5i,#steptype030w5i,#steptype031w5i,
|
||||||
|
#steptype032w5i,#steptype033w5i,#steptype050w5i,#steptype051w5i,
|
||||||
|
#steptype016w6i,#steptype017w6i,#steptype018w6i,
|
||||||
|
#steptype019w6i,#steptype020w6i,#steptype021w6i,#steptype022w6i,#steptype023w6i,
|
||||||
|
#steptype024w6i,#steptype027w6i,#steptype029w6i,#steptype030w6i,#steptype031w6i,
|
||||||
|
#steptype032w6i,#steptype033w6i,#steptype050w6i,#steptype051w6i,
|
||||||
|
{DISPLAY:none; FLOAT: left; WIDTH: 21%; TEXT-ALIGN: right; FONT: italic 70%; COLOR: blue; OVERFLOW: hidden}
|
||||||
|
|
||||||
|
#steptype016w1s,#steptype017w1s,#steptype018w1s,
|
||||||
|
#steptype019w1s,#steptype020w1s,#steptype021w1s,#steptype022w1s,#steptype023w1s,
|
||||||
|
#steptype024w1s,#steptype027w1s,#steptype029w1s,#steptype030w1s,#steptype031w1s,
|
||||||
|
#steptype032w1s,#steptype033w1s,#steptype050w1s,#steptype051w1s,
|
||||||
|
#steptype016w2s,#steptype017w2s,#steptype018w2s,
|
||||||
|
#steptype019w2s,#steptype020w2s,#steptype021w2s,#steptype022w2s,#steptype023w2s,
|
||||||
|
#steptype024w2s,#steptype027w2s,#steptype029w2s,#steptype030w2s,#steptype031w2s,
|
||||||
|
#steptype032w2s,#steptype033w2s,#steptype050w2s,#steptype051w2s,
|
||||||
|
#steptype016w3s,#steptype017w3s,#steptype018w3s,
|
||||||
|
#steptype019w3s,#steptype020w3s,#steptype021w3s,#steptype022w3s,#steptype023w3s,
|
||||||
|
#steptype024w3s,#steptype027w3s,#steptype029w3s,#steptype030w3s,#steptype031w3s,
|
||||||
|
#steptype032w3s,#steptype033w3s,#steptype050w3s,#steptype051w3s,
|
||||||
|
#steptype016w4s,#steptype017w4s,#steptype018w4s,
|
||||||
|
#steptype019w4s,#steptype020w4s,#steptype021w4s,#steptype022w4s,#steptype023w4s,
|
||||||
|
#steptype024w4s,#steptype027w4s,#steptype029w4s,#steptype030w4s,#steptype031w4s,
|
||||||
|
#steptype032w4s,#steptype033w4s,#steptype050w4s,#steptype051w4s,
|
||||||
|
#steptype016w5s,#steptype017w5s,#steptype018w5s,
|
||||||
|
#steptype019w5s,#steptype020w5s,#steptype021w5s,#steptype022w5s,#steptype023w5s,
|
||||||
|
#steptype024w5s,#steptype027w5s,#steptype029w5s,#steptype030w5s,#steptype031w5s,
|
||||||
|
#steptype032w5s,#steptype033w5s,#steptype050w5s,#steptype051w5s,
|
||||||
|
#steptype016w6s,#steptype017w6s,#steptype018w6s,
|
||||||
|
#steptype019w6s,#steptype020w6s,#steptype021w6s,#steptype022w6s,#steptype023w6s,
|
||||||
|
#steptype024w6s,#steptype027w6s,#steptype029w6s,#steptype030w6s,#steptype031w6s,
|
||||||
|
#steptype032w6s,#steptype033w6s,#steptype050w6s,#steptype051w6s
|
||||||
|
{FLOAT: left; WIDTH: 31%; TEXT-ALIGN: right; FONT: 70%; OVERFLOW: hidden}
|
||||||
|
|
||||||
|
#steptype016w1m,#steptype017w1m,#steptype018w1m,
|
||||||
|
#steptype019w1m,#steptype020w1m,#steptype021w1m,#steptype022w1m,#steptype023w1m,
|
||||||
|
#steptype024w1m,#steptype027w1m,#steptype029w1m,#steptype030w1m,#steptype031w1m,
|
||||||
|
#steptype032w1m,#steptype033w1m,#steptype050w1m,#steptype051w1m,
|
||||||
|
#steptype016w2m,#steptype017w2m,#steptype018w2m,
|
||||||
|
#steptype019w2m,#steptype020w2m,#steptype021w2m,#steptype022w2m,#steptype023w2m,
|
||||||
|
#steptype024w2m,#steptype027w2m,#steptype029w2m,#steptype030w2m,#steptype031w2m,
|
||||||
|
#steptype032w2m,#steptype033w2m,#steptype050w2m,#steptype051w2m,
|
||||||
|
#steptype016w3m,#steptype017w3m,#steptype018w3m,
|
||||||
|
#steptype019w3m,#steptype020w3m,#steptype021w3m,#steptype022w3m,#steptype023w3m,
|
||||||
|
#steptype024w3m,#steptype027w3m,#steptype029w3m,#steptype030w3m,#steptype031w3m,
|
||||||
|
#steptype032w3m,#steptype033w3m,#steptype050w3m,#steptype051w3m,
|
||||||
|
#steptype016w4m,#steptype017w4m,#steptype018w4m,
|
||||||
|
#steptype019w4m,#steptype020w4m,#steptype021w4m,#steptype022w4m,#steptype023w4m,
|
||||||
|
#steptype024w4m,#steptype027w4m,#steptype029w4m,#steptype030w4m,#steptype031w4m,
|
||||||
|
#steptype032w4m,#steptype033w4m,#steptype050w4m,#steptype051w4m,
|
||||||
|
#steptype016w5m,#steptype017w5m,#steptype018w5m,
|
||||||
|
#steptype019w5m,#steptype020w5m,#steptype021w5m,#steptype022w5m,#steptype023w5m,
|
||||||
|
#steptype024w5m,#steptype027w5m,#steptype029w5m,#steptype030w5m,#steptype031w5m,
|
||||||
|
#steptype032w5m,#steptype033w5m,#steptype050w5m,#steptype051w5m,
|
||||||
|
#steptype016w6m,#steptype017w6m,#steptype018w6m,
|
||||||
|
#steptype019w6m,#steptype020w6m,#steptype021w6m,#steptype022w6m,#steptype023w6m,
|
||||||
|
#steptype024w6m,#steptype027w6m,#steptype029w6m,#steptype030w6m,#steptype031w6m,
|
||||||
|
#steptype032w6m,#steptype033w6m,#steptype050w6m,#steptype051w6m,
|
||||||
|
{WIDTH:90%; FONT: 70%; OVERFLOW: hidden}
|
||||||
|
|
||||||
|
#name
|
||||||
|
{FLOAT: left; WIDTH: 20%; OVERFLOW: hidden; FONT: bold;}
|
||||||
|
|
||||||
|
|
||||||
|
#runprog
|
||||||
|
{FLOAT: left; WIDTH: 5%; OVERFLOW: hidden; FONT: 90%; FONT: bold}
|
||||||
|
|
||||||
|
/* technologischer block */
|
||||||
|
#steptype027 {PADDING-BOTTOM: 0.3%; BACKGROUND-COLOR: #E0FFFF; CLEAR: both}
|
||||||
|
#text {FLOAT: left; WIDTH:50%; FONT-SIZE:17px; OVERFLOW:_hidden; HEIGHT:20px; TEXT-ALIGN:center; PADDING-TOP:3px;}
|
||||||
|
|
||||||
|
/* rezeptende */
|
||||||
|
#steptype050 {PADDING-BOTTOM: 0.3%; BACKGROUND-COLOR: #FFD0A0; CLEAR: both; HEIGHT: 20px;}
|
||||||
|
#steptype050stepno {DISPLAY: _none;}
|
||||||
|
#steptype050stepsubno {DISPLAY: none;}
|
||||||
|
#steptype050text {FLOAT: left; WIDTH: 25%; OVERFLOW: hidden; FONT: 90%;}
|
||||||
|
|
||||||
|
/* bewegungsprogramm im schritt */
|
||||||
|
#runprog {POSITION: relative; LEFT: 48%; WIDTH: 52%; BACKGROUND-COLOR: #E6E6F0; FONT: 70%; PADDING-LEFT: 1.5%; CLEAR: both}
|
||||||
|
#runcaption {WIDTH: 19%; FLOAT: left;}
|
||||||
|
#runvalue {WIDTH: 30%; FLOAT: left;}
|
||||||
|
|
||||||
|
/* farbe für kommentar #FFE6E6 */
|
||||||
|
#steptext {FONT: 80%; CLEAR: both; LINE-HEIGHT: 90%;}
|
||||||
|
#name_pk {FLOAT: left; PADDING-RIGHT: 2%;}
|
||||||
|
#action_pk {FLOAT: left; PADDING-RIGHT: 2%;}
|
||||||
|
#metric_pk {}
|
||||||
|
|
||||||
|
/* schalter im schritt */
|
||||||
|
#flags {POSITION: relative; LEFT: 48%; WIDTH: 52%; BACKGROUND-COLOR: #F0E6B6; FONT: 70%; PADDING-LEFT: 0.5%; CLEAR: both}
|
||||||
|
|
||||||
|
/* kommentar */
|
||||||
|
#comment {WIDTH: 100%; BACKGROUND-COLOR: #D5BEDE; MARGIN-LEFT: 10%; CLEAR: both; TEXT-ALIGN:center; FONT-SIZE: 90%;}
|
||||||
|
/* chemikalien */
|
||||||
|
#component {WIDTH: 90%; POSITION: relative; LEFT: 10%; BACKGROUND-COLOR: #FFFFE4; LINE-HEIGHT: 90%; CLEAR: both;}
|
||||||
|
#componentname {WIDTH: 30%; FLOAT: left; PADDING-LEFT:15%; OVERFLOW: hidden; FONT: 90%; CLEAR: both;}
|
||||||
|
#componentphysicalclose {WIDTH: 10%; FLOAT: left; FONT-SIZE: 75%; COLOR:gray;}
|
||||||
|
#componentpercent {WIDTH: 8%; FLOAT: left; TEXT-ALIGN: right; FONT-SIZE: 90%; COLOR:blue;}
|
||||||
|
#componentunitpercent {WIDTH: 4%; FLOAT: left; FONT-SIZE: 90%; COLOR:blue;}
|
||||||
|
#componentdefault {WIDTH: 8%; FLOAT: left; TEXT-ALIGN: right; FONT-SIZE: 90%; COLOR:gray;}
|
||||||
|
#componentunitdefault {WIDTH: 4%; FLOAT: left; FONT-SIZE: 90%; COLOR:gray;}
|
||||||
|
#componentsetvalue {WIDTH: 8%; FLOAT: left; TEXT-ALIGN: right; FONT-SIZE: 90%;}
|
||||||
|
#componentunitsetvalue {WIDTH: 4%; FLOAT: left; FONT-SIZE: 90%;}
|
||||||
|
#componentcurrent {WIDTH: 8%; FLOAT: left; TEXT-ALIGN: right; FONT-SIZE: 90%; COLOR:green;}
|
||||||
|
#componentunitcurrent {WIDTH: 4%; FLOAT: left; FONT-SIZE: 90%; COLOR:green;}
|
||||||
|
#componentnumber {TEXT-ALIGN: right; FONT-SIZE: 90%; OVERFLOW: hidden}
|
||||||
|
|
||||||
|
.editable {CURSOR:hand; BACKGROUND-COLOR:black; COLOR:white !important; BORDER:1px solid white;}
|
||||||
|
|
||||||
|
#aep_ovrl {
|
||||||
|
background-color: black;
|
||||||
|
-moz-opacity: 0.7; opacity: 0.7;
|
||||||
|
top: 0; left: 0; position: fixed;
|
||||||
|
width: 100%; height:100%; z-index: 99;
|
||||||
|
}
|
||||||
|
#aep_ww { position: fixed; z-index: 100; top: 0; left: 0; width: 100%; height: 100%; text-align: center;}
|
||||||
|
#aep_win { margin: 20% auto 0 auto; width: 400px; text-align: left;}
|
||||||
|
#aep_w {background-color: white; padding: 3px; border: 1px solid black; background-color: #EEE;}
|
||||||
|
#aep_t {color: white; margin: 0 0 2px 3px; font-family: Arial, sans-serif; font-size: 10pt;}
|
||||||
|
#aep_text {width: 100%;}
|
||||||
|
#aep_w span {font-family: Arial, sans-serif; font-size: 10pt;}
|
||||||
|
#aep_w div {text-align: right; margin-top: 5px;}
|
||||||
|
#aep_ovrl {
|
||||||
|
position: absolute;
|
||||||
|
filter:alpha(opacity=70);
|
||||||
|
top: expression(eval(document.body.scrollTop));
|
||||||
|
width: expression(eval(document.body.clientWidth));
|
||||||
|
}
|
||||||
|
#aep_ww {
|
||||||
|
position: absolute;
|
||||||
|
top: expression(eval(document.body.scrollTop));
|
||||||
|
}
|
0
static/css/reports/report_work_order.js
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||||
|
<!--
|
||||||
|
2017-8-29: Created with FontForge (http://fontforge.org)
|
||||||
|
-->
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
||||||
|
<metadata>
|
||||||
|
Created by FontForge 20141215 at Tue Aug 29 11:31:31 2017
|
||||||
|
By Michael Heppler
|
||||||
|
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="fontcustom" horiz-adv-x="512" >
|
||||||
|
<font-face
|
||||||
|
font-family="fontcustom"
|
||||||
|
font-weight="400"
|
||||||
|
font-stretch="normal"
|
||||||
|
units-per-em="512"
|
||||||
|
panose-1="2 0 5 3 0 0 0 0 0 0"
|
||||||
|
ascent="448"
|
||||||
|
descent="-64"
|
||||||
|
bbox="38.2715 -64 475.929 448.001"
|
||||||
|
underline-thickness="25.6"
|
||||||
|
underline-position="-51.2"
|
||||||
|
unicode-range="U+0020-F10F"
|
||||||
|
/>
|
||||||
|
<missing-glyph />
|
||||||
|
<glyph glyph-name="space" unicode=" " horiz-adv-x="200"
|
||||||
|
/>
|
||||||
|
<glyph glyph-name="tabular" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002zM115.707 229.528l280.893 -0.000976562v-199.242h-280.893v199.243zM217.554 156.534l76.8027 -0.000976562v36.7969h-76.8027v-36.7959zM294.356 139.839l-76.8027 0.000976562v-40.5293h76.8027v40.5283z
|
||||||
|
M132.402 193.33v-36.7959h68.4561v36.7959h-68.4561zM132.402 139.84v-40.5293h68.4561v40.5293h-68.4561zM132.402 46.9814h68.4561v35.6348h-68.4561v-35.6348zM217.554 46.9814h76.8027v35.6348h-76.8027v-35.6348zM379.905 46.9814h-0.000976562v35.6348h-68.8535
|
||||||
|
v-35.6348h68.8545zM379.905 99.3105h-0.000976562v40.5283h-68.8535v-40.5283h68.8545zM311.051 156.533h68.8535v36.7969h-68.8535v-36.7969z" />
|
||||||
|
<glyph glyph-name="document" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002zM115.578 390.442v22.5859h169.49v-22.5859h-169.49zM115.578 344.247v22.5859h169.489v-22.5859h-169.489zM115.578 298.051v22.5859h169.49v-22.5859h-169.49zM115.578 251.854v22.5859h280.844v-22.5859h-280.844z
|
||||||
|
M115.578 204.896v22.5859h280.844v-22.5859h-280.844zM115.578 158.699v22.5859h280.844v-22.5859h-280.844zM115.578 112.504v22.5859h280.844v-22.5859h-280.844zM115.578 66.3076v22.5859h280.844v-22.5859h-280.844zM115.578 19.0879v22.5859h280.844v-22.5859h-280.844
|
||||||
|
zM115.578 -27.1084v22.5859h280.844v-22.5859h-280.844z" />
|
||||||
|
<glyph glyph-name="file" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002zM115.707 229.528l280.893 -0.000976562v-199.242h-280.893v199.243zM217.554 156.534l76.8027 -0.000976562v36.7969h-76.8027v-36.7959zM294.356 139.839l-76.8027 0.000976562v-40.5293h76.8027v40.5283z
|
||||||
|
M132.402 193.33v-36.7959h68.4561v36.7959h-68.4561zM132.402 139.84v-40.5293h68.4561v40.5293h-68.4561zM132.402 46.9814h68.4561v35.6348h-68.4561v-35.6348zM217.554 46.9814h76.8027v35.6348h-76.8027v-35.6348zM379.905 46.9814h-0.000976562v35.6348h-68.8535
|
||||||
|
v-35.6348h68.8545zM379.905 99.3105h-0.000976562v40.5283h-68.8535v-40.5283h68.8545zM311.051 156.533h68.8535v36.7969h-68.8535v-36.7969z" />
|
||||||
|
<glyph glyph-name="package" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002zM392.499 217.293v0v-178.433c0 -3.83984 -2.55957 -7.16797 -6.19531 -8.24316l-128.819 -37.2734c-0.0507812 0 -0.15332 -0.0507812 -0.204102 -0.0507812c-0.102539 0 -0.154297 -0.0517578 -0.255859 -0.0517578
|
||||||
|
c-0.154297 -0.0507812 -0.256836 -0.101562 -0.410156 -0.101562c-0.102539 0 -0.15332 -0.0517578 -0.255859 -0.0517578c-0.15332 0 -0.307617 -0.0507812 -0.460938 -0.0507812h-0.205078c-0.255859 -0.0517578 -0.459961 -0.0517578 -0.665039 -0.0517578
|
||||||
|
c-0.255859 0 -0.460938 0.0517578 -0.666016 0.0517578h-0.204102c-0.154297 0 -0.307617 0.0507812 -0.460938 0.0507812c-0.102539 0 -0.154297 0.0517578 -0.255859 0.0517578c-0.154297 0.0507812 -0.256836 0.0507812 -0.410156 0.101562
|
||||||
|
c-0.102539 0 -0.15332 0.0517578 -0.255859 0.0517578c-0.0507812 0 -0.15332 0.0507812 -0.205078 0.0507812l-128.973 37.2734c-3.68652 1.0752 -6.19531 4.45508 -6.19531 8.24316v178.433v0.0507812v0.0517578v0.102539
|
||||||
|
c0.0517578 0.15332 0.0517578 0.358398 0.0517578 0.511719v0.205078c0.0507812 0.204102 0.0507812 0.40918 0.102539 0.614258v0.102539c0 0.15332 0.0507812 0.358398 0.101562 0.511719c0 0.0507812 0.0517578 0.15332 0.0517578 0.205078
|
||||||
|
c0.0507812 0.15332 0.102539 0.306641 0.15332 0.459961c0 0.0517578 0.0517578 0.102539 0.0517578 0.154297c0.0507812 0.204102 0.101562 0.40918 0.204102 0.5625c0.0517578 0.0517578 0.0517578 0.102539 0.102539 0.154297
|
||||||
|
c0.0517578 0.15332 0.15332 0.255859 0.205078 0.40918c0.0507812 0.0517578 0.0507812 0.102539 0.102539 0.15332c0.102539 0.154297 0.204102 0.358398 0.306641 0.512695l0.0517578 0.0507812c0.102539 0.102539 0.204102 0.255859 0.306641 0.410156
|
||||||
|
c0.0517578 0.0507812 0.0517578 0.101562 0.102539 0.15332c0.102539 0.102539 0.205078 0.255859 0.307617 0.358398l0.102539 0.102539c0.101562 0.15332 0.255859 0.255859 0.40918 0.40918c0.0507812 0 0.102539 0.0517578 0.15332 0.102539
|
||||||
|
c0.154297 0.102539 0.255859 0.205078 0.358398 0.307617c0.0517578 0.0507812 0.102539 0.101562 0.154297 0.15332c0.0507812 0 0.0507812 0.0507812 0.101562 0.0507812c0.102539 0.0517578 0.205078 0.154297 0.307617 0.205078
|
||||||
|
c0.0507812 0 0.0507812 0.0507812 0.102539 0.0507812c0.15332 0.102539 0.358398 0.205078 0.511719 0.307617c0.102539 0.0507812 0.15332 0.0507812 0.205078 0.102539c0.15332 0.0507812 0.255859 0.15332 0.40918 0.205078
|
||||||
|
c0.0517578 0 0.102539 0.0507812 0.154297 0.0507812c0.204102 0.0507812 0.358398 0.15332 0.5625 0.205078c0.0517578 0 0.102539 0.0507812 0.154297 0.0507812c0.204102 0.0517578 0.358398 0.102539 0.511719 0.15332
|
||||||
|
c0.0507812 0.0517578 0.0507812 0.0517578 0.102539 0.0517578l132.557 35.123c1.48438 0.358398 3.02051 0.358398 4.50586 -0.0507812l125.439 -35.124h0.0517578c0.204102 -0.0507812 0.40918 -0.15332 0.614258 -0.204102h0.0507812
|
||||||
|
c0.15332 -0.0517578 0.358398 -0.102539 0.511719 -0.205078c0.0517578 -0.0507812 0.102539 -0.0507812 0.154297 -0.102539c0.15332 -0.0507812 0.255859 -0.15332 0.40918 -0.205078c0.0517578 0 0.102539 0 0.15332 -0.0507812
|
||||||
|
c0.205078 -0.102539 0.358398 -0.205078 0.512695 -0.307617c0.0507812 -0.0507812 0.102539 -0.0507812 0.15332 -0.101562c0.0507812 -0.0517578 0.15332 -0.102539 0.205078 -0.154297c0.0507812 0 0.102539 -0.0507812 0.15332 -0.102539
|
||||||
|
c0.0507812 -0.0507812 0.102539 -0.101562 0.15332 -0.15332c0.154297 -0.102539 0.255859 -0.255859 0.410156 -0.358398l0.0507812 -0.0507812c0.15332 -0.154297 0.255859 -0.307617 0.410156 -0.460938c0.0507812 0 0.0507812 -0.0517578 0.101562 -0.102539
|
||||||
|
c0.102539 -0.102539 0.205078 -0.255859 0.307617 -0.358398c0.0507812 0 0.0507812 -0.0507812 0.102539 -0.102539c0.15332 -0.15332 0.255859 -0.358398 0.358398 -0.511719c0 -0.0517578 0.0507812 -0.0517578 0.0507812 -0.102539
|
||||||
|
c0.102539 -0.15332 0.154297 -0.307617 0.255859 -0.460938c0.0517578 -0.0507812 0.0517578 -0.102539 0.102539 -0.15332c0.0517578 -0.15332 0.154297 -0.307617 0.205078 -0.460938c0 0 0.0507812 -0.0507812 0.0507812 -0.102539
|
||||||
|
c0.0517578 -0.205078 0.154297 -0.358398 0.205078 -0.563477c0 -0.101562 0.0517578 -0.15332 0.0517578 -0.204102c0 -0.102539 0.0507812 -0.255859 0.101562 -0.410156c0 -0.102539 0.0517578 -0.15332 0.0517578 -0.204102
|
||||||
|
c0 -0.154297 0.0507812 -0.358398 0.102539 -0.563477v-0.102539c0 -0.15332 0.0507812 -0.358398 0.0507812 -0.511719v-0.205078v-0.563477v-0.0507812zM246.374 12.9531v160.615l-111.872 32.3066v-160.563zM254.925 188.877l40.3965 11.6738l57.3447 16.5889
|
||||||
|
l-94.2598 26.3672l-100.403 -26.5723l63.8975 -18.4834zM375.398 45.3115v160.615l-111.872 -32.3584v-160.666z" />
|
||||||
|
<glyph glyph-name="image" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002zM155.146 219.049c0 24.5439 19.8975 44.4404 44.4414 44.4404s44.4414 -19.8965 44.4414 -44.4404c0 -24.5449 -19.8975 -44.4414 -44.4414 -44.4414s-44.4414 19.8965 -44.4414 44.4414zM337.292 229.049
|
||||||
|
l59.3076 -105.122v-119.061h-0.0273438v-6.91602h-280.865v98.5039l13.832 11.0566v-0.000976562l33.2598 27.4824l55.8594 -55.3271l59.0508 110.654zM203.555 58.1465l5.6709 11.9092l-47.0703 45.3682l-32.0762 -27.248l2.01953 -24.3584l13.6113 17.0137
|
||||||
|
l23.8184 -28.9229l24.3857 17.5801zM360.41 93.1396l14.1836 28.3125l-44.8008 80.5283l-45.4492 -30.8574l-24.8623 -49.3389l24.9473 11.2832l34.0186 -34.1289l27.2168 38.4795z" />
|
||||||
|
<glyph glyph-name="dataset" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002zM115.578 390.442v22.5859h169.49v-22.5859h-169.49zM115.578 344.247v22.5859h169.489v-22.5859h-169.489zM115.578 298.051v22.5859h169.49v-22.5859h-169.49zM115.578 251.854v22.5859h280.844v-22.5859h-280.844z
|
||||||
|
M115.578 204.896v22.5859h280.844v-22.5859h-280.844zM115.578 158.699v22.5859h280.844v-22.5859h-280.844zM115.578 112.504v22.5859h280.844v-22.5859h-280.844zM115.578 66.3076v22.5859h280.844v-22.5859h-280.844zM115.578 19.0879v22.5859h280.844v-22.5859h-280.844
|
||||||
|
zM115.578 -27.1084v22.5859h280.844v-22.5859h-280.844z" />
|
||||||
|
<glyph glyph-name="astro" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.369v350.35h-122.69v118.652h-206.679v-469.002zM391.215 262.411c11.5938 -11.5947 6.47559 -34.2588 -15.6455 -69.2871c-5.60742 -8.88086 -12.1367 -18.2422 -19.4346 -27.9131c4.13086 -11.2793 6.38379 -23.4639 6.38379 -36.1738
|
||||||
|
c0 -58.1104 -47.1074 -105.22 -105.218 -105.22c-12.666 0 -24.8096 2.23926 -36.0566 6.3418c-9.90332 -7.49902 -19.4893 -14.1963 -28.5703 -19.9307c-22.9121 -14.4688 -40.5381 -21.6641 -53.2314 -21.665c-6.71191 -0.000976562 -12.0449 2.01074 -16.0547 6.02051
|
||||||
|
c-4.83789 4.83984 -6.7627 11.7695 -5.71973 20.5986c0.783203 6.62402 3.31445 14.6055 7.52441 23.7236c6.91895 14.9814 18.4443 33.2529 33.5459 53.2275c-4.30176 11.4834 -6.65625 23.918 -6.65625 36.9033c0 58.1094 47.1084 105.218 105.22 105.218
|
||||||
|
c13.0293 0 25.5039 -2.36816 37.0195 -6.69824c20.1035 15.1475 38.4668 26.6494 53.4287 33.4414c8.91797 4.04785 16.7324 6.46094 23.2285 7.17285c8.65723 0.949219 15.4648 -0.989258 20.2363 -5.75977zM183.484 26.7207
|
||||||
|
c5.99414 3.81348 12.2236 8.07129 18.627 12.7158c-13.749 8.48438 -25.3965 20.0449 -33.9854 33.7217c-11.2783 -15.5518 -19.9834 -29.6807 -25.5049 -41.4551c-8.75781 -18.6748 -5.94531 -23.7559 -5.91113 -23.7949
|
||||||
|
c0.463867 -0.397461 3.97656 -1.33203 12.6104 1.42676c8.99023 2.87109 20.8037 8.88379 34.1641 17.3857zM346.835 184.338c4.45801 6.17285 8.55762 12.1826 12.2422 17.9717c8.50293 13.3594 14.5146 25.1738 17.3877 34.1641
|
||||||
|
c2.75684 8.63672 1.82324 12.1494 1.42285 12.6172c-0.0351562 0.0283203 -4.96387 2.77148 -23.04 -5.56641c-11.7383 -5.41406 -25.915 -14.0859 -41.5566 -25.3838c13.5928 -8.55762 25.0879 -20.1406 33.5439 -33.8027z" />
|
||||||
|
<glyph glyph-name="unlock" unicode=""
|
||||||
|
d="M475.929 -25.8672c0 -21.0557 -16.9902 -38.125 -37.9463 -38.125h-361.764c-20.958 0 -37.9473 17.0693 -37.9473 38.125v242.271c0 21.0547 16.9893 38.125 37.9473 38.125h361.763c20.957 0 37.9473 -17.0703 37.9473 -38.125v-242.271v0zM365.643 397.034
|
||||||
|
l20.6064 -52.3926l-73.0195 -28.7412l-13.3633 33.9902c-4.25781 10.8203 -16.5273 16.1201 -27.4043 11.8389l-72.8105 -28.6602c-10.8779 -4.28125 -16.2432 -16.5225 -11.9844 -27.3418l62.624 -159.1l-74.207 -29.208l-69.8672 177.501
|
||||||
|
c-16.2607 41.3125 4.04688 87.9824 45.3584 104.243l109.825 43.2295c41.3105 16.2598 87.9814 -4.04688 104.242 -45.3594z" />
|
||||||
|
<glyph glyph-name="code" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002zM206.965 90.2354c0 -2.6084 -0.105469 -4.65234 -0.316406 -6.13281c-0.211914 -1.48145 -0.546875 -2.53809 -1.00488 -3.17188c-0.458984 -0.634766 -1.02246 -0.916992 -1.69141 -0.845703
|
||||||
|
c-0.670898 0.0693359 -1.5332 0.351562 -2.59082 0.845703l-81.1055 40.3936c-0.988281 0.564453 -1.71094 1.74512 -2.16797 3.54297c-0.458984 1.79785 -0.6875 4.49414 -0.6875 8.08984c0 1.83203 0.0693359 3.43652 0.211914 4.81055
|
||||||
|
c0.139648 1.375 0.317383 2.50195 0.52832 3.38379c0.211914 0.880859 0.510742 1.58691 0.898438 2.11523c0.386719 0.52832 0.828125 0.932617 1.32227 1.21582l81 40.1826c2.04395 0.986328 3.48926 0.792969 4.33594 -0.582031
|
||||||
|
c0.845703 -1.375 1.26855 -4.17676 1.26855 -8.40723c0 -2.89062 -0.0527344 -5.18164 -0.158203 -6.87305c-0.106445 -1.69141 -0.300781 -3.03125 -0.582031 -4.01855c-0.282227 -0.987305 -0.670898 -1.69141 -1.16309 -2.11426
|
||||||
|
c-0.494141 -0.422852 -1.16211 -0.845703 -2.00879 -1.26953l-60.9082 -28.5508l59.7451 -27.7051c1.05664 -0.494141 1.91992 -0.988281 2.59082 -1.48047c0.668945 -0.494141 1.17969 -1.25293 1.5332 -2.27344c0.352539 -1.02246 0.597656 -2.39746 0.740234 -4.12402
|
||||||
|
c0.139648 -1.72656 0.209961 -4.07031 0.209961 -7.03125zM236.053 44.4492c-0.352539 -0.916016 -0.811523 -1.65625 -1.37402 -2.22168c-0.56543 -0.563477 -1.3584 -1.02051 -2.37988 -1.375c-1.02246 -0.351562 -2.29199 -0.616211 -3.80664 -0.792969
|
||||||
|
c-1.5166 -0.174805 -3.43652 -0.264648 -5.7627 -0.264648c-2.8916 0 -5.25195 0.142578 -7.08496 0.422852c-1.83398 0.283203 -3.22461 0.705078 -4.17676 1.26953c-0.952148 0.56543 -1.49902 1.28711 -1.63965 2.16797c-0.141602 0.881836 0 1.9209 0.423828 3.11914
|
||||||
|
l63.2344 177.544c0.28125 0.916016 0.703125 1.67383 1.26953 2.27344c0.5625 0.597656 1.33789 1.07422 2.32617 1.42773c0.986328 0.351562 2.27344 0.616211 3.85938 0.792969c1.58594 0.174805 3.50684 0.263672 5.76367 0.263672
|
||||||
|
c2.95996 0 5.33984 -0.141602 7.1377 -0.422852c1.79785 -0.282227 3.15332 -0.705078 4.07031 -1.26855c0.915039 -0.56543 1.44434 -1.28711 1.58594 -2.16797c0.140625 -0.882812 0.0351562 -1.9209 -0.317383 -3.11914zM394.254 132.64
|
||||||
|
c0 -1.83398 -0.0712891 -3.4209 -0.211914 -4.75879c-0.140625 -1.33984 -0.333984 -2.46875 -0.581055 -3.38379c-0.24707 -0.916992 -0.564453 -1.63867 -0.951172 -2.16699c-0.388672 -0.529297 -0.830078 -0.899414 -1.32227 -1.11035l-81.1055 -40.1826
|
||||||
|
c-0.988281 -0.494141 -1.83496 -0.705078 -2.53809 -0.634766c-0.705078 0.0703125 -1.28711 0.458008 -1.74512 1.16309c-0.458008 0.704102 -0.775391 1.74512 -0.951172 3.12012c-0.176758 1.37402 -0.263672 3.11914 -0.263672 5.23438
|
||||||
|
c0 2.88965 0.0527344 5.18066 0.158203 6.87305s0.298828 3.03027 0.582031 4.01855c0.28125 0.987305 0.669922 1.70801 1.16309 2.16797c0.491211 0.458008 1.16309 0.861328 2.00879 1.21582l60.9092 28.5508l-59.7461 27.7051
|
||||||
|
c-1.12793 0.492188 -2.02637 0.986328 -2.69629 1.48047c-0.670898 0.492188 -1.18164 1.25 -1.5332 2.27344c-0.353516 1.02051 -0.582031 2.39551 -0.6875 4.12402c-0.105469 1.72656 -0.158203 4.07031 -0.158203 7.03125c0 2.60742 0.0869141 4.65332 0.263672 6.13379
|
||||||
|
c0.175781 1.47949 0.493164 2.53711 0.951172 3.17188c0.458984 0.633789 1.04004 0.915039 1.74512 0.845703c0.703125 -0.0712891 1.5498 -0.353516 2.53809 -0.845703l81.2109 -40.5c0.915039 -0.423828 1.63965 -1.55176 2.16797 -3.38379
|
||||||
|
c0.52832 -1.83398 0.792969 -4.54785 0.792969 -8.14258z" />
|
||||||
|
<glyph glyph-name="video" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002zM393.035 155.245h0.000976562v-136.743l-80.1689 46.2861v-54.1758h-193.78v141.273h24.5869c-15.6006 8.04688 -26.2744 24.3066 -26.2744 43.0693c0 26.7549 21.6895 48.4443 48.4453 48.4443
|
||||||
|
c26.7549 0 48.4453 -21.6895 48.4453 -48.4443c0 -18.7627 -10.6748 -35.0225 -26.2754 -43.0693h56.9707c-15.6006 8.04688 -26.2734 24.3066 -26.2734 43.0693c0 26.7549 21.6885 48.4443 48.4443 48.4443c26.7549 0 48.4453 -21.6895 48.4453 -48.4443
|
||||||
|
c0 -18.7627 -10.6748 -35.0225 -26.2754 -43.0693h23.541v-42.9268z" />
|
||||||
|
<glyph glyph-name="dataverse" unicode=""
|
||||||
|
d="M266.787 -63.7441c-34.1826 0 -63.501 10.5283 -87.6299 36.1436c-24.1299 25.6182 -36.3027 53.2461 -36.2842 87.2793c-0.0175781 34.0371 13.877 65.0029 36.2842 87.2861c14.4639 14.4277 32.6104 25.2881 52.8447 31.1895l-22.0381 98.7832
|
||||||
|
c-0.977539 -0.0371094 -1.90625 -0.142578 -2.88477 -0.142578c-23.6602 -0.0136719 -45.1855 9.58691 -60.6836 25.0381c-15.5146 15.417 -25.1621 36.8779 -25.1387 60.4395c-0.0234375 23.5586 9.62402 45.0039 25.1387 60.4355
|
||||||
|
c15.4971 15.4355 37.0234 25.0361 60.6836 25.0361c23.6699 0 45.1748 -9.60059 60.6846 -25.0361c15.498 -15.4326 25.1416 -36.8896 25.1416 -60.4355c0 -23.5615 -9.6416 -45.0225 -25.1416 -60.4395c-6.86328 -6.84082 -14.9756 -12.4639 -23.8604 -16.6787
|
||||||
|
l22.7598 -102.048c0.0478516 0 0.0761719 0.0146484 0.124023 0.0146484c34.1836 0.0126953 65.2773 -13.8594 87.6484 -36.1553c22.3984 -22.2734 36.3086 -53.249 36.3086 -87.2861c0 -34.0332 -13.9102 -64.9814 -36.3086 -87.2803
|
||||||
|
c-22.373 -22.2979 -53.4658 -36.1436 -87.6484 -36.1436zM147.449 362.272c0 -16.4385 6.66211 -31.2129 17.4727 -41.9951c10.8281 -10.7734 25.6445 -17.3965 42.1572 -17.4082c16.5215 0.0107422 31.3281 6.63379 42.1582 17.3926
|
||||||
|
c10.8086 10.7979 17.4521 25.5596 17.4521 42.0107c0 16.4336 -6.64355 31.1895 -17.4521 41.9785c-10.8301 10.7754 -25.6357 17.3867 -42.1582 17.3975c-16.5127 -0.0117188 -31.3291 -6.62207 -42.1572 -17.3975c-10.8398 -10.7891 -17.4727 -25.5449 -17.4727 -41.9785z
|
||||||
|
M329.748 -3.00293c16.1152 16.0977 26.041 38.1455 26.0713 62.6836c-0.0302734 24.541 -9.95605 46.5889 -26.0713 62.6914c-16.1611 16.0684 -38.3037 25.9434 -62.9609 25.9551c-24.6387 -0.00878906 -46.752 -9.88574 -62.9141 -25.9551
|
||||||
|
c-16.1445 -16.1025 -26.0713 -38.1523 -26.0713 -62.6914c0 -24.5371 9.92676 -46.585 26.0713 -62.6836c16.1611 -16.0693 38.2754 -25.9424 62.9141 -25.957c24.6572 0.0126953 46.7988 9.88672 62.9609 25.957z" />
|
||||||
|
<glyph glyph-name="geodata" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002zM255.517 -10.7539c-36.6543 0 -71.1143 14.2744 -97.0322 40.1924c-25.9189 25.9199 -40.1934 60.3799 -40.1934 97.0332s14.2744 71.1133 40.1934 97.0332c25.918 25.9189 60.3779 40.1924 97.0322 40.1924
|
||||||
|
c36.6533 0 71.1143 -14.2734 97.0332 -40.1924c25.918 -25.9199 40.1924 -60.3799 40.1924 -97.0332s-14.2744 -71.1133 -40.1924 -97.0332c-25.9199 -25.918 -60.3799 -40.1924 -97.0332 -40.1924zM263.665 5.82031l0.548828 0.0390625
|
||||||
|
c28.9033 2.06348 56.167 14.5459 76.7676 35.1465s33.083 47.8643 35.1475 76.7686l0.0390625 0.547852h-22.708v16.2979h22.708l-0.0390625 0.547852c-2.06445 28.9043 -14.5469 56.167 -35.1475 76.7686c-20.6006 20.5996 -47.8633 33.083 -76.7676 35.1465
|
||||||
|
l-0.548828 0.0390625v-22.707h-16.2969v22.707l-0.548828 -0.0390625c-28.9043 -2.06445 -56.167 -14.5469 -76.7686 -35.1465c-20.6006 -20.6016 -33.083 -47.8643 -35.1465 -76.7686l-0.0390625 -0.547852h22.708v-16.2979h-22.708l0.0390625 -0.547852
|
||||||
|
c2.06445 -28.9043 14.5469 -56.168 35.1465 -76.7686c20.6016 -20.6006 47.8643 -33.083 76.7686 -35.1465l0.548828 -0.0390625v17.1553h16.2969v-17.1553zM255.517 263.185c-36.5176 0 -70.8486 -14.2207 -96.6709 -40.042
|
||||||
|
c-25.8213 -25.8232 -40.042 -60.1543 -40.042 -96.6719c0 -36.5166 14.2207 -70.8477 40.042 -96.6709c25.8223 -25.8213 60.1533 -40.042 96.6709 -40.042c36.5166 0 70.8486 14.2207 96.6709 40.042c25.8223 25.8232 40.042 60.1543 40.042 96.6709
|
||||||
|
c0 36.5176 -14.2197 70.8486 -40.042 96.6719c-25.8223 25.8213 -60.1543 40.042 -96.6709 40.042zM263.153 224.928v21.6455v1.09961l1.09668 -0.078125c29.0264 -2.07324 56.4062 -14.6084 77.0938 -35.2959s33.2227 -48.0674 35.2959 -77.0938l0.0791016 -1.09766
|
||||||
|
h-1.10059h-21.6455v-15.2725h21.6455h1.10059l-0.0791016 -1.09766c-2.07324 -29.0264 -14.6084 -56.4062 -35.2959 -77.0928c-20.6875 -20.6885 -48.0674 -33.2236 -77.0938 -35.2969l-1.09668 -0.078125v1.09961v16.0947h-15.2734v-16.0947v-1.09961l-1.09766 0.078125
|
||||||
|
c-29.0264 2.07324 -56.4053 14.6084 -77.0928 35.2969c-20.6885 20.6865 -33.2227 48.0664 -35.2959 77.0928l-0.078125 1.09766h1.09961h21.6465v15.2725h-21.6465h-1.09961l0.078125 1.09766c2.07324 29.0273 14.6074 56.4062 35.2959 77.0938
|
||||||
|
c20.6875 20.6875 48.0664 33.2227 77.0928 35.2959l1.09766 0.078125v-1.09961v-21.6455h15.2734zM255.517 264.208v0c36.79 0 71.3799 -14.3271 97.3945 -40.3418c26.0156 -26.0156 40.3428 -60.6045 40.3428 -97.3955c0 -36.79 -14.3271 -71.3789 -40.3428 -97.3945
|
||||||
|
c-26.0146 -26.0146 -60.6045 -40.3418 -97.3945 -40.3418c-36.791 0 -71.3789 14.3271 -97.3945 40.3418c-26.0156 26.0156 -40.3428 60.6045 -40.3428 97.3945c0 36.792 14.3271 71.3799 40.3428 97.3955c26.0146 26.0146 60.6035 40.3418 97.3945 40.3418z
|
||||||
|
M246.855 223.903v0v22.6699c-59.5088 -4.25 -107.191 -51.9316 -111.44 -111.441h22.6699v-17.3203h-22.6699c4.25 -59.5088 51.9316 -107.191 111.44 -111.441v17.1182h17.3213v-17.1182c59.5088 4.25 107.19 51.9316 111.441 111.441h-22.6699v17.3203h22.6699
|
||||||
|
c-4.25098 59.5098 -51.9326 107.191 -111.441 111.441v-22.6699h-17.3213zM223.457 158.531l113.237 49.1191l-49.1201 -113.237l-113.236 -49.1201zM201.481 72.4375l60.9619 26.4434l-34.5176 34.5176zM335.709 206.665l-111.862 -48.5234l-48.5234 -111.863
|
||||||
|
l111.862 48.5244zM200.496 71.4521l1.03125 2.37891l25.6289 59.0811l0.598633 1.38086l1.06445 -1.06445l33.4531 -33.4531l1.06445 -1.06445l-1.38086 -0.599609l-59.0811 -25.627zM337.681 208.636v0l-49.7168 -114.611l-114.612 -49.7168l49.7168 114.613z
|
||||||
|
M202.468 73.4238v0l59.0811 25.627l-33.4531 33.4531z" />
|
||||||
|
<glyph glyph-name="audio" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002zM371.032 265.229l0.0410156 -190.561h-0.0859375c-1.10156 -21.9277 -23.7656 -39.4336 -51.5654 -39.4336c-28.5068 0 -51.6133 18.4014 -51.6133 41.1035c0 22.6992 23.1064 41.1035 51.6133 41.1035
|
||||||
|
c10.0078 0 19.3486 -2.27246 27.2607 -6.19922v100.195l-110.433 -26.915v-147.39c0.197266 -1.46191 0.301758 -2.94629 0.301758 -4.4502c0 -22.7021 -23.1084 -41.1035 -51.6123 -41.1035s-51.6104 18.4014 -51.6104 41.1035c0 22.7012 23.1064 41.1035 51.6104 41.1035
|
||||||
|
c9.86523 0 19.083 -2.20508 26.9209 -6.0293l-0.106445 158.653z" />
|
||||||
|
<glyph glyph-name="other" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002z" />
|
||||||
|
<glyph glyph-name="network" unicode=""
|
||||||
|
d="M324.106 448l118.077 -115.579v-376.978c0 -10.7373 -8.70605 -19.4434 -19.4443 -19.4434h-333.479c-10.7393 0 -19.4434 8.70605 -19.4434 19.4434v473.113c0 10.7373 8.7041 19.4434 19.4434 19.4434h234.847zM319.493 422.432v-93.084h95.0947zM91.3154 -42.501
|
||||||
|
h329.368v350.35h-122.689v118.652h-206.679v-469.002zM113.53 197.376c0 28.6289 23.209 51.8379 51.8379 51.8379s51.8369 -23.209 51.8369 -51.8379s-23.208 -51.8379 -51.8369 -51.8379s-51.8379 23.209 -51.8379 51.8379zM155.128 41.6895
|
||||||
|
c0 28.6289 23.208 51.8369 51.8369 51.8369c28.6299 0 51.8379 -23.208 51.8379 -51.8369s-23.208 -51.8379 -51.8379 -51.8379c-28.6289 0 -51.8369 23.209 -51.8369 51.8379zM269.815 214.272c0 28.6289 23.209 51.8379 51.8379 51.8379s51.8369 -23.209 51.8369 -51.8379
|
||||||
|
s-23.208 -51.8369 -51.8369 -51.8369s-51.8379 23.208 -51.8379 51.8369zM295.542 78.2793c0 28.6289 23.209 51.8369 51.8379 51.8369s51.8369 -23.208 51.8369 -51.8369s-23.208 -51.8379 -51.8369 -51.8379s-51.8379 23.209 -51.8379 51.8379zM222.548 44.2441
|
||||||
|
c-0.575195 -0.795898 -1.20703 -1.39551 -1.89453 -1.79883c-0.69043 -0.400391 -1.57324 -0.641602 -2.65137 -0.723633c-1.07812 -0.0800781 -2.37305 -0.0126953 -3.88281 0.201172c-1.51172 0.216797 -3.3916 0.619141 -5.64062 1.21094
|
||||||
|
c-2.7959 0.735352 -5.04395 1.47363 -6.74414 2.21094c-1.70215 0.739258 -2.94043 1.50195 -3.7168 2.29004c-0.776367 0.789062 -1.12207 1.62598 -1.03418 2.51367c0.0878906 0.888672 0.489258 1.8584 1.20312 2.9082l106.321 155.616
|
||||||
|
c0.504883 0.814453 1.10547 1.44043 1.80566 1.87598c0.696289 0.435547 1.56738 0.699219 2.61328 0.789062c1.04395 0.0898438 2.35547 0.0185547 3.93457 -0.213867c1.57812 -0.234375 3.45801 -0.636719 5.64062 -1.21094
|
||||||
|
c2.86328 -0.75293 5.12891 -1.49609 6.79492 -2.22461c1.66699 -0.730469 2.87109 -1.48438 3.61426 -2.2627c0.741211 -0.779297 1.06934 -1.6123 0.982422 -2.5c-0.0888672 -0.888672 -0.454102 -1.86719 -1.10059 -2.93555zM153.63 194.42
|
||||||
|
c-0.941406 0.699219 -1.64746 1.42773 -2.11621 2.18359c-0.46582 0.758789 -0.735352 1.69141 -0.811523 2.79785c-0.0732422 1.10645 0.0351562 2.41211 0.324219 3.91406c0.291992 1.50391 0.814453 3.35449 1.57227 5.55371
|
||||||
|
c0.941406 2.7334 1.875 4.90918 2.79688 6.53027c0.922852 1.62109 1.86328 2.76855 2.8252 3.44434c0.962891 0.674805 1.97363 0.904297 3.03711 0.686523c1.06348 -0.21582 2.21777 -0.763672 3.46289 -1.64062l184.372 -130.411
|
||||||
|
c0.964844 -0.629883 1.70215 -1.33105 2.21094 -2.10449c0.504883 -0.770508 0.803711 -1.69238 0.889648 -2.76758c0.0849609 -1.07324 -0.0292969 -2.39453 -0.342773 -3.96387c-0.3125 -1.56836 -0.835938 -3.41992 -1.57129 -5.55371
|
||||||
|
c-0.963867 -2.7998 -1.9043 -4.99219 -2.81348 -6.58105c-0.912109 -1.58691 -1.8418 -2.7002 -2.79004 -3.34375c-0.951172 -0.639648 -1.95801 -0.853516 -3.01953 -0.636719c-1.06543 0.21875 -2.23145 0.730469 -3.49805 1.54102zM226.966 27.6621
|
||||||
|
c0.262695 -0.945312 0.336914 -1.8125 0.222656 -2.60254c-0.117188 -0.788086 -0.480469 -1.62988 -1.08789 -2.52246c-0.610352 -0.892578 -1.4707 -1.8623 -2.58105 -2.9082c-1.1123 -1.04688 -2.59961 -2.26465 -4.46582 -3.65332
|
||||||
|
c-2.31934 -1.72656 -4.29883 -3.02051 -5.93652 -3.88965c-1.63965 -0.868164 -3.00781 -1.36035 -4.10938 -1.47559c-1.10059 -0.114258 -1.96973 0.137695 -2.6084 0.760742c-0.639648 0.62207 -1.14648 1.54199 -1.52246 2.75488l-55.251 180.189
|
||||||
|
c-0.321289 0.902344 -0.435547 1.7627 -0.338867 2.58203c0.0947266 0.81543 0.431641 1.66016 1.01367 2.53418c0.582031 0.871094 1.45605 1.85156 2.62305 2.94043c1.16797 1.08691 2.65527 2.30469 4.46582 3.65137c2.375 1.76758 4.36914 3.07422 5.97949 3.92188
|
||||||
|
c1.61133 0.84668 2.95117 1.31641 4.02246 1.41211c1.07227 0.0927734 1.92773 -0.170898 2.56641 -0.792969c0.639648 -0.624023 1.17578 -1.51953 1.60742 -2.69238zM361.474 91.7939c0.163086 -0.733398 0.166016 -1.43848 0.00683594 -2.11621
|
||||||
|
c-0.163086 -0.676758 -0.548828 -1.44531 -1.15625 -2.30566c-0.609375 -0.860352 -1.44727 -1.83203 -2.51172 -2.91699c-1.06836 -1.08496 -2.48242 -2.38477 -4.24609 -3.90137c-2.19336 -1.88477 -4.05078 -3.34473 -5.57324 -4.38477
|
||||||
|
c-1.52441 -1.04004 -2.77832 -1.71582 -3.7666 -2.02539c-0.989258 -0.308594 -1.74414 -0.269531 -2.26758 0.12207c-0.523438 0.392578 -0.90625 1.05664 -1.15137 1.99023l-35.8848 138.773c-0.220703 0.685547 -0.257812 1.37793 -0.112305 2.07617
|
||||||
|
c0.144531 0.695312 0.507812 1.46191 1.09082 2.30078c0.582031 0.835938 1.43262 1.82031 2.55176 2.95215c1.12012 1.12988 2.53516 2.42969 4.24609 3.90137c2.24512 1.92969 4.11816 3.40234 5.61328 4.41992c1.49707 1.0166 2.72559 1.66797 3.68555 1.95605
|
||||||
|
c0.961914 0.286133 1.7041 0.234375 2.22656 -0.157227c0.523438 -0.393555 0.935547 -1.0332 1.23242 -1.9209z" />
|
||||||
|
</font>
|
||||||
|
</defs></svg>
|
After Width: | Height: | Size: 28 KiB |
BIN
static/images/accordion_arrows.png
Executable file
After Width: | Height: | Size: 184 B |
BIN
static/images/blank.gif
Executable file
After Width: | Height: | Size: 43 B |
BIN
static/images/calendar_arrows.png
Executable file
After Width: | Height: | Size: 173 B |
BIN
static/images/combo_arrow.png
Executable file
After Width: | Height: | Size: 117 B |
BIN
static/images/datagrid_icons.png
Executable file
After Width: | Height: | Size: 307 B |
BIN
static/images/datebox_arrow.png
Executable file
After Width: | Height: | Size: 626 B |
BIN
static/images/layout_arrows.png
Executable file
After Width: | Height: | Size: 319 B |
BIN
static/images/linkbutton_bg.png
Executable file
After Width: | Height: | Size: 1.2 KiB |
BIN
static/images/loading.gif
Executable file
After Width: | Height: | Size: 1.7 KiB |
BIN
static/images/menu_arrows.png
Executable file
After Width: | Height: | Size: 160 B |
BIN
static/images/messager_icons.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
static/images/pagination_icons.png
Executable file
After Width: | Height: | Size: 628 B |
BIN
static/images/panel_tools.png
Executable file
After Width: | Height: | Size: 852 B |
BIN
static/images/passwordbox_close.png
Normal file
After Width: | Height: | Size: 159 B |
BIN
static/images/passwordbox_open.png
Normal file
After Width: | Height: | Size: 165 B |
BIN
static/images/searchbox_button.png
Executable file
After Width: | Height: | Size: 813 B |
BIN
static/images/slider_handle.png
Executable file
After Width: | Height: | Size: 863 B |
BIN
static/images/spinner_arrows.png
Executable file
After Width: | Height: | Size: 149 B |
BIN
static/images/tabs_icons.png
Executable file
After Width: | Height: | Size: 150 B |
BIN
static/images/tagbox_icons.png
Normal file
After Width: | Height: | Size: 134 B |
BIN
static/images/tree_icons.png
Executable file
After Width: | Height: | Size: 3.0 KiB |
BIN
static/images/validatebox_warning.png
Executable file
After Width: | Height: | Size: 921 B |
692
static/jeasyui/changelog.txt
Executable file
|
@ -0,0 +1,692 @@
|
||||||
|
Version 1.9.x
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* layout: The icon on the collapsed panel is overlaped by title. fixed.
|
||||||
|
* propertygrid: The css style of the row expander will affact that in the detailview. fixed.
|
||||||
|
* combogrid: The 'getValues' method returns incorrect values sometimes. fixed.
|
||||||
|
* Improvement
|
||||||
|
* datagrid: The 'sorter' function on the column accepts the entire row as the sorting parameters.
|
||||||
|
* datagrid: Add 'hformatter' and 'hstyler' properties for the colomns.
|
||||||
|
* datebox: Add 'getDate' and 'setDate' methods.
|
||||||
|
* pagination: Add 'onBeforeSelectPage' event.
|
||||||
|
* combo: Prevent from conflicting with svg.
|
||||||
|
* window: Add 'fixed' property.
|
||||||
|
* timepicker: Add 'hour24' property.
|
||||||
|
* layout: Add 'stopCollapsing' method.
|
||||||
|
|
||||||
|
Version 1.9.0
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* datagrid: Slow scrolling with mousewheel on frozen columns. fixed.
|
||||||
|
* datagrid: The 'rowStyler' function is called on empty row. fixed.
|
||||||
|
* linkbutton: Calling 'disable' method still can submit the form. fixed.
|
||||||
|
* combotree: The 'onBeforeSelect' event fires twice while selecting a node. fixed.
|
||||||
|
* combotreegrid: The 'onSelect' event fires twice while selecting a row. fixed.
|
||||||
|
* Improvement
|
||||||
|
* checkbox: Add 'readonly' property.
|
||||||
|
* radiobutton: Add 'readonly' property.
|
||||||
|
* Compatible with jQuery 3.x.
|
||||||
|
* New Plugins
|
||||||
|
* timepicker: Allow the user to choose time on a clock.
|
||||||
|
|
||||||
|
Version 1.8.0
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* treegrid: The 'pageNumber' can't be initialized with the specified value. fixed.
|
||||||
|
* checkbox: The disabled checkbox has no disabled label. fixed.
|
||||||
|
* Improvement
|
||||||
|
* switchbutton: Add the 'label','labelAlign','labelPosition','labelWidth' properties.
|
||||||
|
* switchbutton: Accept 'tabindex' attribute to get focus when the user press TAB key.
|
||||||
|
* form: The 'onChange' event is available for all the form component.
|
||||||
|
* calendar: The 'Date' property is available to support the hijri date.
|
||||||
|
* textbox: The floating label is available.
|
||||||
|
|
||||||
|
Version 1.7.0
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* sidemenu: The tooltip has a wrong position when the 'floatMenuPosition' is set to 'left'. fixed.
|
||||||
|
* datagrid: The horizontal scrollbar has a wrong state when the 'showHeader' is set to true. fixed.
|
||||||
|
* combo: The initialized value will trigger the form's 'onChange' event when the 'multiple' is set to true. fixed.
|
||||||
|
* panel: The horizontal panel doesn't work normally when 'noheader' property is set to true. fixed.
|
||||||
|
* pagination: The extended buttons may lose in IE when rebuild the component. fixed.
|
||||||
|
* Improvement
|
||||||
|
* tree: Add 'findBy' method to find a node by any fields.
|
||||||
|
* tree: The 'find' method is enhanced to find a node easily.
|
||||||
|
* combo: Add 'panelValign' property.
|
||||||
|
* datagrid: The sorting parameters will be ignored when the 'remoteSort' is set to false.
|
||||||
|
* timespinner: Add 'hour12' property to display in 12 hour format.
|
||||||
|
|
||||||
|
Version 1.6.0
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* maskedbox: The component does not accept numeric keypad. fixed.
|
||||||
|
* combogrid: When selecting multiple records, the datagrid will scroll to the last checked record. fixed.
|
||||||
|
* Improvement
|
||||||
|
* Compatible with jQuery 3.x.
|
||||||
|
* tabs: The 'toolPosition' property can accept 'top' and 'bottom' values.
|
||||||
|
* textbox: The textbox label has the animating feature when focus or blur on it.
|
||||||
|
* tooltip: Add 'valign' property.
|
||||||
|
* tree: The node class can be initialized by setting the 'nodeCls' in the data.
|
||||||
|
* New Plugins
|
||||||
|
* sidemenu: The sidemenu is created from accordion and tree plugins. It builds a collapsible menu with some categories.
|
||||||
|
* radiobutton: This plugin provides a round interface to select one option from a number of options.
|
||||||
|
* checkbox: This plugin allows a user to select a value from a small set of options.
|
||||||
|
|
||||||
|
Version 1.5.5
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* tabs: The selecting history has wrong order when the title contains complex elements. fixed.
|
||||||
|
* combo: The drop-down panel may not be hidden if a bigger 'delay' value is set. fixed.
|
||||||
|
* layout: The expanding panel does not collapse when move mouse quickly away from it. fixed.
|
||||||
|
* tagbox: The tagbox and the label don't stay in the same line. fixed.
|
||||||
|
* Improvement
|
||||||
|
* combo: The 'blur' event handler is attached to the 'inputEvents' property.
|
||||||
|
* numberbox: The 'cloneFrom' method is available.
|
||||||
|
* slider: The 'step' property can be set with a floating number.
|
||||||
|
* menu: The 'findItem' method allows the user to find menu item by any parameters.
|
||||||
|
* menubutton: Add 'showEvent' and 'hideEvent' properties.
|
||||||
|
* New Plugins
|
||||||
|
* maskedbox: The maskedbox enforces its structure as the user types.
|
||||||
|
|
||||||
|
Version 1.5.4
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* combotreegrid: The 'onChange' event does not fire when entering values on the inputing box. fixed.
|
||||||
|
* combobox: Clicking on the drop-down panel will jump to the bottom of body on win10 IE11. fixed.
|
||||||
|
* datebox: Clicking on the 'Today' button doesn't trigger the 'onSelect' event. fixed.
|
||||||
|
* propertygrid: The 'getChanges' method doesn't work after editing the only one row. fixed.
|
||||||
|
* Improvement
|
||||||
|
* combo: Add the 'panelEvents' property.
|
||||||
|
* combo: Attach the default 'mousedown' event handler.
|
||||||
|
* combobox: The 'setValues' method can be called to initialize the displaying text.
|
||||||
|
* combotreegrid: Press ENTER key to select the highlighted rows.
|
||||||
|
* panel: Improve the resizing performance.
|
||||||
|
* filebox: The 'files' method allows the user to get the selected file list.
|
||||||
|
* searchbox: Improvent the 'selectName' method.
|
||||||
|
|
||||||
|
Version 1.5.3
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* combobox: The 'iconCls' property can not be parsed from the <option> markup. fixed.
|
||||||
|
* combobox: Clicking scrollbar will cause the drop-down panel to be hidden in IE. fixed.
|
||||||
|
* pagination: The pagination height will shrink when the 'displayMsg' property is set to false. fixed.
|
||||||
|
* tabs: The tab panel takes a wrong 'data' parameter in the 'onLoad' event. fixed.
|
||||||
|
* Improvement
|
||||||
|
* draggable: Add 'onEndDrag' event.
|
||||||
|
* resizable: Retrieve more than one resizing directions with different edges.
|
||||||
|
* datagrid: Add 'resizeEdge' property.
|
||||||
|
* datagrid: Avoid the memory leaks.
|
||||||
|
* combo: The 'originalValue' property value is corrected in multiple mode.
|
||||||
|
* form: Add the tagbox to the form fields.
|
||||||
|
* tagbox: Add the 'reset' method.
|
||||||
|
* progress: Increase the response time to open and close the progress message window.
|
||||||
|
|
||||||
|
Version 1.5.2
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* form: The initialized value of the inputing box will disappear after calling the 'reset' method. fixed.
|
||||||
|
* textbox: Calling the 'destroy' method does not clean the field label. fixed.
|
||||||
|
* datagrid: Calling the 'selectRow' method on an unexisting row causes undesired record set. fixed.
|
||||||
|
* Improvement
|
||||||
|
* datagrid: The ctrl selection is supported on Mac keyboards.
|
||||||
|
* datagrid: The 'scrollOnSelect' property is available for the user to determine whether to scroll to the specified row when selecting it.
|
||||||
|
* combotree: Add the 'textField' property.
|
||||||
|
* combotreegrid: Add the 'textField' property.
|
||||||
|
* pagination: Add 'showPageInfo' property.
|
||||||
|
* panel: Add 'halign' and 'titleDirection' properties to allow the user to align the panel header to left or right side.
|
||||||
|
* accordion: Add 'halign' property to build the horizontal accordion.
|
||||||
|
* tagbox: The 'required' propery can be applied to validate whether the value is empty.
|
||||||
|
|
||||||
|
Version 1.5.1
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* datagrid: The selecting and checking flags will lose after calling 'updateRow' method. fixed.
|
||||||
|
* tabs: The trip tools have a wrong position when calling 'update' method. fixed.
|
||||||
|
* window: When the height is set to 'auto', it will disappear after moving the window. fixed.
|
||||||
|
* messager: When display the progress message window and then close it immediately, an exception occurs. fixed.
|
||||||
|
* form: The 'clear' method does not clear the selected drop-down items of the combobox. fixed.
|
||||||
|
* Improvement
|
||||||
|
* textbox: The 'cls' property is available to add a custom style to textbox.
|
||||||
|
* numberbox: Allow the user to format currency in Italian.
|
||||||
|
* combo: Add 'multivalue' property that allows the user to determine how to submit the multiple values.
|
||||||
|
* combobox: Add 'reversed' property.
|
||||||
|
* combobox: Add 'onClick' event.
|
||||||
|
* combogrid: Add 'reversed' property.
|
||||||
|
* treegrid: Enable multiple selection with the shift key.
|
||||||
|
* New Plugins
|
||||||
|
* tagbox: Allows the user to add tags to a form field.
|
||||||
|
|
||||||
|
Version 1.5
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* combobox: The 'onSelect' event does not fire when load data that contains the selected item. fixed.
|
||||||
|
* datagrid: The 'updateRow' method sometimes does not work properly when the field is set to a blank value. fixed.
|
||||||
|
* Improvement
|
||||||
|
* A label can be associated to any form fields.
|
||||||
|
* combobox: Enhance the 'select' and 'unselect' rules on the drop-down items.
|
||||||
|
* combobox: Add 'limitToList' property to limit the inputed values to the listed items.
|
||||||
|
* combogrid: Allow the user to clone the component quickly.
|
||||||
|
* form: Add the 'dirty' property that allows the user to submit the only changed fields.
|
||||||
|
* form: Add 'resetDirty' method.
|
||||||
|
* datagrid: Allow the user to display a message when there are no records to be shown.
|
||||||
|
* textbox: Add 'label','labelWidth','labelPosition' and 'labelAlign' properties.
|
||||||
|
* spinner: Add 'spinAlign' property.
|
||||||
|
* calendar: Allow the user to display week number of the year.
|
||||||
|
* window: Add 'constrain' property.
|
||||||
|
* New Plugins
|
||||||
|
* passwordbox: The plugin that allows the user to input passwords with nice feedback.
|
||||||
|
* combotreegrid: Combines combobox with drop-down treegrid component.
|
||||||
|
|
||||||
|
Version 1.4.5
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* datagrid: The 'getChanges' method does not return the updated rows after calling 'updateRow' method. fixed.
|
||||||
|
* treegrid: The 'onLoadSuccess' event fires when append or insert a row. fixed.
|
||||||
|
* tree: The 'onLoadSuccess' event fires when append or insert a node. fixed.
|
||||||
|
* Improvement
|
||||||
|
* window: The displaying style can be customized.
|
||||||
|
* window: The 'border' property allows the user to set different border style.
|
||||||
|
* navpanel: The 'href' property is enabled to load content from remote server.
|
||||||
|
* combotree: The 'setValue' and 'setValues' methods accept the paremter values in 'id' and 'text' pairs
|
||||||
|
* combobox: Add 'showItemIcon' property.
|
||||||
|
* combobox: Set 'groupPosition' property to 'sticky' to stick the item group to the top of drop-down panel.
|
||||||
|
* messager: Pressing ENTER key on input box will trigger click event of the first button.
|
||||||
|
* validatebox: Add 'editable',disabled' and 'readonly' properties.
|
||||||
|
* validatebox: Add 'enable','disable','readonly' methods.
|
||||||
|
* validatebox: Allow the user to determine how to display the error message.
|
||||||
|
* filebox: Add 'accept' and 'multiple' properties.
|
||||||
|
* form: Add 'iframe' property and 'onProgress' event.
|
||||||
|
* treegrid: Add cascade checkbox selection.
|
||||||
|
* treegrid: Add 'getCheckedNodes','checkNode' and 'uncheckNode' methods.
|
||||||
|
|
||||||
|
Version 1.4.4
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* filebox: The 'clear' and 'reset' methods do not work properly in IE9. fixed.
|
||||||
|
* messager: After calling $.messager.progress() with no arguments, the $.messager.progress('close') does not work properly. fixed.
|
||||||
|
* timespinner: The value does not display properly in IE8 while clicking the spin buttons. fixed.
|
||||||
|
* window: The window does not display when calling 'options' method in 'onMove' event. fixed.
|
||||||
|
* treegrid: The 'getLevel' method does not accept the parameter value of 0. fixed.
|
||||||
|
* Improvement
|
||||||
|
* layout: The 'collapsedContent','expandMode' and 'hideExpandTool' properties are supported in region panel.
|
||||||
|
* layout: The 'hideCollapsedContent' property can be set to display the vertical title bar on collapsed panel.
|
||||||
|
* layout: Add 'onCollapse','onExpand','onAdd','onRemove' events.
|
||||||
|
* datagrid: Display the 'up-down' icon on the sortable columns.
|
||||||
|
* datagrid: Add 'gotoPage' method.
|
||||||
|
* propertygrid: Add 'groups' method that allows to get all the data groups.
|
||||||
|
* messager: Auto scroll feature is supported when displaying long messages.
|
||||||
|
* tabs: The 'disabled' property is supported when defining a disabled tab panel.
|
||||||
|
* tabs: The percentange size is supported now.
|
||||||
|
|
||||||
|
Version 1.4.3
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* textbox: The 'setText' method does not accept value 0. fixed.
|
||||||
|
* timespinner: When running in IE11, the error occurs when clicking on the empty textbox. fixed.
|
||||||
|
* tabs: The 'update' method can not update only the panel body. fixed.
|
||||||
|
* Improvement
|
||||||
|
* combobox: Improve the performance of displaying the drop-down panel.
|
||||||
|
* combogrid: Remember the displaying text when the drop-down datagrid go to other pages.
|
||||||
|
* combogrid: The 'setValue' and 'setValues' methods accept a key-value object.
|
||||||
|
* window: The inline window's mask can auto-stretch its size to fill parent container.
|
||||||
|
* tabs: The 'showTool' and 'hideTool' methods are available for users to show or hide the tools.
|
||||||
|
* layout: Allow the user to override the 'cls','headerCls' and 'bodyCls' property values.
|
||||||
|
* New Plugins
|
||||||
|
* switchbutton: The switch button with two states:'on' and 'off'.
|
||||||
|
|
||||||
|
Version 1.4.2
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* treegrid: The column will restore its size to original size after recreating the treegrid. fixed.
|
||||||
|
* Improvement
|
||||||
|
* draggable: Add 'delay' property that allows the user to delay the drag operation.
|
||||||
|
* tree: Add 'filter' property and 'doFilter' method.
|
||||||
|
* tabs: The 'add' method allows the user to insert a tab panel at a specified index.
|
||||||
|
* tabs: The user can determine what tab panel can be selected.
|
||||||
|
* tabs: Add 'justified' and 'narrow' properties.
|
||||||
|
* layout: Add 'unsplit' and 'split' methods.
|
||||||
|
* messager: Keyboard navigation features are supported now.
|
||||||
|
* form: Add 'onChange' event.
|
||||||
|
* combobox: Add 'queryParams' property.
|
||||||
|
* slider: Add 'range' property.
|
||||||
|
* menu: Add 'itemHeight','inline','noline' properties.
|
||||||
|
* panel: The 'header' property allows the user to customize the panel header.
|
||||||
|
* menubutton: Add 'hasDownArrow' property.
|
||||||
|
* New Plugins
|
||||||
|
* datalist: The plugin to render items in a list.
|
||||||
|
* navpanel: The root component for the mobile page.
|
||||||
|
* mobile: The plugin to provide the mobile page stack management and navigation.
|
||||||
|
|
||||||
|
Version 1.4.1
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* combogrid: The combogrid has different height than other combo components. fixed.
|
||||||
|
* datagrid: The row element loses some class style value after calling 'updateRow' method. fixed.
|
||||||
|
* menubutton: Calling 'enable' method on a disabled button can not work well. fixed.
|
||||||
|
* form: The filebox components in the form do not work correctly after calling 'clear' method. fixed.
|
||||||
|
* Improvement
|
||||||
|
* tabs: The 'update' method accepts 'type' option that allows the user to update the header,body,or both.
|
||||||
|
* panel: Add 'openAnimation','openDuration','closeAnimation' and 'closeDuration' properties to set the animation for opening or closing a panel.
|
||||||
|
* panel: Add 'footer' property that allows the user to add a footer bar to the bottom of panel.
|
||||||
|
* datagrid: Calling 'endEdit' method will accept the editing value correctly.
|
||||||
|
* datagrid: Add 'onBeforeSelect','onBeforeCheck','onBeforeUnselect','onBeforeUncheck' events.
|
||||||
|
* propertygrid: The user can edit a row by calling 'beginEdit' method.
|
||||||
|
* datebox: Add 'cloneFrom' method to create the datebox component quickly.
|
||||||
|
* datetimebox: Add 'cloneFrom' method to create the datetimebox component quickly.
|
||||||
|
|
||||||
|
Version 1.4
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* menu: The menu should not has a correct height when removed a menu item. fixed.
|
||||||
|
* datagrid: The 'fitColumns' method does not work normally when the datarid width is too small. fixed.
|
||||||
|
* Improvement
|
||||||
|
* The fluid/percentange size is supported now for all easyui components.
|
||||||
|
* menu: Add 'showItem', 'hideItem' and 'resize' methods.
|
||||||
|
* menu: Auto resize the height upon the window size.
|
||||||
|
* menu: Add 'duration' property that allows the user to define duration time in milliseconds to hide menu.
|
||||||
|
* validatebox: Add 'onBeforeValidate' and 'onValidate' events.
|
||||||
|
* combo: Extended from textbox now.
|
||||||
|
* combo: Add 'panelMinWidth','panelMaxWidth','panelMinHeight' and 'panelMaxHeight' properties.
|
||||||
|
* searchbox: Extended from textbox now.
|
||||||
|
* tree: The 'getRoot' method will return the top parent node of a specified node if pass a 'nodeEl' parameter.
|
||||||
|
* tree: Add 'queryParams' property.
|
||||||
|
* datetimebox: Add 'spinnerWidth' property.
|
||||||
|
* panel: Add 'doLayout' method to cause the panel to lay out its components.
|
||||||
|
* panel: Add 'clear' method to clear the panel's content.
|
||||||
|
* datagrid: The user is allowed to assign percent width to columns.
|
||||||
|
* form: Add 'ajax','novalidate' and 'queryParams' properties.
|
||||||
|
* linkbutton: Add 'resize' method.
|
||||||
|
* New Plugins
|
||||||
|
* textbox: A enhanced input field that allows users build their form easily.
|
||||||
|
* datetimespinner: A date and time spinner that allows to pick a specific day.
|
||||||
|
* filebox: The filebox component represents a file field of the forms.
|
||||||
|
|
||||||
|
Version 1.3.6
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* treegrid: The 'getChecked' method can not return correct checked rows. fixed.
|
||||||
|
* tree: The checkbox does not display properly on async tree when 'onlyLeafCheck' property is true. fixed.
|
||||||
|
* Improvement
|
||||||
|
* treegrid: All the selecting and checking methods are extended from datagrid component.
|
||||||
|
* linkbutton: The icon alignment is fully supported, possible values are: 'top','bottom','left','right'.
|
||||||
|
* linkbutton: Add 'size' property, possible values are: 'small','large'.
|
||||||
|
* linkbutton: Add 'onClick' event.
|
||||||
|
* menubutton: Add 'menuAlign' property that allows the user set top level menu alignment.
|
||||||
|
* combo: Add 'panelAlign' property, possible values are: 'left','right'.
|
||||||
|
* calendar: The 'formatter','styler' and 'validator' options are available to custom the calendar dates.
|
||||||
|
* calendar: Add 'onChange' event.
|
||||||
|
* panel: Add 'method','queryParams' and 'loader' options.
|
||||||
|
* panel: Add 'onLoadError' event.
|
||||||
|
* datagrid: Add 'onBeginEdit' event that fires when a row goes into edit mode.
|
||||||
|
* datagrid: Add 'onEndEdit' event that fires when finishing editing but before destroying editors.
|
||||||
|
* datagrid: Add 'sort' method and 'onBeforeSortColumn' event.
|
||||||
|
* datagrid: The 'combogrid' editor has been integrated into datagrid.
|
||||||
|
* datagrid: Add 'ctrlSelect' property that only allows multi-selection when ctrl+click is used.
|
||||||
|
* slider: Add 'converter' option that allows users determine how to convert a value to the slider position or the slider position to the value.
|
||||||
|
* searchbox: Add 'disabled' property.
|
||||||
|
* searchbox: Add 'disable','enable','clear','reset' methods.
|
||||||
|
* spinner: Add 'readonly' property, 'readonly' method and 'onChange' event.
|
||||||
|
|
||||||
|
Version 1.3.5
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* searchbox: The 'searcher' function can not offer 'name' parameter value correctly. fixed.
|
||||||
|
* combo: The 'isValid' method can not return boolean value. fixed.
|
||||||
|
* combo: Clicking combo will trigger the 'onHidePanel' event of other combo components that have hidden drop-down panels. fixed.
|
||||||
|
* combogrid: Some methods can not inherit from combo. fixed.
|
||||||
|
* Improvement
|
||||||
|
* datagrid: Improve performance on checking rows.
|
||||||
|
* menu: Allows to append a menu separator.
|
||||||
|
* menu: Add 'hideOnUnhover' property to indicate if the menu should be hidden when mouse exits it.
|
||||||
|
* slider: Add 'clear' and 'reset' methods.
|
||||||
|
* tabs: Add 'unselect' method that will trigger 'onUnselect' event.
|
||||||
|
* tabs: Add 'selected' property to specify what tab panel will be opened.
|
||||||
|
* tabs: The 'collapsible' property of tab panel is supported to determine if the tab panel can be collapsed.
|
||||||
|
* tabs: Add 'showHeader' property, 'showHeader' and 'hideHeader' methods.
|
||||||
|
* combobox: The 'disabled' property can be used to disable some items.
|
||||||
|
* tree: Improve loading performance.
|
||||||
|
* pagination: The 'layout' property can be used to customize the pagination layout.
|
||||||
|
* accordion: Add 'unselect' method that will trigger 'onUnselect' event.
|
||||||
|
* accordion: Add 'selected' and 'multiple' properties.
|
||||||
|
* accordion: Add 'getSelections' method.
|
||||||
|
* datebox: Add 'sharedCalendar' property that allows multiple datebox components share one calendar component.
|
||||||
|
|
||||||
|
Version 1.3.4
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* combobox: The onLoadSuccess event fires when parsing empty local data. fixed.
|
||||||
|
* form: Calling 'reset' method can not reset datebox field. fixed.
|
||||||
|
* Improvement
|
||||||
|
* mobile: The context menu and double click features are supported on mobile devices.
|
||||||
|
* combobox: The 'groupField' and 'groupFormatter' options are available to display items in groups.
|
||||||
|
* tree: When append or insert nodes, the 'data' parameter accepts one or more nodes data.
|
||||||
|
* tree: The 'getChecked' method accepts a single 'state' or an array of 'state'.
|
||||||
|
* tree: Add 'scrollTo' method.
|
||||||
|
* datagrid: The 'multiSort' property is added to support multiple column sorting.
|
||||||
|
* datagrid: The 'rowStyler' and column 'styler' can return CSS class name or inline styles.
|
||||||
|
* treegrid: Add 'load' method to load data and navigate to the first page.
|
||||||
|
* tabs: Add 'tabWidth' and 'tabHeight' properties.
|
||||||
|
* validatebox: The 'novalidate' property is available to indicate whether to perform the validation.
|
||||||
|
* validatebox: Add 'enableValidation' and 'disableValidation' methods.
|
||||||
|
* form: Add 'enableValidation' and 'disableValidation' methods.
|
||||||
|
* slider: Add 'onComplete' event.
|
||||||
|
* pagination: The 'buttons' property accepts the existing element.
|
||||||
|
|
||||||
|
Version 1.3.3
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* datagrid: Some style features are not supported by column styler function. fixed.
|
||||||
|
* datagrid: IE 31 stylesheet limit. fixed.
|
||||||
|
* treegrid: Some style features are not supported by column styler function. fixed.
|
||||||
|
* menu: The auto width of menu item displays incorrect in ie6. fixed.
|
||||||
|
* combo: The 'onHidePanel' event can not fire when clicked outside the combo area. fixed.
|
||||||
|
* Improvement
|
||||||
|
* datagrid: Add 'scrollTo' and 'highlightRow' methods.
|
||||||
|
* treegrid: Enable treegrid to parse data from <tbody> element.
|
||||||
|
* combo: Add 'selectOnNavigation' and 'readonly' options.
|
||||||
|
* combobox: Add 'loadFilter' option to allow users to change data format before loading into combobox.
|
||||||
|
* tree: Add 'onBeforeDrop' callback event.
|
||||||
|
* validatebox: Dependent on tooltip plugin now, add 'deltaX' property.
|
||||||
|
* numberbox: The 'filter' options can be used to determine if the key pressed was accepted.
|
||||||
|
* linkbutton: The group button is available.
|
||||||
|
* layout: The 'minWidth','maxWidth','minHeight','maxHeight' and 'collapsible' properties are available for region panel.
|
||||||
|
* New Plugins
|
||||||
|
* tooltip: Display a popup message when moving mouse over an element.
|
||||||
|
|
||||||
|
Version 1.3.2
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* datagrid: The loading message window can not be centered when changing the width of datagrid. fixed.
|
||||||
|
* treegrid: The 'mergeCells' method can not work normally. fixed.
|
||||||
|
* propertygrid: Calling 'endEdit' method to stop editing a row will cause errors. fixed.
|
||||||
|
* tree: Can not load empty data when 'lines' property set to true. fixed.
|
||||||
|
* Improvement
|
||||||
|
* RTL feature is supported now.
|
||||||
|
* tabs: Add 'scrollBy' method to scroll the tab header by the specified amount of pixels
|
||||||
|
* tabs: Add 'toolPosition' property to set tab tools to left or right.
|
||||||
|
* tabs: Add 'tabPosition' property to define the tab position, possible values are: 'top','bottom','left','right'.
|
||||||
|
* datagrid: Add a column level property 'order' that allows users to define different default sort order per column.
|
||||||
|
* datagrid: Add a column level property 'halign' that allows users to define how to align the column header.
|
||||||
|
* datagrid: Add 'resizeHandle' property to define the resizing column position, by grabbing the left or right edge of the column.
|
||||||
|
* datagrid: Add 'freezeRow' method to freeze some rows that will always be displayed at the top when the datagrid is scrolled down.
|
||||||
|
* datagrid: Add 'clearChecked' method to clear all checked records.
|
||||||
|
* datagrid: Add 'data' property to initialize the datagrid data.
|
||||||
|
* linkbutton: Add 'iconAlgin' property to define the icon position, supported values are: 'left','right'.
|
||||||
|
* menu: Add 'minWidth' property.
|
||||||
|
* menu: The menu width can be automatically calculated.
|
||||||
|
* tree: New events are available including 'onBeforeDrag','onStartDrag','onDragEnter','onDragOver','onDragLeave',etc.
|
||||||
|
* combo: Add 'height' property to allow users to define the height of combo.
|
||||||
|
* combo: Add 'reset' method.
|
||||||
|
* numberbox: Add 'reset' method.
|
||||||
|
* spinner: Add 'reset' method.
|
||||||
|
* spinner: Add 'height' property to allow users to define the height of spinner.
|
||||||
|
* searchbox: Add 'height' property to allow users to define the height of searchbox.
|
||||||
|
* form: Add 'reset' method.
|
||||||
|
* validatebox: Add 'delay' property to delay validating from the last inputting value.
|
||||||
|
* validatebox: Add 'tipPosition' property to define the tip position, supported values are: 'left','right'.
|
||||||
|
* validatebox: Multiple validate rules on a field is supported now.
|
||||||
|
* slider: Add 'reversed' property to determine if the min value and max value will switch their positions.
|
||||||
|
* progressbar: Add 'height' property to allow users to define the height of progressbar.
|
||||||
|
|
||||||
|
Version 1.3.1
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* datagrid: Setting the 'pageNumber' property is not valid. fixed.
|
||||||
|
* datagrid: The id attribute of rows isn't adjusted properly while calling 'insertRow' or 'deleteRow' method.
|
||||||
|
* dialog: When load content from 'href', the script will run twice. fixed.
|
||||||
|
* propertygrid: The editors that extended from combo can not accept its changed value. fixed.
|
||||||
|
* Improvement
|
||||||
|
* droppable: Add 'disabled' property.
|
||||||
|
* droppable: Add 'options','enable' and 'disable' methods.
|
||||||
|
* tabs: The tab panel tools can be changed by calling 'update' method.
|
||||||
|
* messager: When show a message window, the user can define the window position by applying 'style' property.
|
||||||
|
* window: Prevent script on window body from running twice.
|
||||||
|
* window: Add 'hcenter','vcenter' and 'center' methods.
|
||||||
|
* tree: Add 'onBeforeCheck' callback event.
|
||||||
|
* tree: Extend the 'getChecked' method to allow users to get 'checked','unchecked' or 'indeterminate' nodes.
|
||||||
|
* treegrid: Add 'update' method to update a specified node.
|
||||||
|
* treegrid: Add 'insert' method to insert a new node.
|
||||||
|
* treegrid: Add 'pop' method to remove a node and get the removed node data.
|
||||||
|
|
||||||
|
Version 1.3
|
||||||
|
-----------
|
||||||
|
* Bug
|
||||||
|
* combogrid: When set to 'remote' query mode, the 'queryParams' parameters can't be sent to server. fixed.
|
||||||
|
* combotree: The tree nodes on drop-down panel can not be unchecked while calling 'clear' method. fixed.
|
||||||
|
* datetimebox: Setting 'showSeconds' property to false cannot hide seconds info. fixed.
|
||||||
|
* datagrid: Calling 'mergeCells' method can't auto resize the merged cell while header is hidden. fixed.
|
||||||
|
* dialog: Set cache to false and load data via ajax, the content cannot be refreshed. fixed.
|
||||||
|
* Improvement
|
||||||
|
* The HTML5 'data-options' attribute is available for components to declare all custom options, including properties and events.
|
||||||
|
* More detailed documentation is available.
|
||||||
|
* panel: Prevent script on panel body from running twice.
|
||||||
|
* accordion: Add 'getPanelIndex' method.
|
||||||
|
* accordion: The tools can be added on panel header.
|
||||||
|
* datetimebox: Add 'timeSeparator' option that allows users to define the time separator.
|
||||||
|
* pagination: Add 'refresh' and 'select' methods.
|
||||||
|
* datagrid: Auto resize the column width to fit the contents when the column width is not defined.
|
||||||
|
* datagrid: Double click on the right border of columns to auto resize the columns to the contents in the columns.
|
||||||
|
* datagrid: Add 'autoSizeColumn' method that allows users to adjust the column width to fit the contents.
|
||||||
|
* datagrid: Add 'getChecked' method to get all rows where the checkbox has been checked.
|
||||||
|
* datagrid: Add 'selectOnCheck' and 'checkOnSelect' properties and some checking methods to enhance the row selections.
|
||||||
|
* datagrid: Add 'pagePosition' property to allow users to display pager bar at either top,bottom or both places of the grid.
|
||||||
|
* datagrid: The buffer view and virtual scroll view are supported to display large amounts of records without pagination.
|
||||||
|
* tabs: Add 'disableTab' and 'enableTab' methods to allow users to disable or enable a tab panel.
|
||||||
|
|
||||||
|
Version 1.2.6
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* tabs: Call 'add' method with 'selected:false' option, the added tab panel is always selected. fixed.
|
||||||
|
* treegrid: The 'onSelect' and 'onUnselect' events can't be triggered. fixed.
|
||||||
|
* treegrid: Cannot display zero value field. fixed.
|
||||||
|
* Improvement
|
||||||
|
* propertygrid: Add 'expandGroup' and 'collapseGroup' methods.
|
||||||
|
* layout: Allow users to create collapsed layout panels by assigning 'collapsed' property to true.
|
||||||
|
* layout: Add 'add' and 'remove' methods that allow users to dynamically add or remove region panel.
|
||||||
|
* layout: Additional tool icons can be added on region panel header.
|
||||||
|
* calendar: Add 'firstDay' option that allow users to set first day of week. Sunday is 0, Monday is 1, ...
|
||||||
|
* tree: Add 'lines' option, true to display tree lines.
|
||||||
|
* tree: Add 'loadFilter' option that allow users to change data format before loading into the tree.
|
||||||
|
* tree: Add 'loader' option that allow users to define how to load data from remote server.
|
||||||
|
* treegrid: Add 'onClickCell' and 'onDblClickCell' callback function options.
|
||||||
|
* datagrid: Add 'autoRowHeight' property that allow users to determine if set the row height based on the contents of that row.
|
||||||
|
* datagrid: Improve performance to load large data set.
|
||||||
|
* datagrid: Add 'loader' option that allow users to define how to load data from remote server.
|
||||||
|
* treegrid: Add 'loader' option that allow users to define how to load data from remote server.
|
||||||
|
* combobox: Add 'onBeforeLoad' callback event function.
|
||||||
|
* combobox: Add 'loader' option that allow users to define how to load data from remote server.
|
||||||
|
* Add support for other loading mode such as dwr,xml,etc.
|
||||||
|
* New Plugins
|
||||||
|
* slider: Allows the user to choose a numeric value from a finite range.
|
||||||
|
|
||||||
|
Version 1.2.5
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* tabs: When add a new tab panel with href property, the content page is loaded twice. fixed.
|
||||||
|
* form: Failed to call 'load' method to load form input with complex name. fixed.
|
||||||
|
* draggable: End drag in ie9, the cursor cannot be restored. fixed.
|
||||||
|
* Improvement
|
||||||
|
* panel: The tools can be defined via html markup.
|
||||||
|
* tabs: Call 'close' method to close specified tab panel, users can pass tab title or index of tab panel. Other methods such 'select','getTab' and 'exists' are similar to 'close' method.
|
||||||
|
* tabs: Add 'getTabIndex' method.
|
||||||
|
* tabs: Users can define mini tools on tabs.
|
||||||
|
* tree: The mouse must move a specified distance to begin drag and drop operation.
|
||||||
|
* resizable: Add 'options','enable' and 'disable' methods.
|
||||||
|
* numberbox: Allow users to change number format.
|
||||||
|
* datagrid: The subgrid is supported now.
|
||||||
|
* searchbox: Add 'selectName' method to select searching type name.
|
||||||
|
|
||||||
|
Version 1.2.4
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* menu: The menu position is wrong when scroll bar appears. fixed.
|
||||||
|
* accordion: Cannot display the default selected panel in jQuery 1.6.2. fixed.
|
||||||
|
* tabs: Cannot display the default selected tab panel in jQuery 1.6.2. fixed.
|
||||||
|
* Improvement
|
||||||
|
* menu: Allow users to disable or enable menu item.
|
||||||
|
* combo: Add 'delay' property to set the delay time to do searching from the last key input event.
|
||||||
|
* treegrid: The 'getEditors' and 'getEditor' methods are supported now.
|
||||||
|
* treegrid: The 'loadFilter' option is supported now.
|
||||||
|
* messager: Add 'progress' method to display a message box with a progress bar.
|
||||||
|
* panel: Add 'extractor' option to allow users to extract panel content from ajax response.
|
||||||
|
* New Plugins
|
||||||
|
* searchbox: Allow users to type words into box and do searching operation.
|
||||||
|
* progressbar: To display the progress of a task.
|
||||||
|
|
||||||
|
Version 1.2.3
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* window: Cannot resize the window with iframe content. fixed.
|
||||||
|
* tree: The node will be removed when dragging to its child. fixed.
|
||||||
|
* combogrid: The onChange event fires multiple times. fixed.
|
||||||
|
* accordion: Cannot add batch new panels when animate property is set to true. fixed.
|
||||||
|
* Improvement
|
||||||
|
* treegrid: The footer row and row styler features are supported now.
|
||||||
|
* treegrid: Add 'getLevel','reloadFooter','getFooterRows' methods.
|
||||||
|
* treegrid: Support root nodes pagination and editable features.
|
||||||
|
* datagrid: Add 'getFooterRows','reloadFooter','insertRow' methods and improve editing performance.
|
||||||
|
* datagrid: Add 'loadFilter' option that allow users to change original source data to standard data format.
|
||||||
|
* draggable: Add 'onBeforeDrag' callback event function.
|
||||||
|
* validatebox: Add 'remote' validation type.
|
||||||
|
* combobox: Add 'method' option.
|
||||||
|
* New Plugins
|
||||||
|
* propertygrid: Allow users to edit property value in datagrid.
|
||||||
|
|
||||||
|
Version 1.2.2
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* datagrid: Apply fitColumns cannot work fine while set checkbox column. fixed.
|
||||||
|
* datagrid: The validateRow method cannot return boolean type value. fixed.
|
||||||
|
* numberbox: Cannot fix value in chrome when min or max property isn't defined. fixed.
|
||||||
|
* Improvement
|
||||||
|
* menu: Add some crud methods.
|
||||||
|
* combo: Add hasDownArrow property to determine whether to display the down arrow button.
|
||||||
|
* tree: Supports inline editing.
|
||||||
|
* calendar: Add some useful methods such as 'resize', 'moveTo' etc.
|
||||||
|
* timespinner: Add some useful methods.
|
||||||
|
* datebox: Refactoring based on combo and calendar plugin now.
|
||||||
|
* datagrid: Allow users to change row style in some conditions.
|
||||||
|
* datagrid: Users can use the footer row to display summary information.
|
||||||
|
* New Plugins
|
||||||
|
* datetimebox: Combines datebox with timespinner component.
|
||||||
|
|
||||||
|
Version 1.2.1
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* easyloader: Some dependencies cannot be loaded by their order. fixed.
|
||||||
|
* tree: The checkbox is setted incorrectly when removing a node. fixed.
|
||||||
|
* dialog: The dialog layout incorrectly when 'closed' property is setted to true. fixed.
|
||||||
|
* Improvement
|
||||||
|
* parser: Add onComplete callback function that can indicate whether the parse action is complete.
|
||||||
|
* menu: Add onClick callback function and some other methods.
|
||||||
|
* tree: Add some useful methods.
|
||||||
|
* tree: Drag and Drop feature is supported now.
|
||||||
|
* tree: Add onContextMenu callback function.
|
||||||
|
* tabs: Add onContextMenu callback function.
|
||||||
|
* tabs: Add 'tools' property that can create buttons on right bar.
|
||||||
|
* datagrid: Add onHeaderContextMenu and onRowContextMenu callback functions.
|
||||||
|
* datagrid: Custom view is supported.
|
||||||
|
* treegrid: Add onContextMenu callback function and append,remove methods.
|
||||||
|
|
||||||
|
Version 1.2
|
||||||
|
-------------
|
||||||
|
* Improvement
|
||||||
|
* tree: Add cascadeCheck,onlyLeafCheck properties and select event.
|
||||||
|
* combobox: Enable multiple selection.
|
||||||
|
* combotree: Enable multiple selection.
|
||||||
|
* tabs: Remember the trace of selection, when current tab panel is closed, the previous selected tab will be selected.
|
||||||
|
* datagrid: Extend from panel, so many properties defined in panel can be used for datagrid.
|
||||||
|
* New Plugins
|
||||||
|
* treegrid: Represent tabular data in hierarchical view, combines tree view and datagrid.
|
||||||
|
* combo: The basic component that allow user to extend their combo component such as combobox,combotree,etc.
|
||||||
|
* combogrid: Combines combobox with drop-down datagrid component.
|
||||||
|
* spinner: The basic plugin to create numberspinner,timespinner,etc.
|
||||||
|
* numberspinner: The numberbox that allow user to change value by clicking up and down spin buttons.
|
||||||
|
* timespinner: The time selector that allow user to quickly inc/dec a time.
|
||||||
|
|
||||||
|
Version 1.1.2
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* messager: When call show method in layout, the message window will be blocked. fixed.
|
||||||
|
* Improvement
|
||||||
|
* datagrid: Add validateRow method, remember the current editing row status when do editing action.
|
||||||
|
* datagrid: Add the ability to create merged cells.
|
||||||
|
* form: Add callback functions when loading data.
|
||||||
|
* panel,window,dialog: Add maximize,minimize,restore,collapse,expand methods.
|
||||||
|
* panel,tabs,accordion: The lazy loading feature is supported.
|
||||||
|
* tabs: Add getSelected,update,getTab methods.
|
||||||
|
* accordion: Add crud methods.
|
||||||
|
* linkbutton: Accept an id option to set the id attribute.
|
||||||
|
* tree: Enhance tree node operation.
|
||||||
|
|
||||||
|
Version 1.1.1
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* form: Cannot clear the value of combobox and combotree component. fixed.
|
||||||
|
* Improvement
|
||||||
|
* tree: Add some useful methods such as 'getRoot','getChildren','update',etc.
|
||||||
|
* datagrid: Add editable feature, improve performance while loading data.
|
||||||
|
* datebox: Add destroy method.
|
||||||
|
* combobox: Add destroy and clear method.
|
||||||
|
* combotree: Add destroy and clear method.
|
||||||
|
|
||||||
|
Version 1.1
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* messager: When call show method with timeout property setted, an error occurs while clicking the close button. fixed.
|
||||||
|
* combobox: The editable property of combobox plugin is invalid. fixed.
|
||||||
|
* window: The proxy box will not be removed when dragging or resizing exceed browser border in ie. fixed.
|
||||||
|
* Improvement
|
||||||
|
* menu: The menu item can use <a> markup to display a different page.
|
||||||
|
* tree: The tree node can use <a> markup to act as a tree menu.
|
||||||
|
* pagination: Add some event on refresh button and page list.
|
||||||
|
* datagrid: Add a 'param' parameter for reload method, with which users can pass query parameter when reload data.
|
||||||
|
* numberbox: Add required validation support, the usage is same as validatebox plugin.
|
||||||
|
* combobox: Add required validation support.
|
||||||
|
* combotree: Add required validation support.
|
||||||
|
* layout: Add some method that can get a region panel and attach event handlers.
|
||||||
|
* New Plugins
|
||||||
|
* droppable: A droppable plugin that supports drag drop operation.
|
||||||
|
* calendar: A calendar plugin that can either be embedded within a page or popup.
|
||||||
|
* datebox: Combines a textbox with a calendar that let users to select date.
|
||||||
|
* easyloader: A JavaScript loader that allows you to load plugin and their dependencies into your page.
|
||||||
|
|
||||||
|
Version 1.0.5
|
||||||
|
* Bug
|
||||||
|
* panel: The fit property of panel performs incorrectly. fixed.
|
||||||
|
* Improvement
|
||||||
|
* menu: Add a href attribute for menu item, with which user can display a different page in the current browser window.
|
||||||
|
* form: Add a validate method to do validation for validatebox component.
|
||||||
|
* dialog: The dialog can read collapsible,minimizable,maximizable and resizable attribute from markup.
|
||||||
|
* New Plugins
|
||||||
|
* validatebox: A validation plugin that checks to make sure the user's input value is valid.
|
||||||
|
|
||||||
|
Version 1.0.4
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* panel: When panel is invisible, it is abnormal when resized. fixed.
|
||||||
|
* panel: Memory leak in method 'destroy'. fixed.
|
||||||
|
* messager: Memory leak when messager box is closed. fixed.
|
||||||
|
* dialog: No onLoad event occurs when loading remote data. fixed.
|
||||||
|
* Improvement
|
||||||
|
* panel: Add method 'setTitle'.
|
||||||
|
* window: Add method 'setTitle'.
|
||||||
|
* dialog: Add method 'setTitle'.
|
||||||
|
* combotree: Add method 'getValue'.
|
||||||
|
* combobox: Add method 'getValue'.
|
||||||
|
* form: The 'load' method can load data and fill combobox and combotree field correctly.
|
||||||
|
|
||||||
|
Version 1.0.3
|
||||||
|
-------------
|
||||||
|
* Bug
|
||||||
|
* menu: When menu is show in a DIV container, it will be cropped. fixed.
|
||||||
|
* layout: If you collpase a region panel and then expand it immediately, the region panel will not show normally. fixed.
|
||||||
|
* accordion: If no panel selected then the first one will become selected and the first panel's body height will not set correctly. fixed.
|
||||||
|
* Improvement
|
||||||
|
* tree: Add some methods to support CRUD operation.
|
||||||
|
* datagrid: Toolbar can accept a new property named 'disabled' to disable the specified tool button.
|
||||||
|
* New Plugins
|
||||||
|
* combobox: Combines a textbox with a list of options that users are able to choose from.
|
||||||
|
* combotree: Combines combobox with drop-down tree component.
|
||||||
|
* numberbox: Make input element can only enter number char.
|
||||||
|
* dialog: rewrite the dialog plugin, dialog can contains toolbar and buttons.
|
404
static/jeasyui/datagrid-bufferview.js
Normal file
|
@ -0,0 +1,404 @@
|
||||||
|
$.extend($.fn.datagrid.defaults, {
|
||||||
|
onBeforeFetch: function(page){},
|
||||||
|
onFetch: function(page, rows){}
|
||||||
|
});
|
||||||
|
|
||||||
|
var bufferview = $.extend({}, $.fn.datagrid.defaults.view, {
|
||||||
|
onAfterRender : function(target){
|
||||||
|
},
|
||||||
|
render: function(target, container, frozen){
|
||||||
|
var state = $.data(target, 'datagrid');
|
||||||
|
var opts = state.options;
|
||||||
|
var rows = this.rows || [];
|
||||||
|
if (!rows.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var fields = $(target).datagrid('getColumnFields', frozen);
|
||||||
|
|
||||||
|
if (frozen){
|
||||||
|
if (!(opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length))){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var index = parseInt(opts.finder.getTr(target,'','last',(frozen?1:2)).attr('datagrid-row-index'))+1 || 0;
|
||||||
|
if(index >= state.data.total){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var table = ['<table class="datagrid-btable" cellspacing="0" cellpadding="0" border="0"><tbody>'];
|
||||||
|
for(var i=0; i<rows.length; i++) {
|
||||||
|
// get the class and style attributes for this row
|
||||||
|
var css = opts.rowStyler ? opts.rowStyler.call(target, index, rows[i]) : '';
|
||||||
|
var classValue = '';
|
||||||
|
var styleValue = '';
|
||||||
|
if (typeof css == 'string'){
|
||||||
|
styleValue = css;
|
||||||
|
} else if (css){
|
||||||
|
classValue = css['class'] || '';
|
||||||
|
styleValue = css['style'] || '';
|
||||||
|
}
|
||||||
|
|
||||||
|
var cls = 'class="datagrid-row ' + (index % 2 && opts.striped ? 'datagrid-row-alt ' : ' ') + classValue + '"';
|
||||||
|
var style = styleValue ? 'style="' + styleValue + '"' : '';
|
||||||
|
var rowId = state.rowIdPrefix + '-' + (frozen?1:2) + '-' + index;
|
||||||
|
table.push('<tr id="' + rowId + '" datagrid-row-index="' + index + '" ' + cls + ' ' + style + '>');
|
||||||
|
table.push(this.renderRow.call(this, target, fields, frozen, index, rows[i]));
|
||||||
|
table.push('</tr>');
|
||||||
|
|
||||||
|
// render the detail row
|
||||||
|
if (opts.detailFormatter){
|
||||||
|
table.push('<tr style="display:none;">');
|
||||||
|
if (frozen){
|
||||||
|
table.push('<td colspan=' + (fields.length+2) + ' style="border-right:0">');
|
||||||
|
} else {
|
||||||
|
table.push('<td colspan=' + (fields.length) + '>');
|
||||||
|
}
|
||||||
|
table.push('<div class="datagrid-row-detail">');
|
||||||
|
if (frozen){
|
||||||
|
table.push(' ');
|
||||||
|
} else {
|
||||||
|
table.push(opts.detailFormatter.call(target, index, rows[i]));
|
||||||
|
}
|
||||||
|
table.push('</div>');
|
||||||
|
table.push('</td>');
|
||||||
|
table.push('</tr>');
|
||||||
|
}
|
||||||
|
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
table.push('</tbody></table>');
|
||||||
|
|
||||||
|
$(container).append(table.join(''));
|
||||||
|
},
|
||||||
|
|
||||||
|
renderRow : function(target, fields, frozen, rowIndex, rowData) { //method backup from the source
|
||||||
|
var opts = $.data(target, "datagrid").options,
|
||||||
|
cc = [],
|
||||||
|
rowSpanField = typeof opts.columns[0]['rowSpanField'] !== 'undefined' ? opts.columns[0]['rowSpanField'] : '',
|
||||||
|
rowSpan = rowSpanField !== '' && typeof rowData[rowSpanField]['numRows'] !== 'undefined' ? rowData[rowSpanField]['numRows'] : 1;
|
||||||
|
|
||||||
|
if (frozen && opts.rownumbers) {
|
||||||
|
var _726 = rowIndex + 1;
|
||||||
|
if (opts.pagination) {
|
||||||
|
_726 += (opts.pageNumber - 1) * opts.pageSize;
|
||||||
|
}
|
||||||
|
cc.push("<td class=\"datagrid-td-rownumber\"><div class=\"datagrid-cell-rownumber\">" + _726 + "</div></td>");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < fields.length; i++) {
|
||||||
|
var _727 = fields[i];
|
||||||
|
var col = $(target).datagrid("getColumnOption", _727);
|
||||||
|
if (col) {
|
||||||
|
var _728 = rowData[_727];
|
||||||
|
var css = col.styler ? (col.styler(_728, rowData, rowIndex, col) || "") : "";
|
||||||
|
var _729 = "";
|
||||||
|
var _72a = "";
|
||||||
|
if (typeof css == "string") {
|
||||||
|
_72a = css;
|
||||||
|
} else {
|
||||||
|
if (css) {
|
||||||
|
_729 = css["class"] || "";
|
||||||
|
_72a = css["style"] || "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var cls = _729 ? "class=\"" + _729 + ( frozen ? 'frozen-td' : '' ) + "\"" : ( frozen ? 'class="frozen-td"' : '' );
|
||||||
|
var _72b = col.hidden ? "style=\"display:none;" + _72a + "\"" : (_72a ? "style=\"" + _72a + "\"" : "");
|
||||||
|
cc.push("<td field=\"" + _727 + "\" " + cls + " " + _72b + ">");
|
||||||
|
var _72b = "";
|
||||||
|
if (!col.checkbox) {
|
||||||
|
if (col.align) {
|
||||||
|
_72b += "text-align:" + col.align + ";";
|
||||||
|
}else if (col.expander){
|
||||||
|
style = "text-align:center;height:16px;";
|
||||||
|
}
|
||||||
|
if (!opts.nowrap) {
|
||||||
|
_72b += "white-space:normal;height:auto;";
|
||||||
|
} else {
|
||||||
|
if (opts.autoRowHeight) {
|
||||||
|
_72b += "height:auto;";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cc.push("<div style=\"" + _72b + "\" ");
|
||||||
|
cc.push(col.checkbox ? "class=\"datagrid-cell-check\"" : "class=\"datagrid-cell " + col.cellClass + "\"");
|
||||||
|
cc.push(">");
|
||||||
|
|
||||||
|
if (col.checkbox) {
|
||||||
|
cc.push("<input type=\"checkbox\" " + (rowData.checked ? "checked=\"checked\"" : ""));
|
||||||
|
cc.push(" name=\"" + _727 + "\" value=\"" + (_728 != undefined ? _728 : "") + "\">");
|
||||||
|
}else if (col.expander) {
|
||||||
|
//cc.push('<div style="text-align:center;width:16px;height:16px;">');
|
||||||
|
cc.push('<span class="datagrid-row-expander datagrid-row-expand" style="display:inline-block;width:16px;height:16px;cursor:pointer;" />');
|
||||||
|
//cc.push('</div>');
|
||||||
|
} else if (col.formatter){
|
||||||
|
// console.log('bufferview.renderRow():', col);
|
||||||
|
cc.push(col.formatter(_728, rowData, rowIndex));
|
||||||
|
// cc.push(col.formatter(_728, rowData, rowIndex, col));
|
||||||
|
} else {
|
||||||
|
cc.push(_728);
|
||||||
|
}
|
||||||
|
|
||||||
|
cc.push("</div>");
|
||||||
|
cc.push("</td>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cc.join("");
|
||||||
|
},
|
||||||
|
|
||||||
|
bindEvents: function(target){
|
||||||
|
var state = $.data(target, 'datagrid');
|
||||||
|
var dc = state.dc;
|
||||||
|
var opts = state.options;
|
||||||
|
var body = dc.body1.add(dc.body2);
|
||||||
|
var clickHandler = ($.data(body[0],'events')||$._data(body[0],'events')).click[0].handler;
|
||||||
|
body.unbind('click').bind('click', function(e){
|
||||||
|
var tt = $(e.target);
|
||||||
|
var tr = tt.closest('tr.datagrid-row');
|
||||||
|
if (!tr.length){return}
|
||||||
|
if (tt.hasClass('datagrid-row-expander')){
|
||||||
|
var rowIndex = parseInt(tr.attr('datagrid-row-index'));
|
||||||
|
if (tt.hasClass('datagrid-row-expand')){
|
||||||
|
$(target).datagrid('expandRow', rowIndex);
|
||||||
|
} else {
|
||||||
|
$(target).datagrid('collapseRow', rowIndex);
|
||||||
|
}
|
||||||
|
$(target).datagrid('fixRowHeight');
|
||||||
|
|
||||||
|
} else {
|
||||||
|
clickHandler(e);
|
||||||
|
}
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
onBeforeRender: function(target){
|
||||||
|
var state = $.data(target, 'datagrid');
|
||||||
|
var opts = state.options;
|
||||||
|
var dc = state.dc;
|
||||||
|
var view = this;
|
||||||
|
this.renderedCount = 0;
|
||||||
|
this.rows = [];
|
||||||
|
|
||||||
|
dc.body1.add(dc.body2).empty();
|
||||||
|
init();
|
||||||
|
createHeaderExpander();
|
||||||
|
|
||||||
|
function init(){
|
||||||
|
// erase the onLoadSuccess event, make sure it can't be triggered
|
||||||
|
state.onLoadSuccess = opts.onLoadSuccess;
|
||||||
|
opts.onLoadSuccess = function(){};
|
||||||
|
setTimeout(function(){
|
||||||
|
dc.body2.unbind('.datagrid').bind('scroll.datagrid', function(e){
|
||||||
|
if (state.onLoadSuccess){
|
||||||
|
opts.onLoadSuccess = state.onLoadSuccess; // restore the onLoadSuccess event
|
||||||
|
state.onLoadSuccess = undefined;
|
||||||
|
}
|
||||||
|
if (view.scrollTimer){
|
||||||
|
clearTimeout(view.scrollTimer);
|
||||||
|
}
|
||||||
|
view.scrollTimer = setTimeout(function(){
|
||||||
|
scrolling.call(view);
|
||||||
|
}, 50);
|
||||||
|
});
|
||||||
|
dc.body2.triggerHandler('scroll.datagrid');
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function scrolling(){
|
||||||
|
if (getDataHeight() < dc.body2.height() && view.renderedCount < state.data.total){
|
||||||
|
this.getRows.call(this, target, function(rows){
|
||||||
|
this.rows = rows;
|
||||||
|
this.populate.call(this, target);
|
||||||
|
dc.body2.triggerHandler('scroll.datagrid');
|
||||||
|
});
|
||||||
|
} else if (dc.body2.scrollTop() >= getDataHeight() - dc.body2.height()){
|
||||||
|
this.getRows.call(this, target, function(rows){
|
||||||
|
this.rows = rows;
|
||||||
|
this.populate.call(this, target);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDataHeight(){
|
||||||
|
var h = 0;
|
||||||
|
dc.body2.children('table.datagrid-btable').each(function(){
|
||||||
|
h += $(this).outerHeight();
|
||||||
|
});
|
||||||
|
if (!h){
|
||||||
|
h = view.renderedCount * 25;
|
||||||
|
}
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createHeaderExpander(){
|
||||||
|
if (!opts.detailFormatter){return}
|
||||||
|
|
||||||
|
var t = $(target);
|
||||||
|
var hasExpander = false;
|
||||||
|
var fields = t.datagrid('getColumnFields',true).concat(t.datagrid('getColumnFields'));
|
||||||
|
for(var i=0; i<fields.length; i++){
|
||||||
|
var col = t.datagrid('getColumnOption', fields[i]);
|
||||||
|
if (col.expander){
|
||||||
|
hasExpander = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!hasExpander){
|
||||||
|
if (opts.frozenColumns && opts.frozenColumns.length){
|
||||||
|
opts.frozenColumns[0].splice(0,0,{field:'_expander',expander:true,width:24,resizable:false,fixed:true});
|
||||||
|
} else {
|
||||||
|
opts.frozenColumns = [[{field:'_expander',expander:true,width:24,resizable:false,fixed:true}]];
|
||||||
|
}
|
||||||
|
|
||||||
|
var t = dc.view1.children('div.datagrid-header').find('table');
|
||||||
|
var td = $('<td rowspan="'+opts.frozenColumns.length+'"><div class="datagrid-header-expander" style="width:24px;"></div></td>');
|
||||||
|
if ($('tr',t).length == 0){
|
||||||
|
td.wrap('<tr></tr>').parent().appendTo($('tbody',t));
|
||||||
|
} else if (opts.rownumbers){
|
||||||
|
td.insertAfter(t.find('td:has(div.datagrid-header-rownumber)'));
|
||||||
|
} else {
|
||||||
|
td.prependTo(t.find('tr:first'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimeout(function(){
|
||||||
|
view.bindEvents(target);
|
||||||
|
},0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
getRows: function(target, callback){
|
||||||
|
var state = $.data(target, 'datagrid');
|
||||||
|
var opts = state.options;
|
||||||
|
var page = Math.floor(this.renderedCount/opts.pageSize) + 1;
|
||||||
|
|
||||||
|
if (this.renderedCount >= state.data.total){return;}
|
||||||
|
if (opts.onBeforeFetch.call(target, page) == false){return}
|
||||||
|
|
||||||
|
var index = (page-1)*opts.pageSize;
|
||||||
|
var rows = state.data.rows.slice(index, index+opts.pageSize);
|
||||||
|
if (rows.length){
|
||||||
|
opts.onFetch.call(target, page, rows);
|
||||||
|
callback.call(this, rows);
|
||||||
|
} else {
|
||||||
|
var param = $.extend({}, opts.queryParams, {
|
||||||
|
page: Math.floor(this.renderedCount/opts.pageSize)+1,
|
||||||
|
rows: opts.pageSize
|
||||||
|
});
|
||||||
|
if (opts.sortName){
|
||||||
|
$.extend(param, {
|
||||||
|
sort: opts.sortName,
|
||||||
|
order: opts.sortOrder
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (opts.onBeforeLoad.call(target, param) == false){return;}
|
||||||
|
|
||||||
|
$(target).datagrid('loading');
|
||||||
|
var result = opts.loader.call(target, param, function(data){
|
||||||
|
$(target).datagrid('loaded');
|
||||||
|
var data = opts.loadFilter.call(target, data);
|
||||||
|
opts.onFetch.call(target, page, data.rows);
|
||||||
|
if (data.rows && data.rows.length){
|
||||||
|
state.data.rows = state.data.rows.concat(data.rows);
|
||||||
|
callback.call(opts.view, data.rows);
|
||||||
|
} else {
|
||||||
|
opts.onLoadSuccess.call(target, data);
|
||||||
|
}
|
||||||
|
}, function(){
|
||||||
|
$(target).datagrid('loaded');
|
||||||
|
opts.onLoadError.apply(target, arguments);
|
||||||
|
});
|
||||||
|
if (result == false){
|
||||||
|
$(target).datagrid('loaded');
|
||||||
|
if (!state.data.rows.length){
|
||||||
|
opts.onFetch.call(target, page, state.data.rows);
|
||||||
|
opts.onLoadSuccess.call(target, state.data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
populate: function(target){
|
||||||
|
var state = $.data(target, 'datagrid');
|
||||||
|
var opts = state.options;
|
||||||
|
var dc = state.dc;
|
||||||
|
if (this.rows.length){
|
||||||
|
this.renderedCount += this.rows.length;
|
||||||
|
this.render.call(this, target, dc.body2, false);
|
||||||
|
this.render.call(this, target, dc.body1, true);
|
||||||
|
opts.onLoadSuccess.call(target, {
|
||||||
|
total: state.data.total,
|
||||||
|
rows: this.rows
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$.extend($.fn.datagrid.methods, {
|
||||||
|
fixDetailRowHeight: function(jq, index){
|
||||||
|
return jq.each(function(){
|
||||||
|
var opts = $.data(this, 'datagrid').options;
|
||||||
|
var dc = $.data(this, 'datagrid').dc;
|
||||||
|
var tr1 = opts.finder.getTr(this, index, 'body', 1).next();
|
||||||
|
var tr2 = opts.finder.getTr(this, index, 'body', 2).next();
|
||||||
|
// fix the detail row height
|
||||||
|
if (tr2.is(':visible')){
|
||||||
|
tr1.css('height', '');
|
||||||
|
tr2.css('height', '');
|
||||||
|
var height = Math.max(tr1.height(), tr2.height());
|
||||||
|
tr1.css('height', height);
|
||||||
|
tr2.css('height', height);
|
||||||
|
}
|
||||||
|
dc.body2.triggerHandler('scroll');
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getExpander: function(jq, index){ // get row expander object
|
||||||
|
var opts = $.data(jq[0], 'datagrid').options;
|
||||||
|
return opts.finder.getTr(jq[0], index).find('span.datagrid-row-expander');
|
||||||
|
},
|
||||||
|
// get row detail container
|
||||||
|
getRowDetail: function(jq, index){
|
||||||
|
var opts = $.data(jq[0], 'datagrid').options;
|
||||||
|
var tr = opts.finder.getTr(jq[0], index, 'body', 2);
|
||||||
|
return tr.next().find('div.datagrid-row-detail');
|
||||||
|
},
|
||||||
|
expandRow: function(jq, index){
|
||||||
|
return jq.each(function(){
|
||||||
|
var opts = $(this).datagrid('options');
|
||||||
|
var dc = $.data(this, 'datagrid').dc;
|
||||||
|
var expander = $(this).datagrid('getExpander', index);
|
||||||
|
if (expander.hasClass('datagrid-row-expand')){
|
||||||
|
expander.removeClass('datagrid-row-expand').addClass('datagrid-row-collapse');
|
||||||
|
var tr1 = opts.finder.getTr(this, index, 'body', 1).next();
|
||||||
|
var tr2 = opts.finder.getTr(this, index, 'body', 2).next();
|
||||||
|
tr1.show();
|
||||||
|
tr2.show();
|
||||||
|
$(this).datagrid('fixDetailRowHeight', index);
|
||||||
|
if (opts.onExpandRow){
|
||||||
|
var row = $(this).datagrid('getRows')[index];
|
||||||
|
opts.onExpandRow.call(this, index, row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
collapseRow: function(jq, index){
|
||||||
|
return jq.each(function(){
|
||||||
|
var opts = $(this).datagrid('options');
|
||||||
|
var dc = $.data(this, 'datagrid').dc;
|
||||||
|
var expander = $(this).datagrid('getExpander', index);
|
||||||
|
if (expander.hasClass('datagrid-row-collapse')){
|
||||||
|
expander.removeClass('datagrid-row-collapse').addClass('datagrid-row-expand');
|
||||||
|
var tr1 = opts.finder.getTr(this, index, 'body', 1).next();
|
||||||
|
var tr2 = opts.finder.getTr(this, index, 'body', 2).next();
|
||||||
|
tr1.hide();
|
||||||
|
tr2.hide();
|
||||||
|
dc.body2.triggerHandler('scroll');
|
||||||
|
if (opts.onCollapseRow){
|
||||||
|
var row = $(this).datagrid('getRows')[index];
|
||||||
|
opts.onCollapseRow.call(this, index, row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
194
static/jeasyui/easyloader.js
Executable file
|
@ -0,0 +1,194 @@
|
||||||
|
/**
|
||||||
|
* EasyUI for jQuery 1.9.14
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2021 www.jeasyui.com. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
|
||||||
|
* To use it on other terms please contact us: info@jeasyui.com
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
(function(){
|
||||||
|
var _1={draggable:{js:"jquery.draggable.js"},droppable:{js:"jquery.droppable.js"},resizable:{js:"jquery.resizable.js"},linkbutton:{js:"jquery.linkbutton.js",css:"linkbutton.css"},progressbar:{js:"jquery.progressbar.js",css:"progressbar.css"},tooltip:{js:"jquery.tooltip.js",css:"tooltip.css"},pagination:{js:"jquery.pagination.js",css:"pagination.css",dependencies:["linkbutton"]},datagrid:{js:"jquery.datagrid.js",css:"datagrid.css",dependencies:["panel","resizable","linkbutton","pagination"]},treegrid:{js:"jquery.treegrid.js",css:"tree.css",dependencies:["datagrid"]},propertygrid:{js:"jquery.propertygrid.js",css:"propertygrid.css",dependencies:["datagrid"]},datalist:{js:"jquery.datalist.js",css:"datalist.css",dependencies:["datagrid"]},panel:{js:"jquery.panel.js",css:"panel.css"},window:{js:"jquery.window.js",css:"window.css",dependencies:["resizable","draggable","panel"]},dialog:{js:"jquery.dialog.js",css:"dialog.css",dependencies:["linkbutton","window"]},messager:{js:"jquery.messager.js",css:"messager.css",dependencies:["linkbutton","dialog","progressbar"]},layout:{js:"jquery.layout.js",css:"layout.css",dependencies:["resizable","panel"]},form:{js:"jquery.form.js"},menu:{js:"jquery.menu.js",css:"menu.css"},tabs:{js:"jquery.tabs.js",css:"tabs.css",dependencies:["panel","linkbutton"]},menubutton:{js:"jquery.menubutton.js",css:"menubutton.css",dependencies:["linkbutton","menu"]},splitbutton:{js:"jquery.splitbutton.js",css:"splitbutton.css",dependencies:["menubutton"]},switchbutton:{js:"jquery.switchbutton.js",css:"switchbutton.css"},accordion:{js:"jquery.accordion.js",css:"accordion.css",dependencies:["panel"]},calendar:{js:"jquery.calendar.js",css:"calendar.css"},textbox:{js:"jquery.textbox.js",css:"textbox.css",dependencies:["validatebox","linkbutton"]},passwordbox:{js:"jquery.passwordbox.js",css:"passwordbox.css",dependencies:["textbox"]},filebox:{js:"jquery.filebox.js",css:"filebox.css",dependencies:["textbox"]},radiobutton:{js:"jquery.radiobutton.js",css:"radiobutton.css"},checkbox:{js:"jquery.checkbox.js",css:"checkbox.css"},sidemenu:{js:"jquery.sidemenu.js",css:"sidemenu.css",dependencies:["accordion","tree","tooltip"]},combo:{js:"jquery.combo.js",css:"combo.css",dependencies:["panel","textbox"]},combobox:{js:"jquery.combobox.js",css:"combobox.css",dependencies:["combo"]},combotree:{js:"jquery.combotree.js",dependencies:["combo","tree"]},combogrid:{js:"jquery.combogrid.js",dependencies:["combo","datagrid"]},combotreegrid:{js:"jquery.combotreegrid.js",dependencies:["combo","treegrid"]},tagbox:{js:"jquery.tagbox.js",dependencies:["combobox"]},validatebox:{js:"jquery.validatebox.js",css:"validatebox.css",dependencies:["tooltip"]},numberbox:{js:"jquery.numberbox.js",dependencies:["textbox"]},searchbox:{js:"jquery.searchbox.js",css:"searchbox.css",dependencies:["menubutton","textbox"]},spinner:{js:"jquery.spinner.js",css:"spinner.css",dependencies:["textbox"]},numberspinner:{js:"jquery.numberspinner.js",dependencies:["spinner","numberbox"]},timespinner:{js:"jquery.timespinner.js",dependencies:["spinner"]},timepicker:{js:"jquery.timepicker.js",css:"timepicker.css",dependencies:["combo"]},tree:{js:"jquery.tree.js",css:"tree.css",dependencies:["draggable","droppable"]},datebox:{js:"jquery.datebox.js",css:"datebox.css",dependencies:["calendar","combo"]},datetimebox:{js:"jquery.datetimebox.js",dependencies:["datebox","timespinner"]},slider:{js:"jquery.slider.js",dependencies:["draggable"]},parser:{js:"jquery.parser.js",css:"flex.css"},mobile:{js:"jquery.mobile.js"}};
|
||||||
|
var _2={"af":"easyui-lang-af.js","ar":"easyui-lang-ar.js","bg":"easyui-lang-bg.js","ca":"easyui-lang-ca.js","cs":"easyui-lang-cs.js","cz":"easyui-lang-cz.js","da":"easyui-lang-da.js","de":"easyui-lang-de.js","el":"easyui-lang-el.js","en":"easyui-lang-en.js","es":"easyui-lang-es.js","fr":"easyui-lang-fr.js","it":"easyui-lang-it.js","jp":"easyui-lang-jp.js","nl":"easyui-lang-nl.js","pl":"easyui-lang-pl.js","pt_BR":"easyui-lang-pt_BR.js","ru":"easyui-lang-ru.js","sv_SE":"easyui-lang-sv_SE.js","tr":"easyui-lang-tr.js","zh_CN":"easyui-lang-zh_CN.js","zh_TW":"easyui-lang-zh_TW.js"};
|
||||||
|
var _3={};
|
||||||
|
function _4(_5,_6){
|
||||||
|
var _7=false;
|
||||||
|
var _8=document.createElement("script");
|
||||||
|
_8.type="text/javascript";
|
||||||
|
_8.language="javascript";
|
||||||
|
_8.src=_5;
|
||||||
|
_8.onload=_8.onreadystatechange=function(){
|
||||||
|
if(!_7&&(!_8.readyState||_8.readyState=="loaded"||_8.readyState=="complete")){
|
||||||
|
_7=true;
|
||||||
|
_8.onload=_8.onreadystatechange=null;
|
||||||
|
if(_6){
|
||||||
|
_6.call(_8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
document.getElementsByTagName("head")[0].appendChild(_8);
|
||||||
|
};
|
||||||
|
function _9(_a,_b){
|
||||||
|
_4(_a,function(){
|
||||||
|
document.getElementsByTagName("head")[0].removeChild(this);
|
||||||
|
if(_b){
|
||||||
|
_b();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
function _c(_d,_e){
|
||||||
|
var _f=document.createElement("link");
|
||||||
|
_f.rel="stylesheet";
|
||||||
|
_f.type="text/css";
|
||||||
|
_f.media="screen";
|
||||||
|
_f.href=_d;
|
||||||
|
document.getElementsByTagName("head")[0].appendChild(_f);
|
||||||
|
if(_e){
|
||||||
|
_e.call(_f);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _10(_11,_12){
|
||||||
|
_3[_11]="loading";
|
||||||
|
var _13=_1[_11];
|
||||||
|
var _14="loading";
|
||||||
|
var _15=(easyloader.css&&_13["css"])?"loading":"loaded";
|
||||||
|
if(easyloader.css&&_13["css"]){
|
||||||
|
if(/^http/i.test(_13["css"])){
|
||||||
|
var url=_13["css"];
|
||||||
|
}else{
|
||||||
|
var url=easyloader.base+"themes/"+easyloader.theme+"/"+_13["css"];
|
||||||
|
}
|
||||||
|
_c(url,function(){
|
||||||
|
_15="loaded";
|
||||||
|
if(_14=="loaded"&&_15=="loaded"){
|
||||||
|
_16();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(/^http/i.test(_13["js"])){
|
||||||
|
var url=_13["js"];
|
||||||
|
}else{
|
||||||
|
var url=easyloader.base+"plugins/"+_13["js"];
|
||||||
|
}
|
||||||
|
_4(url,function(){
|
||||||
|
_14="loaded";
|
||||||
|
if(_14=="loaded"&&_15=="loaded"){
|
||||||
|
_16();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
function _16(){
|
||||||
|
_3[_11]="loaded";
|
||||||
|
easyloader.onProgress(_11);
|
||||||
|
if(_12){
|
||||||
|
_12();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
function _17(_18,_19){
|
||||||
|
var mm=[];
|
||||||
|
var _1a=false;
|
||||||
|
if(typeof _18=="string"){
|
||||||
|
add(_18);
|
||||||
|
}else{
|
||||||
|
for(var i=0;i<_18.length;i++){
|
||||||
|
add(_18[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mm.unshift("parser");
|
||||||
|
function add(_1b){
|
||||||
|
if(!_1[_1b]){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var d=_1[_1b]["dependencies"];
|
||||||
|
if(d){
|
||||||
|
for(var i=0;i<d.length;i++){
|
||||||
|
add(d[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mm.push(_1b);
|
||||||
|
};
|
||||||
|
function _1c(){
|
||||||
|
if(_19){
|
||||||
|
if(window.jQuery){
|
||||||
|
window.jQuery.parser.parseVars();
|
||||||
|
}
|
||||||
|
_19();
|
||||||
|
}
|
||||||
|
easyloader.onLoad(_18);
|
||||||
|
};
|
||||||
|
var _1d=0;
|
||||||
|
function _1e(){
|
||||||
|
if(mm.length){
|
||||||
|
var m=mm[0];
|
||||||
|
if(!_3[m]){
|
||||||
|
_1a=true;
|
||||||
|
_10(m,function(){
|
||||||
|
mm.shift();
|
||||||
|
_1e();
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
if(_3[m]=="loaded"){
|
||||||
|
mm.shift();
|
||||||
|
_1e();
|
||||||
|
}else{
|
||||||
|
if(_1d<easyloader.timeout){
|
||||||
|
_1d+=10;
|
||||||
|
setTimeout(arguments.callee,10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(easyloader.locale&&_1a==true&&_2[easyloader.locale]){
|
||||||
|
var url=easyloader.base+"locale/"+_2[easyloader.locale];
|
||||||
|
_9(url,function(){
|
||||||
|
_1c();
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
_1c();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
_1e();
|
||||||
|
};
|
||||||
|
easyloader={modules:_1,locales:_2,base:".",theme:"default",css:true,locale:null,timeout:2000,load:function(_1f,_20){
|
||||||
|
if(/\.css$/i.test(_1f)){
|
||||||
|
if(/^http/i.test(_1f)){
|
||||||
|
_c(_1f,_20);
|
||||||
|
}else{
|
||||||
|
_c(easyloader.base+_1f,_20);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(/\.js$/i.test(_1f)){
|
||||||
|
if(/^http/i.test(_1f)){
|
||||||
|
_4(_1f,_20);
|
||||||
|
}else{
|
||||||
|
_4(easyloader.base+_1f,_20);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
_17(_1f,_20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},onProgress:function(_21){
|
||||||
|
},onLoad:function(_22){
|
||||||
|
}};
|
||||||
|
var _23=document.getElementsByTagName("script");
|
||||||
|
for(var i=0;i<_23.length;i++){
|
||||||
|
var src=_23[i].src;
|
||||||
|
if(!src){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var m=src.match(/easyloader\.js(\W|$)/i);
|
||||||
|
if(m){
|
||||||
|
easyloader.base=src.substring(0,m.index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
window.using=easyloader.load;
|
||||||
|
if(window.jQuery){
|
||||||
|
jQuery(function(){
|
||||||
|
easyloader.load("parser",function(){
|
||||||
|
jQuery.parser.parse();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
620
static/jeasyui/jquery.blockUI.js
Normal file
|
@ -0,0 +1,620 @@
|
||||||
|
/*!
|
||||||
|
* jQuery blockUI plugin
|
||||||
|
* Version 2.70.0-2014.11.23
|
||||||
|
* Requires jQuery v1.7 or later
|
||||||
|
*
|
||||||
|
* Examples at: http://malsup.com/jquery/block/
|
||||||
|
* Copyright (c) 2007-2013 M. Alsup
|
||||||
|
* Dual licensed under the MIT and GPL licenses:
|
||||||
|
* http://www.opensource.org/licenses/mit-license.php
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* Thanks to Amir-Hossein Sobhi for some excellent contributions!
|
||||||
|
*/
|
||||||
|
|
||||||
|
;(function() {
|
||||||
|
/*jshint eqeqeq:false curly:false latedef:false */
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function setup($) {
|
||||||
|
$.fn._fadeIn = $.fn.fadeIn;
|
||||||
|
|
||||||
|
var noOp = $.noop || function() {};
|
||||||
|
|
||||||
|
// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
|
||||||
|
// confusing userAgent strings on Vista)
|
||||||
|
var msie = /MSIE/.test(navigator.userAgent);
|
||||||
|
var ie6 = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);
|
||||||
|
var mode = document.documentMode || 0;
|
||||||
|
var setExpr = $.isFunction( document.createElement('div').style.setExpression );
|
||||||
|
|
||||||
|
// global $ methods for blocking/unblocking the entire page
|
||||||
|
$.blockUI = function(opts) { install(window, opts); };
|
||||||
|
$.unblockUI = function(opts) { remove(window, opts); };
|
||||||
|
|
||||||
|
// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)
|
||||||
|
$.growlUI = function(title, message, timeout, onClose) {
|
||||||
|
var $m = $('<div class="growlUI"></div>');
|
||||||
|
if (title) $m.append('<h1>'+title+'</h1>');
|
||||||
|
if (message) $m.append('<h2>'+message+'</h2>');
|
||||||
|
if (timeout === undefined) timeout = 3000;
|
||||||
|
|
||||||
|
// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications
|
||||||
|
var callBlock = function(opts) {
|
||||||
|
opts = opts || {};
|
||||||
|
|
||||||
|
$.blockUI({
|
||||||
|
message: $m,
|
||||||
|
fadeIn : typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700,
|
||||||
|
fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,
|
||||||
|
timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,
|
||||||
|
centerY: false,
|
||||||
|
showOverlay: false,
|
||||||
|
onUnblock: onClose,
|
||||||
|
css: $.blockUI.defaults.growlCSS
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
callBlock();
|
||||||
|
var nonmousedOpacity = $m.css('opacity');
|
||||||
|
$m.mouseover(function() {
|
||||||
|
callBlock({
|
||||||
|
fadeIn: 0,
|
||||||
|
timeout: 30000
|
||||||
|
});
|
||||||
|
|
||||||
|
var displayBlock = $('.blockMsg');
|
||||||
|
displayBlock.stop(); // cancel fadeout if it has started
|
||||||
|
displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency
|
||||||
|
}).mouseout(function() {
|
||||||
|
$('.blockMsg').fadeOut(1000);
|
||||||
|
});
|
||||||
|
// End konapun additions
|
||||||
|
};
|
||||||
|
|
||||||
|
// plugin method for blocking element content
|
||||||
|
$.fn.block = function(opts) {
|
||||||
|
if ( this[0] === window ) {
|
||||||
|
$.blockUI( opts );
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});
|
||||||
|
this.each(function() {
|
||||||
|
var $el = $(this);
|
||||||
|
if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))
|
||||||
|
return;
|
||||||
|
$el.unblock({ fadeOut: 0 });
|
||||||
|
});
|
||||||
|
|
||||||
|
return this.each(function() {
|
||||||
|
if ($.css(this,'position') == 'static') {
|
||||||
|
this.style.position = 'relative';
|
||||||
|
$(this).data('blockUI.static', true);
|
||||||
|
}
|
||||||
|
this.style.zoom = 1; // force 'hasLayout' in ie
|
||||||
|
install(this, opts);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// plugin method for unblocking element content
|
||||||
|
$.fn.unblock = function(opts) {
|
||||||
|
if ( this[0] === window ) {
|
||||||
|
$.unblockUI( opts );
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
return this.each(function() {
|
||||||
|
remove(this, opts);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
$.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!
|
||||||
|
|
||||||
|
// override these in your code to change the default behavior and style
|
||||||
|
$.blockUI.defaults = {
|
||||||
|
// message displayed when blocking (use null for no message)
|
||||||
|
message: '<h1>Please wait...</h1>',
|
||||||
|
|
||||||
|
title: null, // title string; only used when theme == true
|
||||||
|
draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded)
|
||||||
|
|
||||||
|
theme: false, // set to true to use with jQuery UI themes
|
||||||
|
|
||||||
|
// styles for the message when blocking; if you wish to disable
|
||||||
|
// these and use an external stylesheet then do this in your code:
|
||||||
|
// $.blockUI.defaults.css = {};
|
||||||
|
css: {
|
||||||
|
padding: 0,
|
||||||
|
margin: 0,
|
||||||
|
width: '30%',
|
||||||
|
top: '40%',
|
||||||
|
left: '35%',
|
||||||
|
textAlign: 'center',
|
||||||
|
color: '#000',
|
||||||
|
border: '3px solid #aaa',
|
||||||
|
backgroundColor:'#fff',
|
||||||
|
cursor: 'wait'
|
||||||
|
},
|
||||||
|
|
||||||
|
// minimal style set used when themes are used
|
||||||
|
themedCSS: {
|
||||||
|
width: '30%',
|
||||||
|
top: '40%',
|
||||||
|
left: '35%'
|
||||||
|
},
|
||||||
|
|
||||||
|
// styles for the overlay
|
||||||
|
overlayCSS: {
|
||||||
|
backgroundColor: '#000',
|
||||||
|
opacity: 0.6,
|
||||||
|
cursor: 'wait'
|
||||||
|
},
|
||||||
|
|
||||||
|
// style to replace wait cursor before unblocking to correct issue
|
||||||
|
// of lingering wait cursor
|
||||||
|
cursorReset: 'default',
|
||||||
|
|
||||||
|
// styles applied when using $.growlUI
|
||||||
|
growlCSS: {
|
||||||
|
width: '350px',
|
||||||
|
top: '10px',
|
||||||
|
left: '',
|
||||||
|
right: '10px',
|
||||||
|
border: 'none',
|
||||||
|
padding: '5px',
|
||||||
|
opacity: 0.6,
|
||||||
|
cursor: 'default',
|
||||||
|
color: '#fff',
|
||||||
|
backgroundColor: '#000',
|
||||||
|
'-webkit-border-radius':'10px',
|
||||||
|
'-moz-border-radius': '10px',
|
||||||
|
'border-radius': '10px'
|
||||||
|
},
|
||||||
|
|
||||||
|
// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
|
||||||
|
// (hat tip to Jorge H. N. de Vasconcelos)
|
||||||
|
/*jshint scripturl:true */
|
||||||
|
iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',
|
||||||
|
|
||||||
|
// force usage of iframe in non-IE browsers (handy for blocking applets)
|
||||||
|
forceIframe: false,
|
||||||
|
|
||||||
|
// z-index for the blocking overlay
|
||||||
|
baseZ: 1000,
|
||||||
|
|
||||||
|
// set these to true to have the message automatically centered
|
||||||
|
centerX: true, // <-- only effects element blocking (page block controlled via css above)
|
||||||
|
centerY: true,
|
||||||
|
|
||||||
|
// allow body element to be stetched in ie6; this makes blocking look better
|
||||||
|
// on "short" pages. disable if you wish to prevent changes to the body height
|
||||||
|
allowBodyStretch: true,
|
||||||
|
|
||||||
|
// enable if you want key and mouse events to be disabled for content that is blocked
|
||||||
|
bindEvents: true,
|
||||||
|
|
||||||
|
// be default blockUI will supress tab navigation from leaving blocking content
|
||||||
|
// (if bindEvents is true)
|
||||||
|
constrainTabKey: true,
|
||||||
|
|
||||||
|
// fadeIn time in millis; set to 0 to disable fadeIn on block
|
||||||
|
fadeIn: 200,
|
||||||
|
|
||||||
|
// fadeOut time in millis; set to 0 to disable fadeOut on unblock
|
||||||
|
fadeOut: 400,
|
||||||
|
|
||||||
|
// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
|
||||||
|
timeout: 0,
|
||||||
|
|
||||||
|
// disable if you don't want to show the overlay
|
||||||
|
showOverlay: true,
|
||||||
|
|
||||||
|
// if true, focus will be placed in the first available input field when
|
||||||
|
// page blocking
|
||||||
|
focusInput: true,
|
||||||
|
|
||||||
|
// elements that can receive focus
|
||||||
|
focusableElements: ':input:enabled:visible',
|
||||||
|
|
||||||
|
// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
|
||||||
|
// no longer needed in 2012
|
||||||
|
// applyPlatformOpacityRules: true,
|
||||||
|
|
||||||
|
// callback method invoked when fadeIn has completed and blocking message is visible
|
||||||
|
onBlock: null,
|
||||||
|
|
||||||
|
// callback method invoked when unblocking has completed; the callback is
|
||||||
|
// passed the element that has been unblocked (which is the window object for page
|
||||||
|
// blocks) and the options that were passed to the unblock call:
|
||||||
|
// onUnblock(element, options)
|
||||||
|
onUnblock: null,
|
||||||
|
|
||||||
|
// callback method invoked when the overlay area is clicked.
|
||||||
|
// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.
|
||||||
|
onOverlayClick: null,
|
||||||
|
|
||||||
|
// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
|
||||||
|
quirksmodeOffsetHack: 4,
|
||||||
|
|
||||||
|
// class name of the message block
|
||||||
|
blockMsgClass: 'blockMsg',
|
||||||
|
|
||||||
|
// if it is already blocked, then ignore it (don't unblock and reblock)
|
||||||
|
ignoreIfBlocked: false
|
||||||
|
};
|
||||||
|
|
||||||
|
// private data and functions follow...
|
||||||
|
|
||||||
|
var pageBlock = null;
|
||||||
|
var pageBlockEls = [];
|
||||||
|
|
||||||
|
function install(el, opts) {
|
||||||
|
var css, themedCSS;
|
||||||
|
var full = (el == window);
|
||||||
|
var msg = (opts && opts.message !== undefined ? opts.message : undefined);
|
||||||
|
opts = $.extend({}, $.blockUI.defaults, opts || {});
|
||||||
|
|
||||||
|
if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))
|
||||||
|
return;
|
||||||
|
|
||||||
|
opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
|
||||||
|
css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
|
||||||
|
if (opts.onOverlayClick)
|
||||||
|
opts.overlayCSS.cursor = 'pointer';
|
||||||
|
|
||||||
|
themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
|
||||||
|
msg = msg === undefined ? opts.message : msg;
|
||||||
|
|
||||||
|
// remove the current block (if there is one)
|
||||||
|
if (full && pageBlock)
|
||||||
|
remove(window, {fadeOut:0});
|
||||||
|
|
||||||
|
// if an existing element is being used as the blocking content then we capture
|
||||||
|
// its current place in the DOM (and current display style) so we can restore
|
||||||
|
// it when we unblock
|
||||||
|
if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
|
||||||
|
var node = msg.jquery ? msg[0] : msg;
|
||||||
|
var data = {};
|
||||||
|
$(el).data('blockUI.history', data);
|
||||||
|
data.el = node;
|
||||||
|
data.parent = node.parentNode;
|
||||||
|
data.display = node.style.display;
|
||||||
|
data.position = node.style.position;
|
||||||
|
if (data.parent)
|
||||||
|
data.parent.removeChild(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
$(el).data('blockUI.onUnblock', opts.onUnblock);
|
||||||
|
var z = opts.baseZ;
|
||||||
|
|
||||||
|
// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
|
||||||
|
// layer1 is the iframe layer which is used to supress bleed through of underlying content
|
||||||
|
// layer2 is the overlay layer which has opacity and a wait cursor (by default)
|
||||||
|
// layer3 is the message content that is displayed while blocking
|
||||||
|
var lyr1, lyr2, lyr3, s;
|
||||||
|
if (msie || opts.forceIframe)
|
||||||
|
lyr1 = $('<iframe class="blockUI" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+opts.iframeSrc+'"></iframe>');
|
||||||
|
else
|
||||||
|
lyr1 = $('<div class="blockUI" style="display:none"></div>');
|
||||||
|
|
||||||
|
if (opts.theme)
|
||||||
|
lyr2 = $('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+ (z++) +';display:none"></div>');
|
||||||
|
else
|
||||||
|
lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
|
||||||
|
|
||||||
|
if (opts.theme && full) {
|
||||||
|
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:fixed">';
|
||||||
|
if ( opts.title ) {
|
||||||
|
s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || ' ')+'</div>';
|
||||||
|
}
|
||||||
|
s += '<div class="ui-widget-content ui-dialog-content"></div>';
|
||||||
|
s += '</div>';
|
||||||
|
}
|
||||||
|
else if (opts.theme) {
|
||||||
|
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:absolute">';
|
||||||
|
if ( opts.title ) {
|
||||||
|
s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || ' ')+'</div>';
|
||||||
|
}
|
||||||
|
s += '<div class="ui-widget-content ui-dialog-content"></div>';
|
||||||
|
s += '</div>';
|
||||||
|
}
|
||||||
|
else if (full) {
|
||||||
|
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage" style="z-index:'+(z+10)+';display:none;position:fixed"></div>';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement" style="z-index:'+(z+10)+';display:none;position:absolute"></div>';
|
||||||
|
}
|
||||||
|
lyr3 = $(s);
|
||||||
|
|
||||||
|
// if we have a message, style it
|
||||||
|
if (msg) {
|
||||||
|
if (opts.theme) {
|
||||||
|
lyr3.css(themedCSS);
|
||||||
|
lyr3.addClass('ui-widget-content');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lyr3.css(css);
|
||||||
|
}
|
||||||
|
|
||||||
|
// style the overlay
|
||||||
|
if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)
|
||||||
|
lyr2.css(opts.overlayCSS);
|
||||||
|
lyr2.css('position', full ? 'fixed' : 'absolute');
|
||||||
|
|
||||||
|
// make iframe layer transparent in IE
|
||||||
|
if (msie || opts.forceIframe)
|
||||||
|
lyr1.css('opacity',0.0);
|
||||||
|
|
||||||
|
//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
|
||||||
|
var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
|
||||||
|
$.each(layers, function() {
|
||||||
|
this.appendTo($par);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (opts.theme && opts.draggable && $.fn.draggable) {
|
||||||
|
lyr3.draggable({
|
||||||
|
handle: '.ui-dialog-titlebar',
|
||||||
|
cancel: 'li'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
|
||||||
|
var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);
|
||||||
|
if (ie6 || expr) {
|
||||||
|
// give body 100% height
|
||||||
|
if (full && opts.allowBodyStretch && $.support.boxModel)
|
||||||
|
$('html,body').css('height','100%');
|
||||||
|
|
||||||
|
// fix ie6 issue when blocked element has a border width
|
||||||
|
if ((ie6 || !$.support.boxModel) && !full) {
|
||||||
|
var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
|
||||||
|
var fixT = t ? '(0 - '+t+')' : 0;
|
||||||
|
var fixL = l ? '(0 - '+l+')' : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// simulate fixed position
|
||||||
|
$.each(layers, function(i,o) {
|
||||||
|
var s = o[0].style;
|
||||||
|
s.position = 'absolute';
|
||||||
|
if (i < 2) {
|
||||||
|
if (full)
|
||||||
|
s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"');
|
||||||
|
else
|
||||||
|
s.setExpression('height','this.parentNode.offsetHeight + "px"');
|
||||||
|
if (full)
|
||||||
|
s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
|
||||||
|
else
|
||||||
|
s.setExpression('width','this.parentNode.offsetWidth + "px"');
|
||||||
|
if (fixL) s.setExpression('left', fixL);
|
||||||
|
if (fixT) s.setExpression('top', fixT);
|
||||||
|
}
|
||||||
|
else if (opts.centerY) {
|
||||||
|
if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
|
||||||
|
s.marginTop = 0;
|
||||||
|
}
|
||||||
|
else if (!opts.centerY && full) {
|
||||||
|
var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;
|
||||||
|
var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
|
||||||
|
s.setExpression('top',expression);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// show the message
|
||||||
|
if (msg) {
|
||||||
|
if (opts.theme)
|
||||||
|
lyr3.find('.ui-widget-content').append(msg);
|
||||||
|
else
|
||||||
|
lyr3.append(msg);
|
||||||
|
if (msg.jquery || msg.nodeType)
|
||||||
|
$(msg).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((msie || opts.forceIframe) && opts.showOverlay)
|
||||||
|
lyr1.show(); // opacity is zero
|
||||||
|
if (opts.fadeIn) {
|
||||||
|
var cb = opts.onBlock ? opts.onBlock : noOp;
|
||||||
|
var cb1 = (opts.showOverlay && !msg) ? cb : noOp;
|
||||||
|
var cb2 = msg ? cb : noOp;
|
||||||
|
if (opts.showOverlay)
|
||||||
|
lyr2._fadeIn(opts.fadeIn, cb1);
|
||||||
|
if (msg)
|
||||||
|
lyr3._fadeIn(opts.fadeIn, cb2);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (opts.showOverlay)
|
||||||
|
lyr2.show();
|
||||||
|
if (msg)
|
||||||
|
lyr3.show();
|
||||||
|
if (opts.onBlock)
|
||||||
|
opts.onBlock.bind(lyr3)();
|
||||||
|
}
|
||||||
|
|
||||||
|
// bind key and mouse events
|
||||||
|
bind(1, el, opts);
|
||||||
|
|
||||||
|
if (full) {
|
||||||
|
pageBlock = lyr3[0];
|
||||||
|
pageBlockEls = $(opts.focusableElements,pageBlock);
|
||||||
|
if (opts.focusInput)
|
||||||
|
setTimeout(focus, 20);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
center(lyr3[0], opts.centerX, opts.centerY);
|
||||||
|
|
||||||
|
if (opts.timeout) {
|
||||||
|
// auto-unblock
|
||||||
|
var to = setTimeout(function() {
|
||||||
|
if (full)
|
||||||
|
$.unblockUI(opts);
|
||||||
|
else
|
||||||
|
$(el).unblock(opts);
|
||||||
|
}, opts.timeout);
|
||||||
|
$(el).data('blockUI.timeout', to);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove the block
|
||||||
|
function remove(el, opts) {
|
||||||
|
var count;
|
||||||
|
var full = (el == window);
|
||||||
|
var $el = $(el);
|
||||||
|
var data = $el.data('blockUI.history');
|
||||||
|
var to = $el.data('blockUI.timeout');
|
||||||
|
if (to) {
|
||||||
|
clearTimeout(to);
|
||||||
|
$el.removeData('blockUI.timeout');
|
||||||
|
}
|
||||||
|
opts = $.extend({}, $.blockUI.defaults, opts || {});
|
||||||
|
bind(0, el, opts); // unbind events
|
||||||
|
|
||||||
|
if (opts.onUnblock === null) {
|
||||||
|
opts.onUnblock = $el.data('blockUI.onUnblock');
|
||||||
|
$el.removeData('blockUI.onUnblock');
|
||||||
|
}
|
||||||
|
|
||||||
|
var els;
|
||||||
|
if (full) // crazy selector to handle odd field errors in ie6/7
|
||||||
|
els = $('body').children().filter('.blockUI').add('body > .blockUI');
|
||||||
|
else
|
||||||
|
els = $el.find('>.blockUI');
|
||||||
|
|
||||||
|
// fix cursor issue
|
||||||
|
if ( opts.cursorReset ) {
|
||||||
|
if ( els.length > 1 )
|
||||||
|
els[1].style.cursor = opts.cursorReset;
|
||||||
|
if ( els.length > 2 )
|
||||||
|
els[2].style.cursor = opts.cursorReset;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (full)
|
||||||
|
pageBlock = pageBlockEls = null;
|
||||||
|
|
||||||
|
if (opts.fadeOut) {
|
||||||
|
count = els.length;
|
||||||
|
els.stop().fadeOut(opts.fadeOut, function() {
|
||||||
|
if ( --count === 0)
|
||||||
|
reset(els,data,opts,el);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
reset(els, data, opts, el);
|
||||||
|
}
|
||||||
|
|
||||||
|
// move blocking element back into the DOM where it started
|
||||||
|
function reset(els,data,opts,el) {
|
||||||
|
var $el = $(el);
|
||||||
|
if ( $el.data('blockUI.isBlocked') )
|
||||||
|
return;
|
||||||
|
|
||||||
|
els.each(function(i,o) {
|
||||||
|
// remove via DOM calls so we don't lose event handlers
|
||||||
|
if (this.parentNode)
|
||||||
|
this.parentNode.removeChild(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (data && data.el) {
|
||||||
|
data.el.style.display = data.display;
|
||||||
|
data.el.style.position = data.position;
|
||||||
|
data.el.style.cursor = 'default'; // #59
|
||||||
|
if (data.parent)
|
||||||
|
data.parent.appendChild(data.el);
|
||||||
|
$el.removeData('blockUI.history');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($el.data('blockUI.static')) {
|
||||||
|
$el.css('position', 'static'); // #22
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof opts.onUnblock == 'function')
|
||||||
|
opts.onUnblock(el,opts);
|
||||||
|
|
||||||
|
// fix issue in Safari 6 where block artifacts remain until reflow
|
||||||
|
var body = $(document.body), w = body.width(), cssW = body[0].style.width;
|
||||||
|
body.width(w-1).width(w);
|
||||||
|
body[0].style.width = cssW;
|
||||||
|
}
|
||||||
|
|
||||||
|
// bind/unbind the handler
|
||||||
|
function bind(b, el, opts) {
|
||||||
|
var full = el == window, $el = $(el);
|
||||||
|
|
||||||
|
// don't bother unbinding if there is nothing to unbind
|
||||||
|
if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
|
||||||
|
return;
|
||||||
|
|
||||||
|
$el.data('blockUI.isBlocked', b);
|
||||||
|
|
||||||
|
// don't bind events when overlay is not in use or if bindEvents is false
|
||||||
|
if (!full || !opts.bindEvents || (b && !opts.showOverlay))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// bind anchors and inputs for mouse and key events
|
||||||
|
var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';
|
||||||
|
if (b)
|
||||||
|
$(document).bind(events, opts, handler);
|
||||||
|
else
|
||||||
|
$(document).unbind(events, handler);
|
||||||
|
|
||||||
|
// former impl...
|
||||||
|
// var $e = $('a,:input');
|
||||||
|
// b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
// event handler to suppress keyboard/mouse events when blocking
|
||||||
|
function handler(e) {
|
||||||
|
// allow tab navigation (conditionally)
|
||||||
|
if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {
|
||||||
|
if (pageBlock && e.data.constrainTabKey) {
|
||||||
|
var els = pageBlockEls;
|
||||||
|
var fwd = !e.shiftKey && e.target === els[els.length-1];
|
||||||
|
var back = e.shiftKey && e.target === els[0];
|
||||||
|
if (fwd || back) {
|
||||||
|
setTimeout(function(){focus(back);},10);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var opts = e.data;
|
||||||
|
var target = $(e.target);
|
||||||
|
if (target.hasClass('blockOverlay') && opts.onOverlayClick)
|
||||||
|
opts.onOverlayClick(e);
|
||||||
|
|
||||||
|
// allow events within the message content
|
||||||
|
if (target.parents('div.' + opts.blockMsgClass).length > 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// allow events for content that is not being blocked
|
||||||
|
return target.parents().children().filter('div.blockUI').length === 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function focus(back) {
|
||||||
|
if (!pageBlockEls)
|
||||||
|
return;
|
||||||
|
var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
|
||||||
|
if (e)
|
||||||
|
e.focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
function center(el, x, y) {
|
||||||
|
var p = el.parentNode, s = el.style;
|
||||||
|
var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
|
||||||
|
var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
|
||||||
|
if (x) s.left = l > 0 ? (l+'px') : '0';
|
||||||
|
if (y) s.top = t > 0 ? (t+'px') : '0';
|
||||||
|
}
|
||||||
|
|
||||||
|
function sz(el, p) {
|
||||||
|
return parseInt($.css(el,p),10)||0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*global define:true */
|
||||||
|
if (typeof define === 'function' && define.amd && define.amd.jQuery) {
|
||||||
|
define(['jquery'], setup);
|
||||||
|
} else {
|
||||||
|
setup(jQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
17707
static/jeasyui/jquery.easyui.min.js
vendored
Executable file
141
static/jeasyui/jquery.easyui.mobile.js
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
/**
|
||||||
|
* EasyUI for jQuery 1.9.14
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2021 www.jeasyui.com. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
|
||||||
|
* To use it on other terms please contact us: info@jeasyui.com
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
(function($){
|
||||||
|
$.fn.navpanel=function(_1,_2){
|
||||||
|
if(typeof _1=="string"){
|
||||||
|
var _3=$.fn.navpanel.methods[_1];
|
||||||
|
return _3?_3(this,_2):this.panel(_1,_2);
|
||||||
|
}else{
|
||||||
|
_1=_1||{};
|
||||||
|
return this.each(function(){
|
||||||
|
var _4=$.data(this,"navpanel");
|
||||||
|
if(_4){
|
||||||
|
$.extend(_4.options,_1);
|
||||||
|
}else{
|
||||||
|
_4=$.data(this,"navpanel",{options:$.extend({},$.fn.navpanel.defaults,$.fn.navpanel.parseOptions(this),_1)});
|
||||||
|
}
|
||||||
|
$(this).panel(_4.options);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$.fn.navpanel.methods={options:function(jq){
|
||||||
|
return $.data(jq[0],"navpanel").options;
|
||||||
|
}};
|
||||||
|
$.fn.navpanel.parseOptions=function(_5){
|
||||||
|
return $.extend({},$.fn.panel.parseOptions(_5),$.parser.parseOptions(_5,[]));
|
||||||
|
};
|
||||||
|
$.fn.navpanel.defaults=$.extend({},$.fn.panel.defaults,{fit:true,border:false,cls:"navpanel"});
|
||||||
|
$.parser.plugins.push("navpanel");
|
||||||
|
})(jQuery);
|
||||||
|
(function($){
|
||||||
|
$(function(){
|
||||||
|
$.mobile.init();
|
||||||
|
});
|
||||||
|
$.mobile={defaults:{animation:"slide",direction:"left",reverseDirections:{up:"down",down:"up",left:"right",right:"left"}},panels:[],init:function(_6){
|
||||||
|
$.mobile.panels=[];
|
||||||
|
var _7=$(_6||"body").children(".navpanel:visible");
|
||||||
|
if(_7.length){
|
||||||
|
_7.not(":first").children(".panel-body").navpanel("close");
|
||||||
|
var p=_7.eq(0).children(".panel-body");
|
||||||
|
$.mobile.panels.push({panel:p,animation:$.mobile.defaults.animation,direction:$.mobile.defaults.direction});
|
||||||
|
}
|
||||||
|
$(document)._unbind(".mobile")._bind("click.mobile",function(e){
|
||||||
|
var a=$(e.target).closest("a");
|
||||||
|
if(a.length){
|
||||||
|
var _8=$.parser.parseOptions(a[0],["animation","direction",{back:"boolean"}]);
|
||||||
|
if(_8.back){
|
||||||
|
$.mobile.back();
|
||||||
|
e.preventDefault();
|
||||||
|
}else{
|
||||||
|
var _9=$.trim(a.attr("href"));
|
||||||
|
if(/^#/.test(_9)){
|
||||||
|
var to=$(_9);
|
||||||
|
if(to.length&&to.hasClass("panel-body")){
|
||||||
|
$.mobile.go(to,_8.animation,_8.direction);
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$(window)._unbind(".mobile")._bind("hashchange.mobile",function(){
|
||||||
|
var _a=$.mobile.panels.length;
|
||||||
|
if(_a>1){
|
||||||
|
var _b=location.hash;
|
||||||
|
var p=$.mobile.panels[_a-2];
|
||||||
|
if(!_b||_b=="#&"+p.panel.attr("id")){
|
||||||
|
$.mobile._back();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},nav:function(_c,to,_d,_e){
|
||||||
|
if(window.WebKitAnimationEvent){
|
||||||
|
_d=_d!=undefined?_d:$.mobile.defaults.animation;
|
||||||
|
_e=_e!=undefined?_e:$.mobile.defaults.direction;
|
||||||
|
var _f="m-"+_d+(_e?"-"+_e:"");
|
||||||
|
var p1=$(_c).panel("open").panel("resize").panel("panel");
|
||||||
|
var p2=$(to).panel("open").panel("resize").panel("panel");
|
||||||
|
p1.add(p2)._bind("webkitAnimationEnd",function(){
|
||||||
|
$(this)._unbind("webkitAnimationEnd");
|
||||||
|
var p=$(this).children(".panel-body");
|
||||||
|
if($(this).hasClass("m-in")){
|
||||||
|
p.panel("open").panel("resize");
|
||||||
|
}else{
|
||||||
|
p.panel("close");
|
||||||
|
}
|
||||||
|
$(this).removeClass(_f+" m-in m-out");
|
||||||
|
});
|
||||||
|
p2.addClass(_f+" m-in");
|
||||||
|
p1.addClass(_f+" m-out");
|
||||||
|
}else{
|
||||||
|
$(to).panel("open").panel("resize");
|
||||||
|
$(_c).panel("close");
|
||||||
|
}
|
||||||
|
},_go:function(_10,_11,_12){
|
||||||
|
_11=_11!=undefined?_11:$.mobile.defaults.animation;
|
||||||
|
_12=_12!=undefined?_12:$.mobile.defaults.direction;
|
||||||
|
var _13=$.mobile.panels[$.mobile.panels.length-1].panel;
|
||||||
|
var to=$(_10);
|
||||||
|
if(_13[0]!=to[0]){
|
||||||
|
$.mobile.nav(_13,to,_11,_12);
|
||||||
|
$.mobile.panels.push({panel:to,animation:_11,direction:_12});
|
||||||
|
}
|
||||||
|
},_back:function(){
|
||||||
|
if($.mobile.panels.length<2){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var p1=$.mobile.panels.pop();
|
||||||
|
var p2=$.mobile.panels[$.mobile.panels.length-1];
|
||||||
|
var _14=p1.animation;
|
||||||
|
var _15=$.mobile.defaults.reverseDirections[p1.direction]||"";
|
||||||
|
$.mobile.nav(p1.panel,p2.panel,_14,_15);
|
||||||
|
},go:function(_16,_17,_18){
|
||||||
|
_17=_17!=undefined?_17:$.mobile.defaults.animation;
|
||||||
|
_18=_18!=undefined?_18:$.mobile.defaults.direction;
|
||||||
|
location.hash="#&"+$(_16).attr("id");
|
||||||
|
$.mobile._go(_16,_17,_18);
|
||||||
|
},back:function(){
|
||||||
|
history.go(-1);
|
||||||
|
}};
|
||||||
|
$.map(["validatebox","textbox","passwordbox","filebox","searchbox","combo","combobox","combogrid","combotree","combotreegrid","datebox","datetimebox","numberbox","spinner","numberspinner","timespinner","datetimespinner"],function(_19){
|
||||||
|
if($.fn[_19]){
|
||||||
|
$.extend($.fn[_19].defaults,{iconWidth:28,tipPosition:"bottom"});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$.map(["spinner","numberspinner","timespinner","datetimespinner"],function(_1a){
|
||||||
|
if($.fn[_1a]){
|
||||||
|
$.extend($.fn[_1a].defaults,{iconWidth:56,spinAlign:"horizontal"});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if($.fn.menu){
|
||||||
|
$.extend($.fn.menu.defaults,{itemHeight:30,noline:true});
|
||||||
|
}
|
||||||
|
})(jQuery);
|
||||||
|
|
2
static/jeasyui/jquery.min.js
vendored
Normal file
44
static/jeasyui/locale/easyui-lang-af.js
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Bladsy';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'Van {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Wys (from) tot (to) van (total) items';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Verwerking, wag asseblief ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Die styl';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Die veld is verpligtend.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = "Gee 'n geldige e-pos adres.";
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = "Gee 'n geldige URL nie.";
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = "Voer 'n waarde tussen {0} en {1}.";
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Vandag';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Sluit';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
46
static/jeasyui/locale/easyui-lang-am.js
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Էջ';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'ից {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Դիտել {from}-ից {to}-ը {total} գրառումից';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Մշակվում է, խնդրում ենք սպասել ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Այո';
|
||||||
|
$.messager.defaults.cancel = 'Փակել';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Այս դաշտը պարտադիր է.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Խնդրում ենք մուտքագրել գործող e-mail հասցե.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Խնդրում ենք մուտքագրել գործող URL.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Խնդրում ենք մուտքագրել արժեք {0} {1}.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'Խնդրում ենք ուղղել այս դաշտը.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.firstDay = 1;
|
||||||
|
$.fn.calendar.defaults.weeks = ['Կ.','Ե.','Ե.','Չ.','Հ.','Ու.','Շ.'];
|
||||||
|
$.fn.calendar.defaults.months = ['Հունվար', 'Փետրվար', 'Մարտ', 'Ապրիլ', 'Մայիս', 'Հունիս', 'Հուլիս', 'Օգոստոս', 'Սեպտեմբեր', 'Հոկտեմբեր', 'Նոյեմբեր', 'Դեկտեմբեր'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Այսօր';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Փակել';
|
||||||
|
$.fn.datebox.defaults.okText = 'Այո';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
45
static/jeasyui/locale/easyui-lang-ar.js
Executable file
|
@ -0,0 +1,45 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'صفحة';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'من {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'عرض {from} إلى {to} من {total} عنصر';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'معالجة, الرجاء الإنتظار ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'موافق';
|
||||||
|
$.messager.defaults.cancel = 'إلغاء';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'هذا الحقل مطلوب.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'الرجاء إدخال بريد إلكتروني صحيح.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'الرجاء إدخال رابط صحيح.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'الرجاء إدخال قيمة بين {0} و {1}.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'الرجاء التأكد من الحقل.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'اليوم';
|
||||||
|
$.fn.datebox.defaults.closeText = 'إغلاق';
|
||||||
|
$.fn.datebox.defaults.okText = 'موافق';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
44
static/jeasyui/locale/easyui-lang-bg.js
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Страница';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'от {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Показани {from} за {to} от {total} продукти';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Обработка, моля изчакайте ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Добре';
|
||||||
|
$.messager.defaults.cancel = 'Задрасквам';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Това поле е задължително.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Моля, въведете валиден имейл адрес.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Моля въведете валиден URL.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Моля, въведете стойност между {0} и {1}.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Днес';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Близо';
|
||||||
|
$.fn.datebox.defaults.okText = 'Добре';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
44
static/jeasyui/locale/easyui-lang-ca.js
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Pàgina';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'de {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = "Veient {from} a {to} de {total} d'articles";
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Elaboració, si us plau esperi ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Cancel';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Aquest camp és obligatori.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Introduïu una adreça de correu electrònic vàlida.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Si us plau, introduïu un URL vàlida.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Si us plau, introduïu un valor entre {0} i {1}.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Avui';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Tancar';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
44
static/jeasyui/locale/easyui-lang-cs.js
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Strana';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'z {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Zobrazuji {from} do {to} z {total} položky';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Zpracování, čekejte prosím ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Zrušit';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Toto pole je vyžadováno.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Zadejte prosím platnou e-mailovou adresu.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Zadejte prosím platnou adresu URL.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Prosím, zadejte hodnotu mezi {0} a {1}.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Dnes';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Zavřít';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
44
static/jeasyui/locale/easyui-lang-cz.js
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Strana';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'z {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Zobrazuji záznam {from} až {to} z {total}.';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Pracuji, čekejte prosím…';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Zrušit';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Toto pole je vyžadováno.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Zadejte, prosím, platnou e-mailovou adresu.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Zadejte, prosím, platnou adresu URL.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Zadejte, prosím, hodnotu mezi {0} a {1}.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['N','P','Ú','S','Č','P','S']; //neděle pondělí úterý středa čtvrtek pátek sobota
|
||||||
|
$.fn.calendar.defaults.months = ['led', 'únr', 'bře', 'dub', 'kvě', 'čvn', 'čvc', 'srp', 'zář', 'říj', 'lis', 'pro']; //leden únor březen duben květen červen červenec srpen září říjen listopad prosinec
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Dnes';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Zavřít';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
44
static/jeasyui/locale/easyui-lang-da.js
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Page';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'af {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Viser {from} til {to} af {total} poster';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Behandling, vent venligst ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Annuller';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Dette felt er påkrævet.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Angiv en gyldig e-mail-adresse.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Angiv en gyldig webadresse.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Angiv en værdi mellem {0} og {1}.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'I dag';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Luk';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
63
static/jeasyui/locale/easyui-lang-de.js
Executable file
|
@ -0,0 +1,63 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Seite';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'von {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = '{from} bis {to} von {total} Datensätzen';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Verarbeitung läuft, bitte warten ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'OK';
|
||||||
|
$.messager.defaults.cancel = 'Abbruch';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Dieses Feld wird benötigt.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Bitte geben Sie eine gültige E-Mail-Adresse ein.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Bitte geben Sie eine gültige URL ein.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Bitte geben Sie einen Wert zwischen {0} und {1} ein.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.firstDay = 1;
|
||||||
|
$.fn.calendar.defaults.weeks = ['S','M','D','M','D','F','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Heute';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Schließen';
|
||||||
|
$.fn.datebox.defaults.okText = 'OK';
|
||||||
|
$.fn.datebox.defaults.formatter = function(date){
|
||||||
|
var y = date.getFullYear();
|
||||||
|
var m = date.getMonth()+1;
|
||||||
|
var d = date.getDate();
|
||||||
|
return (d<10?('0'+d):d)+'.'+(m<10?('0'+m):m)+'.'+y;
|
||||||
|
};
|
||||||
|
$.fn.datebox.defaults.parser = function(s){
|
||||||
|
if (!s) return new Date();
|
||||||
|
var ss = s.split('.');
|
||||||
|
var m = parseInt(ss[1],10);
|
||||||
|
var d = parseInt(ss[0],10);
|
||||||
|
var y = parseInt(ss[2],10);
|
||||||
|
if (!isNaN(y) && !isNaN(m) && !isNaN(d)){
|
||||||
|
return new Date(y,m-1,d);
|
||||||
|
} else {
|
||||||
|
return new Date();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
45
static/jeasyui/locale/easyui-lang-el.js
Executable file
|
@ -0,0 +1,45 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Σελίδα';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'από {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Εμφάνιση {from} εώς {to} από {total} αντικείμενα';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Γίνεται Επεξεργασία, Παρακαλώ Περιμένετε ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Εντάξει';
|
||||||
|
$.messager.defaults.cancel = 'Άκυρο';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Το πεδίο είναι υποχρεωτικό.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Παρακαλώ εισάγετε σωστή Ηλ.Διεύθυνση.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Παρακαλώ εισάγετε σωστό σύνδεσμο.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Παρακαλώ εισάγετε τιμή μεταξύ {0} και {1}.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'Παρακαλώ διορθώστε αυτό το πεδίο.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'];
|
||||||
|
$.fn.calendar.defaults.months = ['Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μαϊ', 'Ιου', 'Ιου', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοε', 'Δεκ'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Σήμερα';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Κλείσιμο';
|
||||||
|
$.fn.datebox.defaults.okText = 'Εντάξει';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
45
static/jeasyui/locale/easyui-lang-en.js
Executable file
|
@ -0,0 +1,45 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Page';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'of {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Displaying {from} to {to} of {total} items';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Processing, please wait ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Cancel';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'This field is required.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Please enter a valid email address.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Please enter a valid URL.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Please enter a value between {0} and {1}.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'Please fix this field.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Today';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Close';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
45
static/jeasyui/locale/easyui-lang-es.js
Executable file
|
@ -0,0 +1,45 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Página';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'de {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Mostrando {from} a {to} de {total} elementos';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Procesando, por favor espere ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Aceptar';
|
||||||
|
$.messager.defaults.cancel = 'Cancelar';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Este campo es obligatorio.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Por favor ingrese una dirección de correo válida.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Por favor ingrese una URL válida.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Por favor ingrese un valor entre {0} y {1}.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'Por favor corrija este campo.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['Do','Lu','Ma','Mi','Ju','Vi','Sá'];
|
||||||
|
$.fn.calendar.defaults.months = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Hoy';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Cerrar';
|
||||||
|
$.fn.datebox.defaults.okText = 'Aceptar';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
45
static/jeasyui/locale/easyui-lang-fa.js
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'صفحه';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'از {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'نمایش {from} تا {to} از {total} مورد';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'درحال پردازش، لطفا صبر کنید...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'قبول';
|
||||||
|
$.messager.defaults.cancel = 'انصراف';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'این فیلد اجباری می باشد.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'لطفا آدرس ایمیل را صحیح وارد کنید.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'لطفا آدرس سایت را صحیح وارد کنید.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'لطفا مقداری بین {0} و {1} وارد کنید.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'لطفا مقدار این فیلد را تصحیح کنید.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'امروز';
|
||||||
|
$.fn.datebox.defaults.closeText = 'بستن';
|
||||||
|
$.fn.datebox.defaults.okText = 'قبول';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
62
static/jeasyui/locale/easyui-lang-fr.js
Executable file
|
@ -0,0 +1,62 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Page';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'de {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Affichage de {from} et {to} au {total} des articles';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = "Traitement, s'il vous plaît patienter ...";
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Annuler';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Ce champ est obligatoire.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = "S'il vous plaît entrer une adresse email valide.";
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = "S'il vous plaît entrer une URL valide.";
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = "S'il vous plaît entrez une valeur comprise entre {0} et {1}.";
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
|
||||||
|
$.fn.calendar.defaults.months = ["Jan", "Fév", "Mar", "Avr", "Mai", "Juin", "Juil", "Aôu", "Sep", "Oct", "Nov", "Déc"];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = "Aujourd'hui";
|
||||||
|
$.fn.datebox.defaults.closeText = 'Fermer';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
$.fn.datebox.defaults.formatter = function(date){
|
||||||
|
var y = date.getFullYear();
|
||||||
|
var m = date.getMonth()+1;
|
||||||
|
var d = date.getDate();
|
||||||
|
return (d<10?('0'+d):d)+'/'+(m<10?('0'+m):m)+'/'+y;
|
||||||
|
};
|
||||||
|
$.fn.datebox.defaults.parser = function(s){
|
||||||
|
if (!s) return new Date();
|
||||||
|
var ss = s.split('/');
|
||||||
|
var d = parseInt(ss[0],10);
|
||||||
|
var m = parseInt(ss[1],10);
|
||||||
|
var y = parseInt(ss[2],10);
|
||||||
|
if (!isNaN(y) && !isNaN(m) && !isNaN(d)){
|
||||||
|
return new Date(y,m-1,d);
|
||||||
|
} else {
|
||||||
|
return new Date();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
64
static/jeasyui/locale/easyui-lang-it.js
Executable file
|
@ -0,0 +1,64 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Pagina';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'di {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Visualizzazione {from} a {to} di {total} elementi';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'In lavorazione, attendere ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Annulla';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Questo campo è richiesto.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Inserisci un indirizzo email valido.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Inserisci un URL valido.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Inserisci un valore tra {0} e {1}.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'Correggere questo campo.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.firstDay = 1;
|
||||||
|
$.fn.calendar.defaults.weeks = ['D','L','M','M','G','V','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Oggi';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Chiudi';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
$.fn.datebox.defaults.formatter = function(date){
|
||||||
|
var y = date.getFullYear();
|
||||||
|
var m = date.getMonth()+1;
|
||||||
|
var d = date.getDate();
|
||||||
|
return (d<10?('0'+d):d)+'/'+(m<10?('0'+m):m)+'/'+y;
|
||||||
|
};
|
||||||
|
$.fn.datebox.defaults.parser = function(s){
|
||||||
|
if (!s) return new Date();
|
||||||
|
var ss = s.split('/');
|
||||||
|
var d = parseInt(ss[0],10);
|
||||||
|
var m = parseInt(ss[1],10);
|
||||||
|
var y = parseInt(ss[2],10);
|
||||||
|
if (!isNaN(y) && !isNaN(m) && !isNaN(d)){
|
||||||
|
return new Date(y,m-1,d);
|
||||||
|
} else {
|
||||||
|
return new Date();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
45
static/jeasyui/locale/easyui-lang-jp.js
Executable file
|
@ -0,0 +1,45 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'ページ';
|
||||||
|
$.fn.pagination.defaults.afterPageText = '{pages} 中';
|
||||||
|
$.fn.pagination.defaults.displayMsg = '全 {total} アイテム中 {from} から {to} を表示中';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = '処理中です。少々お待ちください...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'OK';
|
||||||
|
$.messager.defaults.cancel = 'キャンセル';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = '入力は必須です。';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = '正しいメールアドレスを入力してください。';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = '正しいURLを入力してください。';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = '{0} から {1} の範囲の正しい値を入力してください。';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'このフィールドを修正してください。';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['日','月','火','水','木','金','土'];
|
||||||
|
$.fn.calendar.defaults.months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = '今日';
|
||||||
|
$.fn.datebox.defaults.closeText = '閉じる';
|
||||||
|
$.fn.datebox.defaults.okText = 'OK';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
45
static/jeasyui/locale/easyui-lang-ko.js
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = '페이지';
|
||||||
|
$.fn.pagination.defaults.afterPageText = '{pages} 중';
|
||||||
|
$.fn.pagination.defaults.displayMsg = '전체 {total} 항목 중 {from}부터 {to}번째';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = '처리 중입니다. 잠시만 기다려 주세요...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = '확인';
|
||||||
|
$.messager.defaults.cancel = '취소';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = '필수 항목입니다.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = '올바른 메일 주소를 입력해 주세요.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = '올바른 URL를 입력해 주세요.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = '{0}에서 {1} 사이의 값을 입력해 주세요.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = '이 필드를 수정해 주세요.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['일','월','화','수','목','금','토'];
|
||||||
|
$.fn.calendar.defaults.months = ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = '오늘';
|
||||||
|
$.fn.datebox.defaults.closeText = '닫기';
|
||||||
|
$.fn.datebox.defaults.okText = '확인';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
44
static/jeasyui/locale/easyui-lang-nl.js
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Pagina';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'van {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Tonen van {from} tot {to} van de {total} items';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Verwerking, even geduld ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Annuleren';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Dit veld is verplicht.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Geef een geldig e-mailadres.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Vul een geldige URL.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Voer een waarde tussen {0} en {1}.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Vandaag';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Dicht';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
45
static/jeasyui/locale/easyui-lang-pl.js
Executable file
|
@ -0,0 +1,45 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Strona';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'z {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Wyświetlono elementy od {from} do {to} z {total}';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Przetwarzanie, proszę czekać ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Cancel';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'To pole jest wymagane.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Wprowadź poprawny adres email.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Wprowadź poprawny adres URL.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Wprowadź wartość z zakresu od {0} do {1}.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'Proszę poprawić to pole.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['N','P','W','Ś','C','P','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze', 'Lip', 'Sie', 'Wrz', 'Paź', 'Lis', 'Gru'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Dzisiaj';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Zamknij';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
45
static/jeasyui/locale/easyui-lang-pt_BR.js
Executable file
|
@ -0,0 +1,45 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Página';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'de {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Mostrando {from} a {to} de {total} itens';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Processando, aguarde ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Cancelar';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Esse campo é requerido.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Insira um endereço de email válido.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Insira uma URL válida.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Insira uma valor entre {0} e {1}.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'Corrija esse campo.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['D','S','T','Q','Q','S','S'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Hoje';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Fechar';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
46
static/jeasyui/locale/easyui-lang-ru.js
Executable file
|
@ -0,0 +1,46 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Страница';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'из {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Просмотр {from} до {to} из {total} записей';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Обрабатывается, пожалуйста ждите ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ок';
|
||||||
|
$.messager.defaults.cancel = 'Закрыть';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Это поле необходимо.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Пожалуйста введите корректный e-mail адрес.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Пожалуйста введите корректный URL.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Пожалуйста введите зачение между {0} и {1}.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'Пожалуйста исправте это поле.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.firstDay = 1;
|
||||||
|
$.fn.calendar.defaults.weeks = ['В','П','В','С','Ч','П','С'];
|
||||||
|
$.fn.calendar.defaults.months = ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Сегодня';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Закрыть';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ок';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
45
static/jeasyui/locale/easyui-lang-sv_SE.js
Executable file
|
@ -0,0 +1,45 @@
|
||||||
|
if ($.fn.pagination) {
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Sida';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'av {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Visar {from} till {to} av {total} poster';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid) {
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Bearbetar, vänligen vänta ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid) {
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager) {
|
||||||
|
$.messager.defaults.ok = 'Ok';
|
||||||
|
$.messager.defaults.cancel = 'Avbryt';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Detta fält är obligatoriskt.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox) {
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Vänligen ange en korrekt e-post adress.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Vänligen ange en korrekt URL.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Vänligen ange ett nummer mellan {0} och {1}.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'Vänligen åtgärda detta fält.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar) {
|
||||||
|
$.fn.calendar.defaults.weeks = ['Sön', 'Mån', 'Tis', 'Ons', 'Tors', 'Fre', 'Lör'];
|
||||||
|
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox) {
|
||||||
|
$.fn.datebox.defaults.currentText = 'I dag';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Stäng';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ok';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox) {
|
||||||
|
$.extend($.fn.datetimebox.defaults, {
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
59
static/jeasyui/locale/easyui-lang-tr.js
Executable file
|
@ -0,0 +1,59 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Sayfa';
|
||||||
|
$.fn.pagination.defaults.afterPageText = ' / {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = '{from} ile {to} arası gösteriliyor, toplam {total} kayıt';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.panel.defaults.loadingMessage = "Yükleniyor...";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadingMessage = "Yükleniyor...";
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'İşleminiz Yapılıyor, lütfen bekleyin ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Tamam';
|
||||||
|
$.messager.defaults.cancel = 'İptal';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Bu alan zorunludur.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Lütfen geçerli bir email adresi giriniz.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Lütfen geçerli bir URL giriniz.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Lütfen {0} ile {1} arasında bir değer giriniz.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'Lütfen bu alanı düzeltiniz.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'];
|
||||||
|
$.fn.calendar.defaults.months = ['Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz', 'Tem', 'Ağu', 'Eyl', 'Eki', 'Kas', 'Ara'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Bugün';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Kapat';
|
||||||
|
$.fn.datebox.defaults.okText = 'Tamam';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
|
||||||
|
$.fn.datebox.defaults.formatter=function(date){
|
||||||
|
var y=date.getFullYear();
|
||||||
|
var m=date.getMonth()+1;
|
||||||
|
var d=date.getDate();
|
||||||
|
if(m<10){m="0"+m;}
|
||||||
|
if(d<10){d="0"+d;}
|
||||||
|
return d+"."+m+"."+y;
|
||||||
|
};
|
||||||
|
}
|
46
static/jeasyui/locale/easyui-lang-ua.js
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = 'Сторінка';
|
||||||
|
$.fn.pagination.defaults.afterPageText = 'з {pages}';
|
||||||
|
$.fn.pagination.defaults.displayMsg = 'Перегляд {from} до {to} з {total} записів';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = 'Обробляється, зачекайте будь даска ...';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = 'Ок';
|
||||||
|
$.messager.defaults.cancel = 'Закрити';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = 'Це поле необхідно.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = 'Будь ласка, введіть коректну e-mail адресу.';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = 'Будь ласка, введіть коректний URL.';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = 'Будь ласка введіть значення між {0} і {1}.';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = 'Будь ласка виправте це поле.';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.firstDay = 1;
|
||||||
|
$.fn.calendar.defaults.weeks = ['В','П','В','С','Ч','П','С'];
|
||||||
|
$.fn.calendar.defaults.months = ['Січ', 'Лют', 'Бер', 'Квіт', 'Трав', 'Черв', 'Лип', 'Серп', 'Вер', 'Жовт', 'Лист', 'Груд'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = 'Сьогодні';
|
||||||
|
$.fn.datebox.defaults.closeText = 'Закрити';
|
||||||
|
$.fn.datebox.defaults.okText = 'Ок';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
66
static/jeasyui/locale/easyui-lang-zh_CN.js
Executable file
|
@ -0,0 +1,66 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = '第';
|
||||||
|
$.fn.pagination.defaults.afterPageText = '共{pages}页';
|
||||||
|
$.fn.pagination.defaults.displayMsg = '显示{from}到{to},共{total}记录';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = '正在处理,请稍待。。。';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = '确定';
|
||||||
|
$.messager.defaults.cancel = '取消';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = '该输入项为必输项';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = '请输入有效的电子邮件地址';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = '请输入有效的URL地址';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = '输入内容长度必须介于{0}和{1}之间';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = '请修正该字段';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['日','一','二','三','四','五','六'];
|
||||||
|
$.fn.calendar.defaults.months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = '今天';
|
||||||
|
$.fn.datebox.defaults.closeText = '关闭';
|
||||||
|
$.fn.datebox.defaults.okText = '确定';
|
||||||
|
$.fn.datebox.defaults.formatter = function(date){
|
||||||
|
var y = date.getFullYear();
|
||||||
|
var m = date.getMonth()+1;
|
||||||
|
var d = date.getDate();
|
||||||
|
return y+'-'+(m<10?('0'+m):m)+'-'+(d<10?('0'+d):d);
|
||||||
|
};
|
||||||
|
$.fn.datebox.defaults.parser = function(s){
|
||||||
|
if (!s) return new Date();
|
||||||
|
var ss = s.split('-');
|
||||||
|
var y = parseInt(ss[0],10);
|
||||||
|
var m = parseInt(ss[1],10);
|
||||||
|
var d = parseInt(ss[2],10);
|
||||||
|
if (!isNaN(y) && !isNaN(m) && !isNaN(d)){
|
||||||
|
return new Date(y,m-1,d);
|
||||||
|
} else {
|
||||||
|
return new Date();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if ($.fn.datetimespinner){
|
||||||
|
$.fn.datetimespinner.defaults.selections = [[0,4],[5,7],[8,10],[11,13],[14,16],[17,19]]
|
||||||
|
}
|
48
static/jeasyui/locale/easyui-lang-zh_TW.js
Executable file
|
@ -0,0 +1,48 @@
|
||||||
|
if ($.fn.pagination){
|
||||||
|
$.fn.pagination.defaults.beforePageText = '第';
|
||||||
|
$.fn.pagination.defaults.afterPageText = '共{pages}頁';
|
||||||
|
$.fn.pagination.defaults.displayMsg = '顯示{from}到{to},共{total}記錄';
|
||||||
|
}
|
||||||
|
if ($.fn.datagrid){
|
||||||
|
$.fn.datagrid.defaults.loadMsg = '正在處理,請稍待。。。';
|
||||||
|
}
|
||||||
|
if ($.fn.treegrid && $.fn.datagrid){
|
||||||
|
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
|
||||||
|
}
|
||||||
|
if ($.messager){
|
||||||
|
$.messager.defaults.ok = '確定';
|
||||||
|
$.messager.defaults.cancel = '取消';
|
||||||
|
}
|
||||||
|
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
|
||||||
|
'combo','combobox','combogrid','combotree',
|
||||||
|
'datebox','datetimebox','numberbox',
|
||||||
|
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
|
||||||
|
if ($.fn[plugin]){
|
||||||
|
$.fn[plugin].defaults.missingMessage = '該輸入項為必輸項';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($.fn.validatebox){
|
||||||
|
$.fn.validatebox.defaults.rules.email.message = '請輸入有效的電子郵件地址';
|
||||||
|
$.fn.validatebox.defaults.rules.url.message = '請輸入有效的URL地址';
|
||||||
|
$.fn.validatebox.defaults.rules.length.message = '輸入內容長度必須介於{0}和{1}之間';
|
||||||
|
$.fn.validatebox.defaults.rules.remote.message = '請修正此欄位';
|
||||||
|
}
|
||||||
|
if ($.fn.calendar){
|
||||||
|
$.fn.calendar.defaults.weeks = ['日','一','二','三','四','五','六'];
|
||||||
|
$.fn.calendar.defaults.months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];
|
||||||
|
}
|
||||||
|
if ($.fn.datebox){
|
||||||
|
$.fn.datebox.defaults.currentText = '今天';
|
||||||
|
$.fn.datebox.defaults.closeText = '關閉';
|
||||||
|
$.fn.datebox.defaults.okText = '確定';
|
||||||
|
}
|
||||||
|
if ($.fn.datetimebox && $.fn.datebox){
|
||||||
|
$.extend($.fn.datetimebox.defaults,{
|
||||||
|
currentText: $.fn.datebox.defaults.currentText,
|
||||||
|
closeText: $.fn.datebox.defaults.closeText,
|
||||||
|
okText: $.fn.datebox.defaults.okText
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if ($.fn.datetimespinner){
|
||||||
|
$.fn.datetimespinner.defaults.selections = [[0,4],[5,7],[8,10],[11,13],[14,16],[17,19]]
|
||||||
|
}
|
350
static/jeasyui/plugins/jquery.accordion.js
Executable file
|
@ -0,0 +1,350 @@
|
||||||
|
/**
|
||||||
|
* EasyUI for jQuery 1.9.14
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2021 www.jeasyui.com. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
|
||||||
|
* To use it on other terms please contact us: info@jeasyui.com
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
(function($){
|
||||||
|
function _1(_2,_3){
|
||||||
|
var _4=$.data(_2,"accordion");
|
||||||
|
var _5=_4.options;
|
||||||
|
var _6=_4.panels;
|
||||||
|
var cc=$(_2);
|
||||||
|
var _7=(_5.halign=="left"||_5.halign=="right");
|
||||||
|
cc.children(".panel-last").removeClass("panel-last");
|
||||||
|
cc.children(".panel:last").addClass("panel-last");
|
||||||
|
if(_3){
|
||||||
|
$.extend(_5,{width:_3.width,height:_3.height});
|
||||||
|
}
|
||||||
|
cc._size(_5);
|
||||||
|
var _8=0;
|
||||||
|
var _9="auto";
|
||||||
|
var _a=cc.find(">.panel>.accordion-header");
|
||||||
|
if(_a.length){
|
||||||
|
if(_7){
|
||||||
|
$(_a[0]).next().panel("resize",{width:cc.width(),height:cc.height()});
|
||||||
|
_8=$(_a[0])._outerWidth();
|
||||||
|
}else{
|
||||||
|
_8=$(_a[0]).css("height","")._outerHeight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!isNaN(parseInt(_5.height))){
|
||||||
|
if(_7){
|
||||||
|
_9=cc.width()-_8*_a.length;
|
||||||
|
}else{
|
||||||
|
_9=cc.height()-_8*_a.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_b(true,_9-_b(false));
|
||||||
|
function _b(_c,_d){
|
||||||
|
var _e=0;
|
||||||
|
for(var i=0;i<_6.length;i++){
|
||||||
|
var p=_6[i];
|
||||||
|
if(_7){
|
||||||
|
var h=p.panel("header")._outerWidth(_8);
|
||||||
|
}else{
|
||||||
|
var h=p.panel("header")._outerHeight(_8);
|
||||||
|
}
|
||||||
|
if(p.panel("options").collapsible==_c){
|
||||||
|
var _f=isNaN(_d)?undefined:(_d+_8*h.length);
|
||||||
|
if(_7){
|
||||||
|
p.panel("resize",{height:cc.height(),width:(_c?_f:undefined)});
|
||||||
|
_e+=p.panel("panel")._outerWidth()-_8*h.length;
|
||||||
|
}else{
|
||||||
|
p.panel("resize",{width:cc.width(),height:(_c?_f:undefined)});
|
||||||
|
_e+=p.panel("panel").outerHeight()-_8*h.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _e;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
function _10(_11,_12,_13,all){
|
||||||
|
var _14=$.data(_11,"accordion").panels;
|
||||||
|
var pp=[];
|
||||||
|
for(var i=0;i<_14.length;i++){
|
||||||
|
var p=_14[i];
|
||||||
|
if(_12){
|
||||||
|
if(p.panel("options")[_12]==_13){
|
||||||
|
pp.push(p);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(p[0]==$(_13)[0]){
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(_12){
|
||||||
|
return all?pp:(pp.length?pp[0]:null);
|
||||||
|
}else{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _15(_16){
|
||||||
|
return _10(_16,"collapsed",false,true);
|
||||||
|
};
|
||||||
|
function _17(_18){
|
||||||
|
var pp=_15(_18);
|
||||||
|
return pp.length?pp[0]:null;
|
||||||
|
};
|
||||||
|
function _19(_1a,_1b){
|
||||||
|
return _10(_1a,null,_1b);
|
||||||
|
};
|
||||||
|
function _1c(_1d,_1e){
|
||||||
|
var _1f=$.data(_1d,"accordion").panels;
|
||||||
|
if(typeof _1e=="number"){
|
||||||
|
if(_1e<0||_1e>=_1f.length){
|
||||||
|
return null;
|
||||||
|
}else{
|
||||||
|
return _1f[_1e];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _10(_1d,"title",_1e);
|
||||||
|
};
|
||||||
|
function _20(_21){
|
||||||
|
var _22=$.data(_21,"accordion").options;
|
||||||
|
var cc=$(_21);
|
||||||
|
if(_22.border){
|
||||||
|
cc.removeClass("accordion-noborder");
|
||||||
|
}else{
|
||||||
|
cc.addClass("accordion-noborder");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _23(_24){
|
||||||
|
var _25=$.data(_24,"accordion");
|
||||||
|
var cc=$(_24);
|
||||||
|
cc.addClass("accordion");
|
||||||
|
_25.panels=[];
|
||||||
|
cc.children("div").each(function(){
|
||||||
|
var _26=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr("selected")?true:undefined)});
|
||||||
|
var pp=$(this);
|
||||||
|
_25.panels.push(pp);
|
||||||
|
_28(_24,pp,_26);
|
||||||
|
});
|
||||||
|
cc._bind("_resize",function(e,_27){
|
||||||
|
if($(this).hasClass("easyui-fluid")||_27){
|
||||||
|
_1(_24);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
function _28(_29,pp,_2a){
|
||||||
|
var _2b=$.data(_29,"accordion").options;
|
||||||
|
pp.panel($.extend({},{collapsible:true,minimizable:false,maximizable:false,closable:false,doSize:false,collapsed:true,headerCls:"accordion-header",bodyCls:"accordion-body",halign:_2b.halign},_2a,{onBeforeExpand:function(){
|
||||||
|
if(_2a.onBeforeExpand){
|
||||||
|
if(_2a.onBeforeExpand.call(this)==false){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!_2b.multiple){
|
||||||
|
var all=$.grep(_15(_29),function(p){
|
||||||
|
return p.panel("options").collapsible;
|
||||||
|
});
|
||||||
|
for(var i=0;i<all.length;i++){
|
||||||
|
_34(_29,_19(_29,all[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var _2c=$(this).panel("header");
|
||||||
|
_2c.addClass("accordion-header-selected");
|
||||||
|
_2c.find(".accordion-collapse").removeClass("accordion-expand");
|
||||||
|
},onExpand:function(){
|
||||||
|
$(_29).find(">.panel-last>.accordion-header").removeClass("accordion-header-border");
|
||||||
|
if(_2a.onExpand){
|
||||||
|
_2a.onExpand.call(this);
|
||||||
|
}
|
||||||
|
_2b.onSelect.call(_29,$(this).panel("options").title,_19(_29,this));
|
||||||
|
},onBeforeCollapse:function(){
|
||||||
|
if(_2a.onBeforeCollapse){
|
||||||
|
if(_2a.onBeforeCollapse.call(this)==false){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$(_29).find(">.panel-last>.accordion-header").addClass("accordion-header-border");
|
||||||
|
var _2d=$(this).panel("header");
|
||||||
|
_2d.removeClass("accordion-header-selected");
|
||||||
|
_2d.find(".accordion-collapse").addClass("accordion-expand");
|
||||||
|
},onCollapse:function(){
|
||||||
|
if(isNaN(parseInt(_2b.height))){
|
||||||
|
$(_29).find(">.panel-last>.accordion-header").removeClass("accordion-header-border");
|
||||||
|
}
|
||||||
|
if(_2a.onCollapse){
|
||||||
|
_2a.onCollapse.call(this);
|
||||||
|
}
|
||||||
|
_2b.onUnselect.call(_29,$(this).panel("options").title,_19(_29,this));
|
||||||
|
}}));
|
||||||
|
var _2e=pp.panel("header");
|
||||||
|
var _2f=_2e.children("div.panel-tool");
|
||||||
|
_2f.children("a.panel-tool-collapse").hide();
|
||||||
|
var t=$("<a href=\"javascript:;\"></a>").addClass("accordion-collapse accordion-expand").appendTo(_2f);
|
||||||
|
t._bind("click",function(){
|
||||||
|
_30(pp);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
pp.panel("options").collapsible?t.show():t.hide();
|
||||||
|
if(_2b.halign=="left"||_2b.halign=="right"){
|
||||||
|
t.hide();
|
||||||
|
}
|
||||||
|
_2e._bind("click",function(){
|
||||||
|
_30(pp);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
function _30(p){
|
||||||
|
var _31=p.panel("options");
|
||||||
|
if(_31.collapsible){
|
||||||
|
var _32=_19(_29,p);
|
||||||
|
if(_31.collapsed){
|
||||||
|
_33(_29,_32);
|
||||||
|
}else{
|
||||||
|
_34(_29,_32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
function _33(_35,_36){
|
||||||
|
var p=_1c(_35,_36);
|
||||||
|
if(!p){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_37(_35);
|
||||||
|
var _38=$.data(_35,"accordion").options;
|
||||||
|
p.panel("expand",_38.animate);
|
||||||
|
};
|
||||||
|
function _34(_39,_3a){
|
||||||
|
var p=_1c(_39,_3a);
|
||||||
|
if(!p){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_37(_39);
|
||||||
|
var _3b=$.data(_39,"accordion").options;
|
||||||
|
p.panel("collapse",_3b.animate);
|
||||||
|
};
|
||||||
|
function _3c(_3d){
|
||||||
|
var _3e=$.data(_3d,"accordion").options;
|
||||||
|
$(_3d).find(">.panel-last>.accordion-header").addClass("accordion-header-border");
|
||||||
|
var p=_10(_3d,"selected",true);
|
||||||
|
if(p){
|
||||||
|
_3f(_19(_3d,p));
|
||||||
|
}else{
|
||||||
|
_3f(_3e.selected);
|
||||||
|
}
|
||||||
|
function _3f(_40){
|
||||||
|
var _41=_3e.animate;
|
||||||
|
_3e.animate=false;
|
||||||
|
_33(_3d,_40);
|
||||||
|
_3e.animate=_41;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
function _37(_42){
|
||||||
|
var _43=$.data(_42,"accordion").panels;
|
||||||
|
for(var i=0;i<_43.length;i++){
|
||||||
|
_43[i].stop(true,true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function add(_44,_45){
|
||||||
|
var _46=$.data(_44,"accordion");
|
||||||
|
var _47=_46.options;
|
||||||
|
var _48=_46.panels;
|
||||||
|
if(_45.selected==undefined){
|
||||||
|
_45.selected=true;
|
||||||
|
}
|
||||||
|
_37(_44);
|
||||||
|
var pp=$("<div></div>").appendTo(_44);
|
||||||
|
_48.push(pp);
|
||||||
|
_28(_44,pp,_45);
|
||||||
|
_1(_44);
|
||||||
|
_47.onAdd.call(_44,_45.title,_48.length-1);
|
||||||
|
if(_45.selected){
|
||||||
|
_33(_44,_48.length-1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _49(_4a,_4b){
|
||||||
|
var _4c=$.data(_4a,"accordion");
|
||||||
|
var _4d=_4c.options;
|
||||||
|
var _4e=_4c.panels;
|
||||||
|
_37(_4a);
|
||||||
|
var _4f=_1c(_4a,_4b);
|
||||||
|
var _50=_4f.panel("options").title;
|
||||||
|
var _51=_19(_4a,_4f);
|
||||||
|
if(!_4f){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(_4d.onBeforeRemove.call(_4a,_50,_51)==false){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_4e.splice(_51,1);
|
||||||
|
_4f.panel("destroy");
|
||||||
|
if(_4e.length){
|
||||||
|
_1(_4a);
|
||||||
|
var _52=_17(_4a);
|
||||||
|
if(!_52){
|
||||||
|
_33(_4a,0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_4d.onRemove.call(_4a,_50,_51);
|
||||||
|
};
|
||||||
|
$.fn.accordion=function(_53,_54){
|
||||||
|
if(typeof _53=="string"){
|
||||||
|
return $.fn.accordion.methods[_53](this,_54);
|
||||||
|
}
|
||||||
|
_53=_53||{};
|
||||||
|
return this.each(function(){
|
||||||
|
var _55=$.data(this,"accordion");
|
||||||
|
if(_55){
|
||||||
|
$.extend(_55.options,_53);
|
||||||
|
}else{
|
||||||
|
$.data(this,"accordion",{options:$.extend({},$.fn.accordion.defaults,$.fn.accordion.parseOptions(this),_53),accordion:$(this).addClass("accordion"),panels:[]});
|
||||||
|
_23(this);
|
||||||
|
}
|
||||||
|
_20(this);
|
||||||
|
_1(this);
|
||||||
|
_3c(this);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
$.fn.accordion.methods={options:function(jq){
|
||||||
|
return $.data(jq[0],"accordion").options;
|
||||||
|
},panels:function(jq){
|
||||||
|
return $.data(jq[0],"accordion").panels;
|
||||||
|
},resize:function(jq,_56){
|
||||||
|
return jq.each(function(){
|
||||||
|
_1(this,_56);
|
||||||
|
});
|
||||||
|
},getSelections:function(jq){
|
||||||
|
return _15(jq[0]);
|
||||||
|
},getSelected:function(jq){
|
||||||
|
return _17(jq[0]);
|
||||||
|
},getPanel:function(jq,_57){
|
||||||
|
return _1c(jq[0],_57);
|
||||||
|
},getPanelIndex:function(jq,_58){
|
||||||
|
return _19(jq[0],_58);
|
||||||
|
},select:function(jq,_59){
|
||||||
|
return jq.each(function(){
|
||||||
|
_33(this,_59);
|
||||||
|
});
|
||||||
|
},unselect:function(jq,_5a){
|
||||||
|
return jq.each(function(){
|
||||||
|
_34(this,_5a);
|
||||||
|
});
|
||||||
|
},add:function(jq,_5b){
|
||||||
|
return jq.each(function(){
|
||||||
|
add(this,_5b);
|
||||||
|
});
|
||||||
|
},remove:function(jq,_5c){
|
||||||
|
return jq.each(function(){
|
||||||
|
_49(this,_5c);
|
||||||
|
});
|
||||||
|
}};
|
||||||
|
$.fn.accordion.parseOptions=function(_5d){
|
||||||
|
var t=$(_5d);
|
||||||
|
return $.extend({},$.parser.parseOptions(_5d,["width","height","halign",{fit:"boolean",border:"boolean",animate:"boolean",multiple:"boolean",selected:"number"}]));
|
||||||
|
};
|
||||||
|
$.fn.accordion.defaults={width:"auto",height:"auto",fit:false,border:true,animate:true,multiple:false,selected:0,halign:"top",onSelect:function(_5e,_5f){
|
||||||
|
},onUnselect:function(_60,_61){
|
||||||
|
},onAdd:function(_62,_63){
|
||||||
|
},onBeforeRemove:function(_64,_65){
|
||||||
|
},onRemove:function(_66,_67){
|
||||||
|
}};
|
||||||
|
})(jQuery);
|
||||||
|
|
403
static/jeasyui/plugins/jquery.calendar.js
Executable file
|
@ -0,0 +1,403 @@
|
||||||
|
/**
|
||||||
|
* EasyUI for jQuery 1.9.14
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2021 www.jeasyui.com. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
|
||||||
|
* To use it on other terms please contact us: info@jeasyui.com
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
(function($){
|
||||||
|
function _1(_2,_3){
|
||||||
|
var _4=$.data(_2,"calendar").options;
|
||||||
|
var t=$(_2);
|
||||||
|
if(_3){
|
||||||
|
$.extend(_4,{width:_3.width,height:_3.height});
|
||||||
|
}
|
||||||
|
t._size(_4,t.parent());
|
||||||
|
t.find(".calendar-body")._outerHeight(t.height()-t.find(".calendar-header")._outerHeight());
|
||||||
|
if(t.find(".calendar-menu").is(":visible")){
|
||||||
|
_5(_2);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _6(_7){
|
||||||
|
$(_7).addClass("calendar").html("<div class=\"calendar-header\">"+"<div class=\"calendar-nav calendar-prevmonth\"></div>"+"<div class=\"calendar-nav calendar-nextmonth\"></div>"+"<div class=\"calendar-nav calendar-prevyear\"></div>"+"<div class=\"calendar-nav calendar-nextyear\"></div>"+"<div class=\"calendar-title\">"+"<span class=\"calendar-text\"></span>"+"</div>"+"</div>"+"<div class=\"calendar-body\">"+"<div class=\"calendar-menu\">"+"<div class=\"calendar-menu-year-inner\">"+"<span class=\"calendar-nav calendar-menu-prev\"></span>"+"<span><input class=\"calendar-menu-year\" type=\"text\"></span>"+"<span class=\"calendar-nav calendar-menu-next\"></span>"+"</div>"+"<div class=\"calendar-menu-month-inner\">"+"</div>"+"</div>"+"</div>");
|
||||||
|
$(_7)._bind("_resize",function(e,_8){
|
||||||
|
if($(this).hasClass("easyui-fluid")||_8){
|
||||||
|
_1(_7);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
function _9(_a){
|
||||||
|
var _b=$.data(_a,"calendar").options;
|
||||||
|
var _c=$(_a).find(".calendar-menu");
|
||||||
|
_c.find(".calendar-menu-year")._unbind(".calendar")._bind("keypress.calendar",function(e){
|
||||||
|
if(e.keyCode==13){
|
||||||
|
_d(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$(_a)._unbind(".calendar")._bind("mouseover.calendar",function(e){
|
||||||
|
var t=_e(e.target);
|
||||||
|
if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){
|
||||||
|
t.addClass("calendar-nav-hover");
|
||||||
|
}
|
||||||
|
})._bind("mouseout.calendar",function(e){
|
||||||
|
var t=_e(e.target);
|
||||||
|
if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){
|
||||||
|
t.removeClass("calendar-nav-hover");
|
||||||
|
}
|
||||||
|
})._bind("click.calendar",function(e){
|
||||||
|
var t=_e(e.target);
|
||||||
|
if(t.hasClass("calendar-menu-next")||t.hasClass("calendar-nextyear")){
|
||||||
|
_f(1);
|
||||||
|
}else{
|
||||||
|
if(t.hasClass("calendar-menu-prev")||t.hasClass("calendar-prevyear")){
|
||||||
|
_f(-1);
|
||||||
|
}else{
|
||||||
|
if(t.hasClass("calendar-menu-month")){
|
||||||
|
_c.find(".calendar-selected").removeClass("calendar-selected");
|
||||||
|
t.addClass("calendar-selected");
|
||||||
|
_d(true);
|
||||||
|
}else{
|
||||||
|
if(t.hasClass("calendar-prevmonth")){
|
||||||
|
_10(-1);
|
||||||
|
}else{
|
||||||
|
if(t.hasClass("calendar-nextmonth")){
|
||||||
|
_10(1);
|
||||||
|
}else{
|
||||||
|
if(t.hasClass("calendar-text")){
|
||||||
|
if(_c.is(":visible")){
|
||||||
|
_c.hide();
|
||||||
|
}else{
|
||||||
|
_5(_a);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(t.hasClass("calendar-day")){
|
||||||
|
if(t.hasClass("calendar-disabled")){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var _11=_b.current;
|
||||||
|
t.closest("div.calendar-body").find(".calendar-selected").removeClass("calendar-selected");
|
||||||
|
t.addClass("calendar-selected");
|
||||||
|
var _12=t.attr("abbr").split(",");
|
||||||
|
var y=parseInt(_12[0]);
|
||||||
|
var m=parseInt(_12[1]);
|
||||||
|
var d=parseInt(_12[2]);
|
||||||
|
_b.current=new _b.Date(y,m-1,d);
|
||||||
|
_b.onSelect.call(_a,_b.current);
|
||||||
|
if(!_11||_11.getTime()!=_b.current.getTime()){
|
||||||
|
_b.onChange.call(_a,_b.current,_11);
|
||||||
|
}
|
||||||
|
if(_b.year!=y||_b.month!=m){
|
||||||
|
_b.year=y;
|
||||||
|
_b.month=m;
|
||||||
|
_19(_a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
function _e(t){
|
||||||
|
var day=$(t).closest(".calendar-day");
|
||||||
|
if(day.length){
|
||||||
|
return day;
|
||||||
|
}else{
|
||||||
|
return $(t);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _d(_13){
|
||||||
|
var _14=$(_a).find(".calendar-menu");
|
||||||
|
var _15=_14.find(".calendar-menu-year").val();
|
||||||
|
var _16=_14.find(".calendar-selected").attr("abbr");
|
||||||
|
if(!isNaN(_15)){
|
||||||
|
_b.year=parseInt(_15);
|
||||||
|
_b.month=parseInt(_16);
|
||||||
|
_19(_a);
|
||||||
|
}
|
||||||
|
if(_13){
|
||||||
|
_14.hide();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _f(_17){
|
||||||
|
_b.year+=_17;
|
||||||
|
_19(_a);
|
||||||
|
_c.find(".calendar-menu-year").val(_b.year);
|
||||||
|
};
|
||||||
|
function _10(_18){
|
||||||
|
_b.month+=_18;
|
||||||
|
if(_b.month>12){
|
||||||
|
_b.year++;
|
||||||
|
_b.month=1;
|
||||||
|
}else{
|
||||||
|
if(_b.month<1){
|
||||||
|
_b.year--;
|
||||||
|
_b.month=12;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_19(_a);
|
||||||
|
_c.find("td.calendar-selected").removeClass("calendar-selected");
|
||||||
|
_c.find("td:eq("+(_b.month-1)+")").addClass("calendar-selected");
|
||||||
|
};
|
||||||
|
};
|
||||||
|
function _5(_1a){
|
||||||
|
var _1b=$.data(_1a,"calendar").options;
|
||||||
|
$(_1a).find(".calendar-menu").show();
|
||||||
|
if($(_1a).find(".calendar-menu-month-inner").is(":empty")){
|
||||||
|
$(_1a).find(".calendar-menu-month-inner").empty();
|
||||||
|
var t=$("<table class=\"calendar-mtable\"></table>").appendTo($(_1a).find(".calendar-menu-month-inner"));
|
||||||
|
var idx=0;
|
||||||
|
for(var i=0;i<3;i++){
|
||||||
|
var tr=$("<tr></tr>").appendTo(t);
|
||||||
|
for(var j=0;j<4;j++){
|
||||||
|
$("<td class=\"calendar-nav calendar-menu-month\"></td>").html(_1b.months[idx++]).attr("abbr",idx).appendTo(tr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var _1c=$(_1a).find(".calendar-body");
|
||||||
|
var _1d=$(_1a).find(".calendar-menu");
|
||||||
|
var _1e=_1d.find(".calendar-menu-year-inner");
|
||||||
|
var _1f=_1d.find(".calendar-menu-month-inner");
|
||||||
|
_1e.find("input").val(_1b.year).focus();
|
||||||
|
_1f.find("td.calendar-selected").removeClass("calendar-selected");
|
||||||
|
_1f.find("td:eq("+(_1b.month-1)+")").addClass("calendar-selected");
|
||||||
|
_1d._outerWidth(_1c._outerWidth());
|
||||||
|
_1d._outerHeight(_1c._outerHeight());
|
||||||
|
_1f._outerHeight(_1d.height()-_1e._outerHeight());
|
||||||
|
};
|
||||||
|
function _20(_21,_22,_23){
|
||||||
|
var _24=$.data(_21,"calendar").options;
|
||||||
|
var _25=[];
|
||||||
|
var _26=new _24.Date(_22,_23,0).getDate();
|
||||||
|
for(var i=1;i<=_26;i++){
|
||||||
|
_25.push([_22,_23,i]);
|
||||||
|
}
|
||||||
|
var _27=[],_28=[];
|
||||||
|
var _29=-1;
|
||||||
|
while(_25.length>0){
|
||||||
|
var _2a=_25.shift();
|
||||||
|
_28.push(_2a);
|
||||||
|
var day=new _24.Date(_2a[0],_2a[1]-1,_2a[2]).getDay();
|
||||||
|
if(_29==day){
|
||||||
|
day=0;
|
||||||
|
}else{
|
||||||
|
if(day==(_24.firstDay==0?7:_24.firstDay)-1){
|
||||||
|
_27.push(_28);
|
||||||
|
_28=[];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_29=day;
|
||||||
|
}
|
||||||
|
if(_28.length){
|
||||||
|
_27.push(_28);
|
||||||
|
}
|
||||||
|
var _2b=_27[0];
|
||||||
|
if(_2b.length<7){
|
||||||
|
while(_2b.length<7){
|
||||||
|
var _2c=_2b[0];
|
||||||
|
var _2a=new _24.Date(_2c[0],_2c[1]-1,_2c[2]-1);
|
||||||
|
_2b.unshift([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
var _2c=_2b[0];
|
||||||
|
var _28=[];
|
||||||
|
for(var i=1;i<=7;i++){
|
||||||
|
var _2a=new _24.Date(_2c[0],_2c[1]-1,_2c[2]-i);
|
||||||
|
_28.unshift([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
|
||||||
|
}
|
||||||
|
_27.unshift(_28);
|
||||||
|
}
|
||||||
|
var _2d=_27[_27.length-1];
|
||||||
|
while(_2d.length<7){
|
||||||
|
var _2e=_2d[_2d.length-1];
|
||||||
|
var _2a=new _24.Date(_2e[0],_2e[1]-1,_2e[2]+1);
|
||||||
|
_2d.push([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
|
||||||
|
}
|
||||||
|
if(_27.length<6){
|
||||||
|
var _2e=_2d[_2d.length-1];
|
||||||
|
var _28=[];
|
||||||
|
for(var i=1;i<=7;i++){
|
||||||
|
var _2a=new _24.Date(_2e[0],_2e[1]-1,_2e[2]+i);
|
||||||
|
_28.push([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
|
||||||
|
}
|
||||||
|
_27.push(_28);
|
||||||
|
}
|
||||||
|
return _27;
|
||||||
|
};
|
||||||
|
function _19(_2f){
|
||||||
|
var _30=$.data(_2f,"calendar").options;
|
||||||
|
if(_30.current&&!_30.validator.call(_2f,_30.current)){
|
||||||
|
_30.current=null;
|
||||||
|
}
|
||||||
|
var now=new _30.Date();
|
||||||
|
var _31=now.getFullYear()+","+(now.getMonth()+1)+","+now.getDate();
|
||||||
|
var _32=_30.current?(_30.current.getFullYear()+","+(_30.current.getMonth()+1)+","+_30.current.getDate()):"";
|
||||||
|
var _33=6-_30.firstDay;
|
||||||
|
var _34=_33+1;
|
||||||
|
if(_33>=7){
|
||||||
|
_33-=7;
|
||||||
|
}
|
||||||
|
if(_34>=7){
|
||||||
|
_34-=7;
|
||||||
|
}
|
||||||
|
$(_2f).find(".calendar-title span").html(_30.months[_30.month-1]+" "+_30.year);
|
||||||
|
var _35=$(_2f).find("div.calendar-body");
|
||||||
|
_35.children("table").remove();
|
||||||
|
var _36=["<table class=\"calendar-dtable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">"];
|
||||||
|
_36.push("<thead><tr>");
|
||||||
|
if(_30.showWeek){
|
||||||
|
_36.push("<th class=\"calendar-week\">"+_30.weekNumberHeader+"</th>");
|
||||||
|
}
|
||||||
|
for(var i=_30.firstDay;i<_30.weeks.length;i++){
|
||||||
|
_36.push("<th>"+_30.weeks[i]+"</th>");
|
||||||
|
}
|
||||||
|
for(var i=0;i<_30.firstDay;i++){
|
||||||
|
_36.push("<th>"+_30.weeks[i]+"</th>");
|
||||||
|
}
|
||||||
|
_36.push("</tr></thead>");
|
||||||
|
_36.push("<tbody>");
|
||||||
|
var _37=_20(_2f,_30.year,_30.month);
|
||||||
|
for(var i=0;i<_37.length;i++){
|
||||||
|
var _38=_37[i];
|
||||||
|
var cls="";
|
||||||
|
if(i==0){
|
||||||
|
cls="calendar-first";
|
||||||
|
}else{
|
||||||
|
if(i==_37.length-1){
|
||||||
|
cls="calendar-last";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_36.push("<tr class=\""+cls+"\">");
|
||||||
|
if(_30.showWeek){
|
||||||
|
var _39=_30.getWeekNumber(new _30.Date(_38[0][0],parseInt(_38[0][1])-1,_38[0][2]));
|
||||||
|
_36.push("<td class=\"calendar-week\">"+_39+"</td>");
|
||||||
|
}
|
||||||
|
for(var j=0;j<_38.length;j++){
|
||||||
|
var day=_38[j];
|
||||||
|
var s=day[0]+","+day[1]+","+day[2];
|
||||||
|
var _3a=new _30.Date(day[0],parseInt(day[1])-1,day[2]);
|
||||||
|
var d=_30.formatter.call(_2f,_3a);
|
||||||
|
var css=_30.styler.call(_2f,_3a);
|
||||||
|
var _3b="";
|
||||||
|
var _3c="";
|
||||||
|
if(typeof css=="string"){
|
||||||
|
_3c=css;
|
||||||
|
}else{
|
||||||
|
if(css){
|
||||||
|
_3b=css["class"]||"";
|
||||||
|
_3c=css["style"]||"";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var cls="calendar-day";
|
||||||
|
if(!(_30.year==day[0]&&_30.month==day[1])){
|
||||||
|
cls+=" calendar-other-month";
|
||||||
|
}
|
||||||
|
if(s==_31){
|
||||||
|
cls+=" calendar-today";
|
||||||
|
}
|
||||||
|
if(s==_32){
|
||||||
|
cls+=" calendar-selected";
|
||||||
|
}
|
||||||
|
if(j==_33){
|
||||||
|
cls+=" calendar-saturday";
|
||||||
|
}else{
|
||||||
|
if(j==_34){
|
||||||
|
cls+=" calendar-sunday";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(j==0){
|
||||||
|
cls+=" calendar-first";
|
||||||
|
}else{
|
||||||
|
if(j==_38.length-1){
|
||||||
|
cls+=" calendar-last";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cls+=" "+_3b;
|
||||||
|
if(!_30.validator.call(_2f,_3a)){
|
||||||
|
cls+=" calendar-disabled";
|
||||||
|
}
|
||||||
|
_36.push("<td class=\""+cls+"\" abbr=\""+s+"\" style=\""+_3c+"\">"+d+"</td>");
|
||||||
|
}
|
||||||
|
_36.push("</tr>");
|
||||||
|
}
|
||||||
|
_36.push("</tbody>");
|
||||||
|
_36.push("</table>");
|
||||||
|
_35.append(_36.join(""));
|
||||||
|
_35.children("table.calendar-dtable").prependTo(_35);
|
||||||
|
_30.onNavigate.call(_2f,_30.year,_30.month);
|
||||||
|
};
|
||||||
|
$.fn.calendar=function(_3d,_3e){
|
||||||
|
if(typeof _3d=="string"){
|
||||||
|
return $.fn.calendar.methods[_3d](this,_3e);
|
||||||
|
}
|
||||||
|
_3d=_3d||{};
|
||||||
|
return this.each(function(){
|
||||||
|
var _3f=$.data(this,"calendar");
|
||||||
|
if(_3f){
|
||||||
|
$.extend(_3f.options,_3d);
|
||||||
|
}else{
|
||||||
|
_3f=$.data(this,"calendar",{options:$.extend({},$.fn.calendar.defaults,$.fn.calendar.parseOptions(this),_3d)});
|
||||||
|
_6(this);
|
||||||
|
}
|
||||||
|
if(_3f.options.border==false){
|
||||||
|
$(this).addClass("calendar-noborder");
|
||||||
|
}
|
||||||
|
_1(this);
|
||||||
|
_9(this);
|
||||||
|
_19(this);
|
||||||
|
$(this).find("div.calendar-menu").hide();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
$.fn.calendar.methods={options:function(jq){
|
||||||
|
return $.data(jq[0],"calendar").options;
|
||||||
|
},resize:function(jq,_40){
|
||||||
|
return jq.each(function(){
|
||||||
|
_1(this,_40);
|
||||||
|
});
|
||||||
|
},moveTo:function(jq,_41){
|
||||||
|
return jq.each(function(){
|
||||||
|
var _42=$(this).calendar("options");
|
||||||
|
if(!_41){
|
||||||
|
var now=new _42.Date();
|
||||||
|
$(this).calendar({year:now.getFullYear(),month:now.getMonth()+1,current:_41});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(_42.validator.call(this,_41)){
|
||||||
|
var _43=_42.current;
|
||||||
|
$(this).calendar({year:_41.getFullYear(),month:_41.getMonth()+1,current:_41});
|
||||||
|
if(!_43||_43.getTime()!=_41.getTime()){
|
||||||
|
_42.onChange.call(this,_42.current,_43);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}};
|
||||||
|
$.fn.calendar.parseOptions=function(_44){
|
||||||
|
var t=$(_44);
|
||||||
|
return $.extend({},$.parser.parseOptions(_44,["weekNumberHeader",{firstDay:"number",fit:"boolean",border:"boolean",showWeek:"boolean"}]));
|
||||||
|
};
|
||||||
|
$.fn.calendar.defaults={Date:Date,width:180,height:180,fit:false,border:true,showWeek:false,firstDay:0,weeks:["S","M","T","W","T","F","S"],months:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],year:new Date().getFullYear(),month:new Date().getMonth()+1,current:(function(){
|
||||||
|
var d=new Date();
|
||||||
|
return new Date(d.getFullYear(),d.getMonth(),d.getDate());
|
||||||
|
})(),weekNumberHeader:"",getWeekNumber:function(_45){
|
||||||
|
var _46=new Date(_45.getTime());
|
||||||
|
_46.setDate(_46.getDate()+4-(_46.getDay()||7));
|
||||||
|
var _47=_46.getTime();
|
||||||
|
_46.setMonth(0);
|
||||||
|
_46.setDate(1);
|
||||||
|
return Math.floor(Math.round((_47-_46)/86400000)/7)+1;
|
||||||
|
},formatter:function(_48){
|
||||||
|
return _48.getDate();
|
||||||
|
},styler:function(_49){
|
||||||
|
return "";
|
||||||
|
},validator:function(_4a){
|
||||||
|
return true;
|
||||||
|
},onSelect:function(_4b){
|
||||||
|
},onChange:function(_4c,_4d){
|
||||||
|
},onNavigate:function(_4e,_4f){
|
||||||
|
}};
|
||||||
|
})(jQuery);
|
||||||
|
|
190
static/jeasyui/plugins/jquery.checkbox.js
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
/**
|
||||||
|
* EasyUI for jQuery 1.9.14
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2021 www.jeasyui.com. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
|
||||||
|
* To use it on other terms please contact us: info@jeasyui.com
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
(function($){
|
||||||
|
var _1=1;
|
||||||
|
function _2(_3){
|
||||||
|
var _4=$("<span class=\"checkbox inputbox\">"+"<span class=\"checkbox-inner\">"+"<svg xml:space=\"preserve\" focusable=\"false\" version=\"1.1\" viewBox=\"0 0 24 24\"><path d=\"M4.1,12.7 9,17.6 20.3,6.3\" fill=\"none\" stroke=\"white\"></path></svg>"+"</span>"+"<input type=\"checkbox\" class=\"checkbox-value\">"+"</span>").insertAfter(_3);
|
||||||
|
var t=$(_3);
|
||||||
|
t.addClass("checkbox-f").hide();
|
||||||
|
var _5=t.attr("name");
|
||||||
|
if(_5){
|
||||||
|
t.removeAttr("name").attr("checkboxName",_5);
|
||||||
|
_4.find(".checkbox-value").attr("name",_5);
|
||||||
|
}
|
||||||
|
return _4;
|
||||||
|
};
|
||||||
|
function _6(_7){
|
||||||
|
var _8=$.data(_7,"checkbox");
|
||||||
|
var _9=_8.options;
|
||||||
|
var _a=_8.checkbox;
|
||||||
|
var _b="_easyui_checkbox_"+(++_1);
|
||||||
|
var _c=_a.find(".checkbox-value").attr("id",_b);
|
||||||
|
_c._unbind(".checkbox")._bind("change.checkbox",function(e){
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
if(_9.label){
|
||||||
|
if(typeof _9.label=="object"){
|
||||||
|
_8.label=$(_9.label);
|
||||||
|
_8.label.attr("for",_b);
|
||||||
|
}else{
|
||||||
|
$(_8.label).remove();
|
||||||
|
_8.label=$("<label class=\"textbox-label\"></label>").html(_9.label);
|
||||||
|
_8.label.css("textAlign",_9.labelAlign).attr("for",_b);
|
||||||
|
if(_9.labelPosition=="after"){
|
||||||
|
_8.label.insertAfter(_a);
|
||||||
|
}else{
|
||||||
|
_8.label.insertBefore(_7);
|
||||||
|
}
|
||||||
|
_8.label.removeClass("textbox-label-left textbox-label-right textbox-label-top");
|
||||||
|
_8.label.addClass("textbox-label-"+_9.labelPosition);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$(_8.label).remove();
|
||||||
|
}
|
||||||
|
$(_7).checkbox("setValue",_9.value);
|
||||||
|
_d(_7,_9.checked);
|
||||||
|
_e(_7,_9.readonly);
|
||||||
|
_f(_7,_9.disabled);
|
||||||
|
};
|
||||||
|
function _10(_11){
|
||||||
|
var _12=$.data(_11,"checkbox");
|
||||||
|
var _13=_12.options;
|
||||||
|
var _14=_12.checkbox;
|
||||||
|
_14._unbind(".checkbox")._bind("click.checkbox",function(){
|
||||||
|
if(!_13.disabled&&!_13.readonly){
|
||||||
|
_d(_11,!_13.checked);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
function _15(_16){
|
||||||
|
var _17=$.data(_16,"checkbox");
|
||||||
|
var _18=_17.options;
|
||||||
|
var _19=_17.checkbox;
|
||||||
|
_19._size(_18,_19.parent());
|
||||||
|
if(_18.label&&_18.labelPosition){
|
||||||
|
if(_18.labelPosition=="top"){
|
||||||
|
_17.label._size({width:_18.labelWidth},_19);
|
||||||
|
}else{
|
||||||
|
_17.label._size({width:_18.labelWidth,height:_19.outerHeight()},_19);
|
||||||
|
_17.label.css("lineHeight",_19.outerHeight()+"px");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _d(_1a,_1b){
|
||||||
|
var _1c=$.data(_1a,"checkbox");
|
||||||
|
var _1d=_1c.options;
|
||||||
|
var _1e=_1c.checkbox;
|
||||||
|
_1e.find(".checkbox-value")._propAttr("checked",_1b);
|
||||||
|
var _1f=_1e.find(".checkbox-inner").css("display",_1b?"":"none");
|
||||||
|
if(_1b){
|
||||||
|
_1e.addClass("checkbox-checked");
|
||||||
|
$(_1c.label).addClass("textbox-label-checked");
|
||||||
|
}else{
|
||||||
|
_1e.removeClass("checkbox-checked");
|
||||||
|
$(_1c.label).removeClass("textbox-label-checked");
|
||||||
|
}
|
||||||
|
if(_1d.checked!=_1b){
|
||||||
|
_1d.checked=_1b;
|
||||||
|
_1d.onChange.call(_1a,_1b);
|
||||||
|
$(_1a).closest("form").trigger("_change",[_1a]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _e(_20,_21){
|
||||||
|
var _22=$.data(_20,"checkbox");
|
||||||
|
var _23=_22.options;
|
||||||
|
_23.readonly=_21==undefined?true:_21;
|
||||||
|
if(_23.readonly){
|
||||||
|
_22.checkbox.addClass("checkbox-readonly");
|
||||||
|
$(_22.label).addClass("textbox-label-readonly");
|
||||||
|
}else{
|
||||||
|
_22.checkbox.removeClass("checkbox-readonly");
|
||||||
|
$(_22.label).removeClass("textbox-label-readonly");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _f(_24,_25){
|
||||||
|
var _26=$.data(_24,"checkbox");
|
||||||
|
var _27=_26.options;
|
||||||
|
var _28=_26.checkbox;
|
||||||
|
var rv=_28.find(".checkbox-value");
|
||||||
|
_27.disabled=_25;
|
||||||
|
if(_25){
|
||||||
|
$(_24).add(rv)._propAttr("disabled",true);
|
||||||
|
_28.addClass("checkbox-disabled");
|
||||||
|
$(_26.label).addClass("textbox-label-disabled");
|
||||||
|
}else{
|
||||||
|
$(_24).add(rv)._propAttr("disabled",false);
|
||||||
|
_28.removeClass("checkbox-disabled");
|
||||||
|
$(_26.label).removeClass("textbox-label-disabled");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$.fn.checkbox=function(_29,_2a){
|
||||||
|
if(typeof _29=="string"){
|
||||||
|
return $.fn.checkbox.methods[_29](this,_2a);
|
||||||
|
}
|
||||||
|
_29=_29||{};
|
||||||
|
return this.each(function(){
|
||||||
|
var _2b=$.data(this,"checkbox");
|
||||||
|
if(_2b){
|
||||||
|
$.extend(_2b.options,_29);
|
||||||
|
}else{
|
||||||
|
_2b=$.data(this,"checkbox",{options:$.extend({},$.fn.checkbox.defaults,$.fn.checkbox.parseOptions(this),_29),checkbox:_2(this)});
|
||||||
|
}
|
||||||
|
_2b.options.originalChecked=_2b.options.checked;
|
||||||
|
_6(this);
|
||||||
|
_10(this);
|
||||||
|
_15(this);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
$.fn.checkbox.methods={options:function(jq){
|
||||||
|
var _2c=jq.data("checkbox");
|
||||||
|
return $.extend(_2c.options,{value:_2c.checkbox.find(".checkbox-value").val()});
|
||||||
|
},setValue:function(jq,_2d){
|
||||||
|
return jq.each(function(){
|
||||||
|
$(this).val(_2d);
|
||||||
|
$.data(this,"checkbox").checkbox.find(".checkbox-value").val(_2d);
|
||||||
|
});
|
||||||
|
},enable:function(jq){
|
||||||
|
return jq.each(function(){
|
||||||
|
_f(this,false);
|
||||||
|
});
|
||||||
|
},disable:function(jq){
|
||||||
|
return jq.each(function(){
|
||||||
|
_f(this,true);
|
||||||
|
});
|
||||||
|
},readonly:function(jq,_2e){
|
||||||
|
return jq.each(function(){
|
||||||
|
_e(this,_2e);
|
||||||
|
});
|
||||||
|
},check:function(jq){
|
||||||
|
return jq.each(function(){
|
||||||
|
_d(this,true);
|
||||||
|
});
|
||||||
|
},uncheck:function(jq){
|
||||||
|
return jq.each(function(){
|
||||||
|
_d(this,false);
|
||||||
|
});
|
||||||
|
},clear:function(jq){
|
||||||
|
return jq.each(function(){
|
||||||
|
_d(this,false);
|
||||||
|
});
|
||||||
|
},reset:function(jq){
|
||||||
|
return jq.each(function(){
|
||||||
|
var _2f=$(this).checkbox("options");
|
||||||
|
_d(this,_2f.originalChecked);
|
||||||
|
});
|
||||||
|
}};
|
||||||
|
$.fn.checkbox.parseOptions=function(_30){
|
||||||
|
var t=$(_30);
|
||||||
|
return $.extend({},$.parser.parseOptions(_30,["label","labelPosition","labelAlign",{labelWidth:"number"}]),{value:(t.val()||undefined),checked:(t.attr("checked")?true:undefined),disabled:(t.attr("disabled")?true:undefined),readonly:(t.attr("readonly")?true:undefined)});
|
||||||
|
};
|
||||||
|
$.fn.checkbox.defaults={width:20,height:20,value:null,disabled:false,readonly:false,checked:false,label:null,labelWidth:"auto",labelPosition:"before",labelAlign:"left",onChange:function(_31){
|
||||||
|
}};
|
||||||
|
})(jQuery);
|
||||||
|
|
414
static/jeasyui/plugins/jquery.combo.js
Executable file
|
@ -0,0 +1,414 @@
|
||||||
|
/**
|
||||||
|
* EasyUI for jQuery 1.9.14
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009-2021 www.jeasyui.com. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
|
||||||
|
* To use it on other terms please contact us: info@jeasyui.com
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
(function($){
|
||||||
|
$(function(){
|
||||||
|
$(document)._unbind(".combo")._bind("mousedown.combo mousewheel.combo",function(e){
|
||||||
|
var p=$(e.target).closest("span.combo,div.combo-p,div.menu");
|
||||||
|
if(p.length){
|
||||||
|
_1(p);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$("body>div.combo-p>div.combo-panel:visible").panel("close");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
function _2(_3){
|
||||||
|
var _4=$.data(_3,"combo");
|
||||||
|
var _5=_4.options;
|
||||||
|
if(!_4.panel){
|
||||||
|
_4.panel=$("<div class=\"combo-panel\"></div>").appendTo("html>body");
|
||||||
|
_4.panel.panel({minWidth:_5.panelMinWidth,maxWidth:_5.panelMaxWidth,minHeight:_5.panelMinHeight,maxHeight:_5.panelMaxHeight,doSize:false,closed:true,cls:"combo-p",style:{position:"absolute",zIndex:10},onOpen:function(){
|
||||||
|
var _6=$(this).panel("options").comboTarget;
|
||||||
|
var _7=$.data(_6,"combo");
|
||||||
|
if(_7){
|
||||||
|
_7.options.onShowPanel.call(_6);
|
||||||
|
}
|
||||||
|
},onBeforeClose:function(){
|
||||||
|
_1($(this).parent());
|
||||||
|
},onClose:function(){
|
||||||
|
var _8=$(this).panel("options").comboTarget;
|
||||||
|
var _9=$(_8).data("combo");
|
||||||
|
if(_9){
|
||||||
|
_9.options.onHidePanel.call(_8);
|
||||||
|
}
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
var _a=$.extend(true,[],_5.icons);
|
||||||
|
if(_5.hasDownArrow){
|
||||||
|
_a.push({iconCls:"combo-arrow",handler:function(e){
|
||||||
|
_10(e.data.target);
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
$(_3).addClass("combo-f").textbox($.extend({},_5,{icons:_a,onChange:function(){
|
||||||
|
}}));
|
||||||
|
$(_3).attr("comboName",$(_3).attr("textboxName"));
|
||||||
|
_4.combo=$(_3).next();
|
||||||
|
_4.combo.addClass("combo");
|
||||||
|
_4.panel._unbind(".combo");
|
||||||
|
for(var _b in _5.panelEvents){
|
||||||
|
_4.panel._bind(_b+".combo",{target:_3},_5.panelEvents[_b]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _c(_d){
|
||||||
|
var _e=$.data(_d,"combo");
|
||||||
|
var _f=_e.options;
|
||||||
|
var p=_e.panel;
|
||||||
|
if(p.is(":visible")){
|
||||||
|
p.panel("close");
|
||||||
|
}
|
||||||
|
if(!_f.cloned){
|
||||||
|
p.panel("destroy");
|
||||||
|
}
|
||||||
|
$(_d).textbox("destroy");
|
||||||
|
};
|
||||||
|
function _10(_11){
|
||||||
|
var _12=$.data(_11,"combo").panel;
|
||||||
|
if(_12.is(":visible")){
|
||||||
|
var _13=_12.combo("combo");
|
||||||
|
_14(_13);
|
||||||
|
if(_13!=_11){
|
||||||
|
$(_11).combo("showPanel");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
var p=$(_11).closest("div.combo-p").children(".combo-panel");
|
||||||
|
$("div.combo-panel:visible").not(_12).not(p).panel("close");
|
||||||
|
$(_11).combo("showPanel");
|
||||||
|
}
|
||||||
|
$(_11).combo("textbox").focus();
|
||||||
|
};
|
||||||
|
function _1(_15){
|
||||||
|
$(_15).find(".combo-f").each(function(){
|
||||||
|
var p=$(this).combo("panel");
|
||||||
|
if(p.is(":visible")){
|
||||||
|
p.panel("close");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
function _16(e){
|
||||||
|
var _17=e.data.target;
|
||||||
|
var _18=$.data(_17,"combo");
|
||||||
|
var _19=_18.options;
|
||||||
|
if(!_19.editable){
|
||||||
|
_10(_17);
|
||||||
|
}else{
|
||||||
|
var p=$(_17).closest("div.combo-p").children(".combo-panel");
|
||||||
|
$("div.combo-panel:visible").not(p).each(function(){
|
||||||
|
var _1a=$(this).combo("combo");
|
||||||
|
if(_1a!=_17){
|
||||||
|
_14(_1a);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _1b(e){
|
||||||
|
var _1c=e.data.target;
|
||||||
|
var t=$(_1c);
|
||||||
|
var _1d=t.data("combo");
|
||||||
|
var _1e=t.combo("options");
|
||||||
|
_1d.panel.panel("options").comboTarget=_1c;
|
||||||
|
switch(e.keyCode){
|
||||||
|
case 38:
|
||||||
|
_1e.keyHandler.up.call(_1c,e);
|
||||||
|
break;
|
||||||
|
case 40:
|
||||||
|
_1e.keyHandler.down.call(_1c,e);
|
||||||
|
break;
|
||||||
|
case 37:
|
||||||
|
_1e.keyHandler.left.call(_1c,e);
|
||||||
|
break;
|
||||||
|
case 39:
|
||||||
|
_1e.keyHandler.right.call(_1c,e);
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
e.preventDefault();
|
||||||
|
_1e.keyHandler.enter.call(_1c,e);
|
||||||
|
return false;
|
||||||
|
case 9:
|
||||||
|
case 27:
|
||||||
|
_14(_1c);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if(_1e.editable){
|
||||||
|
if(_1d.timer){
|
||||||
|
clearTimeout(_1d.timer);
|
||||||
|
}
|
||||||
|
_1d.timer=setTimeout(function(){
|
||||||
|
var q=t.combo("getText");
|
||||||
|
if(_1d.previousText!=q){
|
||||||
|
_1d.previousText=q;
|
||||||
|
t.combo("showPanel");
|
||||||
|
_1e.keyHandler.query.call(_1c,q,e);
|
||||||
|
t.combo("validate");
|
||||||
|
}
|
||||||
|
},_1e.delay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _1f(e){
|
||||||
|
var _20=e.data.target;
|
||||||
|
var _21=$(_20).data("combo");
|
||||||
|
if(_21.timer){
|
||||||
|
clearTimeout(_21.timer);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _22(_23){
|
||||||
|
var _24=$.data(_23,"combo");
|
||||||
|
var _25=_24.combo;
|
||||||
|
var _26=_24.panel;
|
||||||
|
var _27=$(_23).combo("options");
|
||||||
|
var _28=_26.panel("options");
|
||||||
|
_28.comboTarget=_23;
|
||||||
|
if(_28.closed){
|
||||||
|
_26.panel("panel").show().css({zIndex:($.fn.menu?$.fn.menu.defaults.zIndex++:($.fn.window?$.fn.window.defaults.zIndex++:99)),left:-999999});
|
||||||
|
_26.panel("resize",{width:(_27.panelWidth?_27.panelWidth:_25._outerWidth()),height:_27.panelHeight});
|
||||||
|
_26.panel("panel").hide();
|
||||||
|
_26.panel("open");
|
||||||
|
}
|
||||||
|
(function(){
|
||||||
|
if(_28.comboTarget==_23&&_26.is(":visible")){
|
||||||
|
_26.panel("move",{left:_29(),top:_2a()});
|
||||||
|
setTimeout(arguments.callee,200);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
function _29(){
|
||||||
|
var _2b=_25.offset().left;
|
||||||
|
if(_27.panelAlign=="right"){
|
||||||
|
_2b+=_25._outerWidth()-_26._outerWidth();
|
||||||
|
}
|
||||||
|
if(_2b+_26._outerWidth()>$(window)._outerWidth()+$(document).scrollLeft()){
|
||||||
|
_2b=$(window)._outerWidth()+$(document).scrollLeft()-_26._outerWidth();
|
||||||
|
}
|
||||||
|
if(_2b<0){
|
||||||
|
_2b=0;
|
||||||
|
}
|
||||||
|
return _2b;
|
||||||
|
};
|
||||||
|
function _2a(){
|
||||||
|
if(_27.panelValign=="top"){
|
||||||
|
var top=_25.offset().top-_26._outerHeight();
|
||||||
|
}else{
|
||||||
|
if(_27.panelValign=="bottom"){
|
||||||
|
var top=_25.offset().top+_25._outerHeight();
|
||||||
|
}else{
|
||||||
|
var top=_25.offset().top+_25._outerHeight();
|
||||||
|
if(top+_26._outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){
|
||||||
|
top=_25.offset().top-_26._outerHeight();
|
||||||
|
}
|
||||||
|
if(top<$(document).scrollTop()){
|
||||||
|
top=_25.offset().top+_25._outerHeight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return top;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
function _14(_2c){
|
||||||
|
var _2d=$.data(_2c,"combo").panel;
|
||||||
|
_2d.panel("close");
|
||||||
|
};
|
||||||
|
function _2e(_2f,_30){
|
||||||
|
var _31=$.data(_2f,"combo");
|
||||||
|
var _32=$(_2f).textbox("getText");
|
||||||
|
if(_32!=_30){
|
||||||
|
$(_2f).textbox("setText",_30);
|
||||||
|
}
|
||||||
|
_31.previousText=_30;
|
||||||
|
};
|
||||||
|
function _33(_34){
|
||||||
|
var _35=$.data(_34,"combo");
|
||||||
|
var _36=_35.options;
|
||||||
|
var _37=$(_34).next();
|
||||||
|
var _38=[];
|
||||||
|
_37.find(".textbox-value").each(function(){
|
||||||
|
_38.push($(this).val());
|
||||||
|
});
|
||||||
|
if(_36.multivalue){
|
||||||
|
return _38;
|
||||||
|
}else{
|
||||||
|
return _38.length?_38[0].split(_36.separator):_38;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _39(_3a,_3b){
|
||||||
|
var _3c=$.data(_3a,"combo");
|
||||||
|
var _3d=_3c.combo;
|
||||||
|
var _3e=$(_3a).combo("options");
|
||||||
|
if(!$.isArray(_3b)){
|
||||||
|
_3b=_3b.split(_3e.separator);
|
||||||
|
}
|
||||||
|
var _3f=_33(_3a);
|
||||||
|
_3d.find(".textbox-value").remove();
|
||||||
|
if(_3b.length){
|
||||||
|
if(_3e.multivalue){
|
||||||
|
for(var i=0;i<_3b.length;i++){
|
||||||
|
_40(_3b[i]);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
_40(_3b.join(_3e.separator));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function _40(_41){
|
||||||
|
var _42=$(_3a).attr("textboxName")||"";
|
||||||
|
var _43=$("<input type=\"hidden\" class=\"textbox-value\">").appendTo(_3d);
|
||||||
|
_43.attr("name",_42);
|
||||||
|
if(_3e.disabled){
|
||||||
|
_43.attr("disabled","disabled");
|
||||||
|
}
|
||||||
|
_43.val(_41);
|
||||||
|
};
|
||||||
|
var _44=(function(){
|
||||||
|
if(_3e.onChange==$.parser.emptyFn){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(_3f.length!=_3b.length){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for(var i=0;i<_3b.length;i++){
|
||||||
|
if(_3b[i]!=_3f[i]){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
})();
|
||||||
|
if(_44){
|
||||||
|
$(_3a).val(_3b.join(_3e.separator));
|
||||||
|
if(_3e.multiple){
|
||||||
|
_3e.onChange.call(_3a,_3b,_3f);
|
||||||
|
}else{
|
||||||
|
_3e.onChange.call(_3a,_3b[0],_3f[0]);
|
||||||
|
}
|
||||||
|
$(_3a).closest("form").trigger("_change",[_3a]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _45(_46){
|
||||||
|
var _47=_33(_46);
|
||||||
|
return _47[0];
|
||||||
|
};
|
||||||
|
function _48(_49,_4a){
|
||||||
|
_39(_49,[_4a]);
|
||||||
|
};
|
||||||
|
function _4b(_4c){
|
||||||
|
var _4d=$.data(_4c,"combo").options;
|
||||||
|
var _4e=_4d.onChange;
|
||||||
|
_4d.onChange=$.parser.emptyFn;
|
||||||
|
if(_4d.multiple){
|
||||||
|
_39(_4c,_4d.value?_4d.value:[]);
|
||||||
|
}else{
|
||||||
|
_48(_4c,_4d.value);
|
||||||
|
}
|
||||||
|
_4d.onChange=_4e;
|
||||||
|
};
|
||||||
|
$.fn.combo=function(_4f,_50){
|
||||||
|
if(typeof _4f=="string"){
|
||||||
|
var _51=$.fn.combo.methods[_4f];
|
||||||
|
if(_51){
|
||||||
|
return _51(this,_50);
|
||||||
|
}else{
|
||||||
|
return this.textbox(_4f,_50);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_4f=_4f||{};
|
||||||
|
return this.each(function(){
|
||||||
|
var _52=$.data(this,"combo");
|
||||||
|
if(_52){
|
||||||
|
$.extend(_52.options,_4f);
|
||||||
|
if(_4f.value!=undefined){
|
||||||
|
_52.options.originalValue=_4f.value;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
_52=$.data(this,"combo",{options:$.extend({},$.fn.combo.defaults,$.fn.combo.parseOptions(this),_4f),previousText:""});
|
||||||
|
if(_52.options.multiple&&_52.options.value==""){
|
||||||
|
_52.options.originalValue=[];
|
||||||
|
}else{
|
||||||
|
_52.options.originalValue=_52.options.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_2(this);
|
||||||
|
_4b(this);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
$.fn.combo.methods={options:function(jq){
|
||||||
|
var _53=jq.textbox("options");
|
||||||
|
return $.extend($.data(jq[0],"combo").options,{width:_53.width,height:_53.height,disabled:_53.disabled,readonly:_53.readonly});
|
||||||
|
},cloneFrom:function(jq,_54){
|
||||||
|
return jq.each(function(){
|
||||||
|
$(this).textbox("cloneFrom",_54);
|
||||||
|
$.data(this,"combo",{options:$.extend(true,{cloned:true},$(_54).combo("options")),combo:$(this).next(),panel:$(_54).combo("panel")});
|
||||||
|
$(this).addClass("combo-f").attr("comboName",$(this).attr("textboxName"));
|
||||||
|
});
|
||||||
|
},combo:function(jq){
|
||||||
|
return jq.closest(".combo-panel").panel("options").comboTarget;
|
||||||
|
},panel:function(jq){
|
||||||
|
return $.data(jq[0],"combo").panel;
|
||||||
|
},destroy:function(jq){
|
||||||
|
return jq.each(function(){
|
||||||
|
_c(this);
|
||||||
|
});
|
||||||
|
},showPanel:function(jq){
|
||||||
|
return jq.each(function(){
|
||||||
|
_22(this);
|
||||||
|
});
|
||||||
|
},hidePanel:function(jq){
|
||||||
|
return jq.each(function(){
|
||||||
|
_14(this);
|
||||||
|
});
|
||||||
|
},clear:function(jq){
|
||||||
|
return jq.each(function(){
|
||||||
|
$(this).textbox("setText","");
|
||||||
|
var _55=$.data(this,"combo").options;
|
||||||
|
if(_55.multiple){
|
||||||
|
$(this).combo("setValues",[]);
|
||||||
|
}else{
|
||||||
|
$(this).combo("setValue","");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},reset:function(jq){
|
||||||
|
return jq.each(function(){
|
||||||
|
var _56=$.data(this,"combo").options;
|
||||||
|
if(_56.multiple){
|
||||||
|
$(this).combo("setValues",_56.originalValue);
|
||||||
|
}else{
|
||||||
|
$(this).combo("setValue",_56.originalValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},setText:function(jq,_57){
|
||||||
|
return jq.each(function(){
|
||||||
|
_2e(this,_57);
|
||||||
|
});
|
||||||
|
},getValues:function(jq){
|
||||||
|
return _33(jq[0]);
|
||||||
|
},setValues:function(jq,_58){
|
||||||
|
return jq.each(function(){
|
||||||
|
_39(this,_58);
|
||||||
|
});
|
||||||
|
},getValue:function(jq){
|
||||||
|
return _45(jq[0]);
|
||||||
|
},setValue:function(jq,_59){
|
||||||
|
return jq.each(function(){
|
||||||
|
_48(this,_59);
|
||||||
|
});
|
||||||
|
}};
|
||||||
|
$.fn.combo.parseOptions=function(_5a){
|
||||||
|
var t=$(_5a);
|
||||||
|
return $.extend({},$.fn.textbox.parseOptions(_5a),$.parser.parseOptions(_5a,["separator","panelAlign",{panelWidth:"number",hasDownArrow:"boolean",delay:"number",reversed:"boolean",multivalue:"boolean",selectOnNavigation:"boolean"},{panelMinWidth:"number",panelMaxWidth:"number",panelMinHeight:"number",panelMaxHeight:"number"}]),{panelHeight:(t.attr("panelHeight")=="auto"?"auto":parseInt(t.attr("panelHeight"))||undefined),multiple:(t.attr("multiple")?true:undefined)});
|
||||||
|
};
|
||||||
|
$.fn.combo.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{click:_16,keydown:_1b,paste:_1b,drop:_1b,blur:_1f},panelEvents:{mousedown:function(e){
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
}},panelWidth:null,panelHeight:300,panelMinWidth:null,panelMaxWidth:null,panelMinHeight:null,panelMaxHeight:null,panelAlign:"left",panelValign:"auto",reversed:false,multiple:false,multivalue:true,selectOnNavigation:true,separator:",",hasDownArrow:true,delay:200,keyHandler:{up:function(e){
|
||||||
|
},down:function(e){
|
||||||
|
},left:function(e){
|
||||||
|
},right:function(e){
|
||||||
|
},enter:function(e){
|
||||||
|
},query:function(q,e){
|
||||||
|
}},onShowPanel:function(){
|
||||||
|
},onHidePanel:function(){
|
||||||
|
},onChange:function(_5b,_5c){
|
||||||
|
}});
|
||||||
|
})(jQuery);
|
||||||
|
|