Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var MethodeBridge = function(){
- var self = {}, app;
- try {
- app = external.EomQueryInterface('Methode.Application');
- } catch(e) {
- }
- if (!app) return false;
- self.assetAssociationRules = {
- IMAGE: {
- '316x237': [
- 'story-container1'
- ],
- '650x366': [
- 'story-container2',
- 'story-container3'
- ]
- },
- NEWS_STORY: {
- 'default': [
- 'story-container1',
- 'story-container2',
- 'story-container3',
- 'promo-text'
- ]
- }
- };
- self.containers = {
- story: [
- 'container1',
- 'container2',
- 'container3',
- 'text'
- ],
- promo: [
- 'text'
- ]
- };
- self.getCurrentDocumentType = function(){
- // debug(arguments);
- // always return story for now
- return 'story';
- };
- self.getAvaliableContainers = function(documentType) {
- // debug(arguments);
- return self.containers[documentType];
- };
- self.getAvaliableContainersForAsset = function(assetItem) {
- // debug(arguments);
- var documentType = self.getCurrentDocumentType(),
- rules = self.assetAssociationRules[assetItem.contentType],
- containers = self.getAvaliableContainers(documentType),
- associationKey = assetItem.contentType === 'IMAGE' ? assetItem.width + 'x' + assetItem.height : 'default';
- var result = rules[associationKey].map(function(containerName){
- return containerName.replace(documentType + '-', '');
- });
- return result;
- };
- self.getContainerForCurrentCursorPosition = function(tagpath) {
- // debug(arguments);
- var documentType = self.getCurrentDocumentType(),
- containers = self.getAvaliableContainers(documentType),
- result;
- for (var i = 0; i < containers.length; i++) {
- if (tagpath.indexOf(containers[i]) !== -1) result = containers[i];
- }
- return result;
- };
- self.validateInsertion = function(container, assetItem, tagpath) {
- // debug(arguments);
- var documentType = self.getCurrentDocumentType(),
- position = container || self.getContainerForCurrentCursorPosition(tagpath);
- if (!position) throw new Error('Please drag and drop in the text or in one of the container');
- var validContainers = self.getAvaliableContainersForAsset(assetItem);
- if (!validContainers) throw new Error('This object type is not valid in this position');
- return position;
- };
- self.addTo = function(container, assetItem) {
- // debug(arguments);
- var tagpath = app.ActiveDocument.Selection.TextView.Tag;
- var position = self.validateInsertion(container, assetItem, tagpath);
- var tag = self.createEmbed(assetItem);
- container = container || position;
- if (container) return self.insertByContainer(container, tag);
- if (position.indexOf('text') === -1) return self.insertByContainer(position, tag);
- return self.addTagToParagraph(tag);
- };
- self.addTagToParagraph = function(tag) {
- // // debug(arguments);
- return app.ActiveDocument.Selection.TextView.SetText('<p channel="Web">' + tag + '</p>',true,false);
- };
- function escapeRegExp(str) {
- return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
- }
- function replaceAll(str, find, replace) {
- return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
- }
- self.createEmbed = function(assetItem) {
- // debug(arguments);
- var layout = '<webframe class="kurator" type="oembed" title="{{title}}" url="{{url}}" width="316" height="237">' +
- '<p class="webframe_img_oembed"></p>' +
- '<p> <span class="webframe_category">TITLE: </span><span class="webframe_title">{{title}}</span></p>' +
- '<p><span class="webframe_category">COMMENTS: </span><span class="webframe_title">{{comments}}</span></p>';
- '</webframe>';
- var fieldsMapping = {
- 'title':'title',
- 'url':'link',
- 'comments':'userName'
- };
- for (var key in fieldsMapping) {
- layout = replaceAll(layout, '{{' + key + '}}', assetItem[fieldsMapping[key]]);
- }
- return layout;
- };
- debug = function(arguments){
- try {
- diemofodie();
- } catch (e) {
- alert(e.stack +"\n\n" + JSON.stringify(arguments));
- }
- };
- self.insertByContainer = function(container, xml) {
- //make tags visible to use Automation TextView API
- app.ActiveDocument.Selection.TextView.ViewTags = true;
- try {
- app.ActiveDocument.Selection.TextView.GoToDocBegin();
- if (app.ActiveDocument.Selection.TextView.GoToTagByName(container, 0)) {
- app.ActiveDocument.Selection.TextView.SelectElement();
- var contentAsString = app.ActiveDocument.Selection.TextView.GetText(0),
- endTagOfContainer = '</' + container + '>',
- indexEndTagOfContainer = contentAsString.lastIndexOf(endTagOfContainer);
- // container has no content, and is closing straight
- if (indexEndTagOfContainer === -1) {
- contentAsString = contentAsString.substr(0, contentAsString.length - 2) + '>' + '<p>' + xml + '</p>' + endTagOfContainer;
- } else {
- // find out what the container contains
- var indexOpenTagOfContainer = contentAsString.indexOf('>') + 1,
- containerContent = contentAsString.substring(indexOpenTagOfContainer, indexEndTagOfContainer),
- emptyPTagRegex = /<p[a-zA-Z\"=\ ]*\/>/, // <p/> or <p channel="Web"/>
- notEmptyPTagRegex = /<p[a-zA-Z\"=\ ]*\>.+<\/p>/,
- pTagWithDummyText = '<p><?EM-dummyText [' + container.toUpperCase() + container.substr(1, container.length) + ']?></p>';
- if (containerContent === pTagWithDummyText || emptyPTagRegex.test(containerContent) && !notEmptyPTagRegex.test(containerContent)) { //only dummytext OR only a p, and is closing straight
- contentAsString = contentAsString.substring(0, indexOpenTagOfContainer) + '<p channel="Web">' + xml + '</p>' + '</' + container + '>';
- } else { // otherwise, add new xml at the end
- var lastIndexEndTagP = contentAsString.lastIndexOf('</p>') + 4;
- contentAsString = contentAsString.substring(0, lastIndexEndTagP) + '<p channel="Web">' + xml + '</p>' + '</' + container + '>';
- }
- }
- // insert new content
- app.ActiveDocument.Selection.TextView.SetText(contentAsString, true, false);
- }
- } catch (e) {
- throw new Error('\nError in insertByContainer(): ' + e.message);
- } finally {
- //make tags invisible
- app.ActiveDocument.Selection.TextView.ViewTags = false;
- }
- }
- return self;
- }();
- window.MethodeBridge = MethodeBridge;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement