From 2b249abad963460581fb38bfe7de4e7f1ce9bd01 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sun, 22 Sep 2013 16:22:14 +0100 Subject: [PATCH] Mess but semi working page logic --- ep.json | 14 +++- static/css/page_view.css | 8 +- static/js/page_view.js | 142 +++++++++++++++++++++++++++++++--- static/js/shared.js | 28 +++++++ templates/page_view_entry.ejs | 7 ++ 5 files changed, 185 insertions(+), 14 deletions(-) create mode 100644 static/js/shared.js diff --git a/ep.json b/ep.json index 33c2dbd..047d29e 100644 --- a/ep.json +++ b/ep.json @@ -3,11 +3,21 @@ { "name": "page_view", "client_hooks": { - "postAceInit": "ep_page_view/static/js/page_view:postAceInit" + "aceEditorCSS": "ep_page_view/static/js/page_view", + "aceDomLineProcessLineAttributes": "ep_page_view/static/js/page_view", + "postAceInit": "ep_page_view/static/js/page_view:postAceInit", + "aceEditEvent": "ep_page_view/static/js/page_view:aceEditEvent", + "aceCreateDomLine": "ep_page_view/static/js/page_view:aceCreateDomLine", + "aceAttribsToClasses": "ep_page_view/static/js/page_view", + "collectContentPre": "ep_page_view/static/js/shared", + "aceRegisterBlockElements": "ep_page_view/static/js/page_view", + "aceInitialized": "ep_page_view/static/js/page_view" }, "hooks": { "eejsBlock_mySettings": "ep_page_view/page_view", - "eejsBlock_styles": "ep_page_view/page_view" + "eejsBlock_styles": "ep_page_view/page_view", + "collectContentPre": "ep_page_view/static/js/shared", + "collectContentPost": "ep_page_view/static/js/shared" } } ] diff --git a/static/css/page_view.css b/static/css/page_view.css index 64499e0..fda742f 100644 --- a/static/css/page_view.css +++ b/static/css/page_view.css @@ -1,3 +1,9 @@ +.pagebreak{ + margin-top:50px; + border-top:dotted grey 1px; + padding-top:50px; +} + @media (min-width: 860px) { #editorcontainer.page_view { @@ -15,4 +21,4 @@ iframe.page_view { max-width: 850px; } -} \ No newline at end of file +} diff --git a/static/js/page_view.js b/static/js/page_view.js index 8f85900..c2aa4da 100644 --- a/static/js/page_view.js +++ b/static/js/page_view.js @@ -1,4 +1,41 @@ +var _, $, jQuery; + +var $ = require('ep_etherpad-lite/static/js/rjquery').$; +var _ = require('ep_etherpad-lite/static/js/underscore'); +var cssFiles = ['ep_page_view/static/css/page_view.css']; + var isMobile = $.browser.mobile; +var page_layout = {}; +page_layout.lineObj = {}; + +// Our pagebreak attribute will result in a pagebreak class +function aceAttribsToClasses(hook, context){ + if(context.key == 'pagebreak'){ + return ['pagebreak']; + } +} + +var aceRegisterBlockElements = function(){ + return ["pagebreak"]; +} + +// Here we convert the class pagebreak into a tag +var aceDomLineProcessLineAttributes = function(name, context){ + //console.log("process lien attr", context); + var cls = context.cls; + var domline = context.domline; + var alignType = /(?:^| )pagebreak:([A-Za-z0-9]*)/.exec(cls); + var tagIndex; + if (alignType){ + var modifier = { + preHtml: '

', + postHtml: '

', + processedMarker: true + }; + return [modifier]; + } + return []; +}; if (!isMobile) { var postAceInit = function(hook, context){ @@ -34,21 +71,104 @@ if (!isMobile) { pv.disable(); } }; + $("#options-linenoscheck").attr("checked", false); exports.postAceInit = postAceInit; } else { $('input#options-pageview').hide(); $('label[for=options-pageview]').hide(); } -function getParam(sname){ -  var params = location.search.substr(location.search.indexOf("?")+1); -  var sval = ""; -  params = params.split("&"); -  // split param and value into individual pieces -  for (var i=0; i currPage){ // New page, need to add line break above this line or so + currPage = linePage; + // Add line break above this line + var newPage = true; + $(this).addClass("pagebreak"); + }else{ + var newPage = false; + } + + // Put together the object, we will refer to this in aceCreateDomLine + page_layout.lineObj[focusId] = { + y : newY, + pageNumber : linePage, + newPage: newPage + } + }); + //console.log(page_layout.lineObj); + // Draw something that shows a split page, it might be we add a class to a div or so + +} + +function pageNumber(y){ // Given a Y co-ord provide the page number + var paperHeight = 297; // temporary 297 is mm height of A4 + var pageNumber = y / 297; + y = y * 0.264583333; // Number of MM of each pixel + pageNumber = Math.ceil(pageNumber); // Round up to nearest whole number.. Note Round UP! + return pageNumber; +} + +function getParam(sname){ + var params = location.search.substr(location.search.indexOf("?")+1); + var sval = ""; + params = params.split("&"); + // split param and value into individual pieces + for (var i=0; i -1) { // If it's an image + var src; + cls = args.cls.replace(/(^| )image:(\S+)/g, function(x0, space, image) { + src = image; + return space + "image image_" + image; + }); + + return [{ + cls: cls, + extraOpenTags: '
', + extraCloseTags:'' + }]; + } +} + + +// Once ace is initialized, we set ace_doInsertalign and bind it to the context +function aceInitialized(hook, context){ + top.pad.changeViewOption('showLineNumbers', false); + pageLayoutUpdate(); +} + +function aceEditorCSS(){ + return cssFiles; +}; + +// Export all hooks +exports.aceRegisterBlockElements = aceRegisterBlockElements; +exports.aceInitialized = aceInitialized; +exports.postAceInit = postAceInit; +exports.aceDomLineProcessLineAttributes = aceDomLineProcessLineAttributes; +exports.aceAttribsToClasses = aceAttribsToClasses; +exports.aceEditorCSS = aceEditorCSS; diff --git a/static/js/shared.js b/static/js/shared.js new file mode 100644 index 0000000..67fee80 --- /dev/null +++ b/static/js/shared.js @@ -0,0 +1,28 @@ +var _ = require('ep_etherpad-lite/static/js/underscore'); + +var tags = ['pagebreak']; + +var collectContentPre = function(hook, context){ + var tname = context.tname; + var state = context.state; + var lineAttributes = state.lineAttributes + var tagIndex = _.indexOf(tags, tname); + + if(tagIndex >= 0){ + lineAttributes['pagebreak'] = tags[tagIndex]; + } +}; + +var collectContentPost = function(hook, context){ + var tname = context.tname; + var state = context.state; + var lineAttributes = state.lineAttributes + var tagIndex = _.indexOf(tags, tname); + + if(tagIndex >= 0){ + delete lineAttributes['pagebreak']; + } +}; + +exports.collectContentPre = collectContentPre; +exports.collectContentPost = collectContentPost; diff --git a/templates/page_view_entry.ejs b/templates/page_view_entry.ejs index 241f54b..9f19ef7 100644 --- a/templates/page_view_entry.ejs +++ b/templates/page_view_entry.ejs @@ -2,3 +2,10 @@ >

+

+ + +