mirror of
https://github.com/gitpitch/gitpitch.git
synced 2024-04-18 07:30:55 +08:00
Added support for markdown fragment shortcut syntax.
This commit is contained in:
parent
912dd03796
commit
1a894737b3
|
@ -51,6 +51,7 @@ public class Module extends AbstractModule {
|
||||||
bind(ImageService.class).asEagerSingleton();
|
bind(ImageService.class).asEagerSingleton();
|
||||||
bind(VideoService.class).asEagerSingleton();
|
bind(VideoService.class).asEagerSingleton();
|
||||||
bind(GISTService.class).asEagerSingleton();
|
bind(GISTService.class).asEagerSingleton();
|
||||||
|
bind(ShortcutsService.class).asEagerSingleton();
|
||||||
bind(WebService.class).asEagerSingleton();
|
bind(WebService.class).asEagerSingleton();
|
||||||
bind(ComposableService.class).asEagerSingleton();
|
bind(ComposableService.class).asEagerSingleton();
|
||||||
bind(GRSManager.class).asEagerSingleton();
|
bind(GRSManager.class).asEagerSingleton();
|
||||||
|
|
|
@ -28,6 +28,7 @@ import com.gitpitch.utils.*;
|
||||||
import com.gitpitch.services.ImageService;
|
import com.gitpitch.services.ImageService;
|
||||||
import com.gitpitch.services.VideoService;
|
import com.gitpitch.services.VideoService;
|
||||||
import com.gitpitch.services.GISTService;
|
import com.gitpitch.services.GISTService;
|
||||||
|
import com.gitpitch.services.ShortcutsService;
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
import com.google.inject.assistedinject.Assisted;
|
import com.google.inject.assistedinject.Assisted;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
@ -52,6 +53,7 @@ public class MarkdownModel implements Markdown {
|
||||||
private final ImageService imageService;
|
private final ImageService imageService;
|
||||||
private final VideoService videoService;
|
private final VideoService videoService;
|
||||||
private final GISTService gistService;
|
private final GISTService gistService;
|
||||||
|
private final ShortcutsService shortcutsService;
|
||||||
private final MarkdownRenderer mrndr;
|
private final MarkdownRenderer mrndr;
|
||||||
private final String markdown;
|
private final String markdown;
|
||||||
private String hSlideDelim = HSLIDE_DELIM_DEFAULT;
|
private String hSlideDelim = HSLIDE_DELIM_DEFAULT;
|
||||||
|
@ -61,11 +63,13 @@ public class MarkdownModel implements Markdown {
|
||||||
public MarkdownModel(ImageService imageService,
|
public MarkdownModel(ImageService imageService,
|
||||||
VideoService videoService,
|
VideoService videoService,
|
||||||
GISTService gistService,
|
GISTService gistService,
|
||||||
|
ShortcutsService shortcutsService,
|
||||||
@Nullable @Assisted MarkdownRenderer mrndr) {
|
@Nullable @Assisted MarkdownRenderer mrndr) {
|
||||||
|
|
||||||
this.imageService = imageService;
|
this.imageService = imageService;
|
||||||
this.videoService = videoService;
|
this.videoService = videoService;
|
||||||
this.gistService = gistService;
|
this.gistService = gistService;
|
||||||
|
this.shortcutsService = shortcutsService;
|
||||||
this.mrndr = mrndr;
|
this.mrndr = mrndr;
|
||||||
|
|
||||||
String consumed = null;
|
String consumed = null;
|
||||||
|
@ -238,7 +242,7 @@ public class MarkdownModel implements Markdown {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} if(imageService.tagFound(md)) {
|
} else if(imageService.tagFound(md)) {
|
||||||
|
|
||||||
String tagLink = imageService.tagLink(md);
|
String tagLink = imageService.tagLink(md);
|
||||||
if (linkAbsolute(tagLink)) {
|
if (linkAbsolute(tagLink)) {
|
||||||
|
@ -247,6 +251,8 @@ public class MarkdownModel implements Markdown {
|
||||||
String absTagLink = gitRawBase + tagLink;
|
String absTagLink = gitRawBase + tagLink;
|
||||||
return md.replace(tagLink, absTagLink);
|
return md.replace(tagLink, absTagLink);
|
||||||
}
|
}
|
||||||
|
} else if(shortcutsService.fragmentFound(md)) {
|
||||||
|
return shortcutsService.expandFragment(md);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -604,6 +610,8 @@ public class MarkdownModel implements Markdown {
|
||||||
public static final String MD_CLOSER = "\" -->";
|
public static final String MD_CLOSER = "\" -->";
|
||||||
public static final String MD_SPACER = "\n";
|
public static final String MD_SPACER = "\n";
|
||||||
public static final String DATA_IMAGE_ATTR = "data-background-image=";
|
public static final String DATA_IMAGE_ATTR = "data-background-image=";
|
||||||
|
public static final String MD_FRAG_OPEN = "- ";
|
||||||
|
public static final String MD_FRAG_CLOSE = "|";
|
||||||
|
|
||||||
private static final String MD_HSLIDE_IMAGE = "?image=";
|
private static final String MD_HSLIDE_IMAGE = "?image=";
|
||||||
private static final String MD_VSLIDE_IMAGE = "?image=";
|
private static final String MD_VSLIDE_IMAGE = "?image=";
|
||||||
|
|
71
app/com/gitpitch/services/ShortcutsService.java
Normal file
71
app/com/gitpitch/services/ShortcutsService.java
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 David Russell
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
package com.gitpitch.services;
|
||||||
|
|
||||||
|
import com.gitpitch.models.MarkdownModel;
|
||||||
|
import com.gitpitch.utils.PitchParams;
|
||||||
|
import com.gitpitch.utils.YAMLOptions;
|
||||||
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
import java.util.*;
|
||||||
|
import javax.inject.*;
|
||||||
|
import play.Logger;
|
||||||
|
import play.Logger.ALogger;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PITCHME.md feature-shortcuts support service.
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
public class ShortcutsService {
|
||||||
|
|
||||||
|
private final Logger.ALogger log = Logger.of(this.getClass());
|
||||||
|
|
||||||
|
public boolean fragmentFound(String md) {
|
||||||
|
boolean found = false;
|
||||||
|
if(md != null) {
|
||||||
|
String trimmed = md.trim();
|
||||||
|
if(trimmed.startsWith(MarkdownModel.MD_FRAG_OPEN) &&
|
||||||
|
trimmed.endsWith(MarkdownModel.MD_FRAG_CLOSE)) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Expand shortcut syntax for fragment with fully expanded
|
||||||
|
* HTML comment syntax.
|
||||||
|
*/
|
||||||
|
public String expandFragment(String md) {
|
||||||
|
int fragCloseIdx = md.lastIndexOf(MarkdownModel.MD_FRAG_CLOSE);
|
||||||
|
return md.substring(0, fragCloseIdx) + FRAGMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note, the space before opening bracket is intentional
|
||||||
|
* so tag injection can happen directly alongside other
|
||||||
|
* text in the markdown fragment.
|
||||||
|
*/
|
||||||
|
private static final String FRAGMENT =
|
||||||
|
" <!-- .element: class=\"fragment\" -->";
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user