mirror of
https://github.com/mindoc-org/mindoc.git
synced 2025-04-05 20:17:53 +08:00
实现导入Markdown
This commit is contained in:
parent
7e9769dfbb
commit
4d1a03998a
commands
controllers
converter
models
static
bootstrap/plugins/bootstrap-fileinput/4.4.7
css
img
js
fileinput.jsfileinput.min.js
locales
LANG.jsar.jsaz.jsbg.jsca.jscr.jscs.jsda.jsde.jsel.jses.jset.jsfa.jsfi.jsfr.jsgl.jshu.jsid.jsit.jsja.jska.jskr.jskz.jslt.jsnl.jsno.jspl.jspt-BR.jspt.jsro.jsru.jssk.jssl.jssv.jsth.jstr.jsuk.jsvi.jszh-TW.jszh.js
plugins
themes
css
js
utils
views/book
@ -2,28 +2,29 @@ package commands
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/url"
|
||||
"os"
|
||||
"time"
|
||||
"log"
|
||||
"flag"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"encoding/json"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/astaxie/beego/logs"
|
||||
"github.com/astaxie/beego/orm"
|
||||
"github.com/lifei6671/gocaptcha"
|
||||
"github.com/lifei6671/mindoc/commands/migrate"
|
||||
"github.com/lifei6671/mindoc/conf"
|
||||
"github.com/lifei6671/mindoc/models"
|
||||
"github.com/lifei6671/mindoc/utils"
|
||||
"github.com/lifei6671/mindoc/cache"
|
||||
beegoCache "github.com/astaxie/beego/cache"
|
||||
_ "github.com/astaxie/beego/cache/memcache"
|
||||
_ "github.com/astaxie/beego/cache/redis"
|
||||
"github.com/astaxie/beego/logs"
|
||||
"github.com/astaxie/beego/orm"
|
||||
"github.com/lifei6671/gocaptcha"
|
||||
"github.com/lifei6671/mindoc/cache"
|
||||
"github.com/lifei6671/mindoc/commands/migrate"
|
||||
"github.com/lifei6671/mindoc/conf"
|
||||
"github.com/lifei6671/mindoc/models"
|
||||
"github.com/lifei6671/mindoc/utils/filetil"
|
||||
)
|
||||
|
||||
// RegisterDataBase 注册数据库
|
||||
@ -42,16 +43,15 @@ func RegisterDataBase() {
|
||||
if err == nil {
|
||||
orm.DefaultTimeLoc = location
|
||||
} else {
|
||||
beego.Error("加载时区配置信息失败,请检查是否存在ZONEINFO环境变量:",err)
|
||||
beego.Error("加载时区配置信息失败,请检查是否存在ZONEINFO环境变量:", err)
|
||||
}
|
||||
|
||||
|
||||
port := beego.AppConfig.String("db_port")
|
||||
|
||||
dataSource := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=true&loc=%s", username, password, host, port, database, url.QueryEscape(timezone))
|
||||
|
||||
if err := orm.RegisterDataBase("default", "mysql", dataSource); err != nil {
|
||||
beego.Error("注册默认数据库失败:",err)
|
||||
beego.Error("注册默认数据库失败:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
} else if adapter == "sqlite3" {
|
||||
@ -67,9 +67,9 @@ func RegisterDataBase() {
|
||||
err := orm.RegisterDataBase("default", "sqlite3", database)
|
||||
|
||||
if err != nil {
|
||||
beego.Error("注册默认数据库失败:",err)
|
||||
beego.Error("注册默认数据库失败:", err)
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
beego.Error("不支持的数据库类型.")
|
||||
os.Exit(1)
|
||||
}
|
||||
@ -150,15 +150,15 @@ func RegisterFunction() {
|
||||
}
|
||||
//如果没有设置cdn,则使用baseURL拼接
|
||||
if cdn == "" {
|
||||
baseUrl := beego.AppConfig.DefaultString("baseurl","")
|
||||
baseUrl := beego.AppConfig.DefaultString("baseurl", "")
|
||||
|
||||
if strings.HasPrefix(p,"/") && strings.HasSuffix(baseUrl,"/") {
|
||||
if strings.HasPrefix(p, "/") && strings.HasSuffix(baseUrl, "/") {
|
||||
return baseUrl + p[1:]
|
||||
}
|
||||
if !strings.HasPrefix(p,"/") && !strings.HasSuffix(baseUrl,"/") {
|
||||
if !strings.HasPrefix(p, "/") && !strings.HasSuffix(baseUrl, "/") {
|
||||
return baseUrl + "/" + p
|
||||
}
|
||||
return baseUrl + p
|
||||
return baseUrl + p
|
||||
}
|
||||
if strings.HasPrefix(p, "/") && strings.HasSuffix(cdn, "/") {
|
||||
return cdn + string(p[1:])
|
||||
@ -169,12 +169,12 @@ func RegisterFunction() {
|
||||
return cdn + p
|
||||
})
|
||||
|
||||
beego.AddFuncMap("cdnjs",conf.URLForWithCdnJs)
|
||||
beego.AddFuncMap("cdncss",conf.URLForWithCdnCss)
|
||||
beego.AddFuncMap("cdnjs", conf.URLForWithCdnJs)
|
||||
beego.AddFuncMap("cdncss", conf.URLForWithCdnCss)
|
||||
beego.AddFuncMap("cdnimg", conf.URLForWithCdnImage)
|
||||
//重写url生成,支持配置域名以及域名前缀
|
||||
beego.AddFuncMap("urlfor", conf.URLFor)
|
||||
beego.AddFuncMap("date_format", func(t time.Time,format string) string {
|
||||
beego.AddFuncMap("date_format", func(t time.Time, format string) string {
|
||||
return t.Local().Format(format)
|
||||
})
|
||||
}
|
||||
@ -199,8 +199,8 @@ func ResolveCommand(args []string) {
|
||||
if conf.ConfigurationFile == "" {
|
||||
conf.ConfigurationFile = filepath.Join(conf.WorkingDirectory, "conf", "app.conf")
|
||||
config := filepath.Join(conf.WorkingDirectory, "conf", "app.conf.example")
|
||||
if !utils.FileExists(conf.ConfigurationFile) && utils.FileExists(config) {
|
||||
utils.CopyFile(conf.ConfigurationFile, config)
|
||||
if !filetil.FileExists(conf.ConfigurationFile) && filetil.FileExists(config) {
|
||||
filetil.CopyFile(conf.ConfigurationFile, config)
|
||||
}
|
||||
}
|
||||
gocaptcha.ReadFonts(filepath.Join(conf.WorkingDirectory, "static", "fonts"), ".ttf")
|
||||
@ -221,7 +221,7 @@ func ResolveCommand(args []string) {
|
||||
|
||||
fonts := filepath.Join(conf.WorkingDirectory, "static", "fonts")
|
||||
|
||||
if !utils.FileExists(fonts) {
|
||||
if !filetil.FileExists(fonts) {
|
||||
log.Fatal("Font path not exist.")
|
||||
}
|
||||
gocaptcha.ReadFonts(filepath.Join(conf.WorkingDirectory, "static", "fonts"), ".ttf")
|
||||
@ -233,31 +233,30 @@ func ResolveCommand(args []string) {
|
||||
}
|
||||
|
||||
//注册缓存管道
|
||||
func RegisterCache() {
|
||||
isOpenCache := beego.AppConfig.DefaultBool("cache",false)
|
||||
func RegisterCache() {
|
||||
isOpenCache := beego.AppConfig.DefaultBool("cache", false)
|
||||
if !isOpenCache {
|
||||
cache.Init(&cache.NullCache{})
|
||||
}
|
||||
beego.Info("正常初始化缓存配置.")
|
||||
cacheProvider := beego.AppConfig.String("cache_provider")
|
||||
if cacheProvider == "file" {
|
||||
cacheFilePath := beego.AppConfig.DefaultString("cache_file_path","./runtime/cache/")
|
||||
cacheFilePath := beego.AppConfig.DefaultString("cache_file_path", "./runtime/cache/")
|
||||
if strings.HasPrefix(cacheFilePath, "./") {
|
||||
cacheFilePath = filepath.Join(conf.WorkingDirectory, string(cacheFilePath[1:]))
|
||||
}
|
||||
fileCache := beegoCache.NewFileCache()
|
||||
|
||||
fileConfig := make(map[string]string, 0)
|
||||
|
||||
fileConfig := make(map[string]string,0)
|
||||
fileConfig["CachePath"] = cacheFilePath
|
||||
fileConfig["DirectoryLevel"] = beego.AppConfig.DefaultString("cache_file_dir_level", "2")
|
||||
fileConfig["EmbedExpiry"] = beego.AppConfig.DefaultString("cache_file_expiry", "120")
|
||||
fileConfig["FileSuffix"] = beego.AppConfig.DefaultString("cache_file_suffix", ".bin")
|
||||
|
||||
fileConfig["CachePath"] = cacheFilePath
|
||||
fileConfig["DirectoryLevel"] = beego.AppConfig.DefaultString("cache_file_dir_level","2")
|
||||
fileConfig["EmbedExpiry"] = beego.AppConfig.DefaultString("cache_file_expiry","120")
|
||||
fileConfig["FileSuffix"] = beego.AppConfig.DefaultString("cache_file_suffix",".bin")
|
||||
|
||||
bc,err := json.Marshal(&fileConfig)
|
||||
bc, err := json.Marshal(&fileConfig)
|
||||
if err != nil {
|
||||
beego.Error("初始化Redis缓存失败:",err)
|
||||
beego.Error("初始化Redis缓存失败:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
@ -265,61 +264,61 @@ func RegisterCache() {
|
||||
|
||||
cache.Init(fileCache)
|
||||
|
||||
}else if cacheProvider == "memory" {
|
||||
cacheInterval := beego.AppConfig.DefaultInt("cache_memory_interval",60)
|
||||
} else if cacheProvider == "memory" {
|
||||
cacheInterval := beego.AppConfig.DefaultInt("cache_memory_interval", 60)
|
||||
memory := beegoCache.NewMemoryCache()
|
||||
beegoCache.DefaultEvery = cacheInterval
|
||||
cache.Init(memory)
|
||||
}else if cacheProvider == "redis"{
|
||||
var redisConfig struct{
|
||||
Conn string `json:"conn"`
|
||||
} else if cacheProvider == "redis" {
|
||||
var redisConfig struct {
|
||||
Conn string `json:"conn"`
|
||||
Password string `json:"password"`
|
||||
DbNum int `json:"dbNum"`
|
||||
DbNum int `json:"dbNum"`
|
||||
}
|
||||
redisConfig.DbNum = 0
|
||||
redisConfig.Conn = beego.AppConfig.DefaultString("cache_redis_host","")
|
||||
if pwd := beego.AppConfig.DefaultString("cache_redis_password","");pwd != "" {
|
||||
redisConfig.Conn = beego.AppConfig.DefaultString("cache_redis_host", "")
|
||||
if pwd := beego.AppConfig.DefaultString("cache_redis_password", ""); pwd != "" {
|
||||
redisConfig.Password = pwd
|
||||
}
|
||||
if dbNum := beego.AppConfig.DefaultInt("cache_redis_db",0); dbNum > 0 {
|
||||
if dbNum := beego.AppConfig.DefaultInt("cache_redis_db", 0); dbNum > 0 {
|
||||
redisConfig.DbNum = dbNum
|
||||
}
|
||||
|
||||
bc,err := json.Marshal(&redisConfig)
|
||||
bc, err := json.Marshal(&redisConfig)
|
||||
if err != nil {
|
||||
beego.Error("初始化Redis缓存失败:",err)
|
||||
beego.Error("初始化Redis缓存失败:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
redisCache,err := beegoCache.NewCache("redis",string(bc))
|
||||
redisCache, err := beegoCache.NewCache("redis", string(bc))
|
||||
|
||||
if err != nil {
|
||||
beego.Error("初始化Redis缓存失败:",err)
|
||||
beego.Error("初始化Redis缓存失败:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
cache.Init(redisCache)
|
||||
}else if cacheProvider == "memcache" {
|
||||
} else if cacheProvider == "memcache" {
|
||||
|
||||
var memcacheConfig struct{
|
||||
var memcacheConfig struct {
|
||||
Conn string `json:"conn"`
|
||||
}
|
||||
memcacheConfig.Conn = beego.AppConfig.DefaultString("cache_memcache_host","")
|
||||
memcacheConfig.Conn = beego.AppConfig.DefaultString("cache_memcache_host", "")
|
||||
|
||||
bc,err := json.Marshal(&memcacheConfig)
|
||||
bc, err := json.Marshal(&memcacheConfig)
|
||||
if err != nil {
|
||||
beego.Error("初始化Redis缓存失败:",err)
|
||||
beego.Error("初始化Redis缓存失败:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
memcache,err := beegoCache.NewCache("memcache",string(bc))
|
||||
memcache, err := beegoCache.NewCache("memcache", string(bc))
|
||||
|
||||
if err != nil {
|
||||
beego.Error("初始化Memcache缓存失败:",err)
|
||||
beego.Error("初始化Memcache缓存失败:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
cache.Init(memcache)
|
||||
|
||||
}else {
|
||||
} else {
|
||||
cache.Init(&cache.NullCache{})
|
||||
beego.Warn("不支持的缓存管道,缓存将禁用.")
|
||||
return
|
||||
@ -329,7 +328,7 @@ func RegisterCache() {
|
||||
|
||||
func init() {
|
||||
|
||||
if configPath ,err := filepath.Abs(conf.ConfigurationFile); err == nil {
|
||||
if configPath, err := filepath.Abs(conf.ConfigurationFile); err == nil {
|
||||
conf.ConfigurationFile = configPath
|
||||
}
|
||||
gocaptcha.ReadFonts("./static/fonts", ".ttf")
|
||||
|
@ -12,6 +12,8 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"net/http"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/astaxie/beego/logs"
|
||||
"github.com/astaxie/beego/orm"
|
||||
@ -20,8 +22,6 @@ import (
|
||||
"github.com/lifei6671/mindoc/models"
|
||||
"github.com/lifei6671/mindoc/utils"
|
||||
"github.com/lifei6671/mindoc/utils/pagination"
|
||||
"net/http"
|
||||
"github.com/lifei6671/mindoc/converter"
|
||||
"gopkg.in/russross/blackfriday.v2"
|
||||
)
|
||||
|
||||
@ -42,14 +42,14 @@ func (c *BookController) Index() {
|
||||
c.Abort("500")
|
||||
}
|
||||
|
||||
for i,book := range books {
|
||||
for i, book := range books {
|
||||
books[i].Description = utils.StripTags(string(blackfriday.Run([]byte(book.Description))))
|
||||
books[i].ModifyTime = book.ModifyTime.Local()
|
||||
books[i].CreateTime = book.CreateTime.Local()
|
||||
}
|
||||
|
||||
if totalCount > 0 {
|
||||
pager := pagination.NewPagination(c.Ctx.Request,totalCount,conf.PageSize,c.BaseUrl())
|
||||
pager := pagination.NewPagination(c.Ctx.Request, totalCount, conf.PageSize, c.BaseUrl())
|
||||
c.Data["PageHtml"] = pager.HtmlPages()
|
||||
} else {
|
||||
c.Data["PageHtml"] = ""
|
||||
@ -140,10 +140,10 @@ func (c *BookController) SaveBook() {
|
||||
editor := strings.TrimSpace(c.GetString("editor"))
|
||||
autoRelease := strings.TrimSpace(c.GetString("auto_release")) == "on"
|
||||
publisher := strings.TrimSpace(c.GetString("publisher"))
|
||||
historyCount,_ := c.GetInt("history_count",0)
|
||||
historyCount, _ := c.GetInt("history_count", 0)
|
||||
isDownload := strings.TrimSpace(c.GetString("is_download")) == "on"
|
||||
enableShare := strings.TrimSpace(c.GetString("enable_share")) == "on"
|
||||
isUseFirstDocument := strings.TrimSpace(c.GetString("is_use_first_document")) == "on"
|
||||
isUseFirstDocument := strings.TrimSpace(c.GetString("is_use_first_document")) == "on"
|
||||
|
||||
if strings.Count(description, "") > 500 {
|
||||
c.JsonResult(6004, "项目描述不能大于500字")
|
||||
@ -177,17 +177,17 @@ func (c *BookController) SaveBook() {
|
||||
}
|
||||
if isDownload {
|
||||
book.IsDownload = 0
|
||||
}else{
|
||||
} else {
|
||||
book.IsDownload = 1
|
||||
}
|
||||
if enableShare {
|
||||
book.IsEnableShare = 0
|
||||
}else{
|
||||
} else {
|
||||
book.IsEnableShare = 1
|
||||
}
|
||||
if isUseFirstDocument {
|
||||
book.IsUseFirstDocument = 1
|
||||
}else{
|
||||
} else {
|
||||
book.IsUseFirstDocument = 0
|
||||
}
|
||||
if err := book.Update(); err != nil {
|
||||
@ -397,7 +397,7 @@ func (c *BookController) Users() {
|
||||
members, totalCount, err := models.NewMemberRelationshipResult().FindForUsersByBookId(book.BookId, pageIndex, 15)
|
||||
|
||||
if totalCount > 0 {
|
||||
pager := pagination.NewPagination(c.Ctx.Request,totalCount,conf.PageSize,c.BaseUrl())
|
||||
pager := pagination.NewPagination(c.Ctx.Request, totalCount, conf.PageSize, c.BaseUrl())
|
||||
c.Data["PageHtml"] = pager.HtmlPages()
|
||||
} else {
|
||||
c.Data["PageHtml"] = ""
|
||||
@ -411,7 +411,6 @@ func (c *BookController) Users() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Create 创建项目.
|
||||
func (c *BookController) Create() {
|
||||
|
||||
@ -446,9 +445,8 @@ func (c *BookController) Create() {
|
||||
book := models.NewBook()
|
||||
book.Cover = conf.GetDefaultCover()
|
||||
|
||||
|
||||
//如果客户端上传了项目封面则直接保存
|
||||
if file, moreFile, err := c.GetFile("image-file");err == nil {
|
||||
if file, moreFile, err := c.GetFile("image-file"); err == nil {
|
||||
defer file.Close()
|
||||
|
||||
ext := filepath.Ext(moreFile.Filename)
|
||||
@ -458,7 +456,7 @@ func (c *BookController) Create() {
|
||||
|
||||
fileName := "cover_" + strconv.FormatInt(time.Now().UnixNano(), 16)
|
||||
|
||||
filePath := filepath.Join("uploads", time.Now().Format("200601"), fileName + ext)
|
||||
filePath := filepath.Join("uploads", time.Now().Format("200601"), fileName+ext)
|
||||
|
||||
path := filepath.Dir(filePath)
|
||||
|
||||
@ -475,8 +473,6 @@ func (c *BookController) Create() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if books, _ := book.FindByField("identify", identify); len(books) > 0 {
|
||||
c.JsonResult(6006, "项目标识已存在")
|
||||
}
|
||||
@ -495,9 +491,7 @@ func (c *BookController) Create() {
|
||||
book.Editor = "markdown"
|
||||
book.Theme = "default"
|
||||
|
||||
|
||||
|
||||
if err := book.Insert();err != nil {
|
||||
if err := book.Insert(); err != nil {
|
||||
logs.Error("Insert => ", err)
|
||||
c.JsonResult(6005, "保存项目失败")
|
||||
}
|
||||
@ -512,7 +506,7 @@ func (c *BookController) Create() {
|
||||
c.JsonResult(6001, "error")
|
||||
}
|
||||
|
||||
//导入
|
||||
//导入zip压缩包
|
||||
func (c *BookController) Import() {
|
||||
|
||||
file, moreFile, err := c.GetFile("import-file")
|
||||
@ -522,24 +516,44 @@ func (c *BookController) Import() {
|
||||
|
||||
defer file.Close()
|
||||
|
||||
bookName := strings.TrimSpace(c.GetString("book_name"))
|
||||
identify := strings.TrimSpace(c.GetString("identify"))
|
||||
|
||||
if bookName == "" {
|
||||
c.JsonResult(6001, "项目名称不能为空")
|
||||
}
|
||||
if len([]rune(bookName)) > 500 {
|
||||
c.JsonResult(6002, "项目名称不能大于500字")
|
||||
}
|
||||
if identify == "" {
|
||||
c.JsonResult(6002, "项目标识不能为空")
|
||||
}
|
||||
if ok, err := regexp.MatchString(`^[a-z]+[a-zA-Z0-9_\-]*$`, identify); !ok || err != nil {
|
||||
c.JsonResult(6003, "项目标识只能包含小写字母、数字,以及“-”和“_”符号,并且只能小写字母开头")
|
||||
}
|
||||
if strings.Count(identify, "") > 50 {
|
||||
c.JsonResult(6004, "文档标识不能超过50字")
|
||||
}
|
||||
|
||||
beego.Info(moreFile.Filename)
|
||||
|
||||
ext := filepath.Ext(moreFile.Filename)
|
||||
|
||||
if !strings.EqualFold(ext,".doc") || !strings.EqualFold(ext,".docx") {
|
||||
c.JsonResult(6004,"不支持的文件类型")
|
||||
if !strings.EqualFold(ext, ".zip") {
|
||||
c.JsonResult(6004, "不支持的文件类型")
|
||||
}
|
||||
|
||||
tempPath := filepath.Join(os.TempDir(),c.CruSession.SessionID())
|
||||
tempPath := filepath.Join(os.TempDir(), c.CruSession.SessionID())
|
||||
|
||||
os.MkdirAll(tempPath,0766)
|
||||
os.MkdirAll(tempPath, 0766)
|
||||
|
||||
tempPath = filepath.Join(tempPath,moreFile.Filename)
|
||||
tempPath = filepath.Join(tempPath, moreFile.Filename)
|
||||
|
||||
err = c.SaveToFile("import-file", tempPath)
|
||||
|
||||
converter.Resolve(tempPath)
|
||||
go models.NewBook().ImportBook(tempPath)
|
||||
|
||||
c.JsonResult(0, "项目正在后台转换中,请稍后查看")
|
||||
}
|
||||
|
||||
// CreateToken 创建访问来令牌.
|
||||
|
@ -6,16 +6,18 @@ import (
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"math"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/astaxie/beego/logs"
|
||||
"github.com/astaxie/beego/orm"
|
||||
"github.com/lifei6671/mindoc/conf"
|
||||
"github.com/lifei6671/mindoc/models"
|
||||
"github.com/lifei6671/mindoc/utils"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"github.com/lifei6671/mindoc/utils/filetil"
|
||||
"github.com/lifei6671/mindoc/utils/pagination"
|
||||
"math"
|
||||
"gopkg.in/russross/blackfriday.v2"
|
||||
)
|
||||
|
||||
@ -52,7 +54,7 @@ func (c *ManagerController) Users() {
|
||||
}
|
||||
|
||||
if totalCount > 0 {
|
||||
pager := pagination.NewPagination(c.Ctx.Request,totalCount,conf.PageSize,c.BaseUrl())
|
||||
pager := pagination.NewPagination(c.Ctx.Request, totalCount, conf.PageSize, c.BaseUrl())
|
||||
c.Data["PageHtml"] = pager.HtmlPages()
|
||||
} else {
|
||||
c.Data["PageHtml"] = ""
|
||||
@ -110,7 +112,7 @@ func (c *ManagerController) CreateMember() {
|
||||
member.Avatar = conf.GetDefaultAvatar()
|
||||
member.CreateAt = c.Member.MemberId
|
||||
member.Email = email
|
||||
member.RealName = strings.TrimSpace(c.GetString("real_name",""))
|
||||
member.RealName = strings.TrimSpace(c.GetString("real_name", ""))
|
||||
if phone != "" {
|
||||
member.Phone = phone
|
||||
}
|
||||
@ -290,13 +292,13 @@ func (c *ManagerController) Books() {
|
||||
if totalCount > 0 {
|
||||
//html := utils.GetPagerHtml(c.Ctx.Request.RequestURI, pageIndex, 8, totalCount)
|
||||
|
||||
pager := pagination.NewPagination(c.Ctx.Request,totalCount,conf.PageSize, c.BaseUrl())
|
||||
pager := pagination.NewPagination(c.Ctx.Request, totalCount, conf.PageSize, c.BaseUrl())
|
||||
|
||||
c.Data["PageHtml"] = pager.HtmlPages()
|
||||
} else {
|
||||
c.Data["PageHtml"] = ""
|
||||
}
|
||||
for i,book := range books {
|
||||
for i, book := range books {
|
||||
books[i].Description = utils.StripTags(string(blackfriday.Run([]byte(book.Description))))
|
||||
books[i].ModifyTime = book.ModifyTime.Local()
|
||||
books[i].CreateTime = book.CreateTime.Local()
|
||||
@ -328,10 +330,10 @@ func (c *ManagerController) EditBook() {
|
||||
orderIndex, _ := c.GetInt("order_index", 0)
|
||||
isDownload := strings.TrimSpace(c.GetString("is_download")) == "on"
|
||||
enableShare := strings.TrimSpace(c.GetString("enable_share")) == "on"
|
||||
isUseFirstDocument := strings.TrimSpace(c.GetString("is_use_first_document")) == "on"
|
||||
isUseFirstDocument := strings.TrimSpace(c.GetString("is_use_first_document")) == "on"
|
||||
autoRelease := strings.TrimSpace(c.GetString("auto_release")) == "on"
|
||||
publisher := strings.TrimSpace(c.GetString("publisher"))
|
||||
historyCount,_ := c.GetInt("history_count",0)
|
||||
historyCount, _ := c.GetInt("history_count", 0)
|
||||
|
||||
if strings.Count(description, "") > 500 {
|
||||
c.JsonResult(6004, "项目描述不能大于500字")
|
||||
@ -360,17 +362,17 @@ func (c *ManagerController) EditBook() {
|
||||
}
|
||||
if isDownload {
|
||||
book.IsDownload = 0
|
||||
}else{
|
||||
} else {
|
||||
book.IsDownload = 1
|
||||
}
|
||||
if enableShare {
|
||||
book.IsEnableShare = 0
|
||||
}else{
|
||||
} else {
|
||||
book.IsEnableShare = 1
|
||||
}
|
||||
if isUseFirstDocument {
|
||||
book.IsUseFirstDocument = 1
|
||||
}else{
|
||||
} else {
|
||||
book.IsUseFirstDocument = 0
|
||||
}
|
||||
|
||||
@ -613,7 +615,7 @@ func (c *ManagerController) AttachList() {
|
||||
|
||||
p := filepath.Join(conf.WorkingDirectory, item.FilePath)
|
||||
|
||||
item.IsExist = utils.FileExists(p)
|
||||
item.IsExist = filetil.FileExists(p)
|
||||
|
||||
}
|
||||
c.Data["Lists"] = attachList
|
||||
@ -643,7 +645,7 @@ func (c *ManagerController) AttachDetailed() {
|
||||
attach.FilePath = filepath.Join(conf.WorkingDirectory, attach.FilePath)
|
||||
attach.HttpPath = conf.URLForWithCdnImage(attach.HttpPath)
|
||||
|
||||
attach.IsExist = utils.FileExists(attach.FilePath)
|
||||
attach.IsExist = filetil.FileExists(attach.FilePath)
|
||||
|
||||
c.Data["Model"] = attach
|
||||
}
|
||||
@ -691,43 +693,27 @@ func (c *ManagerController) LabelList() {
|
||||
|
||||
c.Data["Lists"] = labels
|
||||
}
|
||||
|
||||
//删除标签
|
||||
func (c *ManagerController) LabelDelete(){
|
||||
labelId,err := strconv.Atoi(c.Ctx.Input.Param(":id"))
|
||||
func (c *ManagerController) LabelDelete() {
|
||||
labelId, err := strconv.Atoi(c.Ctx.Input.Param(":id"))
|
||||
|
||||
if err != nil {
|
||||
beego.Error("获取删除标签参数时出错:",err)
|
||||
c.JsonResult(50001,"参数错误")
|
||||
beego.Error("获取删除标签参数时出错:", err)
|
||||
c.JsonResult(50001, "参数错误")
|
||||
}
|
||||
if labelId <= 0 {
|
||||
c.JsonResult(50001,"参数错误")
|
||||
c.JsonResult(50001, "参数错误")
|
||||
}
|
||||
|
||||
label,err := models.NewLabel().FindFirst("label_id",labelId)
|
||||
label, err := models.NewLabel().FindFirst("label_id", labelId)
|
||||
if err != nil {
|
||||
beego.Error("查询标签时出错:",err)
|
||||
c.JsonResult(50001,"查询标签时出错:" + err.Error())
|
||||
beego.Error("查询标签时出错:", err)
|
||||
c.JsonResult(50001, "查询标签时出错:"+err.Error())
|
||||
}
|
||||
if err := label.Delete();err != nil {
|
||||
c.JsonResult(50002,"删除失败:" + err.Error())
|
||||
}else{
|
||||
c.JsonResult(0,"ok")
|
||||
if err := label.Delete(); err != nil {
|
||||
c.JsonResult(50002, "删除失败:"+err.Error())
|
||||
} else {
|
||||
c.JsonResult(0, "ok")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,118 +0,0 @@
|
||||
package converter
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/lifei6671/mindoc/utils"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"crypto/md5"
|
||||
"io"
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"github.com/lifei6671/mindoc/utils/ziptil"
|
||||
"io/ioutil"
|
||||
"encoding/xml"
|
||||
)
|
||||
|
||||
type ResolveResult struct {
|
||||
|
||||
}
|
||||
|
||||
type XmlResult struct {
|
||||
XMLName xml.Name `xml:"ncx"`
|
||||
Head XmlHead `xml:"head"`
|
||||
NavMap XmlTocNavMap `xml:"navMap"`
|
||||
Title string `xml:"docTitle>text"`
|
||||
}
|
||||
|
||||
type XmlHead struct {
|
||||
XMLName xml.Name `xml:"head"`
|
||||
Meta []XmlMeta `xml:"meta"`
|
||||
}
|
||||
|
||||
type XmlMeta struct {
|
||||
XMLName xml.Name `xml:"meta"`
|
||||
Content string `xml:"content,attr"`
|
||||
Name string `xml:"name,attr"`
|
||||
|
||||
}
|
||||
type XmlDocTitle struct {
|
||||
Text string `xml:"text"`
|
||||
}
|
||||
type XmlTocNavMap struct {
|
||||
XMLName xml.Name `xml:"navMap"`
|
||||
NavPoint []XmlNavPoint `xml:"navPoint"`
|
||||
}
|
||||
|
||||
type XmlNavPoint struct {
|
||||
XMLName xml.Name `xml:"navPoint"`
|
||||
Content XmlContent `xml:"content"`
|
||||
NavLabel string `xml:"navLabel>text"`
|
||||
}
|
||||
|
||||
type XmlContent struct {
|
||||
XMLName xml.Name `xml:"content"`
|
||||
Src string `xml:"src,attr"`
|
||||
}
|
||||
|
||||
type XmlNavLabel struct {
|
||||
|
||||
}
|
||||
|
||||
func Resolve(p string) (ResolveResult,error) {
|
||||
result := ResolveResult{
|
||||
|
||||
}
|
||||
|
||||
if !utils.FileExists(p) {
|
||||
return result,errors.New("文件不存在 " + p)
|
||||
}
|
||||
|
||||
w := md5.New()
|
||||
io.WriteString(w, p) //将str写入到w中
|
||||
md5str := fmt.Sprintf("%x", w.Sum(nil)) //w.Sum(nil)将w的hash转成[]byte格式
|
||||
|
||||
tempPath := filepath.Join(os.TempDir(),md5str)
|
||||
|
||||
os.MkdirAll(tempPath,0766)
|
||||
|
||||
epub := filepath.Join(tempPath , "book.epub")
|
||||
|
||||
args := []string{p,epub}
|
||||
|
||||
cmd := exec.Command(ebookConvert, args...)
|
||||
|
||||
|
||||
if err := cmd.Run(); err != nil {
|
||||
fmt.Println("执行转换命令失败:" + err.Error())
|
||||
return result,err
|
||||
}
|
||||
fmt.Println(epub)
|
||||
|
||||
unzipPath := filepath.Join(tempPath,"output")
|
||||
|
||||
if err := ziptil.Unzip(epub, unzipPath); err != nil {
|
||||
fmt.Println("解压缩失败:" + err.Error())
|
||||
return result,err
|
||||
}
|
||||
xmlPath := filepath.Join(unzipPath,"toc.ncx")
|
||||
|
||||
data,err := ioutil.ReadFile(xmlPath);
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("toc.ncx 文件不存在:" + err.Error())
|
||||
return result,err
|
||||
}
|
||||
v := XmlResult{}
|
||||
|
||||
err = xml.Unmarshal([]byte(data), &v)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("解析XML失败:" + err.Error())
|
||||
return result,err
|
||||
}
|
||||
|
||||
fmt.Println(v)
|
||||
|
||||
return result,nil
|
||||
}
|
@ -6,11 +6,12 @@ import (
|
||||
|
||||
"os"
|
||||
|
||||
"strings"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/astaxie/beego/orm"
|
||||
"github.com/lifei6671/mindoc/conf"
|
||||
"github.com/lifei6671/mindoc/utils"
|
||||
"strings"
|
||||
"github.com/lifei6671/mindoc/utils/filetil"
|
||||
)
|
||||
|
||||
// Attachment struct .
|
||||
@ -97,7 +98,7 @@ func (m *Attachment) FindToPager(pageIndex, pageSize int) (attachList []*Attachm
|
||||
|
||||
if err != nil {
|
||||
|
||||
return nil,0,err
|
||||
return nil, 0, err
|
||||
}
|
||||
totalCount = int(total)
|
||||
offset := (pageIndex - 1) * pageSize
|
||||
@ -113,7 +114,7 @@ func (m *Attachment) FindToPager(pageIndex, pageSize int) (attachList []*Attachm
|
||||
for _, item := range list {
|
||||
attach := &AttachmentResult{}
|
||||
attach.Attachment = *item
|
||||
attach.FileShortSize = utils.FormatBytes(int64(attach.FileSize))
|
||||
attach.FileShortSize = filetil.FormatBytes(int64(attach.FileSize))
|
||||
|
||||
book := NewBook()
|
||||
|
||||
|
@ -1,9 +1,10 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"github.com/astaxie/beego/orm"
|
||||
"github.com/lifei6671/mindoc/utils"
|
||||
"strings"
|
||||
|
||||
"github.com/astaxie/beego/orm"
|
||||
"github.com/lifei6671/mindoc/utils/filetil"
|
||||
)
|
||||
|
||||
type AttachmentResult struct {
|
||||
@ -54,7 +55,7 @@ func (m *AttachmentResult) Find(id int) (*AttachmentResult, error) {
|
||||
m.Account = member.Account
|
||||
}
|
||||
}
|
||||
m.FileShortSize = utils.FormatBytes(int64(attach.FileSize))
|
||||
m.FileShortSize = filetil.FormatBytes(int64(attach.FileSize))
|
||||
m.LocalHttpPath = strings.Replace(m.FilePath, "\\", "/", -1)
|
||||
|
||||
return m, nil
|
||||
|
143
models/book.go
143
models/book.go
@ -11,6 +11,17 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"crypto/md5"
|
||||
"io"
|
||||
"errors"
|
||||
"github.com/lifei6671/mindoc/utils/filetil"
|
||||
"github.com/lifei6671/mindoc/utils/ziptil"
|
||||
"strings"
|
||||
"regexp"
|
||||
"io/ioutil"
|
||||
"github.com/lifei6671/mindoc/utils/cryptil"
|
||||
"github.com/lifei6671/mindoc/utils/requests"
|
||||
"gopkg.in/russross/blackfriday.v2"
|
||||
)
|
||||
|
||||
// Book struct .
|
||||
@ -77,6 +88,7 @@ func NewBook() *Book {
|
||||
return &Book{}
|
||||
}
|
||||
|
||||
//添加一个项目
|
||||
func (m *Book) Insert() error {
|
||||
o := orm.NewOrm()
|
||||
// o.Begin()
|
||||
@ -124,7 +136,7 @@ func (m *Book) Find(id int) (*Book, error) {
|
||||
|
||||
return m, err
|
||||
}
|
||||
|
||||
//更新一个项目
|
||||
func (m *Book) Update(cols ...string) error {
|
||||
o := orm.NewOrm()
|
||||
|
||||
@ -164,6 +176,7 @@ func (m *Book) FindByFieldFirst(field string, value interface{}) (*Book, error)
|
||||
|
||||
}
|
||||
|
||||
//根据项目标识查询项目
|
||||
func (m *Book) FindByIdentify(identify string) (*Book, error) {
|
||||
o := orm.NewOrm()
|
||||
|
||||
@ -375,3 +388,131 @@ func (m *Book) ResetDocumentNumber(bookId int) {
|
||||
beego.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func (book *Book)ImportBook(zipPath string) error {
|
||||
if !filetil.FileExists(zipPath) {
|
||||
return errors.New("文件不存在 => " + zipPath)
|
||||
}
|
||||
|
||||
|
||||
w := md5.New()
|
||||
io.WriteString(w, zipPath) //将str写入到w中
|
||||
io.WriteString(w, time.Now().String())
|
||||
io.WriteString(w,book.BookName)
|
||||
md5str := fmt.Sprintf("%x", w.Sum(nil)) //w.Sum(nil)将w的hash转成[]byte格式
|
||||
|
||||
tempPath := strings.Replace(filepath.Join(os.TempDir(), md5str),"\\","/",-1)
|
||||
|
||||
os.MkdirAll(tempPath, 0766)
|
||||
//如果加压缩失败
|
||||
if err := ziptil.Unzip(zipPath,tempPath);err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
err := filepath.Walk(tempPath, func(path string, info os.FileInfo, err error) error {
|
||||
path = strings.Replace(path,"\\","/",-1)
|
||||
if path == tempPath {
|
||||
return nil
|
||||
}
|
||||
if !info.IsDir() {
|
||||
ext := filepath.Ext(info.Name())
|
||||
if strings.EqualFold(ext ,".md") || strings.EqualFold(ext , ".markdown" ) {
|
||||
doc := NewDocument()
|
||||
doc.BookId = book.BookId
|
||||
docIdentify := strings.Replace(strings.TrimPrefix(path, tempPath+"/"), "/", "-", -1)
|
||||
|
||||
if ok, err := regexp.MatchString(`[a-z]+[a-zA-Z0-9_.\-]*$`, docIdentify); !ok || err != nil {
|
||||
docIdentify = "import-" + docIdentify
|
||||
}
|
||||
|
||||
doc.Identify = docIdentify
|
||||
|
||||
re := regexp.MustCompile(`!\[(.*?)\]\((.*?)\)`)
|
||||
markdown, err := ioutil.ReadFile(path);
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
doc.Markdown = re.ReplaceAllStringFunc(string(markdown), func(image string) string {
|
||||
|
||||
images := re.FindAllSubmatch([]byte(image), -1);
|
||||
if len(images) <= 0 || len(images[0]) < 3 {
|
||||
return image
|
||||
}
|
||||
originalImageUrl := string(images[0][2])
|
||||
imageUrl := strings.Replace(string(originalImageUrl),"\\","/",-1)
|
||||
|
||||
//如果是本地路径,则需要将图片复制到项目目录
|
||||
if !strings.HasPrefix(imageUrl, "http://") && !strings.HasPrefix(imageUrl, "https://") {
|
||||
if strings.HasPrefix(imageUrl, "/") {
|
||||
imageUrl = filepath.Join(tempPath, imageUrl)
|
||||
} else if strings.HasPrefix(imageUrl, "./") {
|
||||
imageUrl = filepath.Join(filepath.Dir(path), strings.TrimPrefix(imageUrl, "./"))
|
||||
} else if strings.HasPrefix(imageUrl, "../") {
|
||||
imageUrl = filepath.Join(filepath.Dir(path), imageUrl)
|
||||
} else {
|
||||
imageUrl = filepath.Join(filepath.Dir(path), imageUrl)
|
||||
}
|
||||
imageUrl = strings.Replace(imageUrl,"\\","/",-1)
|
||||
dstFile := filepath.Join(conf.WorkingDirectory,"uploads",time.Now().Format("200601"),strings.TrimPrefix(imageUrl,tempPath))
|
||||
|
||||
if filetil.FileExists(imageUrl) {
|
||||
filetil.CopyFile(imageUrl,dstFile)
|
||||
|
||||
imageUrl = strings.TrimPrefix(dstFile,conf.WorkingDirectory)
|
||||
|
||||
if !strings.HasPrefix(imageUrl,"/") && !strings.HasPrefix(imageUrl,"\\"){
|
||||
imageUrl = "/" + imageUrl
|
||||
}
|
||||
}
|
||||
|
||||
}else{
|
||||
imageExt := cryptil.Md5Crypt(imageUrl) + filepath.Ext(imageUrl)
|
||||
|
||||
dstFile := filepath.Join(conf.WorkingDirectory,"uploads",time.Now().Format("200601"),imageExt)
|
||||
|
||||
if err := requests.DownloadAndSaveFile(imageUrl,dstFile) ;err == nil {
|
||||
imageUrl = strings.TrimPrefix(strings.Replace(dstFile,"\\","/",-1),strings.Replace(conf.WorkingDirectory,"\\","/",-1))
|
||||
if !strings.HasPrefix(imageUrl,"/") && !strings.HasPrefix(imageUrl,"\\"){
|
||||
imageUrl = "/" + imageUrl
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
imageUrl = strings.Replace(strings.TrimSuffix(image,originalImageUrl + ")") + imageUrl + ")","\\","/",-1)
|
||||
beego.Info(imageUrl)
|
||||
return imageUrl
|
||||
})
|
||||
doc.Content = string(blackfriday.Run([]byte(doc.Markdown)))
|
||||
doc.Release = doc.Content
|
||||
|
||||
//beego.Info(content)
|
||||
//images := re.FindAllSubmatch(markdown,-1);
|
||||
//
|
||||
//for _,image := range images {
|
||||
// originalImageUrl := string(image[1])
|
||||
// imageUrl := string(originalImageUrl)
|
||||
//
|
||||
// if !strings.HasPrefix(imageUrl,"http://") && !strings.HasPrefix(imageUrl,"https://") {
|
||||
// if strings.HasPrefix(imageUrl, "/") {
|
||||
// imageUrl = filepath.Join(tempPath, imageUrl)
|
||||
// } else if strings.HasPrefix(imageUrl, "./") {
|
||||
// imageUrl = filepath.Join(filepath.Dir(path), strings.TrimPrefix(imageUrl, "./"))
|
||||
// } else if strings.HasPrefix(imageUrl, "../") {
|
||||
// imageUrl = filepath.Join(filepath.Dir(path), imageUrl)
|
||||
// }else{
|
||||
// imageUrl = filepath.Join(filepath.Dir(path), imageUrl)
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// beego.Info(imageUrl)
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
return err
|
||||
}
|
@ -2,24 +2,24 @@ package models
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"time"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"encoding/base64"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/astaxie/beego/logs"
|
||||
"github.com/astaxie/beego/orm"
|
||||
"github.com/lifei6671/mindoc/conf"
|
||||
"github.com/lifei6671/mindoc/converter"
|
||||
"github.com/lifei6671/mindoc/utils"
|
||||
"gopkg.in/russross/blackfriday.v2"
|
||||
"github.com/lifei6671/mindoc/utils/ziptil"
|
||||
"github.com/lifei6671/mindoc/utils/filetil"
|
||||
"github.com/lifei6671/mindoc/utils/ziptil"
|
||||
"gopkg.in/russross/blackfriday.v2"
|
||||
)
|
||||
|
||||
type BookResult struct {
|
||||
@ -36,7 +36,7 @@ type BookResult struct {
|
||||
CommentCount int `json:"comment_count"`
|
||||
CreateTime time.Time `json:"create_time"`
|
||||
CreateName string `json:"create_name"`
|
||||
RealName string `json:"real_name"`
|
||||
RealName string `json:"real_name"`
|
||||
ModifyTime time.Time `json:"modify_time"`
|
||||
Cover string `json:"cover"`
|
||||
Theme string `json:"theme"`
|
||||
@ -44,18 +44,18 @@ type BookResult struct {
|
||||
MemberId int `json:"member_id"`
|
||||
Editor string `json:"editor"`
|
||||
AutoRelease bool `json:"auto_release"`
|
||||
HistoryCount int `json:"history_count"`
|
||||
HistoryCount int `json:"history_count"`
|
||||
|
||||
RelationshipId int `json:"relationship_id"`
|
||||
RoleId int `json:"role_id"`
|
||||
RoleName string `json:"role_name"`
|
||||
Status int `json:"status"`
|
||||
IsEnableShare bool `json:"is_enable_share"`
|
||||
IsUseFirstDocument bool `json:"is_use_first_document"`
|
||||
RelationshipId int `json:"relationship_id"`
|
||||
RoleId int `json:"role_id"`
|
||||
RoleName string `json:"role_name"`
|
||||
Status int `json:"status"`
|
||||
IsEnableShare bool `json:"is_enable_share"`
|
||||
IsUseFirstDocument bool `json:"is_use_first_document"`
|
||||
|
||||
LastModifyText string `json:"last_modify_text"`
|
||||
IsDisplayComment bool `json:"is_display_comment"`
|
||||
IsDownload bool `json:"is_download"`
|
||||
IsDownload bool `json:"is_download"`
|
||||
}
|
||||
|
||||
func NewBookResult() *BookResult {
|
||||
@ -211,7 +211,7 @@ func (m *BookResult) Converter(sessionId string) (ConvertBookResult, error) {
|
||||
|
||||
convertBookResult := ConvertBookResult{}
|
||||
|
||||
outputPath := filepath.Join(conf.WorkingDirectory,"uploads","books", strconv.Itoa(m.BookId))
|
||||
outputPath := filepath.Join(conf.WorkingDirectory, "uploads", "books", strconv.Itoa(m.BookId))
|
||||
viewPath := beego.BConfig.WebConfig.ViewsPath
|
||||
|
||||
pdfpath := filepath.Join(outputPath, "book.pdf")
|
||||
@ -220,7 +220,7 @@ func (m *BookResult) Converter(sessionId string) (ConvertBookResult, error) {
|
||||
docxpath := filepath.Join(outputPath, "book.docx")
|
||||
|
||||
//先将转换的文件储存到临时目录
|
||||
tempOutputPath := filepath.Join(os.TempDir(),sessionId,m.Identify) //filepath.Abs(filepath.Join("cache", sessionId))
|
||||
tempOutputPath := filepath.Join(os.TempDir(), sessionId, m.Identify) //filepath.Abs(filepath.Join("cache", sessionId))
|
||||
|
||||
os.MkdirAll(outputPath, 0766)
|
||||
os.MkdirAll(tempOutputPath, 0766)
|
||||
@ -229,7 +229,7 @@ func (m *BookResult) Converter(sessionId string) (ConvertBookResult, error) {
|
||||
os.RemoveAll(p)
|
||||
}(tempOutputPath)
|
||||
|
||||
if utils.FileExists(pdfpath) && utils.FileExists(epubpath) && utils.FileExists(mobipath) && utils.FileExists(docxpath) {
|
||||
if filetil.FileExists(pdfpath) && filetil.FileExists(epubpath) && filetil.FileExists(mobipath) && filetil.FileExists(docxpath) {
|
||||
convertBookResult.EpubPath = epubpath
|
||||
convertBookResult.MobiPath = mobipath
|
||||
convertBookResult.PDFPath = pdfpath
|
||||
@ -237,7 +237,6 @@ func (m *BookResult) Converter(sessionId string) (ConvertBookResult, error) {
|
||||
return convertBookResult, nil
|
||||
}
|
||||
|
||||
|
||||
docs, err := NewDocument().FindListByBookId(m.BookId)
|
||||
if err != nil {
|
||||
return convertBookResult, err
|
||||
@ -293,7 +292,7 @@ func (m *BookResult) Converter(sessionId string) (ConvertBookResult, error) {
|
||||
More: []string{},
|
||||
}
|
||||
if m.Publisher != "" {
|
||||
ebookConfig.Footer = "<p style='color:#8E8E8E;font-size:12px;'>本文档由 <span style='text-decoration:none;color:#1abc9c;font-weight:bold;'>"+ m.Publisher +"</span> 生成<span style='float:right'>- _PAGENUM_ -</span></p>"
|
||||
ebookConfig.Footer = "<p style='color:#8E8E8E;font-size:12px;'>本文档由 <span style='text-decoration:none;color:#1abc9c;font-weight:bold;'>" + m.Publisher + "</span> 生成<span style='float:right'>- _PAGENUM_ -</span></p>"
|
||||
}
|
||||
if m.RealName != "" {
|
||||
ebookConfig.Creator = m.RealName
|
||||
@ -354,35 +353,31 @@ func (m *BookResult) Converter(sessionId string) (ConvertBookResult, error) {
|
||||
f.Close()
|
||||
}
|
||||
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory,"static","css","kancloud.css"),filepath.Join(tempOutputPath,"styles","css","kancloud.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory,"static","css","export.css"),filepath.Join(tempOutputPath,"styles","css","export.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory,"static","editor.md","css","editormd.preview.css"),filepath.Join(tempOutputPath,"styles","editor.md","css","editormd.preview.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory,"static","prettify","themes","prettify.css"),filepath.Join(tempOutputPath,"styles","prettify","themes","prettify.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory,"static","css,","markdown.preview.css"),filepath.Join(tempOutputPath,"styles","css","markdown.preview.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory,"static","highlight","styles","vs.css"),filepath.Join(tempOutputPath,"styles","highlight","styles","vs.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory,"static","katex","katex.min.css"),filepath.Join(tempOutputPath,"styles","katex","katex.min.css"))
|
||||
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory, "static", "css", "kancloud.css"), filepath.Join(tempOutputPath, "styles", "css", "kancloud.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory, "static", "css", "export.css"), filepath.Join(tempOutputPath, "styles", "css", "export.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory, "static", "editor.md", "css", "editormd.preview.css"), filepath.Join(tempOutputPath, "styles", "editor.md", "css", "editormd.preview.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory, "static", "prettify", "themes", "prettify.css"), filepath.Join(tempOutputPath, "styles", "prettify", "themes", "prettify.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory, "static", "css,", "markdown.preview.css"), filepath.Join(tempOutputPath, "styles", "css", "markdown.preview.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory, "static", "highlight", "styles", "vs.css"), filepath.Join(tempOutputPath, "styles", "highlight", "styles", "vs.css"))
|
||||
filetil.CopyFile(filepath.Join(conf.WorkingDirectory, "static", "katex", "katex.min.css"), filepath.Join(tempOutputPath, "styles", "katex", "katex.min.css"))
|
||||
|
||||
eBookConverter := &converter.Converter{
|
||||
BasePath: tempOutputPath,
|
||||
OutputPath: strings.TrimSuffix(tempOutputPath,"sources"),
|
||||
Config: ebookConfig,
|
||||
Debug: true,
|
||||
BasePath: tempOutputPath,
|
||||
OutputPath: strings.TrimSuffix(tempOutputPath, "sources"),
|
||||
Config: ebookConfig,
|
||||
Debug: true,
|
||||
}
|
||||
|
||||
|
||||
|
||||
if err := eBookConverter.Convert(); err != nil {
|
||||
beego.Error("转换文件错误:" + m.BookName + " => " + err.Error())
|
||||
return convertBookResult, err
|
||||
}
|
||||
beego.Info("文档转换完成:" + m.BookName)
|
||||
|
||||
|
||||
utils.CopyFile(mobipath, filepath.Join(tempOutputPath, "output", "book.mobi"))
|
||||
utils.CopyFile(pdfpath, filepath.Join(tempOutputPath, "output", "book.pdf"))
|
||||
utils.CopyFile(epubpath, filepath.Join(tempOutputPath, "output", "book.epub"))
|
||||
utils.CopyFile(docxpath, filepath.Join(tempOutputPath, "output", "book.docx"))
|
||||
filetil.CopyFile(mobipath, filepath.Join(tempOutputPath, "output", "book.mobi"))
|
||||
filetil.CopyFile(pdfpath, filepath.Join(tempOutputPath, "output", "book.pdf"))
|
||||
filetil.CopyFile(epubpath, filepath.Join(tempOutputPath, "output", "book.epub"))
|
||||
filetil.CopyFile(docxpath, filepath.Join(tempOutputPath, "output", "book.docx"))
|
||||
|
||||
convertBookResult.MobiPath = mobipath
|
||||
convertBookResult.PDFPath = pdfpath
|
||||
@ -393,45 +388,45 @@ func (m *BookResult) Converter(sessionId string) (ConvertBookResult, error) {
|
||||
}
|
||||
|
||||
//导出Markdown原始文件
|
||||
func (m *BookResult) ExportMarkdown(sessionId string)(string, error){
|
||||
outputPath := filepath.Join(conf.WorkingDirectory,"uploads","books", strconv.Itoa(m.BookId), "book.zip")
|
||||
func (m *BookResult) ExportMarkdown(sessionId string) (string, error) {
|
||||
outputPath := filepath.Join(conf.WorkingDirectory, "uploads", "books", strconv.Itoa(m.BookId), "book.zip")
|
||||
|
||||
os.MkdirAll(filepath.Dir(outputPath),0644)
|
||||
os.MkdirAll(filepath.Dir(outputPath), 0644)
|
||||
|
||||
tempOutputPath := filepath.Join(os.TempDir(),sessionId,"markdown")
|
||||
tempOutputPath := filepath.Join(os.TempDir(), sessionId, "markdown")
|
||||
|
||||
defer os.RemoveAll(tempOutputPath)
|
||||
|
||||
err := exportMarkdown(tempOutputPath,0,m.BookId)
|
||||
err := exportMarkdown(tempOutputPath, 0, m.BookId)
|
||||
|
||||
if err != nil {
|
||||
return "",err
|
||||
return "", err
|
||||
}
|
||||
|
||||
if err := ziptil.Compress(outputPath,tempOutputPath);err != nil {
|
||||
beego.Error("导出Markdown失败=>",err)
|
||||
return "",err
|
||||
if err := ziptil.Compress(outputPath, tempOutputPath); err != nil {
|
||||
beego.Error("导出Markdown失败=>", err)
|
||||
return "", err
|
||||
}
|
||||
return outputPath,nil
|
||||
return outputPath, nil
|
||||
}
|
||||
|
||||
func exportMarkdown(p string,parentId int,bookId int) (error){
|
||||
func exportMarkdown(p string, parentId int, bookId int) error {
|
||||
o := orm.NewOrm()
|
||||
|
||||
var docs []*Document
|
||||
|
||||
_,err := o.QueryTable(NewDocument().TableNameWithPrefix()).Filter("book_id",bookId).Filter("parent_id",parentId).All(&docs)
|
||||
_, err := o.QueryTable(NewDocument().TableNameWithPrefix()).Filter("book_id", bookId).Filter("parent_id", parentId).All(&docs)
|
||||
|
||||
if err != nil {
|
||||
beego.Error("导出Markdown失败=>",err)
|
||||
beego.Error("导出Markdown失败=>", err)
|
||||
return err
|
||||
}
|
||||
for _,doc := range docs {
|
||||
for _, doc := range docs {
|
||||
//获取当前文档的子文档数量,如果数量不为0,则将当前文档命名为READMD.md并设置成目录。
|
||||
subDocCount,err := o.QueryTable(NewDocument().TableNameWithPrefix()).Filter("parent_id",doc.DocumentId).Count()
|
||||
subDocCount, err := o.QueryTable(NewDocument().TableNameWithPrefix()).Filter("parent_id", doc.DocumentId).Count()
|
||||
|
||||
if err != nil {
|
||||
beego.Error("导出Markdown失败=>",err)
|
||||
beego.Error("导出Markdown失败=>", err)
|
||||
return err
|
||||
}
|
||||
|
||||
@ -439,27 +434,27 @@ func exportMarkdown(p string,parentId int,bookId int) (error){
|
||||
|
||||
if subDocCount > 0 {
|
||||
if doc.Identify != "" {
|
||||
docPath = filepath.Join(p, doc.Identify,"README.md")
|
||||
docPath = filepath.Join(p, doc.Identify, "README.md")
|
||||
} else {
|
||||
docPath = filepath.Join(p, strconv.Itoa(doc.DocumentId),"README.md")
|
||||
docPath = filepath.Join(p, strconv.Itoa(doc.DocumentId), "README.md")
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
if doc.Identify != "" {
|
||||
docPath = filepath.Join(p, doc.Identify + ".md")
|
||||
docPath = filepath.Join(p, doc.Identify+".md")
|
||||
} else {
|
||||
docPath = filepath.Join(p, doc.DocumentName + ".md")
|
||||
docPath = filepath.Join(p, doc.DocumentName+".md")
|
||||
}
|
||||
}
|
||||
dirPath := filepath.Dir(docPath);
|
||||
dirPath := filepath.Dir(docPath)
|
||||
|
||||
os.MkdirAll(dirPath,0766)
|
||||
os.MkdirAll(dirPath, 0766)
|
||||
|
||||
if err := ioutil.WriteFile(docPath,[]byte(doc.Markdown),0644);err != nil {
|
||||
beego.Error("导出Markdown失败=>",err)
|
||||
if err := ioutil.WriteFile(docPath, []byte(doc.Markdown), 0644); err != nil {
|
||||
beego.Error("导出Markdown失败=>", err)
|
||||
return err
|
||||
}
|
||||
if subDocCount > 0 {
|
||||
if err = exportMarkdown(dirPath,doc.DocumentId,bookId);err != nil {
|
||||
if err = exportMarkdown(dirPath, doc.DocumentId, bookId); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@ -468,36 +463,13 @@ func exportMarkdown(p string,parentId int,bookId int) (error){
|
||||
}
|
||||
|
||||
//查询项目的第一篇文档
|
||||
func (m *BookResult) FindFirstDocumentByBookId(bookId int) (*Document,error) {
|
||||
func (m *BookResult) FindFirstDocumentByBookId(bookId int) (*Document, error) {
|
||||
|
||||
o := orm.NewOrm()
|
||||
|
||||
doc := NewDocument()
|
||||
|
||||
err := o.QueryTable(doc.TableNameWithPrefix()).Filter("book_id", bookId).Filter("parent_id",0).OrderBy("order_sort").One(doc)
|
||||
err := o.QueryTable(doc.TableNameWithPrefix()).Filter("book_id", bookId).Filter("parent_id", 0).OrderBy("order_sort").One(doc)
|
||||
|
||||
return doc,err
|
||||
return doc, err
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -39,6 +39,12 @@ type Document struct {
|
||||
AttachList []*Attachment `orm:"-" json:"attach"`
|
||||
}
|
||||
|
||||
// 多字段唯一键
|
||||
func (m *Document) TableUnique() [][]string {
|
||||
return [][]string{
|
||||
[]string{"book_id", "identify"},
|
||||
}
|
||||
}
|
||||
// TableName 获取对应数据库表名.
|
||||
func (m *Document) TableName() string {
|
||||
return "documents"
|
||||
@ -93,15 +99,6 @@ func (m *Document) InsertOrUpdate(cols ...string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
////根据指定字段查询一条文档.
|
||||
//func (m *Document) FindByFieldFirst(field string, v interface{}) (*Document, error) {
|
||||
//
|
||||
// o := orm.NewOrm()
|
||||
//
|
||||
// err := o.QueryTable(m.TableNameWithPrefix()).Filter(field, v).One(m)
|
||||
//
|
||||
// return m, err
|
||||
//}
|
||||
//根据文档识别编号和项目id获取一篇文档
|
||||
func (m *Document) FindByIdentityFirst(identify string,bookId int) (*Document,error) {
|
||||
o := orm.NewOrm()
|
||||
@ -120,11 +117,6 @@ func (m *Document) RecursiveDocument(docId int) error {
|
||||
o.Delete(doc)
|
||||
NewDocumentHistory().Clear(doc.DocumentId)
|
||||
}
|
||||
//
|
||||
//var docs []*Document
|
||||
//
|
||||
//_, err := o.QueryTable(m.TableNameWithPrefix()).Filter("parent_id", doc_id).All(&docs)
|
||||
|
||||
var maps []orm.Params
|
||||
|
||||
_, err := o.Raw("SELECT document_id FROM " + m.TableNameWithPrefix() + " WHERE parent_id=" + strconv.Itoa(docId)).Values(&maps)
|
||||
@ -255,6 +247,7 @@ func (m *Document) FromCacheById(id int) (*Document,error) {
|
||||
}()
|
||||
return m.Find(id)
|
||||
}
|
||||
|
||||
//根据文档标识从缓存中查询文档
|
||||
func (m *Document) FromCacheByIdentify(identify string,bookId int) (*Document,error) {
|
||||
b := cache.Get(fmt.Sprintf("Document.BookId.%d.Identify.%s",bookId , identify))
|
||||
@ -280,3 +273,4 @@ func (m *Document) FindListByBookId(bookId int) (docs []*Document, err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,101 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Krajee RTL (Right To Left) default styling for bootstrap-fileinput.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/
|
||||
.kv-rtl .close, .kv-rtl .krajee-default .file-actions, .kv-rtl .krajee-default .file-other-error {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.kv-rtl .krajee-default.file-preview-frame, .kv-rtl .krajee-default .file-drag-handle, .kv-rtl .krajee-default .file-upload-indicator {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.kv-rtl .file-zoom-dialog, .kv-rtl .file-error-message pre, .kv-rtl .file-error-message ul {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.kv-rtl {
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
.kv-rtl .floating-buttons {
|
||||
left: 10px;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
.kv-rtl .floating-buttons .btn-kv {
|
||||
margin-left: 0;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
.kv-rtl .file-caption-icon {
|
||||
left: auto;
|
||||
right: 8px;
|
||||
}
|
||||
|
||||
.kv-rtl .file-drop-zone {
|
||||
margin: 12px 12px 12px 15px;
|
||||
}
|
||||
|
||||
.kv-rtl .btn-prev {
|
||||
right: 1px;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
.kv-rtl .btn-next {
|
||||
left: 1px;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
.kv-rtl .pull-right, .kv-rtl .float-right {
|
||||
float: left !important;
|
||||
}
|
||||
|
||||
.kv-rtl .pull-left, .kv-rtl .float-left {
|
||||
float: right !important;
|
||||
}
|
||||
|
||||
.kv-rtl .kv-zoom-title {
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
.kv-rtl .krajee-default.file-preview-frame {
|
||||
box-shadow: -1px 1px 5px 0 #a2958a;
|
||||
}
|
||||
|
||||
.kv-rtl .krajee-default.file-preview-frame:not(.file-preview-error):hover {
|
||||
box-shadow: -3px 3px 5px 0 #333;
|
||||
}
|
||||
|
||||
.kv-rtl .kv-zoom-actions .btn-kv {
|
||||
margin-left: 0;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
.kv-rtl .file-caption.icon-visible .file-caption-name {
|
||||
padding-left: 0;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
.kv-rtl .input-group-btn:last-child > .btn {
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
|
||||
.kv-rtl .input-group .form-control:first-child {
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
|
||||
.kv-rtl .btn-file input[type=file] {
|
||||
right: auto;
|
||||
left: 0;
|
||||
text-align: left;
|
||||
background: none repeat scroll 100% 0 transparent;
|
||||
}
|
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/css/fileinput-rtl.min.css
vendored
Normal file
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/css/fileinput-rtl.min.css
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Krajee RTL (Right To Left) default styling for bootstrap-fileinput.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/.kv-rtl .close,.kv-rtl .krajee-default .file-actions,.kv-rtl .krajee-default .file-other-error{float:left}.kv-rtl .krajee-default .file-drag-handle,.kv-rtl .krajee-default .file-upload-indicator,.kv-rtl .krajee-default.file-preview-frame{float:right}.kv-rtl .file-error-message pre,.kv-rtl .file-error-message ul,.kv-rtl .file-zoom-dialog{text-align:right}.kv-rtl{direction:rtl}.kv-rtl .floating-buttons{left:10px;right:auto}.kv-rtl .floating-buttons .btn-kv{margin-left:0;margin-right:3px}.kv-rtl .file-caption-icon{left:auto;right:8px}.kv-rtl .file-drop-zone{margin:12px 12px 12px 15px}.kv-rtl .btn-prev{right:1px;left:auto}.kv-rtl .btn-next{left:1px;right:auto}.kv-rtl .float-right,.kv-rtl .pull-right{float:left!important}.kv-rtl .float-left,.kv-rtl .pull-left{float:right!important}.kv-rtl .kv-zoom-title{direction:ltr}.kv-rtl .krajee-default.file-preview-frame{box-shadow:-1px 1px 5px 0 #a2958a}.kv-rtl .krajee-default.file-preview-frame:not(.file-preview-error):hover{box-shadow:-3px 3px 5px 0 #333}.kv-rtl .kv-zoom-actions .btn-kv{margin-left:0;margin-right:3px}.kv-rtl .file-caption.icon-visible .file-caption-name{padding-left:0;padding-right:15px}.kv-rtl .input-group-btn:last-child>.btn{border-radius:4px 0 0 4px}.kv-rtl .input-group .form-control:first-child{border-radius:0 4px 4px 0}.kv-rtl .btn-file input[type=file]{right:auto;left:0;text-align:left;background:100% 0 none}
|
@ -0,0 +1,552 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Krajee default styling for bootstrap-fileinput.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/
|
||||
.file-loading input[type=file], input[type=file].file-loading {
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.kv-hidden, .file-caption-icon, .file-zoom-dialog .modal-header:before, .file-zoom-dialog .modal-header:after, .file-input-new .file-preview, .file-input-new .close, .file-input-new .glyphicon-file, .file-input-new .fileinput-remove-button, .file-input-new .fileinput-upload-button, .file-input-new .no-browse .input-group-btn, .file-input-ajax-new .fileinput-remove-button, .file-input-ajax-new .fileinput-upload-button, .file-input-ajax-new .no-browse .input-group-btn, .hide-content .kv-file-content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.btn-file input[type=file], .file-caption-icon, .file-preview .fileinput-remove, .krajee-default .file-thumb-progress, .file-zoom-dialog .btn-navigate, .file-zoom-dialog .floating-buttons {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.file-loading:before, .btn-file, .file-caption, .file-preview, .krajee-default.file-preview-frame, .krajee-default .file-thumbnail-footer, .file-zoom-dialog .modal-dialog {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.file-error-message pre, .file-error-message ul, .krajee-default .file-actions, .krajee-default .file-other-error {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.file-error-message pre, .file-error-message ul {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.krajee-default .file-drag-handle, .krajee-default .file-upload-indicator {
|
||||
float: left;
|
||||
margin: 5px 0 -5px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.krajee-default .file-thumb-progress .progress, .krajee-default .file-thumb-progress .progress-bar {
|
||||
height: 11px;
|
||||
font-size: 9px;
|
||||
line-height: 10px;
|
||||
}
|
||||
|
||||
.krajee-default .file-caption-info, .krajee-default .file-size-info {
|
||||
display: block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
width: 160px;
|
||||
height: 15px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.file-zoom-content > .file-object.type-video, .file-zoom-content > .file-object.type-flash, .file-zoom-content > .file-object.type-image {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.file-zoom-content > .file-object.type-video, .file-zoom-content > .file-object.type-flash {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.file-zoom-content > .file-object.type-pdf, .file-zoom-content > .file-object.type-html, .file-zoom-content > .file-object.type-text, .file-zoom-content > .file-object.type-default {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.rotate-2 {
|
||||
transform: rotateY(180deg);
|
||||
}
|
||||
|
||||
.rotate-3 {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.rotate-4 {
|
||||
transform: rotate(180deg) rotateY(180deg);
|
||||
}
|
||||
|
||||
.rotate-5 {
|
||||
transform: rotate(270deg) rotateY(180deg);
|
||||
}
|
||||
|
||||
.rotate-6 {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
.rotate-7 {
|
||||
transform: rotate(90deg) rotateY(180deg);
|
||||
}
|
||||
|
||||
.rotate-8 {
|
||||
transform: rotate(270deg);
|
||||
}
|
||||
|
||||
.file-loading:before {
|
||||
content: " Loading...";
|
||||
display: inline-block;
|
||||
padding-left: 20px;
|
||||
line-height: 16px;
|
||||
font-size: 13px;
|
||||
font-variant: small-caps;
|
||||
color: #999;
|
||||
background: transparent url(../img/loading.gif) top left no-repeat;
|
||||
}
|
||||
|
||||
.file-object {
|
||||
margin: 0 0 -5px 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.btn-file {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.btn-file input[type=file] {
|
||||
top: 0;
|
||||
right: 0;
|
||||
min-width: 100%;
|
||||
min-height: 100%;
|
||||
text-align: right;
|
||||
opacity: 0;
|
||||
background: none repeat scroll 0 0 transparent;
|
||||
cursor: inherit;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.btn-file ::-ms-browse {
|
||||
font-size: 10000px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.file-caption .file-caption-name {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-shadow: none;
|
||||
border: none;
|
||||
background: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.file-caption.icon-visible .file-caption-icon {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.file-caption.icon-visible .file-caption-name {
|
||||
padding-left: 15px;
|
||||
}
|
||||
|
||||
.file-caption-icon {
|
||||
line-height: 1;
|
||||
left: 8px;
|
||||
}
|
||||
|
||||
.file-error-message {
|
||||
color: #a94442;
|
||||
background-color: #f2dede;
|
||||
margin: 5px;
|
||||
border: 1px solid #ebccd1;
|
||||
border-radius: 4px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.file-error-message pre {
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
.file-caption-disabled {
|
||||
background-color: #eee;
|
||||
cursor: not-allowed;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.file-preview {
|
||||
border-radius: 5px;
|
||||
border: 1px solid #ddd;
|
||||
padding: 8px;
|
||||
width: 100%;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.file-preview .btn-xs {
|
||||
padding: 1px 5px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.file-preview .fileinput-remove {
|
||||
top: 1px;
|
||||
right: 1px;
|
||||
line-height: 10px;
|
||||
}
|
||||
|
||||
.file-preview .clickable {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.file-preview-image {
|
||||
font: 40px Impact, Charcoal, sans-serif;
|
||||
color: #008000;
|
||||
}
|
||||
|
||||
.krajee-default.file-preview-frame {
|
||||
margin: 8px;
|
||||
border: 1px solid #ddd;
|
||||
box-shadow: 1px 1px 5px 0 #a2958a;
|
||||
padding: 6px;
|
||||
float: left;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.krajee-default.file-preview-frame .kv-file-content {
|
||||
width: 213px;
|
||||
height: 160px;
|
||||
}
|
||||
|
||||
.krajee-default.file-preview-frame .file-thumbnail-footer {
|
||||
height: 70px;
|
||||
}
|
||||
|
||||
.krajee-default.file-preview-frame:not(.file-preview-error):hover {
|
||||
box-shadow: 3px 3px 5px 0 #333;
|
||||
}
|
||||
|
||||
.krajee-default .file-preview-text {
|
||||
display: block;
|
||||
color: #428bca;
|
||||
border: 1px solid #ddd;
|
||||
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
outline: none;
|
||||
padding: 8px;
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.krajee-default .file-preview-html {
|
||||
border: 1px solid #ddd;
|
||||
padding: 8px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.krajee-default .file-other-icon {
|
||||
font-size: 6em;
|
||||
}
|
||||
|
||||
.krajee-default .file-footer-buttons {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.krajee-default .file-footer-caption {
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding-top: 4px;
|
||||
font-size: 11px;
|
||||
color: #777;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.krajee-default .file-preview-error {
|
||||
opacity: 0.65;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.krajee-default .file-thumb-progress {
|
||||
height: 11px;
|
||||
top: 37px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.krajee-default.kvsortable-ghost {
|
||||
background: #e1edf7;
|
||||
border: 2px solid #a1abff;
|
||||
}
|
||||
|
||||
.krajee-default .file-preview-other:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.krajee-default .file-preview-frame:not(.file-preview-error) .file-footer-caption:hover {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.kv-upload-progress .progress {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
margin: 10px 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.kv-upload-progress .progress-bar {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
/*noinspection CssOverwrittenProperties*/
|
||||
.file-zoom-dialog .file-other-icon {
|
||||
font-size: 22em;
|
||||
font-size: 50vmin;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .modal-dialog {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .modal-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .btn-navigate {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background: transparent;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
opacity: 0.7;
|
||||
top: 45%;
|
||||
font-size: 4em;
|
||||
color: #1c94c4;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .btn-navigate:not([disabled]):hover {
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .floating-buttons {
|
||||
top: 5px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .btn-navigate[disabled] {
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .btn-prev {
|
||||
left: 1px;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .btn-next {
|
||||
right: 1px;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .kv-zoom-title {
|
||||
font-weight: 300;
|
||||
color: #999;
|
||||
max-width: 50%;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.file-input-new .no-browse .form-control {
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
|
||||
.file-input-ajax-new .no-browse .form-control {
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
|
||||
.file-caption-main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.file-thumb-loading {
|
||||
background: transparent url(../img/loading.gif) no-repeat scroll center center content-box !important;
|
||||
}
|
||||
|
||||
.file-drop-zone {
|
||||
border: 1px dashed #aaa;
|
||||
border-radius: 4px;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
margin: 12px 15px 12px 12px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.file-drop-zone.clickable:hover {
|
||||
border: 2px dashed #999;
|
||||
}
|
||||
|
||||
.file-drop-zone.clickable:focus {
|
||||
border: 2px solid #5acde2;
|
||||
}
|
||||
|
||||
.file-drop-zone .file-preview-thumbnails {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.file-drop-zone-title {
|
||||
color: #aaa;
|
||||
font-size: 1.6em;
|
||||
padding: 85px 10px;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.file-highlighted {
|
||||
border: 2px dashed #999 !important;
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
.file-uploading {
|
||||
background: url(../img/loading-sm.gif) no-repeat center bottom 10px;
|
||||
opacity: 0.65;
|
||||
}
|
||||
|
||||
@media (min-width: 576px) {
|
||||
.file-zoom-dialog .modal-dialog {
|
||||
max-width: 500px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.file-zoom-dialog .modal-lg {
|
||||
max-width: 800px;
|
||||
}
|
||||
}
|
||||
|
||||
.file-zoom-fullscreen.modal {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.file-zoom-fullscreen .modal-dialog {
|
||||
position: fixed;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.file-zoom-fullscreen .modal-content {
|
||||
border-radius: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.file-zoom-fullscreen .modal-body {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.btn-kv {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
padding: 0;
|
||||
font-size: 90%;
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
|
||||
.floating-buttons {
|
||||
z-index: 3000;
|
||||
}
|
||||
|
||||
.floating-buttons .btn-kv {
|
||||
margin-left: 3px;
|
||||
z-index: 3000;
|
||||
}
|
||||
|
||||
.file-zoom-content {
|
||||
height: 480px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.file-zoom-content .file-preview-image {
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.file-zoom-content .file-preview-video {
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.file-zoom-content .is-portrait-gt4 {
|
||||
margin-top: 60px;
|
||||
}
|
||||
|
||||
.file-zoom-content > .file-object.type-image {
|
||||
height: auto;
|
||||
min-height: inherit;
|
||||
}
|
||||
|
||||
.file-zoom-content > .file-object.type-audio {
|
||||
width: auto;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 767px) {
|
||||
.file-preview-thumbnails {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .modal-header {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 350px) {
|
||||
.krajee-default.file-preview-frame .kv-file-content {
|
||||
width: 160px;
|
||||
}
|
||||
}
|
||||
|
||||
.file-loading[dir=rtl]:before {
|
||||
background: transparent url(../img/loading.gif) top right no-repeat;
|
||||
padding-left: 0;
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
.file-sortable .file-drag-handle {
|
||||
cursor: move;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.file-sortable .file-drag-handle:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.clickable .file-drop-zone-title {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.kv-zoom-actions .btn-kv {
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
.file-preview-initial.sortable-chosen {
|
||||
background-color: #d9edf7;
|
||||
}
|
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/css/fileinput.min.css
vendored
Normal file
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/css/fileinput.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
After ![]() (image error) Size: 2.6 KiB |
Binary file not shown.
After ![]() (image error) Size: 847 B |
4312
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/fileinput.js
Normal file
4312
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/fileinput.js
Normal file
File diff suppressed because it is too large
Load Diff
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/fileinput.min.js
vendored
Normal file
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/fileinput.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput <_LANG_> Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['_LANG_'] = {
|
||||
fileSingle: 'file',
|
||||
filePlural: 'files',
|
||||
browseLabel: 'Browse …',
|
||||
removeLabel: 'Remove',
|
||||
removeTitle: 'Clear selected files',
|
||||
cancelLabel: 'Cancel',
|
||||
cancelTitle: 'Abort ongoing upload',
|
||||
uploadLabel: 'Upload',
|
||||
uploadTitle: 'Upload selected files',
|
||||
msgNo: 'No',
|
||||
msgNoFilesSelected: 'No files selected',
|
||||
msgCancelled: 'Cancelled',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Detailed Preview',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'File "{name}" (<b>{size} KB</b>) exceeds maximum allowed upload size of <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'You must select at least <b>{n}</b> {files} to upload.',
|
||||
msgFilesTooMany: 'Number of files selected for upload <b>({n})</b> exceeds maximum allowed limit of <b>{m}</b>.',
|
||||
msgFileNotFound: 'File "{name}" not found!',
|
||||
msgFileSecured: 'Security restrictions prevent reading the file "{name}".',
|
||||
msgFileNotReadable: 'File "{name}" is not readable.',
|
||||
msgFilePreviewAborted: 'File preview aborted for "{name}".',
|
||||
msgFilePreviewError: 'An error occurred while reading the file "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Invalid type for file "{name}". Only "{types}" files are supported.',
|
||||
msgInvalidFileExtension: 'Invalid extension for file "{name}". Only "{extensions}" files are supported.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'The file upload was aborted',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Validation Error',
|
||||
msgLoading: 'Loading file {index} of {files} …',
|
||||
msgProgress: 'Loading file {index} of {files} - {name} - {percent}% completed.',
|
||||
msgSelected: '{n} {files} selected',
|
||||
msgFoldersNotAllowed: 'Drag & drop files only! Skipped {n} dropped folder(s).',
|
||||
msgImageWidthSmall: 'Width of image file "{name}" must be at least {size} px.',
|
||||
msgImageHeightSmall: 'Height of image file "{name}" must be at least {size} px.',
|
||||
msgImageWidthLarge: 'Width of image file "{name}" cannot exceed {size} px.',
|
||||
msgImageHeightLarge: 'Height of image file "{name}" cannot exceed {size} px.',
|
||||
msgImageResizeError: 'Could not get the image dimensions to resize.',
|
||||
msgImageResizeException: 'Error while resizing the image.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Drag & drop files here …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Remove file',
|
||||
uploadTitle: 'Upload file',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'View details',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'Not uploaded yet',
|
||||
indicatorSuccessTitle: 'Uploaded',
|
||||
indicatorErrorTitle: 'Upload Error',
|
||||
indicatorLoadingTitle: 'Uploading ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,101 @@
|
||||
/*!
|
||||
* FileInput Arabic Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author Yasser Lotfy <y_l@live.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['ar'] = {
|
||||
fileSingle: 'ملف',
|
||||
filePlural: 'ملفات',
|
||||
browseLabel: 'تصفح …',
|
||||
removeLabel: 'إزالة',
|
||||
removeTitle: 'إزالة الملفات المختارة',
|
||||
cancelLabel: 'إلغاء',
|
||||
cancelTitle: 'إنهاء الرفع الحالي',
|
||||
uploadLabel: 'رفع',
|
||||
uploadTitle: 'رفع الملفات المختارة',
|
||||
msgNo: 'لا',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'ألغيت',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'معاينة تفصيلية',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'الملف "{name}" (<b>{size} ك.ب</b>) تعدى الحد الأقصى المسموح للرفع <b>{maxSize} ك.ب</b>.',
|
||||
msgFilesTooLess: 'يجب عليك اختيار <b>{n}</b> {files} على الأقل للرفع.',
|
||||
msgFilesTooMany: 'عدد الملفات المختارة للرفع <b>({n})</b> تعدت الحد الأقصى المسموح به لعدد <b>{m}</b>.',
|
||||
msgFileNotFound: 'الملف "{name}" غير موجود!',
|
||||
msgFileSecured: 'قيود أمنية تمنع قراءة الملف "{name}".',
|
||||
msgFileNotReadable: 'الملف "{name}" غير قابل للقراءة.',
|
||||
msgFilePreviewAborted: 'تم إلغاء معاينة الملف "{name}".',
|
||||
msgFilePreviewError: 'حدث خطأ أثناء قراءة الملف "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'نوعية غير صالحة للملف "{name}". فقط هذه النوعيات مدعومة "{types}".',
|
||||
msgInvalidFileExtension: 'امتداد غير صالح للملف "{name}". فقط هذه الملفات مدعومة "{extensions}".',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'تم إلغاء رفع الملف',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'خطأ التحقق من صحة',
|
||||
msgLoading: 'تحميل ملف {index} من {files} …',
|
||||
msgProgress: 'تحميل ملف {index} من {files} - {name} - {percent}% منتهي.',
|
||||
msgSelected: '{n} {files} مختار(ة)',
|
||||
msgFoldersNotAllowed: 'اسحب وأفلت الملفات فقط! تم تخطي {n} مجلد(ات).',
|
||||
msgImageWidthSmall: 'عرض ملف الصورة "{name}" يجب أن يكون على الأقل {size} px.',
|
||||
msgImageHeightSmall: 'طول ملف الصورة "{name}" يجب أن يكون على الأقل {size} px.',
|
||||
msgImageWidthLarge: 'عرض ملف الصورة "{name}" لا يمكن أن يتعدى {size} px.',
|
||||
msgImageHeightLarge: 'طول ملف الصورة "{name}" لا يمكن أن يتعدى {size} px.',
|
||||
msgImageResizeError: 'لم يتمكن من معرفة أبعاد الصورة لتغييرها.',
|
||||
msgImageResizeException: 'حدث خطأ أثناء تغيير أبعاد الصورة.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'اسحب وأفلت الملفات هنا …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'إزالة الملف',
|
||||
uploadTitle: 'رفع الملف',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'مشاهدة التفاصيل',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'لم يتم الرفع بعد',
|
||||
indicatorSuccessTitle: 'تم الرفع',
|
||||
indicatorErrorTitle: 'خطأ بالرفع',
|
||||
indicatorLoadingTitle: 'جارٍ الرفع ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,101 @@
|
||||
/*!
|
||||
* FileInput Azerbaijan Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author Elbrus <elbrusnt@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['az'] = {
|
||||
fileSingle: 'fayl',
|
||||
filePlural: 'fayl',
|
||||
browseLabel: 'Seç …',
|
||||
removeLabel: 'Sil',
|
||||
removeTitle: 'Seçilmiş faylları təmizlə',
|
||||
cancelLabel: 'İmtina et',
|
||||
cancelTitle: 'Cari yükləməni dayandır',
|
||||
uploadLabel: 'Yüklə',
|
||||
uploadTitle: 'Seçilmiş faylları yüklə',
|
||||
msgNo: 'xeyir',
|
||||
msgNoFilesSelected: 'Heç bir fayl seçilməmişdir',
|
||||
msgCancelled: 'İmtina edildi',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'İlkin baxış',
|
||||
msgFileRequired: 'Yükləmə üçün fayl seçməlisiniz.',
|
||||
msgSizeTooSmall: 'Seçdiyiniz "{name}" faylının həcmi (<b>{size} KB</b>)-dır, minimum <b>{minSize} KB</b> olmalıdır.',
|
||||
msgSizeTooLarge: 'Seçdiyiniz "{name}" faylının həcmi (<b>{size} KB</b>)-dır, maksimum <b>{maxSize} KB</b> olmalıdır.',
|
||||
msgFilesTooLess: 'Yükləmə üçün minimum <b>{n}</b> {files} seçməlisiniz.',
|
||||
msgFilesTooMany: 'Seçilmiş fayl sayı <b>({n})</b>. Maksimum <b>{m}</b> fayl seçmək mümkündür.',
|
||||
msgFileNotFound: 'Fayl "{name}" tapılmadı!',
|
||||
msgFileSecured: '"{name}" faylının istifadəsinə yetginiz yoxdur.',
|
||||
msgFileNotReadable: '"{name}" faylının istifadəsi mümkün deyil.',
|
||||
msgFilePreviewAborted: '"{name}" faylı üçün ilkin baxış ləğv olunub.',
|
||||
msgFilePreviewError: '"{name}" faylının oxunması mümkün olmadı.',
|
||||
msgInvalidFileName: '"{name}" faylının adında qadağan olunmuş simvollardan istifadə olunmuşdur.',
|
||||
msgInvalidFileType: '"{name}" faylının tipi dəstəklənmir. Yalnız "{types}" tipli faylları yükləmək mümkündür.',
|
||||
msgInvalidFileExtension: '"{name}" faylının genişlənməsi yanlışdır. Yalnız "{extensions}" fayl genişlənmə(si / ləri) qəbul olunur.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Yükləmə dayandırılmışdır',
|
||||
msgUploadThreshold: 'Yükləmə...',
|
||||
msgUploadBegin: 'Yoxlama...',
|
||||
msgUploadEnd: 'Fayl(lar) yükləndi',
|
||||
msgUploadEmpty: 'Yükləmə üçün verilmiş məlumatlar yanlışdır',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Yoxlama nəticəsi səhvir',
|
||||
msgLoading: '{files} fayldan {index} yüklənir …',
|
||||
msgProgress: '{files} fayldan {index} - {name} - {percent}% yükləndi.',
|
||||
msgSelected: 'Faylların sayı: {n}',
|
||||
msgFoldersNotAllowed: 'Ancaq faylların daşınmasına icazə verilir! {n} qovluq yüklənmədi.',
|
||||
msgImageWidthSmall: '{name} faylının eni {size} px -dən kiçik olmamalıdır.',
|
||||
msgImageHeightSmall: '{name} faylının hündürlüyü {size} px -dən kiçik olmamalıdır.',
|
||||
msgImageWidthLarge: '"{name}" faylının eni {size} px -dən böyük olmamalıdır.',
|
||||
msgImageHeightLarge: '"{name}" faylının hündürlüyü {size} px -dən böyük olmamalıdır.',
|
||||
msgImageResizeError: 'Faylın ölçülərini dəyişmək üçün ölçüləri hesablamaq mümkün olmadı.',
|
||||
msgImageResizeException: 'Faylın ölçülərini dəyişmək mümkün olmadı.<pre>{errors}</pre>',
|
||||
msgAjaxError: '{operation} əməliyyatı zamanı səhv baş verdi. Təkrar yoxlayın!',
|
||||
msgAjaxProgressError: '{operation} əməliyyatı yerinə yetirmək mümkün olmadı.',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'faylı sil',
|
||||
uploadThumb: 'faylı yüklə',
|
||||
uploadBatch: 'bir neçə faylı yüklə',
|
||||
uploadExtra: 'məlumatların yüklənməsi'
|
||||
},
|
||||
dropZoneTitle: 'Faylları bura daşıyın …',
|
||||
dropZoneClickTitle: '<br>(Və ya seçin {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Faylı sil',
|
||||
uploadTitle: 'Faylı yüklə',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'məlumatlara bax',
|
||||
dragTitle: 'Yerini dəyiş və ya sırala',
|
||||
indicatorNewTitle: 'Davam edir',
|
||||
indicatorSuccessTitle: 'Tamamlandı',
|
||||
indicatorErrorTitle: 'Yükləmə xətası',
|
||||
indicatorLoadingTitle: 'Yükləmə ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Əvvəlki fayla bax',
|
||||
next: 'Növbəti fayla bax',
|
||||
toggleheader: 'Başlığı dəyiş',
|
||||
fullscreen: 'Tam ekranı dəyiş',
|
||||
borderless: 'Bölmələrsiz rejimi dəyiş',
|
||||
close: 'Ətraflı baxışı bağla'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Bulgarian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['bg'] = {
|
||||
fileSingle: 'файл',
|
||||
filePlural: 'файла',
|
||||
browseLabel: 'Избери …',
|
||||
removeLabel: 'Премахни',
|
||||
removeTitle: 'Изчисти избраните',
|
||||
cancelLabel: 'Откажи',
|
||||
cancelTitle: 'Откажи качването',
|
||||
uploadLabel: 'Качи',
|
||||
uploadTitle: 'Качи избраните файлове',
|
||||
msgNo: 'Не',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'Отменен',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Детайлен преглед',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Файла "{name}" (<b>{size} KB</b>) надвишава максималните разрешени <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Трябва да изберете поне <b>{n}</b> {files} файла.',
|
||||
msgFilesTooMany: 'Броя файлове избрани за качване <b>({n})</b> надвишава ограниченито от максимум <b>{m}</b>.',
|
||||
msgFileNotFound: 'Файлът "{name}" не може да бъде намерен!',
|
||||
msgFileSecured: 'От съображения за сигурност не може да прочетем файла "{name}".',
|
||||
msgFileNotReadable: 'Файлът "{name}" не е четим.',
|
||||
msgFilePreviewAborted: 'Прегледа на файла е прекратен за "{name}".',
|
||||
msgFilePreviewError: 'Грешка при опит за четене на файла "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Невалиден тип на файла "{name}". Разрешени са само "{types}".',
|
||||
msgInvalidFileExtension: 'Невалидно разрешение на "{name}". Разрешени са само "{extensions}".',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Качите файла, бе прекратена',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'утвърждаване грешка',
|
||||
msgLoading: 'Зареждане на файл {index} от общо {files} …',
|
||||
msgProgress: 'Зареждане на файл {index} от общо {files} - {name} - {percent}% завършени.',
|
||||
msgSelected: '{n} {files} избрани',
|
||||
msgFoldersNotAllowed: 'Само пуснати файлове! Пропуснати {n} пуснати папки.',
|
||||
msgImageWidthSmall: 'Широчината на изображението "{name}" трябва да е поне {size} px.',
|
||||
msgImageHeightSmall: 'Височината на изображението "{name}" трябва да е поне {size} px.',
|
||||
msgImageWidthLarge: 'Широчината на изображението "{name}" не може да е по-голяма от {size} px.',
|
||||
msgImageHeightLarge: 'Височината на изображението "{name}" нее може да е по-голяма от {size} px.',
|
||||
msgImageResizeError: 'Не може да размерите на изображението, за да промените размера.',
|
||||
msgImageResizeException: 'Грешка при промяна на размера на изображението.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Пуснете файловете тук …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Махни файл',
|
||||
uploadTitle: 'Качване на файл',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Вижте детайли',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'Все още не е качил',
|
||||
indicatorSuccessTitle: 'Качено',
|
||||
indicatorErrorTitle: 'Качи Error',
|
||||
indicatorLoadingTitle: 'Качва се ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Català Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['ca'] = {
|
||||
fileSingle: 'arxiu',
|
||||
filePlural: 'arxius',
|
||||
browseLabel: 'Examinar …',
|
||||
removeLabel: 'Treure',
|
||||
removeTitle: 'Treure arxius seleccionats',
|
||||
cancelLabel: 'Cancel',
|
||||
cancelTitle: 'Avortar la pujada en curs',
|
||||
uploadLabel: 'Pujar arxiu',
|
||||
uploadTitle: 'Pujar arxius seleccionats',
|
||||
msgNo: 'No',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'cancel·lat',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Vista prèvia detallada',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Arxiu "{name}" (<b>{size} KB</b>) excedeix la mida màxima permès de <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Heu de seleccionar almenys <b>{n}</b> {files} a carregar.',
|
||||
msgFilesTooMany: 'El nombre d\'arxius seleccionats a carregar <b>({n})</b> excedeix el límit màxim permès de <b>{m}</b>.',
|
||||
msgFileNotFound: 'Arxiu "{name}" no trobat.',
|
||||
msgFileSecured: 'No es pot accedir a l\'arxiu "{name}" perquè estarà sent usat per una altra aplicació o no tinguem permisos de lectura.',
|
||||
msgFileNotReadable: 'No es pot accedir a l\'arxiu "{name}".',
|
||||
msgFilePreviewAborted: 'Previsualització de l\'arxiu "{name}" cancel·lada.',
|
||||
msgFilePreviewError: 'S\'ha produït un error mentre es llegia el fitxer "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Tipus de fitxer no vàlid per a "{name}". Només arxius "{types}" són permesos.',
|
||||
msgInvalidFileExtension: 'Extensió de fitxer no vàlid per a "{name}". Només arxius "{extensions}" són permesos.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'La càrrega d\'arxius s\'ha cancel·lat',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Error de validació',
|
||||
msgLoading: 'Pujant fitxer {index} de {files} …',
|
||||
msgProgress: 'Pujant fitxer {index} de {files} - {name} - {percent}% completat.',
|
||||
msgSelected: '{n} {files} seleccionat(s)',
|
||||
msgFoldersNotAllowed: 'Arrossegueu i deixeu anar únicament arxius. Omesa(es) {n} carpeta(es).',
|
||||
msgImageWidthSmall: 'L\'ample de la imatge "{name}" ha de ser almenys {size} px.',
|
||||
msgImageHeightSmall: 'L\'alçada de la imatge "{name}" ha de ser almenys {size} px.',
|
||||
msgImageWidthLarge: 'L\'ample de la imatge "{name}" no pot excedir de {size} px.',
|
||||
msgImageHeightLarge: 'L\'alçada de la imatge "{name}" no pot excedir de {size} px.',
|
||||
msgImageResizeError: 'No s\'ha pogut obtenir les dimensions d\'imatge per canviar la mida.',
|
||||
msgImageResizeException: 'Error en canviar la mida de la imatge.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Arrossegueu i deixeu anar aquí els arxius …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Eliminar arxiu',
|
||||
uploadTitle: 'Pujar arxiu',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Veure detalls',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'No pujat encara',
|
||||
indicatorSuccessTitle: 'Subido',
|
||||
indicatorErrorTitle: 'Pujar Error',
|
||||
indicatorLoadingTitle: 'Pujant ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,101 @@
|
||||
/*!
|
||||
* FileInput Croatian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author Milos Stojanovic <stojanovic.loshmi@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['cr'] = {
|
||||
fileSingle: 'datoteka',
|
||||
filePlural: 'datoteke',
|
||||
browseLabel: 'Izaberi …',
|
||||
removeLabel: 'Ukloni',
|
||||
removeTitle: 'Ukloni označene datoteke',
|
||||
cancelLabel: 'Odustani',
|
||||
cancelTitle: 'Prekini trenutno otpremanje',
|
||||
uploadLabel: 'Otpremi',
|
||||
uploadTitle: 'Otpremi označene datoteke',
|
||||
msgNo: 'Ne',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'Otkazan',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Detaljni pregled',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Datoteka "{name}" (<b>{size} KB</b>) prekoračuje maksimalnu dozvoljenu veličinu datoteke od <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Morate odabrati najmanje <b>{n}</b> {files} za otpremanje.',
|
||||
msgFilesTooMany: 'Broj datoteka označenih za otpremanje <b>({n})</b> prekoračuje maksimalni dozvoljeni limit od <b>{m}</b>.',
|
||||
msgFileNotFound: 'Datoteka "{name}" nije pronađena!',
|
||||
msgFileSecured: 'Datoteku "{name}" nije moguće pročitati zbog bezbednosnih ograničenja.',
|
||||
msgFileNotReadable: 'Datoteku "{name}" nije moguće pročitati.',
|
||||
msgFilePreviewAborted: 'Generisanje prikaza nije moguće za "{name}".',
|
||||
msgFilePreviewError: 'Došlo je do greške prilikom čitanja datoteke "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Datoteka "{name}" je pogrešnog formata. Dozvoljeni formati su "{types}".',
|
||||
msgInvalidFileExtension: 'Ekstenzija datoteke "{name}" nije dozvoljena. Dozvoljene ekstenzije su "{extensions}".',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Prijenos datoteka je prekinut',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Provjera pogrešaka',
|
||||
msgLoading: 'Učitavanje datoteke {index} od {files} …',
|
||||
msgProgress: 'Učitavanje datoteke {index} od {files} - {name} - {percent}% završeno.',
|
||||
msgSelected: '{n} {files} je označeno',
|
||||
msgFoldersNotAllowed: 'Moguće je prevlačiti samo datoteke! Preskočeno je {n} fascikla.',
|
||||
msgImageWidthSmall: 'Širina slikovnu datoteku "{name}" moraju biti najmanje {size} px.',
|
||||
msgImageHeightSmall: 'Visina slikovnu datoteku "{name}" moraju biti najmanje {size} px.',
|
||||
msgImageWidthLarge: 'Širina slikovnu datoteku "{name}" ne može prelaziti {size} px.',
|
||||
msgImageHeightLarge: 'Visina slikovnu datoteku "{name}" ne može prelaziti {size} px.',
|
||||
msgImageResizeError: 'Nije mogao dobiti dimenzije slike na veličinu.',
|
||||
msgImageResizeException: 'Greška prilikom promjene veličine slike.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Prevucite datoteke ovde …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Uklonite datoteku',
|
||||
uploadTitle: 'Postavi datoteku',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Pregledavati pojedinosti',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'Još nije učitao',
|
||||
indicatorSuccessTitle: 'Preneseno',
|
||||
indicatorErrorTitle: 'Postavi Greška',
|
||||
indicatorLoadingTitle: 'Prijenos ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Czech Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['cs'] = {
|
||||
fileSingle: 'soubor',
|
||||
filePlural: 'soubory',
|
||||
browseLabel: 'Vybrat …',
|
||||
removeLabel: 'Odstranit',
|
||||
removeTitle: 'Vyčistit vybrané soubory',
|
||||
cancelLabel: 'Storno',
|
||||
cancelTitle: 'Přerušit nahrávání',
|
||||
uploadLabel: 'Nahrát',
|
||||
uploadTitle: 'Nahrát vybrané soubory',
|
||||
msgNo: 'Ne',
|
||||
msgNoFilesSelected: 'Nevybrány žádné soubory',
|
||||
msgCancelled: 'Zrušeno',
|
||||
msgPlaceholder: 'Vybrat {files}...',
|
||||
msgZoomModalHeading: 'Detailní náhled',
|
||||
msgFileRequired: 'Musíte vybrat soubor, který chcete nahrát.',
|
||||
msgSizeTooSmall: 'Soubor "{name}" (<b>{size} KB</b>) je příliš malý, musí mít velikost nejméně <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Soubor "{name}" (<b>{size} KB</b>) je příliš velký, maximální povolená velikost <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Musíte vybrat nejméně <b>{n}</b> {files} souborů.',
|
||||
msgFilesTooMany: 'Počet vybraných souborů <b>({n})</b> překročil maximální povolený limit <b>{m}</b>.',
|
||||
msgFileNotFound: 'Soubor "{name}" nebyl nalezen!',
|
||||
msgFileSecured: 'Zabezpečení souboru znemožnilo číst soubor "{name}".',
|
||||
msgFileNotReadable: 'Soubor "{name}" není čitelný.',
|
||||
msgFilePreviewAborted: 'Náhled souboru byl přerušen pro "{name}".',
|
||||
msgFilePreviewError: 'Nastala chyba při načtení souboru "{name}".',
|
||||
msgInvalidFileName: 'Neplatné nebo nepovolené znaky ve jménu souboru "{name}".',
|
||||
msgInvalidFileType: 'Neplatný typ souboru "{name}". Pouze "{types}" souborů jsou podporovány.',
|
||||
msgInvalidFileExtension: 'Neplatná extenze souboru "{name}". Pouze "{extensions}" souborů jsou podporovány.',
|
||||
msgFileTypes: {
|
||||
'image': 'obrázek',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Nahrávání souboru bylo přerušeno',
|
||||
msgUploadThreshold: 'Zpracovávám...',
|
||||
msgUploadBegin: 'Inicializujem...',
|
||||
msgUploadEnd: 'Hotovo',
|
||||
msgUploadEmpty: 'Pro nahrávání nejsou k dispozici žádné platné údaje.',
|
||||
msgUploadError: 'Chyba',
|
||||
msgValidationError: 'Chyba ověření',
|
||||
msgLoading: 'Nahrávání souboru {index} z {files} …',
|
||||
msgProgress: 'Nahrávání souboru {index} z {files} - {name} - {percent}% dokončeno.',
|
||||
msgSelected: '{n} {files} vybráno',
|
||||
msgFoldersNotAllowed: 'Táhni a pusť pouze soubory! Vynechané {n} pustěné složk(y).',
|
||||
msgImageWidthSmall: 'Šířka obrázku "{name}", musí být alespoň {size} px.',
|
||||
msgImageHeightSmall: 'Výška obrázku "{name}", musí být alespoň {size} px.',
|
||||
msgImageWidthLarge: 'Šířka obrázku "{name}" nesmí být větší než {size} px.',
|
||||
msgImageHeightLarge: 'Výška obrázku "{name}" nesmí být větší než {size} px.',
|
||||
msgImageResizeError: 'Nelze získat rozměry obrázku pro změnu velikosti.',
|
||||
msgImageResizeException: 'Chyba při změně velikosti obrázku.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Došlo k chybě v {operation}. Prosím zkuste to znovu později!',
|
||||
msgAjaxProgressError: '{operation} - neúspěšné',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'odstranit soubor',
|
||||
uploadThumb: 'nahrát soubor',
|
||||
uploadBatch: 'nahrát várku souborů',
|
||||
uploadExtra: 'odesílání dat formuláře'
|
||||
},
|
||||
dropZoneTitle: 'Přetáhni soubory sem …',
|
||||
dropZoneClickTitle: '<br>(nebo klikni sem a vyber je)',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Odstranit soubor',
|
||||
uploadTitle: 'Nahrát soubor',
|
||||
uploadRetryTitle: 'Opakovat nahrávání',
|
||||
downloadTitle: 'Stáhnout soubor',
|
||||
zoomTitle: 'Zobrazit podrobnosti',
|
||||
dragTitle: 'Posunout / Přeskládat',
|
||||
indicatorNewTitle: 'Ještě nenahrál',
|
||||
indicatorSuccessTitle: 'Nahraný',
|
||||
indicatorErrorTitle: 'Chyba nahrávání',
|
||||
indicatorLoadingTitle: 'Nahrávání ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Zobrazit předchozí soubor',
|
||||
next: 'Zobrazit následující soubor',
|
||||
toggleheader: 'Přepnout záhlaví',
|
||||
fullscreen: 'Přepnout celoobrazovkové zobrazení',
|
||||
borderless: 'Přepnout bezrámečkové zobrazení',
|
||||
close: 'Zavřít detailní náhled'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Danish Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['da'] = {
|
||||
fileSingle: 'fil',
|
||||
filePlural: 'filer',
|
||||
browseLabel: 'Browse …',
|
||||
removeLabel: 'Fjern',
|
||||
removeTitle: 'Fjern valgte filer',
|
||||
cancelLabel: 'Fortryd',
|
||||
cancelTitle: 'Afbryd nuværende upload',
|
||||
uploadLabel: 'Upload',
|
||||
uploadTitle: 'Upload valgte filer',
|
||||
msgNo: 'Ingen',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'aflyst',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Detaljeret visning',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Fil "{name}" (<b>{size} KB</b>) er større end de tilladte <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Du skal mindst vælge <b>{n}</b> {files} til upload.',
|
||||
msgFilesTooMany: '<b>({n})</b> filer valgt til upload, men maks. <b>{m}</b> er tilladt.',
|
||||
msgFileNotFound: 'Filen "{name}" blev ikke fundet!',
|
||||
msgFileSecured: 'Sikkerhedsrestriktioner forhindrer læsning af "{name}".',
|
||||
msgFileNotReadable: 'Filen "{name}" kan ikke indlæses.',
|
||||
msgFilePreviewAborted: 'Filpreview annulleret for "{name}".',
|
||||
msgFilePreviewError: 'Der skete en fejl under læsningen af filen "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Ukendt type for filen "{name}". Kun "{types}" kan bruges.',
|
||||
msgInvalidFileExtension: 'Ukendt filtype for filen "{name}". Kun "{extensions}" filer kan bruges.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Filupload annulleret',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Validering Fejl',
|
||||
msgLoading: 'Henter fil {index} af {files} …',
|
||||
msgProgress: 'Henter fil {index} af {files} - {name} - {percent}% færdiggjort.',
|
||||
msgSelected: '{n} {files} valgt',
|
||||
msgFoldersNotAllowed: 'Drag & drop kun filer! {n} mappe(r) sprunget over.',
|
||||
msgImageWidthSmall: 'Bredden af billedet "{name}" skal være på mindst {size} px.',
|
||||
msgImageHeightSmall: 'Højden af billedet "{name}" skal være på mindst {size} px.',
|
||||
msgImageWidthLarge: 'Bredden af billedet "{name}" må ikke være over {size} px.',
|
||||
msgImageHeightLarge: 'Højden af billedet "{name}" må ikke være over {size} px.',
|
||||
msgImageResizeError: 'Kunne ikke få billedets dimensioner for at ændre størrelsen.',
|
||||
msgImageResizeException: 'Fejl ved at ændre størrelsen på billedet.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Drag & drop filer her …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Fjern fil',
|
||||
uploadTitle: 'Upload fil',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Se detaljer',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'Ikke uploadet endnu',
|
||||
indicatorSuccessTitle: 'Uploadet',
|
||||
indicatorErrorTitle: 'Upload fejl',
|
||||
indicatorLoadingTitle: 'Uploader ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,98 @@
|
||||
/*!
|
||||
* FileInput German Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['de'] = {
|
||||
fileSingle: 'Datei',
|
||||
filePlural: 'Dateien',
|
||||
browseLabel: 'Auswählen …',
|
||||
removeLabel: 'Löschen',
|
||||
removeTitle: 'Ausgewählte löschen',
|
||||
cancelLabel: 'Abbrechen',
|
||||
cancelTitle: 'Hochladen abbrechen',
|
||||
uploadLabel: 'Hochladen',
|
||||
uploadTitle: 'Hochladen der ausgewählten Dateien',
|
||||
msgNo: 'Keine',
|
||||
msgNoFilesSelected: 'Keine Dateien ausgewählt',
|
||||
msgCancelled: 'Abgebrochen',
|
||||
msgPlaceholder: '{files} auswählen...',
|
||||
msgZoomModalHeading: 'ausführliche Vorschau',
|
||||
msgFileRequired: 'Sie müssen eine Datei zum Hochladen auswählen.',
|
||||
msgSizeTooSmall: 'Datei "{name}" (<b>{size} KB</b>) unterschreitet mindestens notwendige Upload-Größe von <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Datei "{name}" (<b>{size} KB</b>) überschreitet maximal zulässige Upload-Größe von <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Sie müssen mindestens <b>{n}</b> {files} zum Hochladen auswählen.',
|
||||
msgFilesTooMany: 'Anzahl der zum Hochladen ausgewählten Dateien <b>({n})</b>, überschreitet maximal zulässige Grenze von <b>{m}</b> Stück.',
|
||||
msgFileNotFound: 'Datei "{name}" wurde nicht gefunden!',
|
||||
msgFileSecured: 'Sicherheitseinstellungen verhindern das Lesen der Datei "{name}".',
|
||||
msgFileNotReadable: 'Die Datei "{name}" ist nicht lesbar.',
|
||||
msgFilePreviewAborted: 'Dateivorschau abgebrochen für "{name}".',
|
||||
msgFilePreviewError: 'Beim Lesen der Datei "{name}" ein Fehler aufgetreten.',
|
||||
msgInvalidFileName: 'Ungültige oder nicht unterstützte Zeichen im Dateinamen "{name}".',
|
||||
msgInvalidFileType: 'Ungültiger Typ für Datei "{name}". Nur Dateien der Typen "{types}" werden unterstützt.',
|
||||
msgInvalidFileExtension: 'Ungültige Erweiterung für Datei "{name}". Nur Dateien mit der Endung "{extensions}" werden unterstützt.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Der Datei-Upload wurde abgebrochen',
|
||||
msgUploadThreshold: 'Wird bearbeitet ...',
|
||||
msgUploadBegin: 'Wird initialisiert ...',
|
||||
msgUploadEnd: 'Erledigt',
|
||||
msgUploadEmpty: 'Keine gültigen Daten zum Hochladen verfügbar.',
|
||||
msgUploadError: 'Fehler',
|
||||
msgValidationError: 'Validierungsfehler',
|
||||
msgLoading: 'Lade Datei {index} von {files} hoch…',
|
||||
msgProgress: 'Datei {index} von {files} - {name} - zu {percent}% fertiggestellt.',
|
||||
msgSelected: '{n} {files} ausgewählt',
|
||||
msgFoldersNotAllowed: 'Drag & Drop funktioniert nur bei Dateien! {n} Ordner übersprungen.',
|
||||
msgImageWidthSmall: 'Breite der Bilddatei "{name}" muss mindestens {size} px betragen.',
|
||||
msgImageHeightSmall: 'Höhe der Bilddatei "{name}" muss mindestens {size} px betragen.',
|
||||
msgImageWidthLarge: 'Breite der Bilddatei "{name}" nicht überschreiten {size} px.',
|
||||
msgImageHeightLarge: 'Höhe der Bilddatei "{name}" nicht überschreiten {size} px.',
|
||||
msgImageResizeError: 'Konnte nicht die Bildabmessungen zu ändern.',
|
||||
msgImageResizeException: 'Fehler beim Ändern der Größe des Bildes.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Bei der Aktion {operation} ist ein Fehler aufgetreten. Bitte versuche es später noch einmal!',
|
||||
msgAjaxProgressError: '{operation} fehlgeschlagen',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'Datei löschen',
|
||||
uploadThumb: 'Datei hochladen',
|
||||
uploadBatch: 'Batch-Datei-Upload',
|
||||
uploadExtra: 'Formular-Datei-Upload'
|
||||
},
|
||||
dropZoneTitle: 'Dateien hierher ziehen …',
|
||||
dropZoneClickTitle: '<br>(oder klicken um {files} auszuwählen)',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Datei entfernen',
|
||||
uploadTitle: 'Datei hochladen',
|
||||
uploadRetryTitle: 'Upload erneut versuchen',
|
||||
downloadTitle: 'Datei herunterladen',
|
||||
zoomTitle: 'Details anzeigen',
|
||||
dragTitle: 'Verschieben / Neuordnen',
|
||||
indicatorNewTitle: 'Noch nicht hochgeladen',
|
||||
indicatorSuccessTitle: 'Hochgeladen',
|
||||
indicatorErrorTitle: 'Upload Fehler',
|
||||
indicatorLoadingTitle: 'Hochladen ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Vorherige Datei anzeigen',
|
||||
next: 'Nächste Datei anzeigen',
|
||||
toggleheader: 'Header umschalten',
|
||||
fullscreen: 'Vollbildmodus umschalten',
|
||||
borderless: 'Randlosen Modus umschalten',
|
||||
close: 'Detailansicht schließen'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Greek Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['el'] = {
|
||||
fileSingle: 'αρχείο',
|
||||
filePlural: 'αρχεία',
|
||||
browseLabel: 'Αναζήτηση …',
|
||||
removeLabel: 'Διαγραφή',
|
||||
removeTitle: 'Εκκαθάριση αρχείων',
|
||||
cancelLabel: 'Ακύρωση',
|
||||
cancelTitle: 'Ακύρωση μεταφόρτωσης',
|
||||
uploadLabel: 'Μεταφόρτωση',
|
||||
uploadTitle: 'Μεταφόρτωση επιλεγμένων αρχείων',
|
||||
msgNo: 'Όχι',
|
||||
msgNoFilesSelected: 'Δεν επιλέχθηκαν αρχεία',
|
||||
msgCancelled: 'Ακυρώθηκε',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Λεπτομερής Προεπισκόπηση',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'Το "{name}" (<b>{size} KB</b>) είναι πολύ μικρό, πρέπει να είναι μεγαλύτερο από <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Το αρχείο "{name}" (<b>{size} KB</b>) υπερβαίνει το μέγιστο επιτρεπόμενο μέγεθος μεταφόρτωσης <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Πρέπει να επιλέξετε τουλάχιστον <b>{n}</b> {files} για να ξεκινήσει η μεταφόρτωση.',
|
||||
msgFilesTooMany: 'Ο αριθμός των αρχείων που έχουν επιλεγεί για μεταφόρτωση <b>({n})</b> υπερβαίνει το μέγιστο επιτρεπόμενο αριθμό <b>{m}</b>.',
|
||||
msgFileNotFound: 'Το αρχείο "{name}" δεν βρέθηκε!',
|
||||
msgFileSecured: 'Περιορισμοί ασφαλείας εμπόδισαν την ανάγνωση του αρχείου "{name}".',
|
||||
msgFileNotReadable: 'Το αρχείο "{name}" δεν είναι αναγνώσιμο.',
|
||||
msgFilePreviewAborted: 'Η προεπισκόπηση του αρχείου "{name}" ακυρώθηκε.',
|
||||
msgFilePreviewError: 'Παρουσιάστηκε σφάλμα κατά την ανάγνωση του αρχείου "{name}".',
|
||||
msgInvalidFileName: 'Μη έγκυροι χαρακτήρες στο όνομα του αρχείου "{name}".',
|
||||
msgInvalidFileType: 'Μη έγκυρος ο τύπος του αρχείου "{name}". Οι τύποι αρχείων που υποστηρίζονται είναι : "{types}".',
|
||||
msgInvalidFileExtension: 'Μη έγκυρη η επέκταση του αρχείου "{name}". Οι επεκτάσεις που υποστηρίζονται είναι : "{extensions}".',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Η μεταφόρτωση του αρχείου ματαιώθηκε',
|
||||
msgUploadThreshold: 'Μεταφόρτωση ...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Σφάλμα Επικύρωσης',
|
||||
msgLoading: 'Φόρτωση αρχείου {index} από {files} …',
|
||||
msgProgress: 'Φόρτωση αρχείου {index} απο {files} - {name} - {percent}% ολοκληρώθηκε.',
|
||||
msgSelected: '{n} {files} επιλέχθηκαν',
|
||||
msgFoldersNotAllowed: 'Μπορείτε να σύρετε μόνο αρχεία! Παραβλέφθηκαν {n} φάκελος(οι).',
|
||||
msgImageWidthSmall: 'Το πλάτος του αρχείου εικόνας "{name}" πρέπει να είναι τουλάχιστον {size} px.',
|
||||
msgImageHeightSmall: 'Το ύψος του αρχείου εικόνας "{name}" πρέπει να είναι τουλάχιστον {size} px.',
|
||||
msgImageWidthLarge: 'Το πλάτος του αρχείου εικόνας "{name}" δεν μπορεί να υπερβαίνει το {size} px.',
|
||||
msgImageHeightLarge: 'Το ύψος του αρχείου εικόνας "{name}" δεν μπορεί να υπερβαίνει το {size} px.',
|
||||
msgImageResizeError: 'Δεν μπορούν να βρεθούν οι διαστάσεις της εικόνας για να αλλάγή μεγέθους.',
|
||||
msgImageResizeException: 'Σφάλμα κατά την αλλαγή μεγέθους της εικόνας. <pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Σύρετε τα αρχεία εδώ …',
|
||||
dropZoneClickTitle: '<br>(ή πατήστε για επιλογή {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Αφαιρέστε το αρχείο',
|
||||
uploadTitle: 'Μεταφορτώστε το αρχείο',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Δείτε λεπτομέρειες',
|
||||
dragTitle: 'Μετακίνηση/Προσπαρμογή',
|
||||
indicatorNewTitle: 'Δεν μεταφορτώθηκε ακόμα',
|
||||
indicatorSuccessTitle: 'Μεταφορτώθηκε',
|
||||
indicatorErrorTitle: 'Σφάλμα Μεταφόρτωσης',
|
||||
indicatorLoadingTitle: 'Μεταφόρτωση ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Προηγούμενο αρχείο',
|
||||
next: 'Επόμενο αρχείο',
|
||||
toggleheader: 'Εμφάνιση/Απόκρυψη τίτλου',
|
||||
fullscreen: 'Εναλλαγή πλήρους οθόνης',
|
||||
borderless: 'Με ή χωρίς πλαίσιο',
|
||||
close: 'Κλείσιμο προβολής'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Spanish Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['es'] = {
|
||||
fileSingle: 'archivo',
|
||||
filePlural: 'archivos',
|
||||
browseLabel: 'Examinar …',
|
||||
removeLabel: 'Quitar',
|
||||
removeTitle: 'Quitar archivos seleccionados',
|
||||
cancelLabel: 'Cancelar',
|
||||
cancelTitle: 'Abortar la subida en curso',
|
||||
uploadLabel: 'Subir archivo',
|
||||
uploadTitle: 'Subir archivos seleccionados',
|
||||
msgNo: 'No',
|
||||
msgNoFilesSelected: 'No hay archivos seleccionados',
|
||||
msgCancelled: 'Cancelado',
|
||||
msgPlaceholder: 'Seleccionar {files}...',
|
||||
msgZoomModalHeading: 'Vista previa detallada',
|
||||
msgFileRequired: 'Debes seleccionar un archivo para subir.',
|
||||
msgSizeTooSmall: 'El archivo "{name}" (<b>{size} KB</b>) es demasiado pequeño y debe ser mayor de <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'El archivo "{name}" (<b>{size} KB</b>) excede el tamaño máximo permitido de <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Debe seleccionar al menos <b>{n}</b> {files} a cargar.',
|
||||
msgFilesTooMany: 'El número de archivos seleccionados a cargar <b>({n})</b> excede el límite máximo permitido de <b>{m}</b>.',
|
||||
msgFileNotFound: 'Archivo "{name}" no encontrado.',
|
||||
msgFileSecured: 'No es posible acceder al archivo "{name}" porque está siendo usado por otra aplicación o no tiene permisos de lectura.',
|
||||
msgFileNotReadable: 'No es posible acceder al archivo "{name}".',
|
||||
msgFilePreviewAborted: 'Previsualización del archivo "{name}" cancelada.',
|
||||
msgFilePreviewError: 'Ocurrió un error mientras se leía el archivo "{name}".',
|
||||
msgInvalidFileName: 'Caracteres no válidos o no soportados en el nombre del archivo "{name}".',
|
||||
msgInvalidFileType: 'Tipo de archivo no válido para "{name}". Sólo se permiten archivos de tipo "{types}".',
|
||||
msgInvalidFileExtension: 'Extensión de archivo no válida para "{name}". Sólo se permiten archivos "{extensions}".',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'La carga de archivos se ha cancelado',
|
||||
msgUploadThreshold: 'Procesando...',
|
||||
msgUploadBegin: 'Inicializando...',
|
||||
msgUploadEnd: 'Hecho',
|
||||
msgUploadEmpty: 'No existen datos válidos para el envío.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Error de validación',
|
||||
msgLoading: 'Subiendo archivo {index} de {files} …',
|
||||
msgProgress: 'Subiendo archivo {index} de {files} - {name} - {percent}% completado.',
|
||||
msgSelected: '{n} {files} seleccionado(s)',
|
||||
msgFoldersNotAllowed: 'Arrastre y suelte únicamente archivos. Omitida(s) {n} carpeta(s).',
|
||||
msgImageWidthSmall: 'El ancho de la imagen "{name}" debe ser de al menos {size} px.',
|
||||
msgImageHeightSmall: 'La altura de la imagen "{name}" debe ser de al menos {size} px.',
|
||||
msgImageWidthLarge: 'El ancho de la imagen "{name}" no puede exceder de {size} px.',
|
||||
msgImageHeightLarge: 'La altura de la imagen "{name}" no puede exceder de {size} px.',
|
||||
msgImageResizeError: 'No se pudieron obtener las dimensiones de la imagen para cambiar el tamaño.',
|
||||
msgImageResizeException: 'Error al cambiar el tamaño de la imagen.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Algo ha ido mal con la operación {operation}. Por favor, inténtelo de nuevo mas tarde.',
|
||||
msgAjaxProgressError: 'La operación {operation} ha fallado',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'Archivo borrado',
|
||||
uploadThumb: 'Archivo subido',
|
||||
uploadBatch: 'Datos subidos en lote',
|
||||
uploadExtra: 'Datos del formulario subidos '
|
||||
},
|
||||
dropZoneTitle: 'Arrastre y suelte aquí los archivos …',
|
||||
dropZoneClickTitle: '<br>(o haga clic para seleccionar {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Eliminar archivo',
|
||||
uploadTitle: 'Subir archivo',
|
||||
uploadRetryTitle: 'Reintentar subir',
|
||||
downloadTitle: 'Descargar archivo',
|
||||
zoomTitle: 'Ver detalles',
|
||||
dragTitle: 'Mover / Reordenar',
|
||||
indicatorNewTitle: 'No subido todavía',
|
||||
indicatorSuccessTitle: 'Subido',
|
||||
indicatorErrorTitle: 'Error al subir',
|
||||
indicatorLoadingTitle: 'Subiendo...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Anterior',
|
||||
next: 'Siguiente',
|
||||
toggleheader: 'Mostrar encabezado',
|
||||
fullscreen: 'Pantalla completa',
|
||||
borderless: 'Modo sin bordes',
|
||||
close: 'Cerrar vista detallada'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,99 @@
|
||||
/*!
|
||||
* FileInput Estonian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['et'] = {
|
||||
fileSingle: 'fail',
|
||||
filePlural: 'failid',
|
||||
browseLabel: 'Sirvi …',
|
||||
removeLabel: 'Eemalda',
|
||||
removeTitle: 'Clear selected files',
|
||||
cancelLabel: 'Tühista',
|
||||
cancelTitle: 'Abort ongoing upload',
|
||||
uploadLabel: 'Salvesta',
|
||||
uploadTitle: 'Salvesta valitud failid',
|
||||
msgNo: 'No',
|
||||
msgNoFilesSelected: 'No files selected',
|
||||
msgCancelled: 'Cancelled',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Detailed Preview',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Fail "{name}" (<b>{size} KB</b>) ületab lubatu suuruse <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'You must select at least <b>{n}</b> {files} to upload.',
|
||||
msgFilesTooMany: 'Number of files selected for upload <b>({n})</b> exceeds maximum allowed limit of <b>{m}</b>.',
|
||||
msgFileNotFound: 'File "{name}" not found!',
|
||||
msgFileSecured: 'Security restrictions prevent reading the file "{name}".',
|
||||
msgFileNotReadable: 'File "{name}" is not readable.',
|
||||
msgFilePreviewAborted: 'File preview aborted for "{name}".',
|
||||
msgFilePreviewError: 'An error occurred while reading the file "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: '"{name}" on vale tüüpi. Ainult "{types}" on lubatud.',
|
||||
msgInvalidFileExtension: 'Invalid extension for file "{name}". Only "{extensions}" files are supported.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'The file upload was aborted',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Validation Error',
|
||||
msgLoading: 'Loading file {index} of {files} …',
|
||||
msgProgress: 'Loading file {index} of {files} - {name} - {percent}% completed.',
|
||||
msgSelected: '{n} {files} selected',
|
||||
msgFoldersNotAllowed: 'Drag & drop files only! Skipped {n} dropped folder(s).',
|
||||
msgImageWidthSmall: 'Pildi laius peab olema vähemalt {size} px.',
|
||||
msgImageHeightSmall: 'Pildi kõrgus peab olema vähemalt {size} px.',
|
||||
msgImageWidthLarge: 'Width of image file "{name}" cannot exceed {size} px.',
|
||||
msgImageHeightLarge: 'Height of image file "{name}" cannot exceed {size} px.',
|
||||
msgImageResizeError: 'Could not get the image dimensions to resize.',
|
||||
msgImageResizeException: 'Error while resizing the image.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Lohista failid siia …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Eemalda fail',
|
||||
uploadTitle: 'Salvesta fail',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
zoomTitle: 'Vaata detaile',
|
||||
dragTitle: 'Liiguta / Korralda',
|
||||
indicatorNewTitle: 'Pole veel salvestatud',
|
||||
indicatorSuccessTitle: 'Uploaded',
|
||||
indicatorErrorTitle: 'Salvestamise viga',
|
||||
indicatorLoadingTitle: 'Salvestan ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,101 @@
|
||||
/*!
|
||||
* FileInput Persian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author Milad Nekofar <milad@nekofar.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['fa'] = {
|
||||
fileSingle: 'فایل',
|
||||
filePlural: 'فایلها',
|
||||
browseLabel: 'مرور …',
|
||||
removeLabel: 'حذف',
|
||||
removeTitle: 'پاکسازی فایلهای انتخاب شده',
|
||||
cancelLabel: 'لغو',
|
||||
cancelTitle: 'لغو بارگزاری جاری',
|
||||
uploadLabel: 'بارگذاری',
|
||||
uploadTitle: 'بارگذاری فایلهای انتخاب شده',
|
||||
msgNo: 'نه',
|
||||
msgNoFilesSelected: 'هیچ فایلی انتخاب نشده است',
|
||||
msgCancelled: 'لغو شد',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'نمایش با جزییات',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'فایل "{name}" (<b>{size} کیلوبایت</b>) خیلی کوچک است و باید از <b>{minSize} کیلوبایت بزرگتر باشد</b>.',
|
||||
msgSizeTooLarge: 'فایل "{name}" (<b>{size} کیلوبایت</b>) از حداکثر مجاز <b>{maxSize} کیلوبایت</b> بزرگتر است.',
|
||||
msgFilesTooLess: 'شما باید حداقل <b>{n}</b> {files} فایل برای بارگذاری انتخاب کنید.',
|
||||
msgFilesTooMany: 'تعداد فایلهای انتخاب شده برای بارگذاری <b>({n})</b> از حداکثر مجاز عبور کرده است <b>{m}</b>.',
|
||||
msgFileNotFound: 'فایل "{name}" یافت نشد!',
|
||||
msgFileSecured: 'محدودیت های امنیتی مانع خواندن فایل "{name}" است.',
|
||||
msgFileNotReadable: 'فایل "{name}" قابل نوشتن نیست.',
|
||||
msgFilePreviewAborted: 'پیش نمایش فایل "{name}". به مشکل خورد',
|
||||
msgFilePreviewError: 'در هنگام خواندن فایل "{name}" خطایی رخ داد.',
|
||||
msgInvalidFileName: 'کاراکترهای غیرمجاز و یا ناشناخته در نام فایل "{name}".',
|
||||
msgInvalidFileType: 'نوع فایل "{name}" معتبر نیست. فقط "{types}" پشیبانی میشوند.',
|
||||
msgInvalidFileExtension: 'پسوند فایل "{name}" معتبر نیست. فقط "{extensions}" پشتیبانی میشوند.',
|
||||
msgFileTypes: {
|
||||
'image': 'عکس',
|
||||
'html': 'اچ تا ام ال',
|
||||
'text': 'متن',
|
||||
'video': 'ویدئو',
|
||||
'audio': 'صدا',
|
||||
'flash': 'فلش',
|
||||
'pdf': 'پی دی اف',
|
||||
'object': 'دیگر'
|
||||
},
|
||||
msgUploadAborted: 'بارگذاری فایل به مشکل خورد.',
|
||||
msgUploadThreshold: 'در حال پردازش...',
|
||||
msgUploadBegin: 'در حال شروع...',
|
||||
msgUploadEnd: 'انجام شد',
|
||||
msgUploadEmpty: 'هیچ داده معتبری برای بارگذاری موجود نیست.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'خطای اعتبار سنجی',
|
||||
msgLoading: 'بارگیری فایل {index} از {files} …',
|
||||
msgProgress: 'بارگیری فایل {index} از {files} - {name} - {percent}% تمام شد.',
|
||||
msgSelected: '{n} {files} انتخاب شده',
|
||||
msgFoldersNotAllowed: 'فقط فایلها را بکشید و رها کنید! {n} پوشه نادیده گرفته شد.',
|
||||
msgImageWidthSmall: 'عرض فایل تصویر "{name}" باید حداقل {size} پیکسل باشد.',
|
||||
msgImageHeightSmall: 'ارتفاع فایل تصویر "{name}" باید حداقل {size} پیکسل باشد.',
|
||||
msgImageWidthLarge: 'عرض فایل تصویر "{name}" نمیتواند از {size} پیکسل بیشتر باشد.',
|
||||
msgImageHeightLarge: 'ارتفاع فایل تصویر "{name}" نمیتواند از {size} پیکسل بیشتر باشد.',
|
||||
msgImageResizeError: 'یافت نشد ابعاد تصویر را برای تغییر اندازه.',
|
||||
msgImageResizeException: 'خطا در هنگام تغییر اندازه تصویر.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'به نظر مشکلی در حین {operation} روی داده است. لطفا دوباره تلاش کنید!',
|
||||
msgAjaxProgressError: '{operation} لغو شد',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'حذف فایل',
|
||||
uploadThumb: 'بارگذاری فایل',
|
||||
uploadBatch: 'بارگذاری جمعی فایلها',
|
||||
uploadExtra: 'بارگذاری با کمک فُرم'
|
||||
},
|
||||
dropZoneTitle: 'فایلها را بکشید و در اینجا رها کنید …',
|
||||
dropZoneClickTitle: '<br>(یا برای انتخاب {files} کلیک کنید)',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'حذف فایل',
|
||||
uploadTitle: 'آپلود فایل',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'دیدن جزئیات',
|
||||
dragTitle: 'جابجایی / چیدمان',
|
||||
indicatorNewTitle: 'آپلود نشده است',
|
||||
indicatorSuccessTitle: 'آپلود شده',
|
||||
indicatorErrorTitle: 'بارگذاری خطا',
|
||||
indicatorLoadingTitle: 'آپلود ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'مشاهده فایل قبلی',
|
||||
next: 'مشاهده فایل بعدی',
|
||||
toggleheader: 'نمایش عنوان',
|
||||
fullscreen: 'نمایش تمام صفحه',
|
||||
borderless: 'نمایش حاشیه',
|
||||
close: 'بستن نمایش با جزییات'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,91 @@
|
||||
/*!
|
||||
* FileInput Finnish Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales.fi = {
|
||||
fileSingle: 'tiedosto',
|
||||
filePlural: 'tiedostot',
|
||||
browseLabel: 'Selaa …',
|
||||
removeLabel: 'Poista',
|
||||
removeTitle: 'Tyhjännä valitut tiedostot',
|
||||
cancelLabel: 'Peruuta',
|
||||
cancelTitle: 'Peruuta lataus',
|
||||
uploadLabel: 'Lataa',
|
||||
uploadTitle: 'Lataa valitut tiedostot',
|
||||
msgNoFilesSelected: '',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Tiedosto "{name}" (<b>{size} Kt</b>) ylittää suurimman sallitun tiedoston koon, joka on <b>{maxSize} Kt</b>. Yritä uudelleen!',
|
||||
msgFilesTooLess: 'Vähintään <b>{n}</b> {files} tiedostoa on valittava ladattavaksi. Ole hyvä ja yritä uudelleen!',
|
||||
msgFilesTooMany: 'Valittujen tiedostojen lukumäärä <b>({n})</b> ylittää suurimman sallitun määrän <b>{m}</b>. Ole hyvä ja yritä uudelleen!',
|
||||
msgFileNotFound: 'Tiedostoa "{name}" ei löydy!',
|
||||
msgFileSecured: 'Tietoturvarajoitukset estävät tiedoston "{name}" lukemisen.',
|
||||
msgFileNotReadable: 'Tiedosto "{name}" ei ole luettavissa.',
|
||||
msgFilePreviewAborted: 'Tiedoston "{name}" esikatselu keskeytetty.',
|
||||
msgFilePreviewError: 'Virhe on tapahtunut luettaessa tiedostoa "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Tiedosto "{name}" on väärän tyyppinen. Ainoastaan tiedostot tyyppiä "{types}" ovat tuettuja.',
|
||||
msgInvalidFileExtension: 'Tiedoston "{name}" tarkenne on epäkelpo. Ainoastaan tarkenteet "{extensions}" ovat tuettuja.',
|
||||
msgFileTypes: {
|
||||
'image': 'Kuva',
|
||||
'html': 'HTML',
|
||||
'text': 'Teksti',
|
||||
'video': 'Video',
|
||||
'audio': 'Ääni',
|
||||
'flash': 'Flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'Olio'
|
||||
},
|
||||
msgUploadThreshold: 'Käsitellään...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'Ei ladattavaa dataa.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Tiedoston latausvirhe',
|
||||
msgLoading: 'Ladataan tiedostoa {index} / {files} …',
|
||||
msgProgress: 'Ladataan tiedostoa {index} / {files} - {name} - {percent}% valmistunut.',
|
||||
msgSelected: '{n} tiedostoa valittu',
|
||||
msgFoldersNotAllowed: 'Raahaa ja pudota ainoastaan tiedostoja! Ohitettu {n} raahattua kansiota.',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Raahaa ja pudota tiedostot tähän …',
|
||||
dropZoneClickTitle: '<br>(tai valitse hiirellä {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Poista tiedosto',
|
||||
uploadTitle: 'Upload file',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Yksityiskohdat',
|
||||
dragTitle: 'Siirrä / Järjestele',
|
||||
indicatorNewTitle: 'Ei ladattu',
|
||||
indicatorSuccessTitle: 'Ladattu',
|
||||
indicatorErrorTitle: 'Lataus epäonnistui',
|
||||
indicatorLoadingTitle: 'Ladataan ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Seuraava tiedosto',
|
||||
next: 'Edellinen tiedosto',
|
||||
toggleheader: 'Näytä otsikko',
|
||||
fullscreen: 'Kokonäytön tila',
|
||||
borderless: 'Rajaton tila',
|
||||
close: 'Sulje esikatselu'
|
||||
}
|
||||
};
|
||||
|
||||
$.extend($.fn.fileinput.defaults, $.fn.fileinputLocales.fi);
|
||||
})(window.jQuery);
|
@ -0,0 +1,99 @@
|
||||
/*!
|
||||
* FileInput French Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['fr'] = {
|
||||
fileSingle: 'fichier',
|
||||
filePlural: 'fichiers',
|
||||
browseLabel: 'Parcourir…',
|
||||
removeLabel: 'Retirer',
|
||||
removeTitle: 'Retirer les fichiers sélectionnés',
|
||||
cancelLabel: 'Annuler',
|
||||
cancelTitle: "Annuler l'envoi en cours",
|
||||
uploadLabel: 'Transférer',
|
||||
uploadTitle: 'Transférer les fichiers sélectionnés',
|
||||
msgNo: 'Non',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'Annulé',
|
||||
msgPlaceholder: 'Sélectionner le(s) {files}...',
|
||||
msgZoomModalHeading: 'Aperçu détaillé',
|
||||
msgFileRequired: 'Vous devez sélectionner un fichier à uploader.',
|
||||
msgSizeTooSmall: 'Le fichier "{name}" (<b>{size} KB</b>) est inférieur à la taille minimale de <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Le fichier "{name}" (<b>{size} Ko</b>) dépasse la taille maximale autorisée qui est de <b>{maxSize} Ko</b>.',
|
||||
msgFilesTooLess: 'Vous devez sélectionner au moins <b>{n}</b> {files} à transmettre.',
|
||||
msgFilesTooMany: 'Le nombre de fichier sélectionné <b>({n})</b> dépasse la quantité maximale autorisée qui est de <b>{m}</b>.',
|
||||
msgFileNotFound: 'Le fichier "{name}" est introuvable !',
|
||||
msgFileSecured: "Des restrictions de sécurité vous empêchent d'accéder au fichier \"{name}\".",
|
||||
msgFileNotReadable: 'Le fichier "{name}" est illisible.',
|
||||
msgFilePreviewAborted: 'Prévisualisation du fichier "{name}" annulée.',
|
||||
msgFilePreviewError: 'Une erreur est survenue lors de la lecture du fichier "{name}".',
|
||||
msgInvalidFileName: 'Caractères invalides ou non supportés dans le nom de fichier "{name}".',
|
||||
msgInvalidFileType: 'Type de document invalide pour "{name}". Seulement les documents de type "{types}" sont autorisés.',
|
||||
msgInvalidFileExtension: 'Extension invalide pour le fichier "{name}". Seules les extensions "{extensions}" sont autorisées.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Le transfert du fichier a été interrompu',
|
||||
msgUploadThreshold: 'En cours...',
|
||||
msgUploadBegin: 'Initialisation...',
|
||||
msgUploadEnd: 'Terminé',
|
||||
msgUploadEmpty: 'Aucune donnée valide disponible pour transmission.',
|
||||
msgUploadError: 'Erreur',
|
||||
msgValidationError: 'Erreur de validation',
|
||||
msgLoading: 'Transmission du fichier {index} sur {files}…',
|
||||
msgProgress: 'Transmission du fichier {index} sur {files} - {name} - {percent}%.',
|
||||
msgSelected: '{n} {files} sélectionné(s)',
|
||||
msgFoldersNotAllowed: 'Glissez et déposez uniquement des fichiers ! {n} répertoire(s) exclu(s).',
|
||||
msgImageWidthSmall: 'La largeur de l\'image "{name}" doit être d\'au moins {size} px.',
|
||||
msgImageHeightSmall: 'La hauteur de l\'image "{name}" doit être d\'au moins {size} px.',
|
||||
msgImageWidthLarge: 'La largeur de l\'image "{name}" ne peut pas dépasser {size} px.',
|
||||
msgImageHeightLarge: 'La hauteur de l\'image "{name}" ne peut pas dépasser {size} px.',
|
||||
msgImageResizeError: "Impossible d'obtenir les dimensions de l'image à redimensionner.",
|
||||
msgImageResizeException: "Erreur lors du redimensionnement de l'image.<pre>{errors}</pre>",
|
||||
msgAjaxError: "Une erreur s'est produite pendant l'opération de {operation}. Veuillez réessayer plus tard.",
|
||||
msgAjaxProgressError: 'L\'opération "{operation}" a échoué',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'suppression du fichier',
|
||||
uploadThumb: 'transfert du fichier',
|
||||
uploadBatch: 'transfert des fichiers',
|
||||
uploadExtra: 'soumission des données de formulaire'
|
||||
},
|
||||
dropZoneTitle: 'Glissez et déposez les fichiers ici…',
|
||||
dropZoneClickTitle: '<br>(ou cliquez pour sélectionner manuellement)',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Supprimer le fichier',
|
||||
uploadTitle: 'Transférer le fichier',
|
||||
uploadRetryTitle: 'Relancer le transfert',
|
||||
zoomTitle: 'Voir les détails',
|
||||
dragTitle: 'Déplacer / Réarranger',
|
||||
indicatorNewTitle: 'Pas encore transféré',
|
||||
indicatorSuccessTitle: 'Posté',
|
||||
indicatorErrorTitle: 'Ajouter erreur',
|
||||
indicatorLoadingTitle: 'En cours...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Voir le fichier précédent',
|
||||
next: 'Voir le fichier suivant',
|
||||
toggleheader: 'Masquer le titre',
|
||||
fullscreen: 'Mode plein écran',
|
||||
borderless: 'Mode cinéma',
|
||||
close: "Fermer l'aperçu"
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Galician Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['gl'] = {
|
||||
fileSingle: 'arquivo',
|
||||
filePlural: 'arquivos',
|
||||
browseLabel: 'Examinar …',
|
||||
removeLabel: 'Quitar',
|
||||
removeTitle: 'Quitar aquivos seleccionados',
|
||||
cancelLabel: 'Cancelar',
|
||||
cancelTitle: 'Abortar a subida en curso',
|
||||
uploadLabel: 'Subir arquivo',
|
||||
uploadTitle: 'Subir arquivos seleccionados',
|
||||
msgNo: 'Non',
|
||||
msgNoFilesSelected: 'Non hay arquivos seleccionados',
|
||||
msgCancelled: 'Cancelado',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Vista previa detallada',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'O arquivo "{name}" (<b>{size} KB</b>) é demasiado pequeño e debe ser maior de <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'El arquivo "{name}" (<b>{size} KB</b>) excede o tamaño máximo permitido de <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Debe seleccionar al menos <b>{n}</b> {files} a cargar.',
|
||||
msgFilesTooMany: 'O número de arquivos seleccionados a cargar <b>({n})</b> excede do límite máximo permitido de <b>{m}</b>.',
|
||||
msgFileNotFound: 'Arquivo "{name}" non encontrado.',
|
||||
msgFileSecured: 'Non é posible acceder o arquivo "{name}" porque estará sendo usado por outra aplicación ou non teñamos permisos de lectura.',
|
||||
msgFileNotReadable: 'Non é posible acceder o archivo "{name}".',
|
||||
msgFilePreviewAborted: 'Previsualización do arquivo "{name}" cancelada.',
|
||||
msgFilePreviewError: 'Ocurriu un erro mentras se lía o arquivo "{name}".',
|
||||
msgInvalidFileName: 'Caracteres non válidos o no soportados no nome do arquivos "{name}".',
|
||||
msgInvalidFileType: 'Tipo de archivo no válido para "{name}". Sólo se permiten arquivos do tipo "{types}".',
|
||||
msgInvalidFileExtension: 'Extensión de arquivo non válido para "{name}". Só se permiten arquivos "{extensions}".',
|
||||
msgFileTypes: {
|
||||
'image': 'imaxe',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'A carga de arquivos cancelouse',
|
||||
msgUploadThreshold: 'Procesando...',
|
||||
msgUploadBegin: 'Inicialicando...',
|
||||
msgUploadEnd: 'Feito',
|
||||
msgUploadEmpty: 'Non existen datos válidos para o envío.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Erro de validación',
|
||||
msgLoading: 'Subindo arquivo {index} de {files} …',
|
||||
msgProgress: 'Subiendo arquivo {index} de {files} - {name} - {percent}% completado.',
|
||||
msgSelected: '{n} {files} seleccionado(s)',
|
||||
msgFoldersNotAllowed: 'Arrastra e solta únicamente arquivoa. Omitida(s) {n} carpeta(s).',
|
||||
msgImageWidthSmall: 'O ancho da imaxe "{name}" debe ser de al menos {size} px.',
|
||||
msgImageHeightSmall: 'A altura de la imaxe "{name}" debe ser de al menos {size} px.',
|
||||
msgImageWidthLarge: 'El ancho de la imaxe "{name}" no puede exceder de {size} px.',
|
||||
msgImageHeightLarge: 'La altura de la imaxe "{name}" no puede exceder de {size} px.',
|
||||
msgImageResizeError: 'No se pudieron obtener las dimensiones de la imaxe para cambiar el tamaño.',
|
||||
msgImageResizeException: 'Erro o cambiar o tamaño da imaxe.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Algo foi mal ca operación {operation}. Por favor, intentao de novo mais tarde.',
|
||||
msgAjaxProgressError: 'A operación {operation} fallou',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'Arquivo borrado',
|
||||
uploadThumb: 'Arquivo subido',
|
||||
uploadBatch: 'Datos subidos en lote',
|
||||
uploadExtra: 'Datos do formulario subidos'
|
||||
},
|
||||
dropZoneTitle: 'Arrasta e solte aquí os arquivos …',
|
||||
dropZoneClickTitle: '<br>(ou fai clic para seleccionar {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Eliminar arquivo',
|
||||
uploadTitle: 'Subir arquivo',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Ver detalles',
|
||||
dragTitle: 'Mover / Reordenar',
|
||||
indicatorNewTitle: 'Non subido todavía',
|
||||
indicatorSuccessTitle: 'Subido',
|
||||
indicatorErrorTitle: 'Erro o subir',
|
||||
indicatorLoadingTitle: 'Subiendo...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Ver arquivo anterior',
|
||||
next: 'Ver arquivo siguinte',
|
||||
toggleheader: 'Mostrar encabezado',
|
||||
fullscreen: 'Mostrar a pantalla completa',
|
||||
borderless: 'Activar o modo sen bordes',
|
||||
close: 'Cerrar vista detallada'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Hungarian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['hu'] = {
|
||||
fileSingle: 'fájl',
|
||||
filePlural: 'fájlok',
|
||||
browseLabel: 'Tallóz …',
|
||||
removeLabel: 'Eltávolít',
|
||||
removeTitle: 'Kijelölt fájlok törlése',
|
||||
cancelLabel: 'Mégse',
|
||||
cancelTitle: 'Feltöltés megszakítása',
|
||||
uploadLabel: 'Feltöltés',
|
||||
uploadTitle: 'Kijelölt fájlok feltöltése',
|
||||
msgNo: 'Nem',
|
||||
msgNoFilesSelected: 'Nincs fájl kiválasztva',
|
||||
msgCancelled: 'Megszakítva',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Részletes Előnézet',
|
||||
msgFileRequired: 'Kötelező fájlt kiválasztani a feltöltéshez.',
|
||||
msgSizeTooSmall: 'A fájl: "{name}" (<b>{size} KB</b>) mérete túl kicsi, nagyobbnak kell lennie, mint <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: '"{name}" fájl (<b>{size} KB</b>) mérete nagyobb a megengedettnél <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Legalább <b>{n}</b> {files} ki kell választania a feltöltéshez.',
|
||||
msgFilesTooMany: 'A feltölteni kívánt fájlok száma <b>({n})</b> elérte a megengedett maximumot <b>{m}</b>.',
|
||||
msgFileNotFound: '"{name}" fájl nem található!',
|
||||
msgFileSecured: 'Biztonsági beállítások nem engedik olvasni a fájlt "{name}".',
|
||||
msgFileNotReadable: '"{name}" fájl nem olvasható.',
|
||||
msgFilePreviewAborted: '"{name}" fájl feltöltése megszakítva.',
|
||||
msgFilePreviewError: 'Hiba lépett fel a "{name}" fájl olvasása közben.',
|
||||
msgInvalidFileName: 'Hibás vagy nem támogatott karakterek a fájl nevében "{name}".',
|
||||
msgInvalidFileType: 'Nem megengedett fájl "{name}". Csak a "{types}" fájl típusok támogatottak.',
|
||||
msgInvalidFileExtension: 'Nem megengedett kiterjesztés / fájltípus "{name}". Csak a "{extensions}" kiterjesztés(ek) / fájltípus(ok) támogatottak.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'A fájl feltöltés megszakítva',
|
||||
msgUploadThreshold: 'Folyamatban...',
|
||||
msgUploadBegin: 'Inicializálás...',
|
||||
msgUploadEnd: 'Kész',
|
||||
msgUploadEmpty: 'Nincs érvényes adat a feltöltéshez.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Érvényesítés hiba',
|
||||
msgLoading: '{index} / {files} töltése …',
|
||||
msgProgress: 'Feltöltés: {index} / {files} - {name} - {percent}% kész.',
|
||||
msgSelected: '{n} {files} kiválasztva.',
|
||||
msgFoldersNotAllowed: 'Csak fájlokat húzzon ide! Kihagyva {n} könyvtár.',
|
||||
msgImageWidthSmall: 'A kép szélességének "{name}" legalább {size} pixelnek kell lennie.',
|
||||
msgImageHeightSmall: 'A kép magasságának "{name}" legalább {size} pixelnek kell lennie.',
|
||||
msgImageWidthLarge: 'A kép szélessége "{name}" nem haladhatja meg a {size} pixelt.',
|
||||
msgImageHeightLarge: 'A kép magassága "{name}" nem haladhatja meg a {size} pixelt.',
|
||||
msgImageResizeError: 'Nem lehet megállapítani a kép méreteit az átméretezéshez.',
|
||||
msgImageResizeException: 'Hiba történt a méretezés közben.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Hiba történt a művelet közben ({operation}). Kérjük, próbálja később!',
|
||||
msgAjaxProgressError: 'Hiba! ({operation})',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'fájl törlés',
|
||||
uploadThumb: 'fájl feltöltés',
|
||||
uploadBatch: 'csoportos fájl feltöltés',
|
||||
uploadExtra: 'űrlap adat feltöltés'
|
||||
},
|
||||
dropZoneTitle: 'Húzzon ide fájlokat …',
|
||||
dropZoneClickTitle: '<br>(vagy kattintson ide a {files} tallózásához...)',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'A fájl eltávolítása',
|
||||
uploadTitle: 'fájl feltöltése',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Részletek megtekintése',
|
||||
dragTitle: 'Mozgatás / Átrendezés',
|
||||
indicatorNewTitle: 'Nem feltöltött',
|
||||
indicatorSuccessTitle: 'Feltöltött',
|
||||
indicatorErrorTitle: 'Feltöltés hiba',
|
||||
indicatorLoadingTitle: 'Feltöltés ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Elöző fájl megnézése',
|
||||
next: 'Következő fájl megnézése',
|
||||
toggleheader: 'Fejléc mutatása',
|
||||
fullscreen: 'Teljes képernyős mód bekapcsolása',
|
||||
borderless: 'Keret nélküli ablak mód bekapcsolása',
|
||||
close: 'Részletes előnézet bezárása'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,101 @@
|
||||
/*!
|
||||
* FileInput Indonesian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author Bambang Riswanto <bamz3r@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['id'] = {
|
||||
fileSingle: 'berkas',
|
||||
filePlural: 'berkas',
|
||||
browseLabel: 'Pilih File …',
|
||||
removeLabel: 'Hapus',
|
||||
removeTitle: 'Hapus berkas terpilih',
|
||||
cancelLabel: 'Batal',
|
||||
cancelTitle: 'Batalkan proses pengunggahan',
|
||||
uploadLabel: 'Unggah',
|
||||
uploadTitle: 'Unggah berkas terpilih',
|
||||
msgNo: 'Tidak',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'Dibatalkan',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Pratinjau terperinci',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Berkas "{name}" (<b>{size} KB</b>) melebihi ukuran upload maksimal yaitu <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Anda harus memilih setidaknya <b>{n}</b> {files} untuk diunggah.',
|
||||
msgFilesTooMany: '<b>({n})</b> berkas yang dipilih untuk diunggah melebihi ukuran upload maksimal yaitu <b>{m}</b>.',
|
||||
msgFileNotFound: 'Berkas "{name}" tak ditemukan!',
|
||||
msgFileSecured: 'Sistem keamanan mencegah untuk membaca berkas "{name}".',
|
||||
msgFileNotReadable: 'Berkas "{name}" tak dapat dibaca.',
|
||||
msgFilePreviewAborted: 'Pratinjau untuk berkas "{name}" dibatalkan.',
|
||||
msgFilePreviewError: 'Kesalahan saat membaca berkas "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Jenis berkas "{name}" tidak sah. Hanya berkas "{types}" yang didukung.',
|
||||
msgInvalidFileExtension: 'Ekstensi berkas "{name}" tidak sah. Hanya ekstensi "{extensions}" yang didukung.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Pengunggahan berkas dibatalkan',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Kesalahan validasi',
|
||||
msgLoading: 'Memuat {index} dari {files} berkas …',
|
||||
msgProgress: 'Memuat {index} dari {files} berkas - {name} - {percent}% selesai.',
|
||||
msgSelected: '{n} {files} dipilih',
|
||||
msgFoldersNotAllowed: 'Hanya tahan dan lepas file saja! {n} folder diabaikan.',
|
||||
msgImageWidthSmall: 'Lebar dari gambar "{name}" harus sekurangnya {size} px.',
|
||||
msgImageHeightSmall: 'Tinggi dari gambar "{name}" harus sekurangnya {size} px.',
|
||||
msgImageWidthLarge: 'Lebar dari gambar "{name}" tak boleh melebihi {size} px.',
|
||||
msgImageHeightLarge: 'Tinggi dari gambar "{name}" tak boleh melebihi {size} px.',
|
||||
msgImageResizeError: 'Tak dapat menentukan dimensi gambar untuk mengubah ukuran.',
|
||||
msgImageResizeException: 'Kesalahan saat mengubah ukuran gambar.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Tarik dan lepaskan berkas disini …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Hapus berkas',
|
||||
uploadTitle: 'Unggah berkas',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Tampilkan Rincian',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'Belum diunggah',
|
||||
indicatorSuccessTitle: 'Sudah diunggah',
|
||||
indicatorErrorTitle: 'Kesalahan pengunggahan',
|
||||
indicatorLoadingTitle: 'Mengunggah ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,102 @@
|
||||
/*!
|
||||
* FileInput Italian Translation
|
||||
*
|
||||
* Author: Lorenzo Milesi <maxxer@yetopen.it>
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['it'] = {
|
||||
fileSingle: 'file',
|
||||
filePlural: 'file',
|
||||
browseLabel: 'Sfoglia…',
|
||||
removeLabel: 'Rimuovi',
|
||||
removeTitle: 'Rimuovi i file selezionati',
|
||||
cancelLabel: 'Annulla',
|
||||
cancelTitle: 'Annulla i caricamenti in corso',
|
||||
uploadLabel: 'Carica',
|
||||
uploadTitle: 'Carica i file selezionati',
|
||||
msgNo: 'No',
|
||||
msgNoFilesSelected: 'Nessun file selezionato',
|
||||
msgCancelled: 'Annullato',
|
||||
msgPlaceholder: 'Seleziona {files}...',
|
||||
msgZoomModalHeading: 'Anteprima dettagliata',
|
||||
msgFileRequired: 'Devi selezionare un file da caricare.',
|
||||
msgSizeTooSmall: 'Il file "{name}" (<b>{size} KB</b>) è troppo piccolo, deve essere almeno di <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Il file "{name}" (<b>{size} KB</b>) eccede la dimensione massima di caricamento di <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Devi selezionare almeno <b>{n}</b> {files} da caricare.',
|
||||
msgFilesTooMany: 'Il numero di file selezionati per il caricamento <b>({n})</b> eccede il numero massimo di file accettati <b>{m}</b>.',
|
||||
msgFileNotFound: 'File "{name}" non trovato!',
|
||||
msgFileSecured: 'Restrizioni di sicurezza impediscono la lettura del file "{name}".',
|
||||
msgFileNotReadable: 'Il file "{name}" non è leggibile.',
|
||||
msgFilePreviewAborted: 'Generazione anteprima per "{name}" annullata.',
|
||||
msgFilePreviewError: 'Errore durante la lettura del file "{name}".',
|
||||
msgInvalidFileName: 'Carattere non valido o non supportato nel file "{name}".',
|
||||
msgInvalidFileType: 'Tipo non valido per il file "{name}". Sono ammessi solo file di tipo "{types}".',
|
||||
msgInvalidFileExtension: 'Estensione non valida per il file "{name}". Sono ammessi solo file con estensione "{extensions}".',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Il caricamento del file è stato interrotto',
|
||||
msgUploadThreshold: 'In lavorazione...',
|
||||
msgUploadBegin: 'Inizializzazione...',
|
||||
msgUploadEnd: 'Fatto',
|
||||
msgUploadEmpty: 'Dati non disponibili',
|
||||
msgUploadError: 'Errore',
|
||||
msgValidationError: 'Errore di convalida',
|
||||
msgLoading: 'Caricamento file {index} di {files}…',
|
||||
msgProgress: 'Caricamento file {index} di {files} - {name} - {percent}% completato.',
|
||||
msgSelected: '{n} {files} selezionati',
|
||||
msgFoldersNotAllowed: 'Trascina solo file! Ignorata/e {n} cartella/e.',
|
||||
msgImageWidthSmall: 'La larghezza dell\'immagine "{name}" deve essere di almeno {size} px.',
|
||||
msgImageHeightSmall: 'L\'altezza dell\'immagine "{name}" deve essere di almeno {size} px.',
|
||||
msgImageWidthLarge: 'La larghezza dell\'immagine "{name}" non può superare {size} px.',
|
||||
msgImageHeightLarge: 'L\'altezza dell\'immagine "{name}" non può superare {size} px.',
|
||||
msgImageResizeError: 'Impossibile ottenere le dimensioni dell\'immagine per ridimensionare.',
|
||||
msgImageResizeException: 'Errore durante il ridimensionamento dell\'immagine.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Qualcosa non ha funzionato con l\'operazione {operation}. Per favore riprova più tardi!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'eliminazione file',
|
||||
uploadThumb: 'caricamento file',
|
||||
uploadBatch: 'caricamento file in batch',
|
||||
uploadExtra: 'upload dati del form'
|
||||
},
|
||||
dropZoneTitle: 'Trascina i file qui…',
|
||||
dropZoneClickTitle: '<br>(o clicca per selezionare {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Rimuovere il file',
|
||||
uploadTitle: 'Caricare un file',
|
||||
uploadRetryTitle: 'Riprova il caricamento',
|
||||
downloadTitle: 'Scarica file',
|
||||
zoomTitle: 'Guarda i dettagli',
|
||||
dragTitle: 'Muovi / Riordina',
|
||||
indicatorNewTitle: 'Non ancora caricato',
|
||||
indicatorSuccessTitle: 'Caricati',
|
||||
indicatorErrorTitle: 'Carica Errore',
|
||||
indicatorLoadingTitle: 'Caricamento ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Vedi il file precedente',
|
||||
next: 'Vedi il file seguente',
|
||||
toggleheader: 'Attiva header',
|
||||
fullscreen: 'Attiva full screen',
|
||||
borderless: 'Abilita modalità senza bordi',
|
||||
close: 'Chiudi'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,109 @@
|
||||
/*!
|
||||
* FileInput Japanese Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author Yuta Hoshina <hoshina@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
* slugCallback
|
||||
* \u4e00-\u9fa5 : Kanji (Chinese characters)
|
||||
* \u3040-\u309f : Hiragana (Japanese syllabary)
|
||||
* \u30a0-\u30ff\u31f0-\u31ff : Katakana (including phonetic extension)
|
||||
* \u3200-\u32ff : Enclosed CJK Letters and Months
|
||||
* \uff00-\uffef : Halfwidth and Fullwidth Forms
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['ja'] = {
|
||||
fileSingle: 'ファイル',
|
||||
filePlural: 'ファイル',
|
||||
browseLabel: 'ファイルを選択…',
|
||||
removeLabel: '削除',
|
||||
removeTitle: '選択したファイルを削除',
|
||||
cancelLabel: 'キャンセル',
|
||||
cancelTitle: 'アップロードをキャンセル',
|
||||
uploadLabel: 'アップロード',
|
||||
uploadTitle: '選択したファイルをアップロード',
|
||||
msgNo: 'いいえ',
|
||||
msgNoFilesSelected: 'ファイルが選択されていません',
|
||||
msgCancelled: 'キャンセル',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'プレビュー',
|
||||
msgFileRequired: 'ファイルを選択してください',
|
||||
msgSizeTooSmall: 'ファイル"{name}" (<b>{size} KB</b>)はアップロード可能な下限容量<b>{minSize} KB</b>より小さいです',
|
||||
msgSizeTooLarge: 'ファイル"{name}" (<b>{size} KB</b>)はアップロード可能な上限容量<b>{maxSize} KB</b>を超えています',
|
||||
msgFilesTooLess: '最低<b>{n}</b>個の{files}を選択してください',
|
||||
msgFilesTooMany: '選択したファイルの数<b>({n}個)</b>はアップロード可能な上限数<b>({m}個)</b>を超えています',
|
||||
msgFileNotFound: 'ファイル"{name}"はありませんでした',
|
||||
msgFileSecured: 'ファイル"{name}"は読み取り権限がないため取得できません',
|
||||
msgFileNotReadable: 'ファイル"{name}"は読み込めません',
|
||||
msgFilePreviewAborted: 'ファイル"{name}"のプレビューを中止しました',
|
||||
msgFilePreviewError: 'ファイル"{name}"の読み込み中にエラーが発生しました',
|
||||
msgInvalidFileName: 'ファイル名に無効な文字が含まれています "{name}".',
|
||||
msgInvalidFileType: '"{name}"は無効なファイル形式です。"{types}"形式のファイルのみサポートしています',
|
||||
msgInvalidFileExtension: '"{name}"は無効な拡張子です。拡張子が"{extensions}"のファイルのみサポートしています',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'ファイルのアップロードが中止されました',
|
||||
msgUploadThreshold: '処理中...',
|
||||
msgUploadBegin: '初期化中...',
|
||||
msgUploadEnd: '完了',
|
||||
msgUploadEmpty: 'アップロードに有効なデータがありません',
|
||||
msgUploadError: 'エラー',
|
||||
msgValidationError: '検証エラー',
|
||||
msgLoading: '{files}個中{index}個目のファイルを読み込み中…',
|
||||
msgProgress: '{files}個中{index}個のファイルを読み込み中 - {name} - {percent}% 完了',
|
||||
msgSelected: '{n}個の{files}を選択',
|
||||
msgFoldersNotAllowed: 'ドラッグ&ドロップが可能なのはファイルのみです。{n}個のフォルダ-は無視されました',
|
||||
msgImageWidthSmall: '画像ファイル"{name}"の幅が小さすぎます。画像サイズの幅は少なくとも{size}px必要です',
|
||||
msgImageHeightSmall: '画像ファイル"{name}"の高さが小さすぎます。画像サイズの高さは少なくとも{size}px必要です',
|
||||
msgImageWidthLarge: '画像ファイル"{name}"の幅がアップロード可能な画像サイズ({size}px)を超えています',
|
||||
msgImageHeightLarge: '画像ファイル"{name}"の高さがアップロード可能な画像サイズ({size}px)を超えています',
|
||||
msgImageResizeError: 'リサイズ時に画像サイズが取得できませんでした',
|
||||
msgImageResizeException: '画像のリサイズ時にエラーが発生しました。<pre>{errors}</pre>',
|
||||
msgAjaxError: '{operation}実行中にエラーが発生しました。時間をおいてもう一度お試しください。',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'ファイル削除',
|
||||
uploadThumb: 'ファイルアップロード',
|
||||
uploadBatch: '一括ファイルアップロード',
|
||||
uploadExtra: 'フォームデータアップロード'
|
||||
},
|
||||
dropZoneTitle: 'ファイルをドラッグ&ドロップ…',
|
||||
dropZoneClickTitle: '<br>(または クリックして{files}を選択 )',
|
||||
slugCallback: function(text) {
|
||||
return text ? text.split(/(\\|\/)/g).pop().replace(/[^\w\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff\u31f0-\u31ff\u3200-\u32ff\uff00-\uffef\-.\\\/ ]+/g, '') : '';
|
||||
},
|
||||
fileActionSettings: {
|
||||
removeTitle: 'ファイルを削除',
|
||||
uploadTitle: 'ファイルをアップロード',
|
||||
uploadRetryTitle: '再アップロード',
|
||||
zoomTitle: 'プレビュー',
|
||||
dragTitle: '移動 / 再配置',
|
||||
indicatorNewTitle: 'まだアップロードされていません',
|
||||
indicatorSuccessTitle: 'アップロード済み',
|
||||
indicatorErrorTitle: 'アップロード失敗',
|
||||
indicatorLoadingTitle: 'アップロード中...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: '前のファイルを表示',
|
||||
next: '次のファイルを表示',
|
||||
toggleheader: 'ファイル情報の表示/非表示',
|
||||
fullscreen: 'フルスクリーン表示の開始/終了',
|
||||
borderless: 'フルウィンドウ表示の開始/終了',
|
||||
close: 'プレビューを閉じる'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,101 @@
|
||||
/*!
|
||||
* FileInput Georgian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['ka'] = {
|
||||
fileSingle: 'ფაილი',
|
||||
filePlural: 'ფაილები',
|
||||
browseLabel: 'არჩევა …',
|
||||
removeLabel: 'წაშლა',
|
||||
removeTitle: 'არჩეული ფაილების წაშლა',
|
||||
cancelLabel: 'გაუქმება',
|
||||
cancelTitle: 'მიმდინარე ატვირთვის გაუქმება',
|
||||
uploadLabel: 'ატვირთვა',
|
||||
uploadTitle: 'არჩეული ფაილების ატვირთვა',
|
||||
msgNo: 'არა',
|
||||
msgNoFilesSelected: 'ფაილები არ არის არჩეული',
|
||||
msgCancelled: 'გაუქმებულია',
|
||||
msgPlaceholder: 'აირჩიეთ {files}...',
|
||||
msgZoomModalHeading: 'დეტალურად ნახვა',
|
||||
msgFileRequired: 'ატვირთვისთვის აუცილებელია ფაილის არჩევა.',
|
||||
msgSizeTooSmall: 'ფაილი "{name}" (<b>{size} KB</b>) არის ძალიან პატარა. მისი ზომა უნდა იყოს არანაკლებ <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'ფაილი "{name}" (<b>{size} KB</b>) აჭარბებს მაქსიმალურ დასაშვებ ზომას <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'უნდა აირჩიოთ მინიმუმ <b>{n}</b> {file} ატვირთვისთვის.',
|
||||
msgFilesTooMany: 'არჩეული ფაილების რაოდენობა <b>({n})</b> აჭარბებს დასაშვებ ლიმიტს <b>{m}</b>.',
|
||||
msgFileNotFound: 'ფაილი "{name}" არ მოიძებნა!',
|
||||
msgFileSecured: 'უსაფრთხოებით გამოწვეული შეზღუდვები კრძალავს ფაილის "{name}" წაკითხვას.',
|
||||
msgFileNotReadable: 'ფაილის "{name}" წაკითხვა შეუძლებელია.',
|
||||
msgFilePreviewAborted: 'პრევიუ გაუქმებულია ფაილისათვის "{name}".',
|
||||
msgFilePreviewError: 'დაფიქსირდა შეცდომა ფაილის "{name}" კითხვისას.',
|
||||
msgInvalidFileName: 'ნაპოვნია დაუშვებელი სიმბოლოები ფაილის "{name}" სახელში.',
|
||||
msgInvalidFileType: 'ფაილს "{name}" გააჩნია დაუშვებელი ტიპი. მხოლოდ "{types}" ტიპის ფაილები არის დაშვებული.',
|
||||
msgInvalidFileExtension: 'ფაილს "{name}" გააჩნია დაუშვებელი გაფართოება. მხოლოდ "{extensions}" გაფართოების ფაილები არის დაშვებული.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'ფაილის ატვირთვა შეწყდა',
|
||||
msgUploadThreshold: 'მუშავდება...',
|
||||
msgUploadBegin: 'ინიციალიზაცია...',
|
||||
msgUploadEnd: 'დასრულებულია',
|
||||
msgUploadEmpty: 'ატვირთვისთვის დაუშვებელი მონაცემები.',
|
||||
msgUploadError: 'ატვირთვის შეცდომა',
|
||||
msgValidationError: 'ვალიდაციის შეცდომა',
|
||||
msgLoading: 'ატვირთვა {index} / {files} …',
|
||||
msgProgress: 'ფაილის ატვირთვა დასრულებულია {index} / {files} - {name} - {percent}%.',
|
||||
msgSelected: 'არჩეულია {n} {file}',
|
||||
msgFoldersNotAllowed: 'დაშვებულია მხოლოდ ფაილების გადმოთრევა! გამოტოვებულია {n} გადმოთრეული ფოლდერი.',
|
||||
msgImageWidthSmall: 'სურათის "{name}" სიგანე უნდა იყოს არანაკლებ {size} px.',
|
||||
msgImageHeightSmall: 'სურათის "{name}" სიმაღლე უნდა იყოს არანაკლებ {size} px.',
|
||||
msgImageWidthLarge: 'სურათის "{name}" სიგანე არ უნდა აღემატებოდეს {size} px-ს.',
|
||||
msgImageHeightLarge: 'სურათის "{name}" სიმაღლე არ უნდა აღემატებოდეს {size} px-ს.',
|
||||
msgImageResizeError: 'ვერ მოხერხდა სურათის ზომის შეცვლისთვის საჭირო მონაცემების გარკვევა.',
|
||||
msgImageResizeException: 'შეცდომა სურათის ზომის შეცვლისას.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'დაფიქსირდა შეცდომა ოპერაციის {operation} შესრულებისას. ცადეთ მოგვიანებით!',
|
||||
msgAjaxProgressError: 'ვერ მოხერხდა ოპერაციის {operation} შესრულება',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'ფაილის წაშლა',
|
||||
uploadThumb: 'ფაილის ატვირთვა',
|
||||
uploadBatch: 'ფაილების ატვირთვა',
|
||||
uploadExtra: 'მონაცემების გაგზავნა ფორმიდან'
|
||||
},
|
||||
dropZoneTitle: 'გადმოათრიეთ ფაილები აქ …',
|
||||
dropZoneClickTitle: '<br>(ან დააჭირეთ რათა აირჩიოთ {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'ფაილის წაშლა',
|
||||
uploadTitle: 'ფაილის ატვირთვა',
|
||||
uploadRetryTitle: 'ატვირთვის გამეორება',
|
||||
downloadTitle: 'ფაილის ჩამოტვირთვა',
|
||||
zoomTitle: 'დეტალურად ნახვა',
|
||||
dragTitle: 'გადაადგილება / მიმდევრობის შეცვლა',
|
||||
indicatorNewTitle: 'ჯერ არ ატვირთულა',
|
||||
indicatorSuccessTitle: 'ატვირთულია',
|
||||
indicatorErrorTitle: 'ატვირთვის შეცდომა',
|
||||
indicatorLoadingTitle: 'ატვირთვა ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'წინა ფაილის ნახვა',
|
||||
next: 'შემდეგი ფაილის ნახვა',
|
||||
toggleheader: 'სათაურის დამალვა',
|
||||
fullscreen: 'მთელ ეკრანზე გაშლა',
|
||||
borderless: 'მთელ გვერდზე გაშლა',
|
||||
close: 'დახურვა'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Korean Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['kr'] = {
|
||||
fileSingle: '파일',
|
||||
filePlural: '파일들',
|
||||
browseLabel: '찾기 …',
|
||||
removeLabel: '지우기',
|
||||
removeTitle: '선택한 파일들 지우기',
|
||||
cancelLabel: '취소',
|
||||
cancelTitle: '업로드 중단하기',
|
||||
uploadLabel: '업로드',
|
||||
uploadTitle: '선택한 파일 업로드하기',
|
||||
msgNo: '아니요',
|
||||
msgNoFilesSelected: '선택한 파일이 없습니다.',
|
||||
msgCancelled: '취소되었습니다.',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: '자세한 미리보기',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: '파일 "{name}" (<b>{size} KB</b>)이 너무 작습니다. <b>{minSize} KB</b>보다 용량이 커야 합니다..',
|
||||
msgSizeTooLarge: '파일 "{name}" (<b>{size} KB</b>)이 너무 큽니다. 허용 파일 사이즈는 <b>{maxSize} KB</b>.입니다.',
|
||||
msgFilesTooLess: '업로드하기 위해 최소 <b>{n}</b> {files}개의 파일을 선택해야 합니다.',
|
||||
msgFilesTooMany: '선택한 파일의 수 <b>({n})</b>가 업로드 허용 최고치인 <b>{m}</b>를 넘었습니다..',
|
||||
msgFileNotFound: '파일 "{name}"을 찾을 수 없습니다.!',
|
||||
msgFileSecured: '보안상의 이유로 파일 "{name}"을/를 읽을 수 없습니다..',
|
||||
msgFileNotReadable: '파일 "{name}"은/는 읽을 수 없습니다.',
|
||||
msgFilePreviewAborted: '파일 "{name}"의 미리보기가 중단되었습니다.',
|
||||
msgFilePreviewError: '파일 "{name}"을/를 읽다가 에러가 발생했습니다.',
|
||||
msgInvalidFileName: '파일 "{name}" 중 지원 불가능한 문자가 포함되어 있습니다.',
|
||||
msgInvalidFileType: '파일 "{name}"의 타입은 지원하지 않습니다. "{types}" 타입의 파일을 선택해 주십시요.',
|
||||
msgInvalidFileExtension: '파일 "{name}"의 익스텐션은 지원하지 않습니다. "{extensions}" 타입의 익스텐션을 선택해 주십시요.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: '파일 업로드가 중단되었습니다.',
|
||||
msgUploadThreshold: '업로드 중...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: '업로드 가능 데이터가 존재하지 않습니다.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: '유효성 오류',
|
||||
msgLoading: '파일 {files} 중 {index}번째를 로딩하고 있습니다. …',
|
||||
msgProgress: '파일 {files}의 {name}이 {percent}% 로딩되었습니다. ',
|
||||
msgSelected: '{n} {files}이 선택 되었습니다.',
|
||||
msgFoldersNotAllowed: '드래그 앤 드랍 파일만 가능합니다! 드랍한 {n}번째 폴더를 건너 뛰었습니다.',
|
||||
msgImageWidthSmall: '이미지 파일 "{name}"의 가로는 최소 {size} px가 되어야 합니다.',
|
||||
msgImageHeightSmall: '이미지 파일 "{name}"의 세로는 최소 {size} px가 되어야 합니다.',
|
||||
msgImageWidthLarge: '이미지 파일 "{name}"의 가로는 최대 {size} px를 넘을수 없습니다.',
|
||||
msgImageHeightLarge: '이미지 파일 "{name}"의 세로는 최대 {size} px를 넘을수 없습니다.',
|
||||
msgImageResizeError: '이미지의 사이즈를 재조정을 위한 이미지 사이즈를 가져올 수 없습니다.',
|
||||
msgImageResizeException: '이미지 사이즈 재조정이 다음 이유로 실패했습니다.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: '파일을 여기에 드래그인 드랍을 하십시요 …',
|
||||
dropZoneClickTitle: '<br>(또는 {files} 선택을 위해 클릭하십시요)',
|
||||
fileActionSettings: {
|
||||
removeTitle: '파일 지우기',
|
||||
uploadTitle: '파일 업로드 하기',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: '세부 정보 보기',
|
||||
dragTitle: '옭기기 / 재배열하기',
|
||||
indicatorNewTitle: '아직 업로드가 안되었습니다.',
|
||||
indicatorSuccessTitle: '업로드가 성공하였습니다.',
|
||||
indicatorErrorTitle: '업로드 중 에러가 발행했습니다.',
|
||||
indicatorLoadingTitle: '업로드 중 ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: '전 파일 보기',
|
||||
next: '다음 파일 보기',
|
||||
toggleheader: '머릿글 토글하기',
|
||||
fullscreen: '전채화면 토글하기',
|
||||
borderless: '무 테두리 토글하기',
|
||||
close: '세부 정보 미리보기 토글하기'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,88 @@
|
||||
/*!
|
||||
* FileInput Kazakh Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author Kali Toleugazy <almatytol@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['kz'] = {
|
||||
fileSingle: 'файл',
|
||||
filePlural: 'файлдар',
|
||||
browseLabel: 'Таңдау …',
|
||||
removeLabel: 'Жою',
|
||||
removeTitle: 'Таңдалған файлдарды жою',
|
||||
cancelLabel: 'Күшін жою',
|
||||
cancelTitle: 'Ағымдағы жүктеуді болдырмау',
|
||||
uploadLabel: 'Жүктеу',
|
||||
uploadTitle: 'Таңдалған файлдарды жүктеу',
|
||||
msgNo: 'жоқ',
|
||||
msgNoFilesSelected: 'Файл таңдалмады',
|
||||
msgCancelled: 'Күші жойылған',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Алдын ала толық көру',
|
||||
msgSizeTooLarge: 'Файл "{name}" (<b>{size} KB</b>) ең үлкен <b>{maxSize} KB</b> өлшемінен асады.',
|
||||
msgFilesTooLess: 'Жүктеу үшіy кемінде <b>{n}</b> {files} таңдау керек.',
|
||||
msgFilesTooMany: 'Таңдалған <b>({n})</b> файлдардың саны берілген <b>{m}</b> саннан асып кетті.',
|
||||
msgFileNotFound: 'Файл "{name}" табылмады!',
|
||||
msgFileSecured: 'Шектеу қауіпсіздігі "{name}" файлын оқуға тыйым салады.',
|
||||
msgFileNotReadable: '"{name}" файлды оқу мүмкін емес.',
|
||||
msgFilePreviewAborted: '"{name}" файл үшін алдын ала қарап көру тыйым салынған.',
|
||||
msgFilePreviewError: '"{name}" файлды оқығанда қате пайда болды.',
|
||||
msgInvalidFileType: '"{name}" тыйым салынған файл түрі. Тек мынаналарға рұқсат етілген: "{types}"',
|
||||
msgInvalidFileExtension: '"{name}" тыйым салынған файл кеңейтімі. Тек "{extensions}" рұқсат.',
|
||||
msgUploadAborted: 'Файлды жүктеу доғарылды',
|
||||
msgUploadThreshold: 'Өңдеу...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Тексеру қатесі',
|
||||
msgLoading: '{index} файлды {files} … жүктеу',
|
||||
msgProgress: '{index} файлды {files} - {name} - {percent}% жүктеу аяқталды.',
|
||||
msgSelected: 'Таңдалған файлдар саны: {n}',
|
||||
msgFoldersNotAllowed: 'Тек файлдарды сүйреу рұқсат! {n} папка өткізілген.',
|
||||
msgImageWidthSmall: '{name} суреттің ені {size} px. аз болмау керек',
|
||||
msgImageHeightSmall: '{name} суреттің биіктігі {size} px. аз болмау керек',
|
||||
msgImageWidthLarge: '"{name}" суреттің ені {size} px. аспау керек',
|
||||
msgImageHeightLarge: '"{name}" суреттің биіктігі {size} px. аспау керек',
|
||||
msgImageResizeError: 'Суреттің өлшемін өзгерту үшін, мөлшері алынбады',
|
||||
msgImageResizeException: 'Суреттің мөлшерлерін өзгерткен кезде қателік пайда болды.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Файлдарды осында сүйреу …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Файлды өшіру',
|
||||
uploadTitle: 'Файлды жүктеу',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'мәліметтерді көру',
|
||||
dragTitle: 'Орнын ауыстыру',
|
||||
indicatorNewTitle: 'Жүктелген жоқ',
|
||||
indicatorSuccessTitle: 'Жүктелген',
|
||||
indicatorErrorTitle: 'Жүктелу қатесі ',
|
||||
indicatorLoadingTitle: 'Жүктелу ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Алдыңғы файлды қарау',
|
||||
next: 'Келесі файлды қарау',
|
||||
toggleheader: 'Тақырыпты ауыстыру',
|
||||
fullscreen: 'Толық экран режимін қосу',
|
||||
borderless: 'Жиексіз режиміне ауысу',
|
||||
close: 'Толық көрінісін жабу'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput <_LANG_> Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author Mindaugas Varkalys <varkalys.mindaugas@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['lt'] = {
|
||||
fileSingle: 'failas',
|
||||
filePlural: 'failai',
|
||||
browseLabel: 'Naršyti …',
|
||||
removeLabel: 'Šalinti',
|
||||
removeTitle: 'Pašalinti pasirinktus failus',
|
||||
cancelLabel: 'Atšaukti',
|
||||
cancelTitle: 'Atšaukti vykstantį įkėlimą',
|
||||
uploadLabel: 'Įkelti',
|
||||
uploadTitle: 'Įkelti pasirinktus failus',
|
||||
msgNo: 'Ne',
|
||||
msgNoFilesSelected: 'Nepasirinkta jokių failų',
|
||||
msgCancelled: 'Atšaukta',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Detali Peržiūra',
|
||||
msgFileRequired: 'Pasirinkite failą įkėlimui.',
|
||||
msgSizeTooSmall: 'Failas "{name}" (<b>{size} KB</b>) yra per mažas ir turi būti didesnis nei <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Failas "{name}" (<b>{size} KB</b>) viršija maksimalų leidžiamą įkeliamo failo dydį <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Turite pasirinkti bent <b>{n}</b> failus įkėlimui.',
|
||||
msgFilesTooMany: 'Įkėlimui pasirinktų failų skaičius <b>({n})</b> viršija maksimalų leidžiamą limitą <b>{m}</b>.',
|
||||
msgFileNotFound: 'Failas "{name}" nerastas!',
|
||||
msgFileSecured: 'Saugumo apribojimai neleidžia perskaityti failo "{name}".',
|
||||
msgFileNotReadable: 'Failas "{name}" neperskaitomas.',
|
||||
msgFilePreviewAborted: 'Failo peržiūra nutraukta "{name}".',
|
||||
msgFilePreviewError: 'Įvyko klaida skaitant failą "{name}".',
|
||||
msgInvalidFileName: 'Klaidingi arba nepalaikomi simboliai failo pavadinime "{name}".',
|
||||
msgInvalidFileType: 'Klaidingas failo "{name}" tipas. Tik "{types}" tipai yra palaikomi.',
|
||||
msgInvalidFileExtension: 'Klaidingas failo "{name}" plėtinys. Tik "{extensions}" plėtiniai yra palaikomi.',
|
||||
msgFileTypes: {
|
||||
'image': 'paveikslėlis',
|
||||
'html': 'HTML',
|
||||
'text': 'tekstas',
|
||||
'video': 'vaizdo įrašas',
|
||||
'audio': 'garso įrašas',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'objektas'
|
||||
},
|
||||
msgUploadAborted: 'Failo įkėlimas buvo nutrauktas',
|
||||
msgUploadThreshold: 'Vykdoma...',
|
||||
msgUploadBegin: 'Inicijuojama...',
|
||||
msgUploadEnd: 'Baigta',
|
||||
msgUploadEmpty: 'Nėra teisingų duomenų įkėlimui.',
|
||||
msgUploadError: 'Klaida',
|
||||
msgValidationError: 'Validacijos Klaida',
|
||||
msgLoading: 'Keliamas failas {index} iš {files} …',
|
||||
msgProgress: 'Keliamas failas {index} iš {files} - {name} - {percent}% baigta.',
|
||||
msgSelected: 'Pasirinkti {n} {files}',
|
||||
msgFoldersNotAllowed: 'Tempkite tik failus! Praleisti {n} nutempti aplankalas(-i).',
|
||||
msgImageWidthSmall: 'Paveikslėlio "{name}" plotis turi būti bent {size} px.',
|
||||
msgImageHeightSmall: 'Paveikslėlio "{name}" aukštis turi būti bent {size} px.',
|
||||
msgImageWidthLarge: 'Paveikslėlio "{name}" plotis negali viršyti {size} px.',
|
||||
msgImageHeightLarge: 'Paveikslėlio "{name}" aukštis negali viršyti {size} px.',
|
||||
msgImageResizeError: 'Nepavyksta gauti paveikslėlio matmetų, kad pakeisti jo matmemis.',
|
||||
msgImageResizeException: 'Klaida keičiant paveikslėlio matmenis.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Kažkas nutiko vykdant {operation} operaciją. Prašome pabandyti vėliau!',
|
||||
msgAjaxProgressError: '{operation} operacija nesėkminga',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'failo trynimo',
|
||||
uploadThumb: 'failo įkėlimo',
|
||||
uploadBatch: 'failų rinkinio įkėlimo',
|
||||
uploadExtra: 'formos duomenų įkėlimo'
|
||||
},
|
||||
dropZoneTitle: 'Tempkite failus čia …',
|
||||
dropZoneClickTitle: '<br>(arba paspauskite, kad pasirinktumėte failus)',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Šalinti failą',
|
||||
uploadTitle: 'Įkelti failą',
|
||||
uploadRetryTitle: 'Bandyti įkelti vėl',
|
||||
zoomTitle: 'Peržiūrėti detales',
|
||||
dragTitle: 'Perstumti',
|
||||
indicatorNewTitle: 'Dar neįkelta',
|
||||
indicatorSuccessTitle: 'Įkelta',
|
||||
indicatorErrorTitle: 'Įkėlimo Klaida',
|
||||
indicatorLoadingTitle: 'Įkeliama ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Peržiūrėti ankstesnį failą',
|
||||
next: 'Peržiūrėti kitą failą',
|
||||
toggleheader: 'Perjungti viršutinę juostą',
|
||||
fullscreen: 'Perjungti pilno ekrano rėžimą',
|
||||
borderless: 'Perjungti berėmį režimą',
|
||||
close: 'Uždaryti detalią peržiūrą'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Dutch Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['nl'] = {
|
||||
fileSingle: 'bestand',
|
||||
filePlural: 'bestanden',
|
||||
browseLabel: 'Zoek …',
|
||||
removeLabel: 'Verwijder',
|
||||
removeTitle: 'Verwijder geselecteerde bestanden',
|
||||
cancelLabel: 'Annuleren',
|
||||
cancelTitle: 'Annuleer upload',
|
||||
uploadLabel: 'Upload',
|
||||
uploadTitle: 'Upload geselecteerde bestanden',
|
||||
msgNo: 'Nee',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'Geannuleerd',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Gedetailleerd voorbeeld',
|
||||
msgFileRequired: 'U moet een bestand kiezen om te uploaden.',
|
||||
msgSizeTooSmall: 'Bestand "{name}" (<b>{size} KB</b>) is te klein en moet groter zijn dan <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Bestand "{name}" (<b>{size} KB</b>) is groter dan de toegestane <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'U moet minstens <b>{n}</b> {files} selecteren om te uploaden.',
|
||||
msgFilesTooMany: 'Aantal geselecteerde bestanden <b>({n})</b> is meer dan de toegestane <b>{m}</b>.',
|
||||
msgFileNotFound: 'Bestand "{name}" niet gevonden!',
|
||||
msgFileSecured: 'Bestand kan niet gelezen worden in verband met beveiligings redenen "{name}".',
|
||||
msgFileNotReadable: 'Bestand "{name}" is niet leesbaar.',
|
||||
msgFilePreviewAborted: 'Bestand weergaven geannuleerd voor "{name}".',
|
||||
msgFilePreviewError: 'Er is een fout opgetreden met het lezen van "{name}".',
|
||||
msgInvalidFileName: 'Ongeldige of niet ondersteunde karakters in bestandsnaam "{name}".',
|
||||
msgInvalidFileType: 'Geen geldig bestand "{name}". Alleen "{types}" zijn toegestaan.',
|
||||
msgInvalidFileExtension: 'Geen geldige extensie "{name}". Alleen "{extensions}" zijn toegestaan.',
|
||||
msgFileTypes: {
|
||||
'image': 'afbeelding',
|
||||
'html': 'HTML',
|
||||
'text': 'tekst',
|
||||
'video': 'video',
|
||||
'audio': 'geluid',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Het uploaden van bestanden is afgebroken',
|
||||
msgUploadThreshold: 'Verwerken...',
|
||||
msgUploadBegin: 'Initialiseren...',
|
||||
msgUploadEnd: 'Gedaan',
|
||||
msgUploadEmpty: 'Geen geldige data beschikbaar voor upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Bevestiging fout',
|
||||
msgLoading: 'Bestanden laden {index} van de {files} …',
|
||||
msgProgress: 'Bestanden laden {index} van de {files} - {name} - {percent}% compleet.',
|
||||
msgSelected: '{n} {files} geselecteerd',
|
||||
msgFoldersNotAllowed: 'Drag & drop alleen bestanden! {n} overgeslagen map(pen).',
|
||||
msgImageWidthSmall: 'Breedte van het foto-bestand "{name}" moet minstens {size} px zijn.',
|
||||
msgImageHeightSmall: 'Hoogte van het foto-bestand "{name}" moet minstens {size} px zijn.',
|
||||
msgImageWidthLarge: 'Breedte van het foto-bestand "{name}" kan niet hoger zijn dan {size} px.',
|
||||
msgImageHeightLarge: 'Hoogte van het foto bestand "{name}" kan niet hoger zijn dan {size} px.',
|
||||
msgImageResizeError: 'Kon de foto afmetingen niet lezen om te verkleinen.',
|
||||
msgImageResizeException: 'Fout bij het verkleinen van de foto.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Er ging iets mis met de {operation} actie. Gelieve later opnieuw te proberen!',
|
||||
msgAjaxProgressError: '{operation} mislukt',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'bestand verwijderen',
|
||||
uploadThumb: 'bestand uploaden',
|
||||
uploadBatch: 'alle bestanden uploaden',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Drag & drop bestanden hier …',
|
||||
dropZoneClickTitle: '<br>(of klik hier om {files} te selecteren)',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Verwijder bestand',
|
||||
uploadTitle: 'bestand uploaden',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Bekijk details',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'Nog niet geupload',
|
||||
indicatorSuccessTitle: 'geupload',
|
||||
indicatorErrorTitle: 'fout uploaden',
|
||||
indicatorLoadingTitle: 'uploaden ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Toon vorig bestand',
|
||||
next: 'Toon volgend bestand',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,99 @@
|
||||
/*!
|
||||
* FileInput Norwegian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['no'] = {
|
||||
fileSingle: 'fil',
|
||||
filePlural: 'filer',
|
||||
browseLabel: 'Bla gjennom …',
|
||||
removeLabel: 'Fjern',
|
||||
removeTitle: 'Fjern valgte filer',
|
||||
cancelLabel: 'Avbryt',
|
||||
cancelTitle: 'Stopp pågående opplastninger',
|
||||
uploadLabel: 'Last opp',
|
||||
uploadTitle: 'Last opp valgte filer',
|
||||
msgNo: 'Nei',
|
||||
msgNoFilesSelected: 'Ingen filer er valgt',
|
||||
msgCancelled: 'Avbrutt',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Detaljert visning',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'Filen "{name}" (<b>{size} KB</b>) er for liten og må være større enn <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Filen "{name}" (<b>{size} KB</b>) er for stor, maksimal filstørrelse er <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Du må velge minst <b>{n}</b> {files} for opplastning.',
|
||||
msgFilesTooMany: 'For mange filer til opplastning, <b>({n})</b> overstiger maksantallet som er <b>{m}</b>.',
|
||||
msgFileNotFound: 'Fant ikke filen "{name}"!',
|
||||
msgFileSecured: 'Sikkerhetsrestriksjoner hindrer lesing av filen "{name}".',
|
||||
msgFileNotReadable: 'Filen "{name}" er ikke lesbar.',
|
||||
msgFilePreviewAborted: 'Filvisning avbrutt for "{name}".',
|
||||
msgFilePreviewError: 'En feil oppstod under lesing av filen "{name}".',
|
||||
msgInvalidFileName: 'Ugyldige tegn i filen "{name}".',
|
||||
msgInvalidFileType: 'Ugyldig type for filen "{name}". Kun "{types}" filer er tillatt.',
|
||||
msgInvalidFileExtension: 'Ugyldig endelse for filen "{name}". Kun "{extensions}" filer støttes.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Filopplastningen ble avbrutt',
|
||||
msgUploadThreshold: 'Prosesserer...',
|
||||
msgUploadBegin: 'Initialiserer...',
|
||||
msgUploadEnd: 'Ferdig',
|
||||
msgUploadEmpty: 'Ingen gyldige data tilgjengelig for opplastning.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Valideringsfeil',
|
||||
msgLoading: 'Laster fil {index} av {files} …',
|
||||
msgProgress: 'Laster fil {index} av {files} - {name} - {percent}% fullført.',
|
||||
msgSelected: '{n} {files} valgt',
|
||||
msgFoldersNotAllowed: 'Kun Dra & slipp filer! Hoppet over {n} mappe(r).',
|
||||
msgImageWidthSmall: 'Bredde på bildefilen "{name}" må være minst {size} px.',
|
||||
msgImageHeightSmall: 'Høyde på bildefilen "{name}" må være minst {size} px.',
|
||||
msgImageWidthLarge: 'Bredde på bildefilen "{name}" kan ikke overstige {size} px.',
|
||||
msgImageHeightLarge: 'Høyde på bildefilen "{name}" kan ikke overstige {size} px.',
|
||||
msgImageResizeError: 'Fant ikke dimensjonene som skulle resizes.',
|
||||
msgImageResizeException: 'En feil oppstod under endring av størrelse .<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Noe gikk galt med {operation} operasjonen. Vennligst prøv igjen senere!',
|
||||
msgAjaxProgressError: '{operation} feilet',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Dra & slipp filer her …',
|
||||
dropZoneClickTitle: '<br>(eller klikk for å velge {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Fjern fil',
|
||||
uploadTitle: 'Last opp fil',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
zoomTitle: 'Vis detaljer',
|
||||
dragTitle: 'Flytt / endre rekkefølge',
|
||||
indicatorNewTitle: 'Opplastning ikke fullført',
|
||||
indicatorSuccessTitle: 'Opplastet',
|
||||
indicatorErrorTitle: 'Opplastningsfeil',
|
||||
indicatorLoadingTitle: 'Laster opp ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Vis forrige fil',
|
||||
next: 'Vis neste fil',
|
||||
toggleheader: 'Vis header',
|
||||
fullscreen: 'Åpne fullskjerm',
|
||||
borderless: 'Åpne uten kanter',
|
||||
close: 'Lukk detaljer'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,90 @@
|
||||
/*!
|
||||
* FileInput Polish Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['pl'] = {
|
||||
fileSingle: 'plik',
|
||||
filePlural: 'pliki',
|
||||
browseLabel: 'Przeglądaj …',
|
||||
removeLabel: 'Usuń',
|
||||
removeTitle: 'Usuń zaznaczone pliki',
|
||||
cancelLabel: 'Przerwij',
|
||||
cancelTitle: 'Anuluj wysyłanie',
|
||||
uploadLabel: 'Wgraj',
|
||||
uploadTitle: 'Wgraj zaznaczone pliki',
|
||||
msgNo: 'Nie',
|
||||
msgNoFilesSelected: 'Brak zaznaczonych plików',
|
||||
msgCancelled: 'Odwołany',
|
||||
msgPlaceholder: 'Wybierz {files}...',
|
||||
msgZoomModalHeading: 'Szczegółowy podgląd',
|
||||
msgFileRequired: 'Musisz wybrać plik do wgrania.',
|
||||
msgSizeTooSmall: 'Plik "{name}" (<b>{size} KB</b>) jest zbyt mały i musi być większy niż <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Plik o nazwie "{name}" (<b>{size} KB</b>) przekroczył maksymalną dopuszczalną wielkość pliku wynoszącą <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Minimalna liczba plików do wgrania: <b>{n}</b>.',
|
||||
msgFilesTooMany: 'Liczba plików wybranych do wgrania w liczbie <b>({n})</b>, przekracza maksymalny dozwolony limit wynoszący <b>{m}</b>.',
|
||||
msgFileNotFound: 'Plik "{name}" nie istnieje!',
|
||||
msgFileSecured: 'Ustawienia zabezpieczeń uniemożliwiają odczyt pliku "{name}".',
|
||||
msgFileNotReadable: 'Plik "{name}" nie jest plikiem do odczytu.',
|
||||
msgFilePreviewAborted: 'Podgląd pliku "{name}" został przerwany.',
|
||||
msgFilePreviewError: 'Wystąpił błąd w czasie odczytu pliku "{name}".',
|
||||
msgInvalidFileName: 'Nieprawidłowe lub nieobsługiwane znaki w nazwie pliku "{name}".',
|
||||
msgInvalidFileType: 'Nieznany typ pliku "{name}". Tylko następujące rodzaje plików są dozwolone: "{types}".',
|
||||
msgInvalidFileExtension: 'Złe rozszerzenie dla pliku "{name}". Tylko następujące rozszerzenia plików są dozwolone: "{extensions}".',
|
||||
msgUploadAborted: 'Przesyłanie pliku zostało przerwane',
|
||||
msgUploadThreshold: 'Przetwarzanie...',
|
||||
msgUploadBegin: 'Rozpoczynanie...',
|
||||
msgUploadEnd: 'Gotowe!',
|
||||
msgUploadEmpty: 'Brak poprawnych danych do przesłania.',
|
||||
msgUploadError: 'Błąd',
|
||||
msgValidationError: 'Błąd walidacji',
|
||||
msgLoading: 'Wczytywanie pliku {index} z {files} …',
|
||||
msgProgress: 'Wczytywanie pliku {index} z {files} - {name} - {percent}% zakończone.',
|
||||
msgSelected: '{n} Plików zaznaczonych',
|
||||
msgFoldersNotAllowed: 'Metodą przeciągnij i upuść, można przenosić tylko pliki. Pominięto {n} katalogów.',
|
||||
msgImageWidthSmall: 'Szerokość pliku obrazu "{name}" musi być co najmniej {size} px.',
|
||||
msgImageHeightSmall: 'Wysokość pliku obrazu "{name}" musi być co najmniej {size} px.',
|
||||
msgImageWidthLarge: 'Szerokość pliku obrazu "{name}" nie może przekraczać {size} px.',
|
||||
msgImageHeightLarge: 'Wysokość pliku obrazu "{name}" nie może przekraczać {size} px.',
|
||||
msgImageResizeError: 'Nie udało się uzyskać wymiaru obrazu, aby zmienić rozmiar.',
|
||||
msgImageResizeException: 'Błąd podczas zmiany rozmiaru obrazu.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Coś poczło nie tak podczas {operation}. Spróbuj ponownie!',
|
||||
msgAjaxProgressError: '{operation} nie powiodło się',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'usuwanie pliku',
|
||||
uploadThumb: 'przesyłanie pliku',
|
||||
uploadBatch: 'masowe przesyłanie plików',
|
||||
uploadExtra: 'przesyłanie danych formularza'
|
||||
},
|
||||
dropZoneTitle: 'Przeciągnij i upuść pliki tutaj …',
|
||||
dropZoneClickTitle: '<br>(lub kliknij tutaj i wybierz {files} z komputera)',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Usuń plik',
|
||||
uploadTitle: 'Przesyłanie pliku',
|
||||
uploadRetryTitle: 'Ponów',
|
||||
downloadTitle: 'Pobierz plik',
|
||||
zoomTitle: 'Pokaż szczegóły',
|
||||
dragTitle: 'Przenies / Ponownie zaaranżuj',
|
||||
indicatorNewTitle: 'Jeszcze nie przesłany',
|
||||
indicatorSuccessTitle: 'Dodane',
|
||||
indicatorErrorTitle: 'Błąd',
|
||||
indicatorLoadingTitle: 'Przesyłanie ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Pokaż poprzedni plik',
|
||||
next: 'Pokaż następny plik',
|
||||
toggleheader: 'Włącz / wyłącz nagłówek',
|
||||
fullscreen: 'Włącz / wyłącz pełny ekran',
|
||||
borderless: 'Włącz / wyłącz tryb bez ramek',
|
||||
close: 'Zamknij szczegółowy widok'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Brazillian Portuguese Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['pt-BR'] = {
|
||||
fileSingle: 'arquivo',
|
||||
filePlural: 'arquivos',
|
||||
browseLabel: 'Procurar…',
|
||||
removeLabel: 'Remover',
|
||||
removeTitle: 'Remover arquivos selecionados',
|
||||
cancelLabel: 'Cancelar',
|
||||
cancelTitle: 'Interromper envio em andamento',
|
||||
uploadLabel: 'Enviar',
|
||||
uploadTitle: 'Enviar arquivos selecionados',
|
||||
msgNo: 'Não',
|
||||
msgNoFilesSelected: 'Nenhum arquivo selecionado',
|
||||
msgCancelled: 'Cancelado',
|
||||
msgPlaceholder: 'Selecionar {files}...',
|
||||
msgZoomModalHeading: 'Pré-visualização detalhada',
|
||||
msgFileRequired: 'Você deve selecionar um arquivo para enviar.',
|
||||
msgSizeTooSmall: 'O arquivo "{name}" (<b>{size} KB</b>) é muito pequeno e deve ser maior que <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'O arquivo "{name}" (<b>{size} KB</b>) excede o tamanho máximo permitido de <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Você deve selecionar pelo menos <b>{n}</b> {files} para enviar.',
|
||||
msgFilesTooMany: 'O número de arquivos selecionados para o envio <b>({n})</b> excede o limite máximo permitido de <b>{m}</b>.',
|
||||
msgFileNotFound: 'O arquivo "{name}" não foi encontrado!',
|
||||
msgFileSecured: 'Restrições de segurança impedem a leitura do arquivo "{name}".',
|
||||
msgFileNotReadable: 'O arquivo "{name}" não pode ser lido.',
|
||||
msgFilePreviewAborted: 'A pré-visualização do arquivo "{name}" foi interrompida.',
|
||||
msgFilePreviewError: 'Ocorreu um erro ao ler o arquivo "{name}".',
|
||||
msgInvalidFileName: 'Caracteres inválidos ou não suportados no arquivo "{name}".',
|
||||
msgInvalidFileType: 'Tipo inválido para o arquivo "{name}". Apenas arquivos "{types}" são permitidos.',
|
||||
msgInvalidFileExtension: 'Extensão inválida para o arquivo "{name}". Apenas arquivos "{extensions}" são permitidos.',
|
||||
msgFileTypes: {
|
||||
'image': 'imagem',
|
||||
'html': 'HTML',
|
||||
'text': 'texto',
|
||||
'video': 'vídeo',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'objeto'
|
||||
},
|
||||
msgUploadAborted: 'O envio do arquivo foi abortado',
|
||||
msgUploadThreshold: 'Processando...',
|
||||
msgUploadBegin: 'Inicializando...',
|
||||
msgUploadEnd: 'Concluído',
|
||||
msgUploadEmpty: 'Nenhuma informação válida para upload.',
|
||||
msgUploadError: 'Erro de Upload',
|
||||
msgValidationError: 'Erro de validação',
|
||||
msgLoading: 'Enviando arquivo {index} de {files}…',
|
||||
msgProgress: 'Enviando arquivo {index} de {files} - {name} - {percent}% completo.',
|
||||
msgSelected: '{n} {files} selecionado(s)',
|
||||
msgFoldersNotAllowed: 'Arraste e solte apenas arquivos! {n} pasta(s) ignoradas.',
|
||||
msgImageWidthSmall: 'Largura do arquivo de imagem "{name}" deve ser pelo menos {size} px.',
|
||||
msgImageHeightSmall: 'Altura do arquivo de imagem "{name}" deve ser pelo menos {size} px.',
|
||||
msgImageWidthLarge: 'Largura do arquivo de imagem "{name}" não pode exceder {size} px.',
|
||||
msgImageHeightLarge: 'Altura do arquivo de imagem "{name}" não pode exceder {size} px.',
|
||||
msgImageResizeError: 'Não foi possível obter as dimensões da imagem para redimensionar.',
|
||||
msgImageResizeException: 'Erro ao redimensionar a imagem.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Algo deu errado com a operação {operation}. Por favor tente novamente mais tarde!',
|
||||
msgAjaxProgressError: '{operation} falhou',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'Exclusão de arquivo',
|
||||
uploadThumb: 'Upload de arquivos',
|
||||
uploadBatch: 'Carregamento de arquivos em lote',
|
||||
uploadExtra: 'Carregamento de dados do formulário'
|
||||
},
|
||||
dropZoneTitle: 'Arraste e solte os arquivos aqui…',
|
||||
dropZoneClickTitle: '<br>(ou clique para selecionar o(s) arquivo(s))',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Remover arquivo',
|
||||
uploadTitle: 'Enviar arquivo',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Ver detalhes',
|
||||
dragTitle: 'Mover / Reordenar',
|
||||
indicatorNewTitle: 'Ainda não enviado',
|
||||
indicatorSuccessTitle: 'Enviado',
|
||||
indicatorErrorTitle: 'Erro',
|
||||
indicatorLoadingTitle: 'Enviando...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Visualizar arquivo anterior',
|
||||
next: 'Visualizar próximo arquivo',
|
||||
toggleheader: 'Mostrar cabeçalho',
|
||||
fullscreen: 'Ativar tela cheia',
|
||||
borderless: 'Ativar modo sem borda',
|
||||
close: 'Fechar pré-visualização detalhada'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Portuguese Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['pt'] = {
|
||||
fileSingle: 'ficheiro',
|
||||
filePlural: 'ficheiros',
|
||||
browseLabel: 'Procurar …',
|
||||
removeLabel: 'Remover',
|
||||
removeTitle: 'Remover ficheiros seleccionados',
|
||||
cancelLabel: 'Cancelar',
|
||||
cancelTitle: 'Abortar carregamento ',
|
||||
uploadLabel: 'Carregar',
|
||||
uploadTitle: 'Carregar ficheiros seleccionados',
|
||||
msgNo: 'Não',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'Cancelado',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Pré-visualização detalhada',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Ficheiro "{name}" (<b>{size} KB</b>) excede o tamanho máximo permido de <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Deve seleccionar pelo menos <b>{n}</b> {files} para fazer upload.',
|
||||
msgFilesTooMany: 'Número máximo de ficheiros seleccionados <b>({n})</b> excede o limite máximo de <b>{m}</b>.',
|
||||
msgFileNotFound: 'Ficheiro "{name}" não encontrado!',
|
||||
msgFileSecured: 'Restrições de segurança preventem a leitura do ficheiro "{name}".',
|
||||
msgFileNotReadable: 'Ficheiro "{name}" não pode ser lido.',
|
||||
msgFilePreviewAborted: 'Pré-visualização abortado para o ficheiro "{name}".',
|
||||
msgFilePreviewError: 'Ocorreu um erro ao ler o ficheiro "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Tipo inválido para o ficheiro "{name}". Apenas ficheiros "{types}" são suportados.',
|
||||
msgInvalidFileExtension: 'Extensão inválida para o ficheiro "{name}". Apenas ficheiros "{extensions}" são suportados.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'O upload do arquivo foi abortada',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Erro de validação',
|
||||
msgLoading: 'A carregar ficheiro {index} de {files} …',
|
||||
msgProgress: 'A carregar ficheiro {index} de {files} - {name} - {percent}% completo.',
|
||||
msgSelected: '{n} {files} seleccionados',
|
||||
msgFoldersNotAllowed: 'Arrastar e largar ficheiros apenas! {n} pasta(s) ignoradas.',
|
||||
msgImageWidthSmall: 'Largura do arquivo de imagem "{name}" deve ser pelo menos {size} px.',
|
||||
msgImageHeightSmall: 'Altura do arquivo de imagem "{name}" deve ser pelo menos {size} px.',
|
||||
msgImageWidthLarge: 'Largura do arquivo de imagem "{name}" não pode exceder {size} px.',
|
||||
msgImageHeightLarge: 'Altura do arquivo de imagem "{name}" não pode exceder {size} px.',
|
||||
msgImageResizeError: 'Could not get the image dimensions to resize.',
|
||||
msgImageResizeException: 'Erro ao redimensionar a imagem.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Arrastar e largar ficheiros aqui …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Remover arquivo',
|
||||
uploadTitle: 'Carregar arquivo',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Ver detalhes',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'Ainda não carregou',
|
||||
indicatorSuccessTitle: 'Carregado',
|
||||
indicatorErrorTitle: 'Carregar Erro',
|
||||
indicatorLoadingTitle: 'A carregar ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,101 @@
|
||||
/*!
|
||||
* FileInput Romanian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author Ciprian Voicu <pictoru@autoportret.ro>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['ro'] = {
|
||||
fileSingle: 'fișier',
|
||||
filePlural: 'fișiere',
|
||||
browseLabel: 'Răsfoiește …',
|
||||
removeLabel: 'Șterge',
|
||||
removeTitle: 'Curăță fișierele selectate',
|
||||
cancelLabel: 'Renunță',
|
||||
cancelTitle: 'Anulează încărcarea curentă',
|
||||
uploadLabel: 'Încarcă',
|
||||
uploadTitle: 'Încarcă fișierele selectate',
|
||||
msgNo: 'Nu',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'Anulat',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Previzualizare detaliată',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Fișierul "{name}" (<b>{size} KB</b>) depășește limita maximă de încărcare de <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Trebuie să selectezi cel puțin <b>{n}</b> {files} pentru a încărca.',
|
||||
msgFilesTooMany: 'Numărul fișierelor pentru încărcare <b>({n})</b> depășește limita maximă de <b>{m}</b>.',
|
||||
msgFileNotFound: 'Fișierul "{name}" nu a fost găsit!',
|
||||
msgFileSecured: 'Restricții de securitate previn citirea fișierului "{name}".',
|
||||
msgFileNotReadable: 'Fișierul "{name}" nu se poate citi.',
|
||||
msgFilePreviewAborted: 'Fișierului "{name}" nu poate fi previzualizat.',
|
||||
msgFilePreviewError: 'A intervenit o eroare în încercarea de citire a fișierului "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Tip de fișier incorect pentru "{name}". Sunt suportate doar fișiere de tipurile "{types}".',
|
||||
msgInvalidFileExtension: 'Extensie incorectă pentru "{name}". Sunt suportate doar extensiile "{extensions}".',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Fișierul Încărcarea a fost întrerupt',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Eroare de validare',
|
||||
msgLoading: 'Se încarcă fișierul {index} din {files} …',
|
||||
msgProgress: 'Se încarcă fișierul {index} din {files} - {name} - {percent}% încărcat.',
|
||||
msgSelected: '{n} {files} încărcate',
|
||||
msgFoldersNotAllowed: 'Se poate doar trăgând fișierele! Se renunță la {n} dosar(e).',
|
||||
msgImageWidthSmall: 'Lățimea de fișier de imagine "{name}" trebuie să fie de cel puțin {size} px.',
|
||||
msgImageHeightSmall: 'Înălțimea fișier imagine "{name}" trebuie să fie de cel puțin {size} px.',
|
||||
msgImageWidthLarge: 'Lățimea de fișier de imagine "{name}" nu poate depăși {size} px.',
|
||||
msgImageHeightLarge: 'Înălțimea fișier imagine "{name}" nu poate depăși {size} px.',
|
||||
msgImageResizeError: 'Nu a putut obține dimensiunile imaginii pentru a redimensiona.',
|
||||
msgImageResizeException: 'Eroare la redimensionarea imaginii.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Trage fișierele aici …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Scoateți fișier',
|
||||
uploadTitle: 'Incarca fisier',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Vezi detalii',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'Nu a încărcat încă',
|
||||
indicatorSuccessTitle: 'încărcat',
|
||||
indicatorErrorTitle: 'Încărcați eroare',
|
||||
indicatorLoadingTitle: 'Se încarcă ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,101 @@
|
||||
/*!
|
||||
* FileInput Russian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author CyanoFresh <cyanofresh@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['ru'] = {
|
||||
fileSingle: 'файл',
|
||||
filePlural: 'файлы',
|
||||
browseLabel: 'Выбрать …',
|
||||
removeLabel: 'Удалить',
|
||||
removeTitle: 'Очистить выбранные файлы',
|
||||
cancelLabel: 'Отмена',
|
||||
cancelTitle: 'Отменить текущую загрузку',
|
||||
uploadLabel: 'Загрузить',
|
||||
uploadTitle: 'Загрузить выбранные файлы',
|
||||
msgNo: 'нет',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'Отменено',
|
||||
msgPlaceholder: 'Выбрать {files}...',
|
||||
msgZoomModalHeading: 'Подробное превью',
|
||||
msgFileRequired: 'Необходимо выбрать файл для загрузки.',
|
||||
msgSizeTooSmall: 'Файл "{name}" (<b>{size} KB</b>) имеет слишком маленький размер и должен быть больше <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Файл "{name}" (<b>{size} KB</b>) превышает максимальный размер <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Вы должны выбрать как минимум <b>{n}</b> {files} для загрузки.',
|
||||
msgFilesTooMany: 'Количество выбранных файлов <b>({n})</b> превышает максимально допустимое количество <b>{m}</b>.',
|
||||
msgFileNotFound: 'Файл "{name}" не найден!',
|
||||
msgFileSecured: 'Ограничения безопасности запрещают читать файл "{name}".',
|
||||
msgFileNotReadable: 'Файл "{name}" невозможно прочитать.',
|
||||
msgFilePreviewAborted: 'Предпросмотр отменен для файла "{name}".',
|
||||
msgFilePreviewError: 'Произошла ошибка при чтении файла "{name}".',
|
||||
msgInvalidFileName: 'Неверные или неподдерживаемые символы в названии файла "{name}".',
|
||||
msgInvalidFileType: 'Запрещенный тип файла для "{name}". Только "{types}" разрешены.',
|
||||
msgInvalidFileExtension: 'Запрещенное расширение для файла "{name}". Только "{extensions}" разрешены.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Выгрузка файла прервана',
|
||||
msgUploadThreshold: 'Обработка...',
|
||||
msgUploadBegin: 'Инициализация...',
|
||||
msgUploadEnd: 'Готово',
|
||||
msgUploadEmpty: 'Недопустимые данные для загрузки',
|
||||
msgUploadError: 'Ошибка загрузки',
|
||||
msgValidationError: 'Ошибка проверки',
|
||||
msgLoading: 'Загрузка файла {index} из {files} …',
|
||||
msgProgress: 'Загрузка файла {index} из {files} - {name} - {percent}% завершено.',
|
||||
msgSelected: 'Выбрано файлов: {n}',
|
||||
msgFoldersNotAllowed: 'Разрешено перетаскивание только файлов! Пропущено {n} папок.',
|
||||
msgImageWidthSmall: 'Ширина изображения {name} должна быть не меньше {size} px.',
|
||||
msgImageHeightSmall: 'Высота изображения {name} должна быть не меньше {size} px.',
|
||||
msgImageWidthLarge: 'Ширина изображения "{name}" не может превышать {size} px.',
|
||||
msgImageHeightLarge: 'Высота изображения "{name}" не может превышать {size} px.',
|
||||
msgImageResizeError: 'Не удалось получить размеры изображения, чтобы изменить размер.',
|
||||
msgImageResizeException: 'Ошибка при изменении размера изображения.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Произошла ошибка при выполнении операции {operation}. Повторите попытку позже!',
|
||||
msgAjaxProgressError: 'Не удалось выполнить {operation}',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'удалить файл',
|
||||
uploadThumb: 'загрузить файл',
|
||||
uploadBatch: 'загрузить пакет файлов',
|
||||
uploadExtra: 'загрузка данных с формы'
|
||||
},
|
||||
dropZoneTitle: 'Перетащите файлы сюда …',
|
||||
dropZoneClickTitle: '<br>(Или щёлкните, чтобы выбрать {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Удалить файл',
|
||||
uploadTitle: 'Загрузить файл',
|
||||
uploadRetryTitle: 'Повторить загрузку',
|
||||
downloadTitle: 'Загрузить файл',
|
||||
zoomTitle: 'Посмотреть детали',
|
||||
dragTitle: 'Переместить / Изменить порядок',
|
||||
indicatorNewTitle: 'Еще не загружен',
|
||||
indicatorSuccessTitle: 'Загружен',
|
||||
indicatorErrorTitle: 'Ошибка загрузки',
|
||||
indicatorLoadingTitle: 'Загрузка ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Посмотреть предыдущий файл',
|
||||
next: 'Посмотреть следующий файл',
|
||||
toggleheader: 'Переключить заголовок',
|
||||
fullscreen: 'Переключить полноэкранный режим',
|
||||
borderless: 'Переключить режим без полей',
|
||||
close: 'Закрыть подробный предпросмотр'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Slovakian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['sk'] = {
|
||||
fileSingle: 'súbor',
|
||||
filePlural: 'súbory',
|
||||
browseLabel: 'Vybrať …',
|
||||
removeLabel: 'Odstrániť',
|
||||
removeTitle: 'Vyčistiť vybraté súbory',
|
||||
cancelLabel: 'Storno',
|
||||
cancelTitle: 'Prerušiť nahrávanie',
|
||||
uploadLabel: 'Nahrať',
|
||||
uploadTitle: 'Nahrať vybraté súbory',
|
||||
msgNo: 'Nie',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'Zrušené',
|
||||
msgPlaceholder: 'Vybrať {files}...',
|
||||
msgZoomModalHeading: 'Detailný náhľad',
|
||||
msgFileRequired: 'Musíte vybrať súbor, ktorý chcete nahrať.',
|
||||
msgSizeTooSmall: 'Súbor "{name}" (<b>{size} KB</b>) je príliš malý, musí mať veľkosť najmenej <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Súbor "{name}" (<b>{size} KB</b>) je príliš veľký, maximálna povolená veľkosť <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Musíte vybrať najmenej <b>{n}</b> {files} pre nahranie.',
|
||||
msgFilesTooMany: 'Počet vybratých súborov <b>({n})</b> prekročil maximálny povolený limit <b>{m}</b>.',
|
||||
msgFileNotFound: 'Súbor "{name}" nebol nájdený!',
|
||||
msgFileSecured: 'Zabezpečenie súboru znemožnilo čítať súbor "{name}".',
|
||||
msgFileNotReadable: 'Súbor "{name}" nie je čitateľný.',
|
||||
msgFilePreviewAborted: 'Náhľad súboru bol prerušený pre "{name}".',
|
||||
msgFilePreviewError: 'Nastala chyba pri načítaní súboru "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Neplatný typ súboru "{name}". Iba "{types}" súborov sú podporované.',
|
||||
msgInvalidFileExtension: 'Neplatná extenzia súboru "{name}". Iba "{extensions}" súborov sú podporované.',
|
||||
msgFileTypes: {
|
||||
'image': 'obrázok',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Nahrávanie súboru bolo prerušené',
|
||||
msgUploadThreshold: 'Spracovávam...',
|
||||
msgUploadBegin: 'Inicializujem...',
|
||||
msgUploadEnd: 'Hotovo',
|
||||
msgUploadEmpty: 'Na nahrávanie nie sú k dispozícii žiadne platné údaje.',
|
||||
msgUploadError: 'Chyba',
|
||||
msgValidationError: 'Chyba overenia',
|
||||
msgLoading: 'Nahrávanie súboru {index} z {files} …',
|
||||
msgProgress: 'Nahrávanie súboru {index} z {files} - {name} - {percent}% dokončené.',
|
||||
msgSelected: '{n} {files} vybraté',
|
||||
msgFoldersNotAllowed: 'Tiahni a pusť iba súbory! Vynechané {n} pustené prečinok(y).',
|
||||
msgImageWidthSmall: 'Šírka obrázku "{name}", musí byť minimálne {size} px.',
|
||||
msgImageHeightSmall: 'Výška obrázku "{name}", musí byť minimálne {size} px.',
|
||||
msgImageWidthLarge: 'Šírka obrázku "{name}" nemôže presiahnuť {size} px.',
|
||||
msgImageHeightLarge: 'Výška obrázku "{name}" nesmie presiahnuť {size} px.',
|
||||
msgImageResizeError: 'Nepodarilo sa získať veľkosť obrázka pre zmenu veľkosti.',
|
||||
msgImageResizeException: 'Chyba pri zmene veľkosti obrázka.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Pri operácii {operation} sa vyskytla chyba. Skúste to prosím neskôr!',
|
||||
msgAjaxProgressError: '{operation} - neúspešné',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'odstrániť súbor',
|
||||
uploadThumb: 'nahrať súbor',
|
||||
uploadBatch: 'nahrať várku súborov',
|
||||
uploadExtra: 'odosielanie údajov z formulára'
|
||||
},
|
||||
dropZoneTitle: 'Tiahni a pusť súbory tu …',
|
||||
dropZoneClickTitle: '<br>(alebo kliknite sem a vyberte {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Odstrániť súbor',
|
||||
uploadTitle: 'Nahrať súbor',
|
||||
uploadRetryTitle: 'Znova nahrať',
|
||||
downloadTitle: 'Stiahnuť súbor',
|
||||
zoomTitle: 'Zobraziť podrobnosti',
|
||||
dragTitle: 'Posunúť / Preskládať',
|
||||
indicatorNewTitle: 'Ešte nenahral',
|
||||
indicatorSuccessTitle: 'Nahraný',
|
||||
indicatorErrorTitle: 'Chyba pri nahrávaní',
|
||||
indicatorLoadingTitle: 'Nahrávanie ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Zobraziť predchádzajúci súbor',
|
||||
next: 'Zobraziť následujúci súbor',
|
||||
toggleheader: 'Prepnúť záhlavie',
|
||||
fullscreen: 'Prepnúť zobrazenie na celú obrazovku',
|
||||
borderless: 'Prepnúť na bezrámikové zobrazenie',
|
||||
close: 'Zatvoriť detailný náhľad'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,98 @@
|
||||
/*!
|
||||
* FileInput Slovenian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author kv1dr <kv1dr.android@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['sl'] = {
|
||||
fileSingle: 'datoteka',
|
||||
filePlural: 'datotek',
|
||||
browseLabel: 'Prebrskaj …',
|
||||
removeLabel: 'Odstrani',
|
||||
removeTitle: 'Počisti izbrane datoteke',
|
||||
cancelLabel: 'Prekliči',
|
||||
cancelTitle: 'Prekliči nalaganje',
|
||||
uploadLabel: 'Naloži',
|
||||
uploadTitle: 'Naloži izbrane datoteke',
|
||||
msgNo: 'Ne',
|
||||
msgNoFilesSelected: 'Nobena datoteka ni izbrana',
|
||||
msgCancelled: 'Preklicano',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Podroben predogled',
|
||||
msgSizeTooLarge: 'Datoteka "{name}" (<b>{size} KB</b>) presega največjo dovoljeno velikost za nalaganje <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Za nalaganje morate izbrati vsaj <b>{n}</b> {files}.',
|
||||
msgFilesTooMany: 'Število datotek, izbranih za nalaganje <b>({n})</b> je prekoračilo največjo dovoljeno število <b>{m}</b>.',
|
||||
msgFileNotFound: 'Datoteka "{name}" ni bila najdena!',
|
||||
msgFileSecured: 'Zaradi varnostnih omejitev nisem mogel prebrati datoteko "{name}".',
|
||||
msgFileNotReadable: 'Datoteka "{name}" ni berljiva.',
|
||||
msgFilePreviewAborted: 'Predogled datoteke "{name}" preklican.',
|
||||
msgFilePreviewError: 'Pri branju datoteke "{name}" je prišlo do napake.',
|
||||
msgInvalidFileType: 'Napačen tip datoteke "{name}". Samo "{types}" datoteke so podprte.',
|
||||
msgInvalidFileExtension: 'Napačna končnica datoteke "{name}". Samo "{extensions}" datoteke so podprte.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Nalaganje datoteke je bilo preklicano',
|
||||
msgUploadThreshold: 'Procesiram...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Napaki pri validiranju',
|
||||
msgLoading: 'Nalaganje datoteke {index} od {files} …',
|
||||
msgProgress: 'Nalaganje datoteke {index} od {files} - {name} - {percent}% dokončano.',
|
||||
msgSelected: '{n} {files} izbrano',
|
||||
msgFoldersNotAllowed: 'Povlecite in spustite samo datoteke! Izpuščenih je bilo {n} map.',
|
||||
msgImageWidthSmall: 'Širina slike "{name}" mora biti vsaj {size} px.',
|
||||
msgImageHeightSmall: 'Višina slike "{name}" mora biti vsaj {size} px.',
|
||||
msgImageWidthLarge: 'Širina slike "{name}" ne sme preseči {size} px.',
|
||||
msgImageHeightLarge: 'Višina slike "{name}" ne sme preseči {size} px.',
|
||||
msgImageResizeError: 'Nisem mogel pridobiti dimenzij slike za spreminjanje velikosti.',
|
||||
msgImageResizeException: 'Napaka pri spreminjanju velikosti slike.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Povlecite in spustite datoteke sem …',
|
||||
dropZoneClickTitle: '<br>(ali kliknite sem za izbiro {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Odstrani datoteko',
|
||||
uploadTitle: 'Naloži datoteko',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Poglej podrobnosti',
|
||||
dragTitle: 'Premaki / Razporedi',
|
||||
indicatorNewTitle: 'Še ni naloženo',
|
||||
indicatorSuccessTitle: 'Naloženo',
|
||||
indicatorErrorTitle: 'Napaka pri nalaganju',
|
||||
indicatorLoadingTitle: 'Nalagam ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Poglej prejšno datoteko',
|
||||
next: 'Poglej naslednjo datoteko',
|
||||
toggleheader: 'Preklopi glavo',
|
||||
fullscreen: 'Preklopi celozaslonski način',
|
||||
borderless: 'Preklopi način brez robov',
|
||||
close: 'Zapri predogled podrobnosti'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,99 @@
|
||||
/*!
|
||||
* FileInput <_LANG_> Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['sv'] = {
|
||||
fileSingle: 'fil',
|
||||
filePlural: 'filer',
|
||||
browseLabel: 'Bläddra …',
|
||||
removeLabel: 'Ta bort',
|
||||
removeTitle: 'Rensa valda filer',
|
||||
cancelLabel: 'Avbryt',
|
||||
cancelTitle: 'Avbryt pågående uppladdning',
|
||||
uploadLabel: 'Ladda upp',
|
||||
uploadTitle: 'Ladda upp valda filer',
|
||||
msgNo: 'Nej',
|
||||
msgNoFilesSelected: 'Inga filer valda',
|
||||
msgCancelled: 'Avbruten',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'detaljerad förhandsgranskning',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'Filen "{name}" (<b>{size} KB</b>) är för liten och måste vara större än <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'File "{name}" (<b>{size} KB</b>) överstiger högsta tillåtna uppladdningsstorlek <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Du måste välja minst <b>{n}</b> {files} för att ladda upp.',
|
||||
msgFilesTooMany: 'Antal filer valda för uppladdning <b>({n})</b> överstiger högsta tillåtna gränsen <b>{m}</b>.',
|
||||
msgFileNotFound: 'Filen "{name}" kunde inte hittas!',
|
||||
msgFileSecured: 'Säkerhetsbegränsningar förhindrar att läsa filen "{name}".',
|
||||
msgFileNotReadable: 'Filen "{name}" är inte läsbar.',
|
||||
msgFilePreviewAborted: 'Filförhandsvisning avbröts för "{name}".',
|
||||
msgFilePreviewError: 'Ett fel uppstod vid inläsning av filen "{name}".',
|
||||
msgInvalidFileName: 'Ogiltiga eller tecken som inte stöds i filnamnet "{name}".',
|
||||
msgInvalidFileType: 'Ogiltig typ för filen "{name}". Endast "{types}" filtyper stöds.',
|
||||
msgInvalidFileExtension: 'Ogiltigt filtillägg för filen "{name}". Endast "{extensions}" filer stöds.',
|
||||
msgFileTypes: {
|
||||
'image': 'bild',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'ljud',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'objekt'
|
||||
},
|
||||
msgUploadAborted: 'Filöverföringen avbröts',
|
||||
msgUploadThreshold: 'Bearbetar...',
|
||||
msgUploadBegin: 'Påbörjar...',
|
||||
msgUploadEnd: 'Färdig',
|
||||
msgUploadEmpty: 'Ingen giltig data tillgänglig för uppladdning.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Valideringsfel',
|
||||
msgLoading: 'Laddar fil {index} av {files} …',
|
||||
msgProgress: 'Laddar fil {index} av {files} - {name} - {percent}% färdig.',
|
||||
msgSelected: '{n} {files} valda',
|
||||
msgFoldersNotAllowed: 'Endast drag & släppfiler! Skippade {n} släpta mappar.',
|
||||
msgImageWidthSmall: 'Bredd på bildfilen "{name}" måste minst vara {size} pixlar.',
|
||||
msgImageHeightSmall: 'Höjden på bildfilen "{name}" måste minst vara {size} pixlar.',
|
||||
msgImageWidthLarge: 'Bredd på bildfil "{name}" kan inte överstiga {size} pixlar.',
|
||||
msgImageHeightLarge: 'Höjden på bildfilen "{name}" kan inte överstiga {size} pixlar.',
|
||||
msgImageResizeError: 'Det gick inte att hämta bildens dimensioner för att ändra storlek.',
|
||||
msgImageResizeException: 'Fel vid storleksändring av bilden.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Något gick fel med {operation} operationen. Försök igen senare!',
|
||||
msgAjaxProgressError: '{operation} misslyckades',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Drag & släpp filer här …',
|
||||
dropZoneClickTitle: '<br>(eller klicka för att markera {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Ta bort fil',
|
||||
uploadTitle: 'Ladda upp fil',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
zoomTitle: 'Visa detaljer',
|
||||
dragTitle: 'Flytta / Ändra ordning',
|
||||
indicatorNewTitle: 'Inte uppladdat ännu',
|
||||
indicatorSuccessTitle: 'Uppladdad',
|
||||
indicatorErrorTitle: 'Uppladdningsfel',
|
||||
indicatorLoadingTitle: 'Laddar upp...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Visa föregående fil',
|
||||
next: 'Visa nästa fil',
|
||||
toggleheader: 'Rubrik',
|
||||
fullscreen: 'Fullskärm',
|
||||
borderless: 'Gränslös',
|
||||
close: 'Stäng detaljerad förhandsgranskning'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Thai Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['th'] = {
|
||||
fileSingle: 'ไฟล์',
|
||||
filePlural: 'ไฟล์',
|
||||
browseLabel: 'เลือกดู …',
|
||||
removeLabel: 'ลบทิ้ง',
|
||||
removeTitle: 'ลบไฟล์ที่เลือกทิ้ง',
|
||||
cancelLabel: 'ยกเลิก',
|
||||
cancelTitle: 'ยกเลิกการอัพโหลด',
|
||||
uploadLabel: 'อัพโหลด',
|
||||
uploadTitle: 'อัพโหลดไฟล์ที่เลือก',
|
||||
msgNo: 'ไม่',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'ยกเลิก',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'ตัวอย่างละเอียด',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'ไฟล์ "{name}" (<b>{size} KB</b>) มีขนาดเกินที่ระบบอนุญาตที่ <b>{maxSize} KB</b>, กรุณาลองใหม่อีกครั้ง!',
|
||||
msgFilesTooLess: 'คุณต้องเลือกไฟล์จำนวนอย่างน้อย <b>{n}</b> {files} เพื่ออัพโหลด, กรุณาลองใหม่อีกครั้ง!',
|
||||
msgFilesTooMany: 'ไฟล์ที่คุณเลือกมีจำนวน <b>({n})</b> ซึ่งเกินกว่าที่ระบบอนุญาตที่ <b>{m}</b>, กรุณาลองใหม่อีกครั้ง!',
|
||||
msgFileNotFound: 'ไม่พบไฟล์ "{name}" !',
|
||||
msgFileSecured: 'ระบบความปลอดภัยไม่อนุญาตให้อ่านไฟล์ "{name}".',
|
||||
msgFileNotReadable: 'ไม่สามารถอ่านไฟล์ "{name}" ได้',
|
||||
msgFilePreviewAborted: 'ไฟล์ "{name}" ไม่อนุญาตให้ดูตัวอย่าง',
|
||||
msgFilePreviewError: 'พบปัญหาในการดูตัวอย่างไฟล์ "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'ไฟล์ "{name}" เป็นประเภทไฟล์ที่ไม่ถูกต้อง, อนุญาตเฉพาะไฟล์ประเภท "{types}"',
|
||||
msgInvalidFileExtension: 'ไฟล์ "{name}" เป็น extension ที่ไมถูกต้อง, อนุญาตเฉพาะไฟล์ extension "{extensions}"',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'อัปโหลดไฟล์ถูกยกเลิก',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'ข้อผิดพลาดในการตรวจสอบ',
|
||||
msgLoading: 'กำลังโหลดไฟล์ {index} จาก {files} …',
|
||||
msgProgress: 'กำลังโหลดไฟล์ {index} จาก {files} - {name} - {percent}%',
|
||||
msgSelected: '{n} {files} ถูกเลือก',
|
||||
msgFoldersNotAllowed: 'Drag & drop เฉพาะไฟล์เท่านั้น! ข้าม dropped folder จำนวน {n}',
|
||||
msgImageWidthSmall: 'ความกว้างของภาพไฟล์ "{name}" ต้องมีอย่างน้อย {size} px.',
|
||||
msgImageHeightSmall: 'ความสูงของภาพไฟล์ "{name}" ต้องมีอย่างน้อย {size} px.',
|
||||
msgImageWidthLarge: 'ความกว้างของภาพไฟล์ "{name}" ไม่เกิน {size} พิกเซล.',
|
||||
msgImageHeightLarge: 'ความสูงของไฟล์ภาพ "{name}" ไม่เกิน {size} พิกเซล.',
|
||||
msgImageResizeError: 'ไม่สามารถรับขนาดภาพเพื่อปรับขนาด',
|
||||
msgImageResizeException: 'ข้อผิดพลาดขณะปรับขนาดภาพ<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Drag & drop ไฟล์ตรงนี้ …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'ลบไฟล์',
|
||||
uploadTitle: 'อัปโหลดไฟล์',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'ดูรายละเอียด',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'ยังไม่ได้อัปโหลด',
|
||||
indicatorSuccessTitle: 'อัพโหลด',
|
||||
indicatorErrorTitle: 'อัปโหลดข้อผิดพลาด',
|
||||
indicatorLoadingTitle: 'อัพโหลด ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,99 @@
|
||||
/*!
|
||||
* FileInput Turkish Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['tr'] = {
|
||||
fileSingle: 'dosya',
|
||||
filePlural: 'dosyalar',
|
||||
browseLabel: 'Gözat …',
|
||||
removeLabel: 'Sil',
|
||||
removeTitle: 'Seçilen dosyaları sil',
|
||||
cancelLabel: 'İptal',
|
||||
cancelTitle: 'Devam eden yüklemeyi iptal et',
|
||||
uploadLabel: 'Yükle',
|
||||
uploadTitle: 'Seçilen dosyaları yükle',
|
||||
msgNo: 'Hayır',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'İptal edildi',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Detaylı Önizleme',
|
||||
msgFileRequired: 'Yüklemek için bir dosya seçmelisiniz.',
|
||||
msgSizeTooSmall: '"{name}"(<b>{size} KB</b>) dosyası çok küçük ve <b>{minSize} KB</b> boyutundan büyük olmalıdır.',
|
||||
msgSizeTooLarge: '"{name}" dosyasının boyutu (<b>{size} KB</b>) izin verilen azami dosya boyutu olan <b>{maxSize} KB</b>\'tan büyük.',
|
||||
msgFilesTooLess: 'Yüklemek için en az <b>{n}</b> {files} dosya seçmelisiniz.',
|
||||
msgFilesTooMany: 'Yüklemek için seçtiğiniz dosya sayısı <b>({n})</b> azami limitin <b>({m})</b> altında olmalıdır.',
|
||||
msgFileNotFound: '"{name}" dosyası bulunamadı!',
|
||||
msgFileSecured: 'Güvenlik kısıtlamaları "{name}" dosyasının okunmasını engelliyor.',
|
||||
msgFileNotReadable: '"{name}" dosyası okunabilir değil.',
|
||||
msgFilePreviewAborted: '"{name}" dosyası için önizleme iptal edildi.',
|
||||
msgFilePreviewError: '"{name}" dosyası okunurken bir hata oluştu.',
|
||||
msgInvalidFileName: '"{name}" dosya adında geçersiz veya desteklenmeyen karakterler var.',
|
||||
msgInvalidFileType: '"{name}" dosyasının türü geçerli değil. Yalnızca "{types}" türünde dosyalara izin veriliyor.',
|
||||
msgInvalidFileExtension: '"{name}" dosyasının uzantısı geçersiz. Yalnızca "{extensions}" uzantılı dosyalara izin veriliyor.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Dosya yükleme iptal edildi',
|
||||
msgUploadThreshold: 'İşlem yapılıyor...',
|
||||
msgUploadBegin: 'Başlıyor...',
|
||||
msgUploadEnd: 'Başarılı',
|
||||
msgUploadEmpty: 'Yüklemek için geçerli veri mevcut değil.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Doğrulama Hatası',
|
||||
msgLoading: 'Dosya yükleniyor {index} / {files} …',
|
||||
msgProgress: 'Dosya yükleniyor {index} / {files} - {name} - %{percent} tamamlandı.',
|
||||
msgSelected: '{n} {files} seçildi',
|
||||
msgFoldersNotAllowed: 'Yalnızca dosyaları sürükleyip bırakabilirsiniz! {n} dizin(ler) göz ardı edildi.',
|
||||
msgImageWidthSmall: '"{name}" adlı görüntü dosyasının genişliği en az {size} piksel olmalıdır.',
|
||||
msgImageHeightSmall: '"{name}" adlı görüntü dosyasının yüksekliği en az {size} piksel olmalıdır.',
|
||||
msgImageWidthLarge: '"{name}" adlı görüntü dosyasının genişliği {size} pikseli geçemez.',
|
||||
msgImageHeightLarge: '"{name}" adlı görüntü dosyasının yüksekliği {size} pikseli geçemez.',
|
||||
msgImageResizeError: 'Görüntü boyutlarını yeniden boyutlandıramadı.',
|
||||
msgImageResizeException: 'Görüntü boyutlandırma sırasında hata.<pre>{errors}</pre>',
|
||||
msgAjaxError: '{operation} işlemi ile ilgili bir şeyler ters gitti. Lütfen daha sonra tekrar deneyiniz!',
|
||||
msgAjaxProgressError: '{operation} işlemi başarısız oldu.',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'dosya silme',
|
||||
uploadThumb: 'dosya yükleme',
|
||||
uploadBatch: 'toplu dosya yükleme',
|
||||
uploadExtra: 'form verisi yükleme'
|
||||
},
|
||||
dropZoneTitle: 'Dosyaları buraya sürükleyip bırakın',
|
||||
dropZoneClickTitle: '<br>(ya da {files} seçmek için tıklayınız)',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Dosyayı kaldır',
|
||||
uploadTitle: 'Dosyayı yükle',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
zoomTitle: 'Ayrıntıları görüntüle',
|
||||
dragTitle: 'Taşı / Yeniden düzenle',
|
||||
indicatorNewTitle: 'Henüz yüklenmedi',
|
||||
indicatorSuccessTitle: 'Yüklendi',
|
||||
indicatorErrorTitle: 'Yükleme Hatası',
|
||||
indicatorLoadingTitle: 'Yükleniyor ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Önceki dosyayı göster',
|
||||
next: 'Sonraki dosyayı göster',
|
||||
toggleheader: 'Üst bilgi geçiş',
|
||||
fullscreen: 'Tam ekran geçiş',
|
||||
borderless: 'Çerçevesiz moda geçiş',
|
||||
close: 'Detaylı önizlemeyi kapat'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,101 @@
|
||||
/*!
|
||||
* FileInput Ukrainian Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author CyanoFresh <cyanofresh@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['uk'] = {
|
||||
fileSingle: 'файл',
|
||||
filePlural: 'файли',
|
||||
browseLabel: 'Вибрати …',
|
||||
removeLabel: 'Видалити',
|
||||
removeTitle: 'Видалити вибрані файли',
|
||||
cancelLabel: 'Скасувати',
|
||||
cancelTitle: 'Скасувати поточну загрузку',
|
||||
uploadLabel: 'Загрузити',
|
||||
uploadTitle: 'Загрузити вибрані файли',
|
||||
msgNo: 'Немає',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: 'Cкасовано',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Детальний превью',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Файл "{name}" (<b>{size} KB</b>) перевищує максимальний розмір <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Ви повинні вибрати як мінімум <b>{n}</b> {files} для загрузки.',
|
||||
msgFilesTooMany: 'Кількість вибраних файлів <b>({n})</b> перевищує максимально допустиму кількість <b>{m}</b>.',
|
||||
msgFileNotFound: 'Файл "{name}" не знайдено!',
|
||||
msgFileSecured: 'Обмеження безпеки перешкоджають читанню файла "{name}".',
|
||||
msgFileNotReadable: 'Файл "{name}" неможливо прочитати.',
|
||||
msgFilePreviewAborted: 'Перегляд скасований для файла "{name}".',
|
||||
msgFilePreviewError: 'Сталася помилка під час читання файла "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Заборонений тип файла для "{name}". Тільки "{types}" дозволені.',
|
||||
msgInvalidFileExtension: 'Заборонене розширення для файла "{name}". Тільки "{extensions}" дозволені.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Вивантаження файлу перервана',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Помилка перевірки',
|
||||
msgLoading: 'Загрузка файла {index} із {files} …',
|
||||
msgProgress: 'Загрузка файла {index} із {files} - {name} - {percent}% завершено.',
|
||||
msgSelected: '{n} {files} вибрано',
|
||||
msgFoldersNotAllowed: 'Дозволено перетягувати тільки файли! Пропущено {n} папок.',
|
||||
msgImageWidthSmall: 'Ширина зображення "{name}" повинна бути не менше {size} px.',
|
||||
msgImageHeightSmall: 'Висота зображення "{name}" повинна бути не менше {size} px.',
|
||||
msgImageWidthLarge: 'Ширина зображення "{name}" не може перевищувати {size} px.',
|
||||
msgImageHeightLarge: 'Висота зображення "{name}" не може перевищувати {size} px.',
|
||||
msgImageResizeError: 'Не вдалося розміри зображення, щоб змінити розмір.',
|
||||
msgImageResizeException: 'Помилка при зміні розміру зображення.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Перетягніть файли сюди …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Видалити файл',
|
||||
uploadTitle: 'Загрузити файл',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Подивитися деталі',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: 'Ще не загружено',
|
||||
indicatorSuccessTitle: 'Загружено',
|
||||
indicatorErrorTitle: 'Помилка при загрузці',
|
||||
indicatorLoadingTitle: 'Загрузка ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,101 @@
|
||||
/*!
|
||||
* FileInput Vietnamese Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['vi'] = {
|
||||
fileSingle: 'tập tin',
|
||||
filePlural: 'các tập tin',
|
||||
browseLabel: 'Duyệt …',
|
||||
removeLabel: 'Gỡ bỏ',
|
||||
removeTitle: 'Bỏ tập tin đã chọn',
|
||||
cancelLabel: 'Hủy',
|
||||
cancelTitle: 'Hủy upload',
|
||||
uploadLabel: 'Upload',
|
||||
uploadTitle: 'Upload tập tin đã chọn',
|
||||
msgNo: 'Không',
|
||||
msgNoFilesSelected: 'Không tập tin nào được chọn',
|
||||
msgCancelled: 'Đã hủy',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: 'Chi tiết xem trước',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: 'Tập tin "{name}" (<b>{size} KB</b>) vượt quá kích thước giới hạn cho phép <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: 'Bạn phải chọn ít nhất <b>{n}</b> {files} để upload.',
|
||||
msgFilesTooMany: 'Số lượng tập tin upload <b>({n})</b> vượt quá giới hạn cho phép là <b>{m}</b>.',
|
||||
msgFileNotFound: 'Không tìm thấy tập tin "{name}"!',
|
||||
msgFileSecured: 'Các hạn chế về bảo mật không cho phép đọc tập tin "{name}".',
|
||||
msgFileNotReadable: 'Không đọc được tập tin "{name}".',
|
||||
msgFilePreviewAborted: 'Đã dừng xem trước tập tin "{name}".',
|
||||
msgFilePreviewError: 'Đã xảy ra lỗi khi đọc tập tin "{name}".',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: 'Tập tin "{name}" không hợp lệ. Chỉ hỗ trợ loại tập tin "{types}".',
|
||||
msgInvalidFileExtension: 'Phần mở rộng của tập tin "{name}" không hợp lệ. Chỉ hỗ trợ phần mở rộng "{extensions}".',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: 'Đã dừng upload',
|
||||
msgUploadThreshold: 'Đang xử lý...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: 'Lỗi xác nhận',
|
||||
msgLoading: 'Đang nạp {index} tập tin trong số {files} …',
|
||||
msgProgress: 'Đang nạp {index} tập tin trong số {files} - {name} - {percent}% hoàn thành.',
|
||||
msgSelected: '{n} {files} được chọn',
|
||||
msgFoldersNotAllowed: 'Chỉ kéo thả tập tin! Đã bỏ qua {n} thư mục.',
|
||||
msgImageWidthSmall: 'Chiều rộng của hình ảnh "{name}" phải tối thiểu là {size} px.',
|
||||
msgImageHeightSmall: 'Chiều cao của hình ảnh "{name}" phải tối thiểu là {size} px.',
|
||||
msgImageWidthLarge: 'Chiều rộng của hình ảnh "{name}" không được quá {size} px.',
|
||||
msgImageHeightLarge: 'Chiều cao của hình ảnh "{name}" không được quá {size} px.',
|
||||
msgImageResizeError: 'Không lấy được kích thước của hình ảnh để resize.',
|
||||
msgImageResizeException: 'Resize hình ảnh bị lỗi.<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: 'Kéo thả tập tin vào đây …',
|
||||
dropZoneClickTitle: '<br>(hoặc click để chọn {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: 'Gỡ bỏ',
|
||||
uploadTitle: 'Upload tập tin',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: 'Phóng lớn',
|
||||
dragTitle: 'Di chuyển / Sắp xếp lại',
|
||||
indicatorNewTitle: 'Chưa được upload',
|
||||
indicatorSuccessTitle: 'Đã upload',
|
||||
indicatorErrorTitle: 'Upload bị lỗi',
|
||||
indicatorLoadingTitle: 'Đang upload ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'Xem tập tin phía trước',
|
||||
next: 'Xem tập tin tiếp theo',
|
||||
toggleheader: 'Ẩn/hiện tiêu đề',
|
||||
fullscreen: 'Bật/tắt toàn màn hình',
|
||||
borderless: 'Bật/tắt chế độ không viền',
|
||||
close: 'Đóng'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,102 @@
|
||||
/*!
|
||||
* FileInput Chinese Traditional Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author kangqf <kangqingfei@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['zh-TW'] = {
|
||||
fileSingle: '單一檔案',
|
||||
filePlural: '複選檔案',
|
||||
browseLabel: '瀏覽 …',
|
||||
removeLabel: '移除',
|
||||
removeTitle: '清除選取檔案',
|
||||
cancelLabel: '取消',
|
||||
cancelTitle: '取消上傳中檔案',
|
||||
uploadLabel: '上傳',
|
||||
uploadTitle: '上傳選取檔案',
|
||||
msgNo: '沒有',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: '取消',
|
||||
zoomTitle: '詳細資料',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: '內容預覽',
|
||||
msgFileRequired: 'You must select a file to upload.',
|
||||
msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: '檔案 "{name}" (<b>{size} KB</b>) 大小超過上限 <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: '最少必須選擇 <b>{n}</b> {files} 來上傳. ',
|
||||
msgFilesTooMany: '上傳的檔案數量 <b>({n})</b> 超過最大檔案上傳限制 <b>{m}</b>.',
|
||||
msgFileNotFound: '檔案 "{name}" 未發現!',
|
||||
msgFileSecured: '安全限制,禁止讀取檔案 "{name}".',
|
||||
msgFileNotReadable: '文件 "{name}" 不可讀取.',
|
||||
msgFilePreviewAborted: '檔案 "{name}" 預覽中止.',
|
||||
msgFilePreviewError: '讀取 "{name}" 發生錯誤.',
|
||||
msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".',
|
||||
msgInvalidFileType: '檔案類型錯誤 "{name}". 只能使用 "{types}" 類型的檔案.',
|
||||
msgInvalidFileExtension: '附檔名錯誤 "{name}". 只能使用 "{extensions}" 的檔案.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: '該文件上傳被中止',
|
||||
msgUploadThreshold: 'Processing...',
|
||||
msgUploadBegin: 'Initializing...',
|
||||
msgUploadEnd: 'Done',
|
||||
msgUploadEmpty: 'No valid data available for upload.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: '驗證錯誤',
|
||||
msgLoading: '載入第 {index} 個檔案,共 {files} …',
|
||||
msgProgress: '載入第 {index} 個檔案,共 {files} - {name} - {percent}% 成功.',
|
||||
msgSelected: '{n} {files} 選取',
|
||||
msgFoldersNotAllowed: '只支援單檔拖曳! 無法使用 {n} 拖拽的資料夹.',
|
||||
msgImageWidthSmall: '圖檔寬度"{name}"必須至少為{size}像素(px).',
|
||||
msgImageHeightSmall: '圖檔高度"{name}"必須至少為{size}像素(px).',
|
||||
msgImageWidthLarge: '圖檔寬度"{name}"不能超過{size}像素(px).',
|
||||
msgImageHeightLarge: '圖檔高度"{name}"不能超過{size}像素(px).',
|
||||
msgImageResizeError: '無法獲取的圖像尺寸調整。',
|
||||
msgImageResizeException: '錯誤而調整圖像大小。<pre>{errors}</pre>',
|
||||
msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!',
|
||||
msgAjaxProgressError: '{operation} failed',
|
||||
ajaxOperations: {
|
||||
deleteThumb: 'file delete',
|
||||
uploadThumb: 'file upload',
|
||||
uploadBatch: 'batch file upload',
|
||||
uploadExtra: 'form data upload'
|
||||
},
|
||||
dropZoneTitle: '拖曳檔案至此 …',
|
||||
dropZoneClickTitle: '<br>(or click to select {files})',
|
||||
fileActionSettings: {
|
||||
removeTitle: '刪除檔案',
|
||||
uploadTitle: '上傳檔案',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
downloadTitle: 'Download file',
|
||||
zoomTitle: '詳細資料',
|
||||
dragTitle: 'Move / Rearrange',
|
||||
indicatorNewTitle: '尚未上傳',
|
||||
indicatorSuccessTitle: '上傳成功',
|
||||
indicatorErrorTitle: '上傳失敗',
|
||||
indicatorLoadingTitle: '上傳中 ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: 'View previous file',
|
||||
next: 'View next file',
|
||||
toggleheader: 'Toggle header',
|
||||
fullscreen: 'Toggle full screen',
|
||||
borderless: 'Toggle borderless mode',
|
||||
close: 'Close detailed preview'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
@ -0,0 +1,100 @@
|
||||
/*!
|
||||
* FileInput Chinese Translations
|
||||
*
|
||||
* This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
|
||||
* any HTML markup tags in the messages must not be converted or translated.
|
||||
*
|
||||
* @see http://github.com/kartik-v/bootstrap-fileinput
|
||||
* @author kangqf <kangqingfei@gmail.com>
|
||||
*
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputLocales['zh'] = {
|
||||
fileSingle: '文件',
|
||||
filePlural: '个文件',
|
||||
browseLabel: '选择 …',
|
||||
removeLabel: '移除',
|
||||
removeTitle: '清除选中文件',
|
||||
cancelLabel: '取消',
|
||||
cancelTitle: '取消进行中的上传',
|
||||
uploadLabel: '上传',
|
||||
uploadTitle: '上传选中文件',
|
||||
msgNo: '没有',
|
||||
msgNoFilesSelected: '',
|
||||
msgCancelled: '取消',
|
||||
msgPlaceholder: 'Select {files}...',
|
||||
msgZoomModalHeading: '详细预览',
|
||||
msgFileRequired: '必须选择一个文件上传.',
|
||||
msgSizeTooSmall: '文件 "{name}" (<b>{size} KB</b>) 必须大于限定大小 <b>{minSize} KB</b>.',
|
||||
msgSizeTooLarge: '文件 "{name}" (<b>{size} KB</b>) 超过了允许大小 <b>{maxSize} KB</b>.',
|
||||
msgFilesTooLess: '你必须选择最少 <b>{n}</b> {files} 来上传. ',
|
||||
msgFilesTooMany: '选择的上传文件个数 <b>({n})</b> 超出最大文件的限制个数 <b>{m}</b>.',
|
||||
msgFileNotFound: '文件 "{name}" 未找到!',
|
||||
msgFileSecured: '安全限制,为了防止读取文件 "{name}".',
|
||||
msgFileNotReadable: '文件 "{name}" 不可读.',
|
||||
msgFilePreviewAborted: '取消 "{name}" 的预览.',
|
||||
msgFilePreviewError: '读取 "{name}" 时出现了一个错误.',
|
||||
msgInvalidFileName: '文件名 "{name}" 包含非法字符.',
|
||||
msgInvalidFileType: '不正确的类型 "{name}". 只支持 "{types}" 类型的文件.',
|
||||
msgInvalidFileExtension: '不正确的文件扩展名 "{name}". 只支持 "{extensions}" 的文件扩展名.',
|
||||
msgFileTypes: {
|
||||
'image': 'image',
|
||||
'html': 'HTML',
|
||||
'text': 'text',
|
||||
'video': 'video',
|
||||
'audio': 'audio',
|
||||
'flash': 'flash',
|
||||
'pdf': 'PDF',
|
||||
'object': 'object'
|
||||
},
|
||||
msgUploadAborted: '该文件上传被中止',
|
||||
msgUploadThreshold: '处理中...',
|
||||
msgUploadBegin: '正在初始化...',
|
||||
msgUploadEnd: '完成',
|
||||
msgUploadEmpty: '无效的文件上传.',
|
||||
msgUploadError: 'Error',
|
||||
msgValidationError: '验证错误',
|
||||
msgLoading: '加载第 {index} 文件 共 {files} …',
|
||||
msgProgress: '加载第 {index} 文件 共 {files} - {name} - {percent}% 完成.',
|
||||
msgSelected: '{n} {files} 选中',
|
||||
msgFoldersNotAllowed: '只支持拖拽文件! 跳过 {n} 拖拽的文件夹.',
|
||||
msgImageWidthSmall: '图像文件的"{name}"的宽度必须是至少{size}像素.',
|
||||
msgImageHeightSmall: '图像文件的"{name}"的高度必须至少为{size}像素.',
|
||||
msgImageWidthLarge: '图像文件"{name}"的宽度不能超过{size}像素.',
|
||||
msgImageHeightLarge: '图像文件"{name}"的高度不能超过{size}像素.',
|
||||
msgImageResizeError: '无法获取的图像尺寸调整。',
|
||||
msgImageResizeException: '调整图像大小时发生错误。<pre>{errors}</pre>',
|
||||
msgAjaxError: '{operation} 发生错误. 请重试!',
|
||||
msgAjaxProgressError: '{operation} 失败',
|
||||
ajaxOperations: {
|
||||
deleteThumb: '删除文件',
|
||||
uploadThumb: '上传文件',
|
||||
uploadBatch: '批量上传',
|
||||
uploadExtra: '表单数据上传'
|
||||
},
|
||||
dropZoneTitle: '拖拽文件到这里 …<br>支持多文件同时上传',
|
||||
dropZoneClickTitle: '<br>(或点击{files}按钮选择文件)',
|
||||
fileActionSettings: {
|
||||
removeTitle: '删除文件',
|
||||
uploadTitle: '上传文件',
|
||||
uploadRetryTitle: 'Retry upload',
|
||||
zoomTitle: '查看详情',
|
||||
dragTitle: '移动 / 重置',
|
||||
indicatorNewTitle: '没有上传',
|
||||
indicatorSuccessTitle: '上传',
|
||||
indicatorErrorTitle: '上传错误',
|
||||
indicatorLoadingTitle: '上传 ...'
|
||||
},
|
||||
previewZoomButtonTitles: {
|
||||
prev: '预览上一个文件',
|
||||
next: '预览下一个文件',
|
||||
toggleheader: '缩放',
|
||||
fullscreen: '全屏',
|
||||
borderless: '无边界模式',
|
||||
close: '关闭当前预览'
|
||||
}
|
||||
};
|
||||
})(window.jQuery);
|
File diff suppressed because it is too large
Load Diff
1
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/plugins/piexif.min.js
vendored
Normal file
1
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/plugins/piexif.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1,812 @@
|
||||
;(function(factory) {
|
||||
'use strict';
|
||||
/* global window: false, define: false, module: false */
|
||||
var root = typeof window === 'undefined' ? null : window;
|
||||
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(function(){ return factory(root); });
|
||||
} else if (typeof module !== 'undefined') {
|
||||
module.exports = factory(root);
|
||||
} else {
|
||||
root.DOMPurify = factory(root);
|
||||
}
|
||||
}(function factory(window) {
|
||||
'use strict';
|
||||
|
||||
var DOMPurify = function(window) {
|
||||
return factory(window);
|
||||
};
|
||||
|
||||
/**
|
||||
* Version label, exposed for easier checks
|
||||
* if DOMPurify is up to date or not
|
||||
*/
|
||||
DOMPurify.version = '0.7.4';
|
||||
|
||||
if (!window || !window.document || window.document.nodeType !== 9) {
|
||||
// not running in a browser, provide a factory function
|
||||
// so that you can pass your own Window
|
||||
DOMPurify.isSupported = false;
|
||||
return DOMPurify;
|
||||
}
|
||||
|
||||
var document = window.document;
|
||||
var originalDocument = document;
|
||||
var DocumentFragment = window.DocumentFragment;
|
||||
var HTMLTemplateElement = window.HTMLTemplateElement;
|
||||
var NodeFilter = window.NodeFilter;
|
||||
var NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap;
|
||||
var Text = window.Text;
|
||||
var Comment = window.Comment;
|
||||
var DOMParser = window.DOMParser;
|
||||
|
||||
// As per issue #47, the web-components registry is inherited by a
|
||||
// new document created via createHTMLDocument. As per the spec
|
||||
// (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)
|
||||
// a new empty registry is used when creating a template contents owner
|
||||
// document, so we use that as our parent document to ensure nothing
|
||||
// is inherited.
|
||||
if (typeof HTMLTemplateElement === 'function') {
|
||||
var template = document.createElement('template');
|
||||
if (template.content && template.content.ownerDocument) {
|
||||
document = template.content.ownerDocument;
|
||||
}
|
||||
}
|
||||
var implementation = document.implementation;
|
||||
var createNodeIterator = document.createNodeIterator;
|
||||
var getElementsByTagName = document.getElementsByTagName;
|
||||
var createDocumentFragment = document.createDocumentFragment;
|
||||
var importNode = originalDocument.importNode;
|
||||
|
||||
var hooks = {};
|
||||
|
||||
/**
|
||||
* Expose whether this browser supports running the full DOMPurify.
|
||||
*/
|
||||
DOMPurify.isSupported =
|
||||
typeof implementation.createHTMLDocument !== 'undefined' &&
|
||||
document.documentMode !== 9;
|
||||
|
||||
/* Add properties to a lookup table */
|
||||
var _addToSet = function(set, array) {
|
||||
var l = array.length;
|
||||
while (l--) {
|
||||
if (typeof array[l] === 'string') {
|
||||
array[l] = array[l].toLowerCase();
|
||||
}
|
||||
set[array[l]] = true;
|
||||
}
|
||||
return set;
|
||||
};
|
||||
|
||||
/* Shallow clone an object */
|
||||
var _cloneObj = function(object) {
|
||||
var newObject = {};
|
||||
var property;
|
||||
for (property in object) {
|
||||
if (object.hasOwnProperty(property)) {
|
||||
newObject[property] = object[property];
|
||||
}
|
||||
}
|
||||
return newObject;
|
||||
};
|
||||
|
||||
/**
|
||||
* We consider the elements and attributes below to be safe. Ideally
|
||||
* don't add any new ones but feel free to remove unwanted ones.
|
||||
*/
|
||||
|
||||
/* allowed element names */
|
||||
var ALLOWED_TAGS = null;
|
||||
var DEFAULT_ALLOWED_TAGS = _addToSet({}, [
|
||||
|
||||
// HTML
|
||||
'a','abbr','acronym','address','area','article','aside','audio','b',
|
||||
'bdi','bdo','big','blink','blockquote','body','br','button','canvas',
|
||||
'caption','center','cite','code','col','colgroup','content','data',
|
||||
'datalist','dd','decorator','del','details','dfn','dir','div','dl','dt',
|
||||
'element','em','fieldset','figcaption','figure','font','footer','form',
|
||||
'h1','h2','h3','h4','h5','h6','head','header','hgroup','hr','html','i',
|
||||
'img','input','ins','kbd','label','legend','li','main','map','mark',
|
||||
'marquee','menu','menuitem','meter','nav','nobr','ol','optgroup',
|
||||
'option','output','p','pre','progress','q','rp','rt','ruby','s','samp',
|
||||
'section','select','shadow','small','source','spacer','span','strike',
|
||||
'strong','style','sub','summary','sup','table','tbody','td','template',
|
||||
'textarea','tfoot','th','thead','time','tr','track','tt','u','ul','var',
|
||||
'video','wbr',
|
||||
|
||||
// SVG
|
||||
'svg','altglyph','altglyphdef','altglyphitem','animatecolor',
|
||||
'animatemotion','animatetransform','circle','clippath','defs','desc',
|
||||
'ellipse','filter','font','g','glyph','glyphref','hkern','image','line',
|
||||
'lineargradient','marker','mask','metadata','mpath','path','pattern',
|
||||
'polygon','polyline','radialgradient','rect','stop','switch','symbol',
|
||||
'text','textpath','title','tref','tspan','view','vkern',
|
||||
|
||||
// SVG Filters
|
||||
'feBlend','feColorMatrix','feComponentTransfer','feComposite',
|
||||
'feConvolveMatrix','feDiffuseLighting','feDisplacementMap',
|
||||
'feFlood','feFuncA','feFuncB','feFuncG','feFuncR','feGaussianBlur',
|
||||
'feMerge','feMergeNode','feMorphology','feOffset',
|
||||
'feSpecularLighting','feTile','feTurbulence',
|
||||
|
||||
//MathML
|
||||
'math','menclose','merror','mfenced','mfrac','mglyph','mi','mlabeledtr',
|
||||
'mmuliscripts','mn','mo','mover','mpadded','mphantom','mroot','mrow',
|
||||
'ms','mpspace','msqrt','mystyle','msub','msup','msubsup','mtable','mtd',
|
||||
'mtext','mtr','munder','munderover',
|
||||
|
||||
//Text
|
||||
'#text'
|
||||
]);
|
||||
|
||||
/* Allowed attribute names */
|
||||
var ALLOWED_ATTR = null;
|
||||
var DEFAULT_ALLOWED_ATTR = _addToSet({}, [
|
||||
|
||||
// HTML
|
||||
'accept','action','align','alt','autocomplete','background','bgcolor',
|
||||
'border','cellpadding','cellspacing','checked','cite','class','clear','color',
|
||||
'cols','colspan','coords','datetime','default','dir','disabled',
|
||||
'download','enctype','face','for','headers','height','hidden','high','href',
|
||||
'hreflang','id','ismap','label','lang','list','loop', 'low','max',
|
||||
'maxlength','media','method','min','multiple','name','noshade','novalidate',
|
||||
'nowrap','open','optimum','pattern','placeholder','poster','preload','pubdate',
|
||||
'radiogroup','readonly','rel','required','rev','reversed','rows',
|
||||
'rowspan','spellcheck','scope','selected','shape','size','span',
|
||||
'srclang','start','src','step','style','summary','tabindex','title',
|
||||
'type','usemap','valign','value','width','xmlns',
|
||||
|
||||
// SVG
|
||||
'accent-height','accumulate','additivive','alignment-baseline',
|
||||
'ascent','attributename','attributetype','azimuth','basefrequency',
|
||||
'baseline-shift','begin','bias','by','clip','clip-path','clip-rule',
|
||||
'color','color-interpolation','color-interpolation-filters','color-profile',
|
||||
'color-rendering','cx','cy','d','dx','dy','diffuseconstant','direction',
|
||||
'display','divisor','dur','edgemode','elevation','end','fill','fill-opacity',
|
||||
'fill-rule','filter','flood-color','flood-opacity','font-family','font-size',
|
||||
'font-size-adjust','font-stretch','font-style','font-variant','font-weight',
|
||||
'fx', 'fy','g1','g2','glyph-name','glyphref','gradientunits','gradienttransform',
|
||||
'image-rendering','in','in2','k','k1','k2','k3','k4','kerning','keypoints',
|
||||
'keysplines','keytimes','lengthadjust','letter-spacing','kernelmatrix',
|
||||
'kernelunitlength','lighting-color','local','marker-end','marker-mid',
|
||||
'marker-start','markerheight','markerunits','markerwidth','maskcontentunits',
|
||||
'maskunits','max','mask','mode','min','numoctaves','offset','operator',
|
||||
'opacity','order','orient','orientation','origin','overflow','paint-order',
|
||||
'path','pathlength','patterncontentunits','patterntransform','patternunits',
|
||||
'points','preservealpha','r','rx','ry','radius','refx','refy','repeatcount',
|
||||
'repeatdur','restart','result','rotate','scale','seed','shape-rendering',
|
||||
'specularconstant','specularexponent','spreadmethod','stddeviation','stitchtiles',
|
||||
'stop-color','stop-opacity','stroke-dasharray','stroke-dashoffset','stroke-linecap',
|
||||
'stroke-linejoin','stroke-miterlimit','stroke-opacity','stroke','stroke-width',
|
||||
'surfacescale','targetx','targety','transform','text-anchor','text-decoration',
|
||||
'text-rendering','textlength','u1','u2','unicode','values','viewbox',
|
||||
'visibility','vert-adv-y','vert-origin-x','vert-origin-y','word-spacing',
|
||||
'wrap','writing-mode','xchannelselector','ychannelselector','x','x1','x2',
|
||||
'y','y1','y2','z','zoomandpan',
|
||||
|
||||
// MathML
|
||||
'accent','accentunder','bevelled','close','columnsalign','columnlines',
|
||||
'columnspan','denomalign','depth','display','displaystyle','fence',
|
||||
'frame','largeop','length','linethickness','lspace','lquote',
|
||||
'mathbackground','mathcolor','mathsize','mathvariant','maxsize',
|
||||
'minsize','movablelimits','notation','numalign','open','rowalign',
|
||||
'rowlines','rowspacing','rowspan','rspace','rquote','scriptlevel',
|
||||
'scriptminsize','scriptsizemultiplier','selection','separator',
|
||||
'separators','stretchy','subscriptshift','supscriptshift','symmetric',
|
||||
'voffset',
|
||||
|
||||
// XML
|
||||
'xlink:href','xml:id','xlink:title','xml:space','xmlns:xlink'
|
||||
]);
|
||||
|
||||
/* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */
|
||||
var FORBID_TAGS = null;
|
||||
|
||||
/* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */
|
||||
var FORBID_ATTR = null;
|
||||
|
||||
/* Decide if custom data attributes are okay */
|
||||
var ALLOW_DATA_ATTR = true;
|
||||
|
||||
/* Decide if unknown protocols are okay */
|
||||
var ALLOW_UNKNOWN_PROTOCOLS = false;
|
||||
|
||||
/* Output should be safe for jQuery's $() factory? */
|
||||
var SAFE_FOR_JQUERY = false;
|
||||
|
||||
/* Output should be safe for common template engines.
|
||||
* This means, DOMPurify removes data attributes, mustaches and ERB
|
||||
*/
|
||||
var SAFE_FOR_TEMPLATES = false;
|
||||
|
||||
/* Specify template detection regex for SAFE_FOR_TEMPLATES mode */
|
||||
var MUSTACHE_EXPR = /\{\{[\s\S]*|[\s\S]*\}\}/gm;
|
||||
var ERB_EXPR = /<%[\s\S]*|[\s\S]*%>/gm;
|
||||
|
||||
/* Decide if document with <html>... should be returned */
|
||||
var WHOLE_DOCUMENT = false;
|
||||
|
||||
/* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html string.
|
||||
* If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead
|
||||
*/
|
||||
var RETURN_DOM = false;
|
||||
|
||||
/* Decide if a DOM `DocumentFragment` should be returned, instead of a html string */
|
||||
var RETURN_DOM_FRAGMENT = false;
|
||||
|
||||
/* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM
|
||||
* `Node` is imported into the current `Document`. If this flag is not enabled the
|
||||
* `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by
|
||||
* DOMPurify. */
|
||||
var RETURN_DOM_IMPORT = false;
|
||||
|
||||
/* Output should be free from DOM clobbering attacks? */
|
||||
var SANITIZE_DOM = true;
|
||||
|
||||
/* Keep element content when removing element? */
|
||||
var KEEP_CONTENT = true;
|
||||
|
||||
/* Tags to ignore content of when KEEP_CONTENT is true */
|
||||
var FORBID_CONTENTS = _addToSet({}, [
|
||||
'audio', 'head', 'math', 'script', 'style', 'svg', 'video'
|
||||
]);
|
||||
|
||||
/* Tags that are safe for data: URIs */
|
||||
var DATA_URI_TAGS = _addToSet({}, [
|
||||
'audio', 'video', 'img', 'source'
|
||||
]);
|
||||
|
||||
/* Attributes safe for values like "javascript:" */
|
||||
var URI_SAFE_ATTRIBUTES = _addToSet({}, [
|
||||
'alt','class','for','id','label','name','pattern','placeholder',
|
||||
'summary','title','value','style','xmlns'
|
||||
]);
|
||||
|
||||
/* Keep a reference to config to pass to hooks */
|
||||
var CONFIG = null;
|
||||
|
||||
/* Ideally, do not touch anything below this line */
|
||||
/* ______________________________________________ */
|
||||
|
||||
var formElement = document.createElement('form');
|
||||
|
||||
/**
|
||||
* _parseConfig
|
||||
*
|
||||
* @param optional config literal
|
||||
*/
|
||||
var _parseConfig = function(cfg) {
|
||||
/* Shield configuration object from tampering */
|
||||
if (typeof cfg !== 'object') {
|
||||
cfg = {};
|
||||
}
|
||||
|
||||
/* Set configuration parameters */
|
||||
ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ?
|
||||
_addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;
|
||||
ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ?
|
||||
_addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;
|
||||
FORBID_TAGS = 'FORBID_TAGS' in cfg ?
|
||||
_addToSet({}, cfg.FORBID_TAGS) : {};
|
||||
FORBID_ATTR = 'FORBID_ATTR' in cfg ?
|
||||
_addToSet({}, cfg.FORBID_ATTR) : {};
|
||||
ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true
|
||||
ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false
|
||||
SAFE_FOR_JQUERY = cfg.SAFE_FOR_JQUERY || false; // Default false
|
||||
SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false
|
||||
WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false
|
||||
RETURN_DOM = cfg.RETURN_DOM || false; // Default false
|
||||
RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false
|
||||
RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT || false; // Default false
|
||||
SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true
|
||||
KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true
|
||||
|
||||
if (SAFE_FOR_TEMPLATES) {
|
||||
ALLOW_DATA_ATTR = false;
|
||||
}
|
||||
|
||||
if (RETURN_DOM_FRAGMENT) {
|
||||
RETURN_DOM = true;
|
||||
}
|
||||
|
||||
/* Merge configuration parameters */
|
||||
if (cfg.ADD_TAGS) {
|
||||
if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
|
||||
ALLOWED_TAGS = _cloneObj(ALLOWED_TAGS);
|
||||
}
|
||||
_addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);
|
||||
}
|
||||
if (cfg.ADD_ATTR) {
|
||||
if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
|
||||
ALLOWED_ATTR = _cloneObj(ALLOWED_ATTR);
|
||||
}
|
||||
_addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);
|
||||
}
|
||||
|
||||
/* Add #text in case KEEP_CONTENT is set to true */
|
||||
if (KEEP_CONTENT) { ALLOWED_TAGS['#text'] = true; }
|
||||
|
||||
// Prevent further manipulation of configuration.
|
||||
// Not available in IE8, Safari 5, etc.
|
||||
if (Object && 'freeze' in Object) { Object.freeze(cfg); }
|
||||
|
||||
CONFIG = cfg;
|
||||
};
|
||||
|
||||
/**
|
||||
* _forceRemove
|
||||
*
|
||||
* @param a DOM node
|
||||
*/
|
||||
var _forceRemove = function(node) {
|
||||
try {
|
||||
node.parentNode.removeChild(node);
|
||||
} catch (e) {
|
||||
node.outerHTML = '';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* _initDocument
|
||||
*
|
||||
* @param a string of dirty markup
|
||||
* @return a DOM, filled with the dirty markup
|
||||
*/
|
||||
var _initDocument = function(dirty) {
|
||||
/* Create a HTML document using DOMParser */
|
||||
var doc, body;
|
||||
try {
|
||||
doc = new DOMParser().parseFromString(dirty, 'text/html');
|
||||
} catch (e) {}
|
||||
|
||||
/* Some browsers throw, some browsers return null for the code above
|
||||
DOMParser with text/html support is only in very recent browsers. */
|
||||
if (!doc) {
|
||||
doc = implementation.createHTMLDocument('');
|
||||
body = doc.body;
|
||||
body.parentNode.removeChild(body.parentNode.firstElementChild);
|
||||
body.outerHTML = dirty;
|
||||
}
|
||||
|
||||
/* Work on whole document or just its body */
|
||||
if (typeof doc.getElementsByTagName === 'function') {
|
||||
return doc.getElementsByTagName(
|
||||
WHOLE_DOCUMENT ? 'html' : 'body')[0];
|
||||
}
|
||||
return getElementsByTagName.call(doc,
|
||||
WHOLE_DOCUMENT ? 'html' : 'body')[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* _createIterator
|
||||
*
|
||||
* @param document/fragment to create iterator for
|
||||
* @return iterator instance
|
||||
*/
|
||||
var _createIterator = function(root) {
|
||||
return createNodeIterator.call(root.ownerDocument || root,
|
||||
root,
|
||||
NodeFilter.SHOW_ELEMENT
|
||||
| NodeFilter.SHOW_COMMENT
|
||||
| NodeFilter.SHOW_TEXT,
|
||||
function() { return NodeFilter.FILTER_ACCEPT; },
|
||||
false
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* _isClobbered
|
||||
*
|
||||
* @param element to check for clobbering attacks
|
||||
* @return true if clobbered, false if safe
|
||||
*/
|
||||
var _isClobbered = function(elm) {
|
||||
if (elm instanceof Text || elm instanceof Comment) {
|
||||
return false;
|
||||
}
|
||||
if ( typeof elm.nodeName !== 'string'
|
||||
|| typeof elm.textContent !== 'string'
|
||||
|| typeof elm.removeChild !== 'function'
|
||||
|| !(elm.attributes instanceof NamedNodeMap)
|
||||
|| typeof elm.removeAttribute !== 'function'
|
||||
|| typeof elm.setAttribute !== 'function'
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* _sanitizeElements
|
||||
*
|
||||
* @protect nodeName
|
||||
* @protect textContent
|
||||
* @protect removeChild
|
||||
*
|
||||
* @param node to check for permission to exist
|
||||
* @return true if node was killed, false if left alive
|
||||
*/
|
||||
var _sanitizeElements = function(currentNode) {
|
||||
var tagName, content;
|
||||
/* Execute a hook if present */
|
||||
_executeHook('beforeSanitizeElements', currentNode, null);
|
||||
|
||||
/* Check if element is clobbered or can clobber */
|
||||
if (_isClobbered(currentNode)) {
|
||||
_forceRemove(currentNode);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Now let's check the element's type and name */
|
||||
tagName = currentNode.nodeName.toLowerCase();
|
||||
|
||||
/* Execute a hook if present */
|
||||
_executeHook('uponSanitizeElement', currentNode, {
|
||||
tagName: tagName
|
||||
});
|
||||
|
||||
/* Remove element if anything forbids its presence */
|
||||
if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
|
||||
/* Keep content except for black-listed elements */
|
||||
if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]
|
||||
&& typeof currentNode.insertAdjacentHTML === 'function') {
|
||||
try {
|
||||
currentNode.insertAdjacentHTML('AfterEnd', currentNode.innerHTML);
|
||||
} catch (e) {}
|
||||
}
|
||||
_forceRemove(currentNode);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Convert markup to cover jQuery behavior */
|
||||
if (SAFE_FOR_JQUERY && !currentNode.firstElementChild &&
|
||||
(!currentNode.content || !currentNode.content.firstElementChild)) {
|
||||
currentNode.innerHTML = currentNode.textContent.replace(/</g, '<');
|
||||
}
|
||||
|
||||
/* Sanitize element content to be template-safe */
|
||||
if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {
|
||||
/* Get the element's text content */
|
||||
content = currentNode.textContent;
|
||||
content = content.replace(MUSTACHE_EXPR, ' ');
|
||||
content = content.replace(ERB_EXPR, ' ');
|
||||
currentNode.textContent = content;
|
||||
}
|
||||
|
||||
/* Execute a hook if present */
|
||||
_executeHook('afterSanitizeElements', currentNode, null);
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
var DATA_ATTR = /^data-[\w.\u00B7-\uFFFF-]/;
|
||||
var IS_ALLOWED_URI = /^(?:(?:(?:f|ht)tps?|mailto|tel):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i;
|
||||
var IS_SCRIPT_OR_DATA = /^(?:\w+script|data):/i;
|
||||
/* This needs to be extensive thanks to Webkit/Blink's behavior */
|
||||
var ATTR_WHITESPACE = /[\x00-\x20\xA0\u1680\u180E\u2000-\u2029\u205f\u3000]/g;
|
||||
|
||||
/**
|
||||
* _sanitizeAttributes
|
||||
*
|
||||
* @protect attributes
|
||||
* @protect nodeName
|
||||
* @protect removeAttribute
|
||||
* @protect setAttribute
|
||||
*
|
||||
* @param node to sanitize
|
||||
* @return void
|
||||
*/
|
||||
var _sanitizeAttributes = function(currentNode) {
|
||||
var attr, name, value, lcName, idAttr, attributes, hookEvent, l;
|
||||
/* Execute a hook if present */
|
||||
_executeHook('beforeSanitizeAttributes', currentNode, null);
|
||||
|
||||
attributes = currentNode.attributes;
|
||||
|
||||
/* Check if we have attributes; if not we might have a text node */
|
||||
if (!attributes) { return; }
|
||||
|
||||
hookEvent = {
|
||||
attrName: '',
|
||||
attrValue: '',
|
||||
keepAttr: true
|
||||
};
|
||||
l = attributes.length;
|
||||
|
||||
/* Go backwards over all attributes; safely remove bad ones */
|
||||
while (l--) {
|
||||
attr = attributes[l];
|
||||
name = attr.name;
|
||||
value = attr.value;
|
||||
lcName = name.toLowerCase();
|
||||
|
||||
/* Execute a hook if present */
|
||||
hookEvent.attrName = lcName;
|
||||
hookEvent.attrValue = value;
|
||||
hookEvent.keepAttr = true;
|
||||
_executeHook('uponSanitizeAttribute', currentNode, hookEvent );
|
||||
value = hookEvent.attrValue;
|
||||
|
||||
/* Remove attribute */
|
||||
// Safari (iOS + Mac), last tested v8.0.5, crashes if you try to
|
||||
// remove a "name" attribute from an <img> tag that has an "id"
|
||||
// attribute at the time.
|
||||
if (lcName === 'name' &&
|
||||
currentNode.nodeName === 'IMG' && attributes.id) {
|
||||
idAttr = attributes.id;
|
||||
attributes = Array.prototype.slice.apply(attributes);
|
||||
currentNode.removeAttribute('id');
|
||||
currentNode.removeAttribute(name);
|
||||
if (attributes.indexOf(idAttr) > l) {
|
||||
currentNode.setAttribute('id', idAttr.value);
|
||||
}
|
||||
} else {
|
||||
// This avoids a crash in Safari v9.0 with double-ids.
|
||||
// The trick is to first set the id to be empty and then to
|
||||
// remove the attriubute
|
||||
if (name === 'id') {
|
||||
currentNode.setAttribute(name, '');
|
||||
}
|
||||
currentNode.removeAttribute(name);
|
||||
}
|
||||
|
||||
/* Did the hooks approve of the attribute? */
|
||||
if (!hookEvent.keepAttr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Make sure attribute cannot clobber */
|
||||
if (SANITIZE_DOM &&
|
||||
(lcName === 'id' || lcName === 'name') &&
|
||||
(value in window || value in document || value in formElement)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Sanitize attribute content to be template-safe */
|
||||
if (SAFE_FOR_TEMPLATES) {
|
||||
value = value.replace(MUSTACHE_EXPR, ' ');
|
||||
value = value.replace(ERB_EXPR, ' ');
|
||||
}
|
||||
|
||||
if (
|
||||
/* Check the name is permitted */
|
||||
(ALLOWED_ATTR[lcName] && !FORBID_ATTR[lcName] && (
|
||||
/* Check no script, data or unknown possibly unsafe URI
|
||||
unless we know URI values are safe for that attribute */
|
||||
URI_SAFE_ATTRIBUTES[lcName] ||
|
||||
IS_ALLOWED_URI.test(value.replace(ATTR_WHITESPACE,'')) ||
|
||||
/* Keep image data URIs alive if src is allowed */
|
||||
(lcName === 'src' && value.indexOf('data:') === 0 &&
|
||||
DATA_URI_TAGS[currentNode.nodeName.toLowerCase()])
|
||||
)) ||
|
||||
/* Allow potentially valid data-* attributes:
|
||||
* At least one character after "-" (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)
|
||||
* XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)
|
||||
* We don't need to check the value; it's always URI safe.
|
||||
*/
|
||||
(ALLOW_DATA_ATTR && DATA_ATTR.test(lcName)) ||
|
||||
/* Allow unknown protocols:
|
||||
* This provides support for links that are handled by protocol handlers which may be unknown
|
||||
* ahead of time, e.g. fb:, spotify:
|
||||
*/
|
||||
(ALLOW_UNKNOWN_PROTOCOLS && !IS_SCRIPT_OR_DATA.test(value.replace(ATTR_WHITESPACE,'')))
|
||||
) {
|
||||
/* Handle invalid data-* attribute set by try-catching it */
|
||||
try {
|
||||
currentNode.setAttribute(name, value);
|
||||
} catch (e) {}
|
||||
}
|
||||
}
|
||||
|
||||
/* Execute a hook if present */
|
||||
_executeHook('afterSanitizeAttributes', currentNode, null);
|
||||
};
|
||||
|
||||
/**
|
||||
* _sanitizeShadowDOM
|
||||
*
|
||||
* @param fragment to iterate over recursively
|
||||
* @return void
|
||||
*/
|
||||
var _sanitizeShadowDOM = function(fragment) {
|
||||
var shadowNode;
|
||||
var shadowIterator = _createIterator(fragment);
|
||||
|
||||
/* Execute a hook if present */
|
||||
_executeHook('beforeSanitizeShadowDOM', fragment, null);
|
||||
|
||||
while ( (shadowNode = shadowIterator.nextNode()) ) {
|
||||
/* Execute a hook if present */
|
||||
_executeHook('uponSanitizeShadowNode', shadowNode, null);
|
||||
|
||||
/* Sanitize tags and elements */
|
||||
if (_sanitizeElements(shadowNode)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Deep shadow DOM detected */
|
||||
if (shadowNode.content instanceof DocumentFragment) {
|
||||
_sanitizeShadowDOM(shadowNode.content);
|
||||
}
|
||||
|
||||
/* Check attributes, sanitize if necessary */
|
||||
_sanitizeAttributes(shadowNode);
|
||||
}
|
||||
|
||||
/* Execute a hook if present */
|
||||
_executeHook('afterSanitizeShadowDOM', fragment, null);
|
||||
};
|
||||
|
||||
/**
|
||||
* _executeHook
|
||||
* Execute user configurable hooks
|
||||
*
|
||||
* @param {String} entryPoint Name of the hook's entry point
|
||||
* @param {Node} currentNode
|
||||
*/
|
||||
var _executeHook = function(entryPoint, currentNode, data) {
|
||||
if (!hooks[entryPoint]) { return; }
|
||||
|
||||
hooks[entryPoint].forEach(function(hook) {
|
||||
hook.call(DOMPurify, currentNode, data, CONFIG);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* sanitize
|
||||
* Public method providing core sanitation functionality
|
||||
*
|
||||
* @param {String} dirty string
|
||||
* @param {Object} configuration object
|
||||
*/
|
||||
DOMPurify.sanitize = function(dirty, cfg) {
|
||||
var body, currentNode, oldNode, nodeIterator, returnNode;
|
||||
/* Make sure we have a string to sanitize.
|
||||
DO NOT return early, as this will return the wrong type if
|
||||
the user has requested a DOM object rather than a string */
|
||||
if (!dirty) {
|
||||
dirty = '';
|
||||
}
|
||||
|
||||
/* Stringify, in case dirty is an object */
|
||||
if (typeof dirty !== 'string') {
|
||||
if (typeof dirty.toString !== 'function') {
|
||||
throw new TypeError('toString is not a function');
|
||||
} else {
|
||||
dirty = dirty.toString();
|
||||
}
|
||||
}
|
||||
|
||||
/* Check we can run. Otherwise fall back or ignore */
|
||||
if (!DOMPurify.isSupported) {
|
||||
if (typeof window.toStaticHTML === 'object'
|
||||
|| typeof window.toStaticHTML === 'function') {
|
||||
return window.toStaticHTML(dirty);
|
||||
}
|
||||
return dirty;
|
||||
}
|
||||
|
||||
/* Assign config vars */
|
||||
_parseConfig(cfg);
|
||||
|
||||
/* Exit directly if we have nothing to do */
|
||||
if (!RETURN_DOM && !WHOLE_DOCUMENT && dirty.indexOf('<') === -1) {
|
||||
return dirty;
|
||||
}
|
||||
|
||||
/* Initialize the document to work on */
|
||||
body = _initDocument(dirty);
|
||||
|
||||
/* Check we have a DOM node from the data */
|
||||
if (!body) {
|
||||
return RETURN_DOM ? null : '';
|
||||
}
|
||||
|
||||
/* Get node iterator */
|
||||
nodeIterator = _createIterator(body);
|
||||
|
||||
/* Now start iterating over the created document */
|
||||
while ( (currentNode = nodeIterator.nextNode()) ) {
|
||||
|
||||
/* Fix IE's strange behavior with manipulated textNodes #89 */
|
||||
if (currentNode.nodeType === 3 && currentNode === oldNode) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Sanitize tags and elements */
|
||||
if (_sanitizeElements(currentNode)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Shadow DOM detected, sanitize it */
|
||||
if (currentNode.content instanceof DocumentFragment) {
|
||||
_sanitizeShadowDOM(currentNode.content);
|
||||
}
|
||||
|
||||
/* Check attributes, sanitize if necessary */
|
||||
_sanitizeAttributes(currentNode);
|
||||
|
||||
oldNode = currentNode;
|
||||
}
|
||||
|
||||
/* Return sanitized string or DOM */
|
||||
if (RETURN_DOM) {
|
||||
|
||||
if (RETURN_DOM_FRAGMENT) {
|
||||
returnNode = createDocumentFragment.call(body.ownerDocument);
|
||||
|
||||
while (body.firstChild) {
|
||||
returnNode.appendChild(body.firstChild);
|
||||
}
|
||||
} else {
|
||||
returnNode = body;
|
||||
}
|
||||
|
||||
if (RETURN_DOM_IMPORT) {
|
||||
/* adoptNode() is not used because internal state is not reset
|
||||
(e.g. the past names map of a HTMLFormElement), this is safe
|
||||
in theory but we would rather not risk another attack vector.
|
||||
The state that is cloned by importNode() is explicitly defined
|
||||
by the specs. */
|
||||
returnNode = importNode.call(originalDocument, returnNode, true);
|
||||
}
|
||||
|
||||
return returnNode;
|
||||
}
|
||||
|
||||
return WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
|
||||
};
|
||||
|
||||
/**
|
||||
* addHook
|
||||
* Public method to add DOMPurify hooks
|
||||
*
|
||||
* @param {String} entryPoint
|
||||
* @param {Function} hookFunction
|
||||
*/
|
||||
DOMPurify.addHook = function(entryPoint, hookFunction) {
|
||||
if (typeof hookFunction !== 'function') { return; }
|
||||
hooks[entryPoint] = hooks[entryPoint] || [];
|
||||
hooks[entryPoint].push(hookFunction);
|
||||
};
|
||||
|
||||
/**
|
||||
* removeHook
|
||||
* Public method to remove a DOMPurify hook at a given entryPoint
|
||||
* (pops it from the stack of hooks if more are present)
|
||||
*
|
||||
* @param {String} entryPoint
|
||||
* @return void
|
||||
*/
|
||||
DOMPurify.removeHook = function(entryPoint) {
|
||||
if (hooks[entryPoint]) {
|
||||
hooks[entryPoint].pop();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* removeHooks
|
||||
* Public method to remove all DOMPurify hooks at a given entryPoint
|
||||
*
|
||||
* @param {String} entryPoint
|
||||
* @return void
|
||||
*/
|
||||
DOMPurify.removeHooks = function(entryPoint) {
|
||||
if (hooks[entryPoint]) {
|
||||
hooks[entryPoint] = [];
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* removeAllHooks
|
||||
* Public method to remove all DOMPurify hooks
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
DOMPurify.removeAllHooks = function() {
|
||||
hooks = [];
|
||||
};
|
||||
|
||||
return DOMPurify;
|
||||
}));
|
1
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/plugins/purify.min.js
vendored
Normal file
1
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/plugins/purify.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
1
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/plugins/sortable.min.js
vendored
Normal file
1
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/plugins/sortable.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1,156 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Krajee Explorer Font Awesome theme style for bootstrap-fileinput. Load this theme file after loading `fileinput.css`.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/
|
||||
.theme-explorer-fa .file-upload-indicator, .theme-explorer-fa .file-drag-handle, .theme-explorer-fa .explorer-frame .kv-file-content, .theme-explorer-fa .file-actions, .explorer-frame .file-preview-other {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .file-thumb-progress .progress, .theme-explorer-fa .file-thumb-progress .progress-bar {
|
||||
height: 13px;
|
||||
font-size: 11px;
|
||||
line-height: 13px;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .file-upload-indicator, .theme-explorer-fa .file-drag-handle {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
top: 0;
|
||||
right: 3px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .file-thumb-progress .progress, .theme-explorer-fa .explorer-caption {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .explorer-frame td {
|
||||
vertical-align: middle;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .explorer-frame .kv-file-content {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .file-actions-cell {
|
||||
position: relative;
|
||||
width: 120px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .file-thumb-progress .progress {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .explorer-caption {
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .kvsortable-ghost {
|
||||
opacity: 0.6;
|
||||
background: #e1edf7;
|
||||
border: 2px solid #a1abff;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .file-preview .table {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .file-error-message ul {
|
||||
padding: 5px 0 0 20px;
|
||||
}
|
||||
|
||||
.explorer-frame .file-preview-text {
|
||||
display: inline-block;
|
||||
color: #428bca;
|
||||
border: 1px solid #ddd;
|
||||
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
outline: none;
|
||||
padding: 8px;
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.explorer-frame .file-preview-html {
|
||||
display: inline-block;
|
||||
border: 1px solid #ddd;
|
||||
padding: 8px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.explorer-frame .file-other-icon {
|
||||
font-size: 2.6em;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.theme-explorer-fa .table, .theme-explorer-fa .table tbody, .theme-explorer-fa .table tr, .theme-explorer-fa .table td {
|
||||
display: block;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .table {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .table tr {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .table tr:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .table td {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .table .kv-file-content {
|
||||
border-bottom: none;
|
||||
padding: 4px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .table .kv-file-content .file-preview-image {
|
||||
max-width: 100%;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .file-details-cell {
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
padding-top: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .file-actions-cell {
|
||||
border-top: none;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
.theme-explorer-fa .explorer-frame .explorer-caption {
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: auto;
|
||||
}
|
||||
}
|
||||
|
||||
/*noinspection CssOverwrittenProperties*/
|
||||
.file-zoom-dialog .explorer-frame .file-other-icon {
|
||||
font-size: 22em;
|
||||
font-size: 50vmin;
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Krajee Explorer Font Awesome theme configuration for bootstrap-fileinput.
|
||||
* Load this theme file after loading `fileinput.js`. Ensure that
|
||||
* font awesome assets and CSS are loaded on the page as well.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
var teTagBef = '<tr class="file-preview-frame {frameClass}" id="{previewId}" data-fileindex="{fileindex}"' +
|
||||
' data-template="{template}"', teContent = '<td class="kv-file-content">\n';
|
||||
$.fn.fileinputThemes['explorer-fa'] = {
|
||||
layoutTemplates: {
|
||||
preview: '<div class="file-preview {class}">\n' +
|
||||
' {close}' +
|
||||
' <div class="{dropClass}">\n' +
|
||||
' <table class="table table-bordered table-hover"><tbody class="file-preview-thumbnails">\n' +
|
||||
' </tbody></table>\n' +
|
||||
' <div class="clearfix"></div>' +
|
||||
' <div class="file-preview-status text-center text-success"></div>\n' +
|
||||
' <div class="kv-fileinput-error"></div>\n' +
|
||||
' </div>\n' +
|
||||
'</div>',
|
||||
footer: '<td class="file-details-cell"><div class="explorer-caption" title="{caption}">{caption}</div> ' +
|
||||
'{size}{progress}</td><td class="file-actions-cell">{indicator} {actions}</td>',
|
||||
actions: '{drag}\n' +
|
||||
'<div class="file-actions">\n' +
|
||||
' <div class="file-footer-buttons">\n' +
|
||||
' {upload} {download} {delete} {zoom} {other} ' +
|
||||
' </div>\n' +
|
||||
'</div>',
|
||||
zoomCache: '<tr style="display:none" class="kv-zoom-cache-theme"><td>' +
|
||||
'<table class="kv-zoom-cache">{zoomContent}</table></td></tr>',
|
||||
fileIcon: '<i class="fa fa-file kv-caption-icon"></i> '
|
||||
},
|
||||
previewMarkupTags: {
|
||||
tagBefore1: teTagBef + '>' + teContent,
|
||||
tagBefore2: teTagBef + ' title="{caption}">' + teContent,
|
||||
tagAfter: '</td>\n{footer}</tr>\n'
|
||||
},
|
||||
previewSettings: {
|
||||
image: {height: "60px"},
|
||||
html: {width: "100px", height: "60px"},
|
||||
text: {width: "100px", height: "60px"},
|
||||
video: {width: "auto", height: "60px"},
|
||||
audio: {width: "auto", height: "60px"},
|
||||
flash: {width: "100%", height: "60px"},
|
||||
object: {width: "100%", height: "60px"},
|
||||
pdf: {width: "100px", height: "60px"},
|
||||
other: {width: "100%", height: "60px"}
|
||||
},
|
||||
frameClass: 'explorer-frame',
|
||||
fileActionSettings: {
|
||||
removeIcon: '<i class="fa fa-trash"></i>',
|
||||
uploadIcon: '<i class="fa fa-upload"></i>',
|
||||
uploadRetryIcon: '<i class="fa fa-repeat"></i>',
|
||||
zoomIcon: '<i class="fa fa-search-plus"></i>',
|
||||
dragIcon: '<i class="fa fa-arrows"></i>',
|
||||
indicatorNew: '<i class="fa fa-plus-circle text-warning"></i>',
|
||||
indicatorSuccess: '<i class="fa fa-check-circle text-success"></i>',
|
||||
indicatorError: '<i class="fa fa-exclamation-circle text-danger"></i>',
|
||||
indicatorLoading: '<i class="fa fa-hourglass text-muted"></i>'
|
||||
},
|
||||
previewZoomButtonIcons: {
|
||||
prev: '<i class="fa fa-caret-left fa-lg"></i>',
|
||||
next: '<i class="fa fa-caret-right fa-lg"></i>',
|
||||
toggleheader: '<i class="fa fa-arrows-v"></i>',
|
||||
fullscreen: '<i class="fa fa-arrows-alt"></i>',
|
||||
borderless: '<i class="fa fa-external-link"></i>',
|
||||
close: '<i class="fa fa-remove"></i>'
|
||||
},
|
||||
previewFileIcon: '<i class="fa fa-file"></i>',
|
||||
browseIcon: '<i class="fa fa-folder-open"></i>',
|
||||
removeIcon: '<i class="fa fa-trash"></i>',
|
||||
cancelIcon: '<i class="fa fa-ban"></i>',
|
||||
uploadIcon: '<i class="fa fa-upload"></i>',
|
||||
msgValidationErrorIcon: '<i class="fa fa-exclamation-circle"></i> '
|
||||
};
|
||||
})(window.jQuery);
|
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/explorer-fa/theme.min.css
vendored
Normal file
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/explorer-fa/theme.min.css
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Krajee Explorer Font Awesome theme style for bootstrap-fileinput. Load this theme file after loading `fileinput.css`.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/.explorer-frame .file-preview-other,.theme-explorer-fa .explorer-frame .kv-file-content,.theme-explorer-fa .file-actions,.theme-explorer-fa .file-drag-handle,.theme-explorer-fa .file-upload-indicator{text-align:center}.theme-explorer-fa .file-thumb-progress .progress,.theme-explorer-fa .file-thumb-progress .progress-bar{height:13px;font-size:11px;line-height:13px}.theme-explorer-fa .file-drag-handle,.theme-explorer-fa .file-upload-indicator{position:absolute;display:inline-block;top:0;right:3px;width:16px;height:16px;font-size:16px}.theme-explorer-fa .explorer-caption,.theme-explorer-fa .file-thumb-progress .progress{display:block}.theme-explorer-fa .explorer-frame td{vertical-align:middle;text-align:left}.theme-explorer-fa .explorer-frame .kv-file-content{width:80px;height:80px;padding:5px}.theme-explorer-fa .file-actions-cell{position:relative;width:120px;padding:0}.theme-explorer-fa .file-thumb-progress .progress{margin-top:5px}.theme-explorer-fa .explorer-caption{color:#777}.theme-explorer-fa .kvsortable-ghost{opacity:.6;background:#e1edf7;border:2px solid #a1abff}.theme-explorer-fa .file-preview .table{margin:0}.theme-explorer-fa .file-error-message ul{padding:5px 0 0 20px}.explorer-frame .file-preview-text{display:inline-block;color:#428bca;border:1px solid #ddd;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;outline:0;padding:8px;resize:none}.explorer-frame .file-preview-html{display:inline-block;border:1px solid #ddd;padding:8px;overflow:auto}.explorer-frame .file-other-icon{font-size:2.6em}@media only screen and (max-width:767px){.theme-explorer-fa .table,.theme-explorer-fa .table tbody,.theme-explorer-fa .table td,.theme-explorer-fa .table tr{display:block;width:100%!important}.theme-explorer-fa .table{border:none}.theme-explorer-fa .table tr{margin-top:5px}.theme-explorer-fa .table tr:first-child{margin-top:0}.theme-explorer-fa .table td{text-align:center}.theme-explorer-fa .table .kv-file-content{border-bottom:none;padding:4px;margin:0}.theme-explorer-fa .table .kv-file-content .file-preview-image{max-width:100%;font-size:20px}.theme-explorer-fa .file-details-cell{border-top:none;border-bottom:none;padding-top:0;margin:0}.theme-explorer-fa .file-actions-cell{border-top:none;padding-bottom:4px}.theme-explorer-fa .explorer-frame .explorer-caption{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;left:0;right:0;margin:auto}}.file-zoom-dialog .explorer-frame .file-other-icon{font-size:22em;font-size:50vmin}
|
14
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/explorer-fa/theme.min.js
vendored
Normal file
14
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/explorer-fa/theme.min.js
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Krajee Explorer Font Awesome theme configuration for bootstrap-fileinput.
|
||||
* Load this theme file after loading `fileinput.js`. Ensure that
|
||||
* font awesome assets and CSS are loaded on the page as well.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/!function(a){"use strict";var e='<tr class="file-preview-frame {frameClass}" id="{previewId}" data-fileindex="{fileindex}" data-template="{template}"',i='<td class="kv-file-content">\n';a.fn.fileinputThemes["explorer-fa"]={layoutTemplates:{preview:'<div class="file-preview {class}">\n {close} <div class="{dropClass}">\n <table class="table table-bordered table-hover"><tbody class="file-preview-thumbnails">\n </tbody></table>\n <div class="clearfix"></div> <div class="file-preview-status text-center text-success"></div>\n <div class="kv-fileinput-error"></div>\n </div>\n</div>',footer:'<td class="file-details-cell"><div class="explorer-caption" title="{caption}">{caption}</div> {size}{progress}</td><td class="file-actions-cell">{indicator} {actions}</td>',actions:'{drag}\n<div class="file-actions">\n <div class="file-footer-buttons">\n {upload} {download} {delete} {zoom} {other} </div>\n</div>',zoomCache:'<tr style="display:none" class="kv-zoom-cache-theme"><td><table class="kv-zoom-cache">{zoomContent}</table></td></tr>',fileIcon:'<i class="fa fa-file kv-caption-icon"></i> '},previewMarkupTags:{tagBefore1:e+">"+i,tagBefore2:e+' title="{caption}">'+i,tagAfter:"</td>\n{footer}</tr>\n"},previewSettings:{image:{height:"60px"},html:{width:"100px",height:"60px"},text:{width:"100px",height:"60px"},video:{width:"auto",height:"60px"},audio:{width:"auto",height:"60px"},flash:{width:"100%",height:"60px"},object:{width:"100%",height:"60px"},pdf:{width:"100px",height:"60px"},other:{width:"100%",height:"60px"}},frameClass:"explorer-frame",fileActionSettings:{removeIcon:'<i class="fa fa-trash"></i>',uploadIcon:'<i class="fa fa-upload"></i>',uploadRetryIcon:'<i class="fa fa-repeat"></i>',zoomIcon:'<i class="fa fa-search-plus"></i>',dragIcon:'<i class="fa fa-arrows"></i>',indicatorNew:'<i class="fa fa-plus-circle text-warning"></i>',indicatorSuccess:'<i class="fa fa-check-circle text-success"></i>',indicatorError:'<i class="fa fa-exclamation-circle text-danger"></i>',indicatorLoading:'<i class="fa fa-hourglass text-muted"></i>'},previewZoomButtonIcons:{prev:'<i class="fa fa-caret-left fa-lg"></i>',next:'<i class="fa fa-caret-right fa-lg"></i>',toggleheader:'<i class="fa fa-arrows-v"></i>',fullscreen:'<i class="fa fa-arrows-alt"></i>',borderless:'<i class="fa fa-external-link"></i>',close:'<i class="fa fa-remove"></i>'},previewFileIcon:'<i class="fa fa-file"></i>',browseIcon:'<i class="fa fa-folder-open"></i>',removeIcon:'<i class="fa fa-trash"></i>',cancelIcon:'<i class="fa fa-ban"></i>',uploadIcon:'<i class="fa fa-upload"></i>',msgValidationErrorIcon:'<i class="fa fa-exclamation-circle"></i> '}}(window.jQuery);
|
@ -0,0 +1,156 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Krajee Explorer theme style for bootstrap-fileinput. Load this theme file after loading `fileinput.css`.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/
|
||||
.theme-explorer .file-upload-indicator, .theme-explorer .file-drag-handle, .theme-explorer .explorer-frame .kv-file-content, .theme-explorer .file-actions, .explorer-frame .file-preview-other {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.theme-explorer .file-thumb-progress .progress, .theme-explorer .file-thumb-progress .progress-bar {
|
||||
height: 13px;
|
||||
font-size: 11px;
|
||||
line-height: 13px;
|
||||
}
|
||||
|
||||
.theme-explorer .file-upload-indicator, .theme-explorer .file-drag-handle {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
top: 0;
|
||||
right: 3px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.theme-explorer .file-thumb-progress .progress, .theme-explorer .explorer-caption {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.theme-explorer .explorer-frame td {
|
||||
vertical-align: middle;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.theme-explorer .explorer-frame .kv-file-content {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.theme-explorer .file-actions-cell {
|
||||
position: relative;
|
||||
width: 120px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.theme-explorer .file-thumb-progress .progress {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.theme-explorer .explorer-caption {
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.theme-explorer .kvsortable-ghost {
|
||||
opacity: 0.6;
|
||||
background: #e1edf7;
|
||||
border: 2px solid #a1abff;
|
||||
}
|
||||
|
||||
.theme-explorer .file-preview .table {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.theme-explorer .file-error-message ul {
|
||||
padding: 5px 0 0 20px;
|
||||
}
|
||||
|
||||
.explorer-frame .file-preview-text {
|
||||
display: inline-block;
|
||||
color: #428bca;
|
||||
border: 1px solid #ddd;
|
||||
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
outline: none;
|
||||
padding: 8px;
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.explorer-frame .file-preview-html {
|
||||
display: inline-block;
|
||||
border: 1px solid #ddd;
|
||||
padding: 8px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.explorer-frame .file-other-icon {
|
||||
font-size: 2.6em;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.theme-explorer .table, .theme-explorer .table tbody, .theme-explorer .table tr, .theme-explorer .table td {
|
||||
display: block;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.theme-explorer .table {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.theme-explorer .table tr {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.theme-explorer .table tr:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.theme-explorer .table td {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.theme-explorer .table .kv-file-content {
|
||||
border-bottom: none;
|
||||
padding: 4px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.theme-explorer .table .kv-file-content .file-preview-image {
|
||||
max-width: 100%;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.theme-explorer .file-details-cell {
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
padding-top: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.theme-explorer .file-actions-cell {
|
||||
border-top: none;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
.theme-explorer .explorer-frame .explorer-caption {
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: auto;
|
||||
}
|
||||
}
|
||||
|
||||
/*noinspection CssOverwrittenProperties*/
|
||||
.file-zoom-dialog .explorer-frame .file-other-icon {
|
||||
font-size: 22em;
|
||||
font-size: 50vmin;
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Krajee Explorer theme configuration for bootstrap-fileinput. Load this theme file after loading `fileinput.js`.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
var teTagBef = '<tr class="file-preview-frame {frameClass}" id="{previewId}" data-fileindex="{fileindex}"' +
|
||||
' data-template="{template}"', teContent = '<td class="kv-file-content">\n';
|
||||
$.fn.fileinputThemes.explorer = {
|
||||
layoutTemplates: {
|
||||
preview: '<div class="file-preview {class}">\n' +
|
||||
' {close}' +
|
||||
' <div class="{dropClass}">\n' +
|
||||
' <table class="table table-bordered table-hover"><tbody class="file-preview-thumbnails">\n' +
|
||||
' </tbody></table>\n' +
|
||||
' <div class="clearfix"></div>' +
|
||||
' <div class="file-preview-status text-center text-success"></div>\n' +
|
||||
' <div class="kv-fileinput-error"></div>\n' +
|
||||
' </div>\n' +
|
||||
'</div>',
|
||||
footer: '<td class="file-details-cell"><div class="explorer-caption" title="{caption}">{caption}</div> ' +
|
||||
'{size}{progress}</td><td class="file-actions-cell">{indicator} {actions}</td>',
|
||||
actions: '{drag}\n' +
|
||||
'<div class="file-actions">\n' +
|
||||
' <div class="file-footer-buttons">\n' +
|
||||
' {upload} {download} {delete} {zoom} {other} ' +
|
||||
' </div>\n' +
|
||||
'</div>',
|
||||
zoomCache: '<tr style="display:none" class="kv-zoom-cache-theme"><td>' +
|
||||
'<table class="kv-zoom-cache">{zoomContent}</table></td></tr>'
|
||||
},
|
||||
previewMarkupTags: {
|
||||
tagBefore1: teTagBef + '>' + teContent,
|
||||
tagBefore2: teTagBef + ' title="{caption}">' + teContent,
|
||||
tagAfter: '</td>\n{footer}</tr>\n'
|
||||
},
|
||||
previewSettings: {
|
||||
image: {height: "60px"},
|
||||
html: {width: "100px", height: "60px"},
|
||||
text: {width: "100px", height: "60px"},
|
||||
video: {width: "auto", height: "60px"},
|
||||
audio: {width: "auto", height: "60px"},
|
||||
flash: {width: "100%", height: "60px"},
|
||||
object: {width: "100%", height: "60px"},
|
||||
pdf: {width: "100px", height: "60px"},
|
||||
other: {width: "100%", height: "60px"}
|
||||
},
|
||||
frameClass: 'explorer-frame'
|
||||
};
|
||||
})(window.jQuery);
|
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/explorer/theme.min.css
vendored
Normal file
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/explorer/theme.min.css
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Krajee Explorer theme style for bootstrap-fileinput. Load this theme file after loading `fileinput.css`.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/.explorer-frame .file-preview-other,.theme-explorer .explorer-frame .kv-file-content,.theme-explorer .file-actions,.theme-explorer .file-drag-handle,.theme-explorer .file-upload-indicator{text-align:center}.theme-explorer .file-thumb-progress .progress,.theme-explorer .file-thumb-progress .progress-bar{height:13px;font-size:11px;line-height:13px}.theme-explorer .file-drag-handle,.theme-explorer .file-upload-indicator{position:absolute;display:inline-block;top:0;right:3px;width:16px;height:16px;font-size:16px}.theme-explorer .explorer-caption,.theme-explorer .file-thumb-progress .progress{display:block}.theme-explorer .explorer-frame td{vertical-align:middle;text-align:left}.theme-explorer .explorer-frame .kv-file-content{width:80px;height:80px;padding:5px}.theme-explorer .file-actions-cell{position:relative;width:120px;padding:0}.theme-explorer .file-thumb-progress .progress{margin-top:5px}.theme-explorer .explorer-caption{color:#777}.theme-explorer .kvsortable-ghost{opacity:.6;background:#e1edf7;border:2px solid #a1abff}.theme-explorer .file-preview .table{margin:0}.theme-explorer .file-error-message ul{padding:5px 0 0 20px}.explorer-frame .file-preview-text{display:inline-block;color:#428bca;border:1px solid #ddd;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;outline:0;padding:8px;resize:none}.explorer-frame .file-preview-html{display:inline-block;border:1px solid #ddd;padding:8px;overflow:auto}.explorer-frame .file-other-icon{font-size:2.6em}@media only screen and (max-width:767px){.theme-explorer .table,.theme-explorer .table tbody,.theme-explorer .table td,.theme-explorer .table tr{display:block;width:100%!important}.theme-explorer .table{border:none}.theme-explorer .table tr{margin-top:5px}.theme-explorer .table tr:first-child{margin-top:0}.theme-explorer .table td{text-align:center}.theme-explorer .table .kv-file-content{border-bottom:none;padding:4px;margin:0}.theme-explorer .table .kv-file-content .file-preview-image{max-width:100%;font-size:20px}.theme-explorer .file-details-cell{border-top:none;border-bottom:none;padding-top:0;margin:0}.theme-explorer .file-actions-cell{border-top:none;padding-bottom:4px}.theme-explorer .explorer-frame .explorer-caption{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;left:0;right:0;margin:auto}}.file-zoom-dialog .explorer-frame .file-other-icon{font-size:22em;font-size:50vmin}
|
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/explorer/theme.min.js
vendored
Normal file
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/explorer/theme.min.js
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Krajee Explorer theme configuration for bootstrap-fileinput. Load this theme file after loading `fileinput.js`.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/!function(e){"use strict";var t='<tr class="file-preview-frame {frameClass}" id="{previewId}" data-fileindex="{fileindex}" data-template="{template}"',i='<td class="kv-file-content">\n';e.fn.fileinputThemes.explorer={layoutTemplates:{preview:'<div class="file-preview {class}">\n {close} <div class="{dropClass}">\n <table class="table table-bordered table-hover"><tbody class="file-preview-thumbnails">\n </tbody></table>\n <div class="clearfix"></div> <div class="file-preview-status text-center text-success"></div>\n <div class="kv-fileinput-error"></div>\n </div>\n</div>',footer:'<td class="file-details-cell"><div class="explorer-caption" title="{caption}">{caption}</div> {size}{progress}</td><td class="file-actions-cell">{indicator} {actions}</td>',actions:'{drag}\n<div class="file-actions">\n <div class="file-footer-buttons">\n {upload} {download} {delete} {zoom} {other} </div>\n</div>',zoomCache:'<tr style="display:none" class="kv-zoom-cache-theme"><td><table class="kv-zoom-cache">{zoomContent}</table></td></tr>'},previewMarkupTags:{tagBefore1:t+">"+i,tagBefore2:t+' title="{caption}">'+i,tagAfter:"</td>\n{footer}</tr>\n"},previewSettings:{image:{height:"60px"},html:{width:"100px",height:"60px"},text:{width:"100px",height:"60px"},video:{width:"auto",height:"60px"},audio:{width:"auto",height:"60px"},flash:{width:"100%",height:"60px"},object:{width:"100%",height:"60px"},pdf:{width:"100px",height:"60px"},other:{width:"100%",height:"60px"}},frameClass:"explorer-frame"}}(window.jQuery);
|
@ -0,0 +1,46 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Font Awesome icon theme configuration for bootstrap-fileinput. Requires font awesome assets to be loaded.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputThemes.fa = {
|
||||
fileActionSettings: {
|
||||
removeIcon: '<i class="fa fa-trash"></i>',
|
||||
uploadIcon: '<i class="fa fa-upload"></i>',
|
||||
uploadRetryIcon: '<i class="fa fa-repeat"></i>',
|
||||
zoomIcon: '<i class="fa fa-search-plus"></i>',
|
||||
dragIcon: '<i class="fa fa-bars"></i>',
|
||||
indicatorNew: '<i class="fa fa-plus-circle text-warning"></i>',
|
||||
indicatorSuccess: '<i class="fa fa-check-circle text-success"></i>',
|
||||
indicatorError: '<i class="fa fa-exclamation-circle text-danger"></i>',
|
||||
indicatorLoading: '<i class="fa fa-hourglass text-muted"></i>'
|
||||
},
|
||||
layoutTemplates: {
|
||||
fileIcon: '<i class="fa fa-file kv-caption-icon"></i> '
|
||||
},
|
||||
previewZoomButtonIcons: {
|
||||
prev: '<i class="fa fa-caret-left fa-lg"></i>',
|
||||
next: '<i class="fa fa-caret-right fa-lg"></i>',
|
||||
toggleheader: '<i class="fa fa-arrows-v"></i>',
|
||||
fullscreen: '<i class="fa fa-arrows-alt"></i>',
|
||||
borderless: '<i class="fa fa-external-link"></i>',
|
||||
close: '<i class="fa fa-remove"></i>'
|
||||
},
|
||||
previewFileIcon: '<i class="fa fa-file"></i>',
|
||||
browseIcon: '<i class="fa fa-folder-open"></i>',
|
||||
removeIcon: '<i class="fa fa-trash"></i>',
|
||||
cancelIcon: '<i class="fa fa-ban"></i>',
|
||||
uploadIcon: '<i class="fa fa-upload"></i>',
|
||||
msgValidationErrorIcon: '<i class="fa fa-exclamation-circle"></i> '
|
||||
};
|
||||
})(window.jQuery);
|
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/fa/theme.min.js
vendored
Normal file
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/fa/theme.min.js
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Font Awesome icon theme configuration for bootstrap-fileinput. Requires font awesome assets to be loaded.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/!function(a){"use strict";a.fn.fileinputThemes.fa={fileActionSettings:{removeIcon:'<i class="fa fa-trash"></i>',uploadIcon:'<i class="fa fa-upload"></i>',uploadRetryIcon:'<i class="fa fa-repeat"></i>',zoomIcon:'<i class="fa fa-search-plus"></i>',dragIcon:'<i class="fa fa-bars"></i>',indicatorNew:'<i class="fa fa-plus-circle text-warning"></i>',indicatorSuccess:'<i class="fa fa-check-circle text-success"></i>',indicatorError:'<i class="fa fa-exclamation-circle text-danger"></i>',indicatorLoading:'<i class="fa fa-hourglass text-muted"></i>'},layoutTemplates:{fileIcon:'<i class="fa fa-file kv-caption-icon"></i> '},previewZoomButtonIcons:{prev:'<i class="fa fa-caret-left fa-lg"></i>',next:'<i class="fa fa-caret-right fa-lg"></i>',toggleheader:'<i class="fa fa-arrows-v"></i>',fullscreen:'<i class="fa fa-arrows-alt"></i>',borderless:'<i class="fa fa-external-link"></i>',close:'<i class="fa fa-remove"></i>'},previewFileIcon:'<i class="fa fa-file"></i>',browseIcon:'<i class="fa fa-folder-open"></i>',removeIcon:'<i class="fa fa-trash"></i>',cancelIcon:'<i class="fa fa-ban"></i>',uploadIcon:'<i class="fa fa-upload"></i>',msgValidationErrorIcon:'<i class="fa fa-exclamation-circle"></i> '}}(window.jQuery);
|
@ -0,0 +1,45 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Glyphicon (default) theme configuration for bootstrap-fileinput.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn.fileinputThemes.gly = {
|
||||
fileActionSettings: {
|
||||
removeIcon: '<i class="glyphicon glyphicon-trash"></i>',
|
||||
uploadIcon: '<i class="glyphicon glyphicon-upload"></i>',
|
||||
zoomIcon: '<i class="glyphicon glyphicon-zoom-in"></i>',
|
||||
dragIcon: '<i class="glyphicon glyphicon-move"></i>',
|
||||
indicatorNew: '<i class="glyphicon glyphicon-plus-sign text-warning"></i>',
|
||||
indicatorSuccess: '<i class="glyphicon glyphicon-ok-sign text-success"></i>',
|
||||
indicatorError: '<i class="glyphicon glyphicon-exclamation-sign text-danger"></i>',
|
||||
indicatorLoading: '<i class="glyphicon glyphicon-hourglass text-muted"></i>'
|
||||
},
|
||||
layoutTemplates: {
|
||||
fileIcon: '<i class="glyphicon glyphicon-file kv-caption-icon"></i>'
|
||||
},
|
||||
previewZoomButtonIcons: {
|
||||
prev: '<i class="glyphicon glyphicon-triangle-left"></i>',
|
||||
next: '<i class="glyphicon glyphicon-triangle-right"></i>',
|
||||
toggleheader: '<i class="glyphicon glyphicon-resize-vertical"></i>',
|
||||
fullscreen: '<i class="glyphicon glyphicon-fullscreen"></i>',
|
||||
borderless: '<i class="glyphicon glyphicon-resize-full"></i>',
|
||||
close: '<i class="glyphicon glyphicon-remove"></i>'
|
||||
},
|
||||
previewFileIcon: '<i class="glyphicon glyphicon-file"></i>',
|
||||
browseIcon: '<i class="glyphicon glyphicon-folder-open"></i> ',
|
||||
removeIcon: '<i class="glyphicon glyphicon-trash"></i>',
|
||||
cancelIcon: '<i class="glyphicon glyphicon-ban-circle"></i>',
|
||||
uploadIcon: '<i class="glyphicon glyphicon-upload"></i>',
|
||||
msgValidationErrorIcon: '<i class="glyphicon glyphicon-exclamation-sign"></i> '
|
||||
};
|
||||
})(window.jQuery);
|
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/gly/theme.min.js
vendored
Normal file
12
static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/gly/theme.min.js
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
/*!
|
||||
* bootstrap-fileinput v4.4.7
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Glyphicon (default) theme configuration for bootstrap-fileinput.
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/!function(i){"use strict";i.fn.fileinputThemes.gly={fileActionSettings:{removeIcon:'<i class="glyphicon glyphicon-trash"></i>',uploadIcon:'<i class="glyphicon glyphicon-upload"></i>',zoomIcon:'<i class="glyphicon glyphicon-zoom-in"></i>',dragIcon:'<i class="glyphicon glyphicon-move"></i>',indicatorNew:'<i class="glyphicon glyphicon-plus-sign text-warning"></i>',indicatorSuccess:'<i class="glyphicon glyphicon-ok-sign text-success"></i>',indicatorError:'<i class="glyphicon glyphicon-exclamation-sign text-danger"></i>',indicatorLoading:'<i class="glyphicon glyphicon-hourglass text-muted"></i>'},layoutTemplates:{fileIcon:'<i class="glyphicon glyphicon-file kv-caption-icon"></i>'},previewZoomButtonIcons:{prev:'<i class="glyphicon glyphicon-triangle-left"></i>',next:'<i class="glyphicon glyphicon-triangle-right"></i>',toggleheader:'<i class="glyphicon glyphicon-resize-vertical"></i>',fullscreen:'<i class="glyphicon glyphicon-fullscreen"></i>',borderless:'<i class="glyphicon glyphicon-resize-full"></i>',close:'<i class="glyphicon glyphicon-remove"></i>'},previewFileIcon:'<i class="glyphicon glyphicon-file"></i>',browseIcon:'<i class="glyphicon glyphicon-folder-open"></i> ',removeIcon:'<i class="glyphicon glyphicon-trash"></i>',cancelIcon:'<i class="glyphicon glyphicon-ban-circle"></i>',uploadIcon:'<i class="glyphicon glyphicon-upload"></i>',msgValidationErrorIcon:'<i class="glyphicon glyphicon-exclamation-sign"></i> '}}(window.jQuery);
|
@ -18,11 +18,11 @@ textarea{
|
||||
font-weight: 200;
|
||||
}
|
||||
.error-message{
|
||||
color: red;
|
||||
color: #d9534f;
|
||||
font-size: 12px;
|
||||
}
|
||||
.success-message{
|
||||
color: green;
|
||||
color: #5cb85c;
|
||||
font-size: 12px;
|
||||
}
|
||||
.input-readonly{
|
||||
@ -220,12 +220,17 @@ textarea{
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.manual-body .page-right .box-body label{
|
||||
.manual-body .page-right .box-body label, .text-label{
|
||||
font-family: "Microsoft Yahei","Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
color: #222222;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.required>.text-label:after{
|
||||
color: #db2828;
|
||||
content: "*";
|
||||
vertical-align: middle;
|
||||
margin: -.2em 0 0 .2em;
|
||||
}
|
||||
.manual-body .page-right .box-body .form-right{
|
||||
position: absolute;
|
||||
right: 0;
|
||||
|
@ -6,7 +6,7 @@ function showError($msg,$id) {
|
||||
if(!$id){
|
||||
$id = "#form-error-message"
|
||||
}
|
||||
$($id).addClass("error-message").removeClass("success-message").text($msg);
|
||||
$($id).addClass("error-message").removeClass("success-message").text($msg).show();
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ function showSuccess($msg,$id) {
|
||||
if(!$id){
|
||||
$id = "#form-error-message"
|
||||
}
|
||||
$($id).addClass("success-message").removeClass("error-message").text($msg);
|
||||
$($id).addClass("success-message").removeClass("error-message").text($msg).show();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1,94 +0,0 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func AbsolutePath(p string) (string, error) {
|
||||
|
||||
if strings.HasPrefix(p, "~") {
|
||||
home := os.Getenv("HOME")
|
||||
if home == "" {
|
||||
panic(fmt.Sprintf("can not found HOME in envs, '%s' AbsPh Failed!", p))
|
||||
}
|
||||
p = fmt.Sprint(home, string(p[1:]))
|
||||
}
|
||||
s, err := filepath.Abs(p)
|
||||
|
||||
if nil != err {
|
||||
return "", err
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
|
||||
// FileExists reports whether the named file or directory exists.
|
||||
func FileExists(name string) bool {
|
||||
if _, err := os.Stat(name); err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func CopyFile(dstName, srcName string) (written int64, err error) {
|
||||
src, err := os.Open(srcName)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer src.Close()
|
||||
dst, err := os.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0644)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
defer dst.Close()
|
||||
return io.Copy(dst, src)
|
||||
}
|
||||
|
||||
func FormatBytes(size int64) string {
|
||||
units := []string{" B", " KB", " MB", " GB", " TB"}
|
||||
|
||||
s := float64(size)
|
||||
|
||||
i := 0
|
||||
|
||||
for ; s >= 1024 && i < 4; i++ {
|
||||
s /= 1024
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%.2f%s", s, units[i])
|
||||
}
|
||||
|
||||
func Round(val float64, places int) float64 {
|
||||
var t float64
|
||||
f := math.Pow10(places)
|
||||
x := val * f
|
||||
if math.IsInf(x, 0) || math.IsNaN(x) {
|
||||
return val
|
||||
}
|
||||
if x >= 0.0 {
|
||||
t = math.Ceil(x)
|
||||
if (t - x) > 0.50000000001 {
|
||||
t -= 1.0
|
||||
}
|
||||
} else {
|
||||
t = math.Ceil(-x)
|
||||
if (t + x) > 0.50000000001 {
|
||||
t -= 1.0
|
||||
}
|
||||
t = -t
|
||||
}
|
||||
x = t / f
|
||||
|
||||
if !math.IsInf(x, 0) {
|
||||
return x
|
||||
}
|
||||
|
||||
return t
|
||||
}
|
@ -6,6 +6,7 @@ import (
|
||||
"strings"
|
||||
"io"
|
||||
"fmt"
|
||||
"math"
|
||||
)
|
||||
|
||||
//==================================
|
||||
@ -130,3 +131,71 @@ func RemoveDir(dir string) error {
|
||||
return os.RemoveAll(dir)
|
||||
}
|
||||
|
||||
func AbsolutePath(p string) (string, error) {
|
||||
|
||||
if strings.HasPrefix(p, "~") {
|
||||
home := os.Getenv("HOME")
|
||||
if home == "" {
|
||||
panic(fmt.Sprintf("can not found HOME in envs, '%s' AbsPh Failed!", p))
|
||||
}
|
||||
p = fmt.Sprint(home, string(p[1:]))
|
||||
}
|
||||
s, err := filepath.Abs(p)
|
||||
|
||||
if nil != err {
|
||||
return "", err
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
|
||||
// FileExists reports whether the named file or directory exists.
|
||||
func FileExists(name string) bool {
|
||||
if _, err := os.Stat(name); err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func FormatBytes(size int64) string {
|
||||
units := []string{" B", " KB", " MB", " GB", " TB"}
|
||||
|
||||
s := float64(size)
|
||||
|
||||
i := 0
|
||||
|
||||
for ; s >= 1024 && i < 4; i++ {
|
||||
s /= 1024
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%.2f%s", s, units[i])
|
||||
}
|
||||
|
||||
func Round(val float64, places int) float64 {
|
||||
var t float64
|
||||
f := math.Pow10(places)
|
||||
x := val * f
|
||||
if math.IsInf(x, 0) || math.IsNaN(x) {
|
||||
return val
|
||||
}
|
||||
if x >= 0.0 {
|
||||
t = math.Ceil(x)
|
||||
if (t - x) > 0.50000000001 {
|
||||
t -= 1.0
|
||||
}
|
||||
} else {
|
||||
t = math.Ceil(-x)
|
||||
if (t + x) > 0.50000000001 {
|
||||
t -= 1.0
|
||||
}
|
||||
t = -t
|
||||
}
|
||||
x = t / f
|
||||
|
||||
if !math.IsInf(x, 0) {
|
||||
return x
|
||||
}
|
||||
|
||||
return t
|
||||
}
|
45
utils/requests/requests.go
Normal file
45
utils/requests/requests.go
Normal file
@ -0,0 +1,45 @@
|
||||
package requests
|
||||
|
||||
import (
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
//下载远程文件并保存到指定位置
|
||||
func DownloadAndSaveFile(remoteUrl, dstFile string) (error) {
|
||||
client := &http.Client{}
|
||||
uri, err := url.Parse(remoteUrl)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Create the file
|
||||
out, err := os.Create(dstFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer out.Close()
|
||||
|
||||
request, err := http.NewRequest("GET", uri.String(), nil)
|
||||
request.Header.Add("Connection", "close")
|
||||
request.Header.Add("Host", uri.Host)
|
||||
request.Header.Add("Referer", uri.String())
|
||||
request.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0")
|
||||
|
||||
resp, err := client.Do(request)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
|
||||
if resp.StatusCode == http.StatusOK {
|
||||
_, err = io.Copy(out, resp.Body)
|
||||
}else{
|
||||
return errors.New(fmt.Sprintf("bad status: %s", resp.Status))
|
||||
}
|
||||
return nil
|
||||
}
|
@ -10,7 +10,8 @@
|
||||
<!-- Bootstrap -->
|
||||
<link href="{{cdncss "/static/bootstrap/css/bootstrap.min.css"}}" rel="stylesheet" type="text/css">
|
||||
<link href="{{cdncss "/static/font-awesome/css/font-awesome.min.css"}}" rel="stylesheet" type="text/css">
|
||||
|
||||
<link href="{{cdncss "/static/bootstrap/plugins/bootstrap-fileinput/4.4.7/css/fileinput.min.css"}}" rel="stylesheet" type="text/css">
|
||||
<link href="{{cdncss "/static/bootstrap/plugins/bootstrap-fileinput/4.4.7/themes/explorer-fa/theme.css"}}" rel="stylesheet" type="text/css">
|
||||
<link href="{{cdncss "/static/css/main.css"}}" rel="stylesheet">
|
||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
@ -33,7 +34,9 @@
|
||||
<div class="m-box">
|
||||
<div class="box-head">
|
||||
<strong class="box-title">项目列表</strong>
|
||||
|
||||
<button type="button" data-toggle="modal" data-target="#addBookDialogModal" class="btn btn-success btn-sm pull-right">添加项目</button>
|
||||
<button type="button" data-toggle="modal" data-target="#importBookDialogModal" class="btn btn-primary btn-sm pull-right" style="margin-right: 5px;">导入项目</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body" id="bookList">
|
||||
@ -176,7 +179,65 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div><!--END Modal-->
|
||||
</div>
|
||||
<!--END Modal-->
|
||||
<!-- importBookDialogModal -->
|
||||
<div class="modal fade" id="importBookDialogModal" tabindex="-1" role="dialog" aria-labelledby="importBookDialogModalLabel">
|
||||
<div class="modal-dialog" role="document" style="min-width: 900px;">
|
||||
<form method="post" autocomplete="off" action="{{urlfor "BookController.Import"}}" id="importBookDialogForm" enctype="multipart/form-data">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title">导入项目</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<div class="form-group required">
|
||||
<label class="text-label">项目标题</label>
|
||||
<input type="text" class="form-control" placeholder="项目标题(不超过100字)" name="book_name" maxlength="100" value="导入测试">
|
||||
</div>
|
||||
<div class="form-group required">
|
||||
<label class="text-label">项目标识</label>
|
||||
<input type="text" class="form-control" placeholder="项目唯一标识(不超过50字)" name="identify" value="import">
|
||||
<div class="clearfix"></div>
|
||||
<p class="text" style="font-size: 12px;color: #999;margin-top: 6px;">文档标识只能包含小写字母、数字,以及“-”、“.”和“_”符号.</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="text-label">项目描述</label>
|
||||
<textarea name="description" id="description" class="form-control" placeholder="描述信息不超过500个字符" style="height: 90px;"></textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-lg-6">
|
||||
<label>
|
||||
<input type="radio" name="privately_owned" value="0" checked> 公开<span class="text">(任何人都可以访问)</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<label>
|
||||
<input type="radio" name="privately_owned" value="1"> 私有<span class="text">(只要参与者或使用令牌才能访问)</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="file-loading">
|
||||
<input id="import-book-upload" name="import-file" type="file" accept=".zip">
|
||||
</div>
|
||||
<div id="kartik-file-errors"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<span id="import-book-form-error-message" style="background-color: #ffffff;border: none;margin: 0;padding: 0;"></span>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
|
||||
<button type="button" class="btn btn-success" id="btnImportBook" data-loading-text="创建中...">创建</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!--END importBookDialogModal-->
|
||||
<!-- Delete Book Modal -->
|
||||
<div class="modal fade" id="deleteBookModal" tabindex="-1" role="dialog" aria-labelledby="deleteBookModalLabel">
|
||||
<div class="modal-dialog" role="document">
|
||||
@ -206,6 +267,8 @@
|
||||
<script src="{{cdnjs "/static/bootstrap/js/bootstrap.min.js"}}" type="text/javascript"></script>
|
||||
<script src="{{cdnjs "/static/vuejs/vue.min.js"}}" type="text/javascript"></script>
|
||||
<script src="{{cdnjs "/static/js/jquery.form.js"}}" type="text/javascript"></script>
|
||||
<script src="{{cdnjs "/static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/fileinput.min.js"}}"></script>
|
||||
<script src="{{cdnjs "/static/bootstrap/plugins/bootstrap-fileinput/4.4.7/js/locales/zh.js"}}"></script>
|
||||
<script src="{{cdnjs "/static/js/main.js"}}" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
/**
|
||||
@ -315,6 +378,7 @@
|
||||
$("#btnSaveDocument").on("click",function () {
|
||||
var $this = $(this);
|
||||
|
||||
|
||||
var bookName = $.trim($("#bookName").val());
|
||||
if (bookName === "") {
|
||||
return showError("项目标题不能为空")
|
||||
@ -401,6 +465,38 @@
|
||||
}
|
||||
});
|
||||
|
||||
$("#btnImportBook").on("click",function () {
|
||||
var $this = $(this);
|
||||
var $then = $(this).parents("#importBookDialogForm");
|
||||
|
||||
|
||||
var bookName = $.trim($then.find("input[name='book_name']").val());
|
||||
|
||||
if (bookName === "") {
|
||||
return showError("项目标题不能为空","#import-book-form-error-message");
|
||||
}
|
||||
if (bookName.length > 100) {
|
||||
return showError("项目标题必须小于100字符","#import-book-form-error-message");
|
||||
}
|
||||
|
||||
var identify = $.trim($then.find("input[name='identify']").val());
|
||||
if (identify === "") {
|
||||
return showError("项目标识不能为空","#import-book-form-error-message");
|
||||
}
|
||||
var description = $.trim($then.find('textarea[name="description"]').val());
|
||||
if (description.length > 500) {
|
||||
return showError("描述信息不超过500个字符","#import-book-form-error-message");
|
||||
}
|
||||
var filesCount = $('#import-book-upload').fileinput('getFilesCount');
|
||||
console.log(filesCount)
|
||||
if (filesCount <= 0) {
|
||||
return showError("请选择需要上传的文件","#import-book-form-error-message");
|
||||
}
|
||||
//$("#importBookDialogForm").submit();
|
||||
$("#btnImportBook").button("loading");
|
||||
$('#import-book-upload').fileinput('upload');
|
||||
|
||||
});
|
||||
window.app = new Vue({
|
||||
el : "#bookList",
|
||||
data : {
|
||||
@ -413,6 +509,38 @@
|
||||
Vue.nextTick(function () {
|
||||
$("[data-toggle='tooltip']").tooltip();
|
||||
});
|
||||
|
||||
$("#import-book-upload").fileinput({
|
||||
'uploadUrl':"{{urlfor "BookController.Import"}}",
|
||||
'theme': 'fa',
|
||||
'showPreview': false,
|
||||
'showUpload' : false,
|
||||
'required': true,
|
||||
'validateInitialCount': true,
|
||||
"language" : "zh",
|
||||
'allowedFileExtensions': ['zip'],
|
||||
'msgPlaceholder' : '请选择Zip文件',
|
||||
'elErrorContainer' : "#import-book-form-error-message",
|
||||
'uploadExtraData' : function () {
|
||||
var book = {};
|
||||
var $then = $("#importBookDialogForm");
|
||||
book.book_name = $then.find("input[name='book_name']").val();
|
||||
book.identify = $then.find("input[name='identify']").val();
|
||||
book.description = $then.find('textarea[name="description"]').val()
|
||||
|
||||
return book;
|
||||
}
|
||||
});
|
||||
$("#import-book-upload").on("fileuploaded",function (event, data, previewId, index){
|
||||
|
||||
if(data.response.errcode === 0 || data.response.errcode === '0'){
|
||||
showSuccess(data.response.message,"#import-book-form-error-message");
|
||||
}else{
|
||||
showError(data.response.message,"#import-book-form-error-message");
|
||||
}
|
||||
$("#btnImportBook").button("reset");
|
||||
return true;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
Loading…
Reference in New Issue
Block a user