+ "Sup? Everyone says punctuation is punctuation.": "Sup?",
+ "Humans are humans, and society is full of good and bad actors. Technology, at the most fundamental level, is a neutral tool that can be used by either to meet any ends. ": "Humans are humans, and society is full of good and bad actors.",
+ `Online Domino Is Must For Everyone
+
+ Do you want to understand how to play poker online?`: "Online Domino Is Must For Everyone",
+ `おはようございます
+
+ 私は日本から帰ったばかりです。`: "おはようございます",
+ "Hello, we say, おはよう. We say \"good morning\"": "Hello, we say, おはよう.",
+ }
+
+ c := 1
+ for i, o := range text {
+ if s := PostLede(i, true); s != o {
+ t.Errorf("#%d: Got '%s' from '%s'; expected '%s'", c, s, i, o)
+ }
+ c++
+ }
+}
+
+func TestTruncToWord(t *testing.T) {
+ text := map[string]string{
+ "Можливо, ми можемо використовувати інтернет-інструменти, щоб виготовити якийсь текст, який би міг бути і на, і в кінцевому підсумку, буде скорочено, тому що це тривало так довго.": "Можливо, ми можемо використовувати інтернет-інструменти, щоб виготовити якийсь",
+ "早安。This is my post. It is great. It is a long post that is great that is a post that is great.": "早安。This is my post. It is great. It is a long post that is great that is a post",
+ "Sup? Everyone says punctuation is punctuation.": "Sup? Everyone says punctuation is punctuation.",
+ "I arrived in Japan six days ago. Tired from a 10-hour flight after a night-long layover in Calgary, I wandered wide-eyed around Narita airport looking for an ATM.": "I arrived in Japan six days ago. Tired from a 10-hour flight after a night-long",
+ }
+
+ c := 1
+ for i, o := range text {
+ if s, _ := TruncToWord(i, 80); s != o {
+ t.Errorf("#%d: Got '%s' from '%s'; expected '%s'", c, s, i, o)
+ }
+ c++
+ }
+}
diff --git a/posts.go b/posts.go
index 7f12da3..32c18dc 100644
--- a/posts.go
+++ b/posts.go
@@ -1,178 +1,178 @@
package writefreely
import (
"github.com/guregu/null"
"github.com/guregu/null/zero"
"github.com/kylemcc/twitter-text-go/extract"
"github.com/writeas/monday"
"github.com/writeas/slug"
"github.com/writeas/web-core/converter"
- "github.com/writeas/web-core/parse"
"github.com/writeas/web-core/tags"
+ "github.com/writeas/writefreely/parse"
"html/template"
"regexp"
"time"
)
const (
// Post ID length bounds
minIDLen = 10
maxIDLen = 10
userPostIDLen = 10
postIDLen = 10
postMetaDateFormat = "2006-01-02 15:04:05"
)
type (
AuthenticatedPost struct {
ID string `json:"id" schema:"id"`
*SubmittedPost
}
// SubmittedPost represents a post supplied by a client for publishing or
// updating. Since Title and Content can be updated to "", they are
// pointers that can be easily tested to detect changes.