Пример #1
0
export function render (element, options) {
  // Using this pattern because default params don't merge objects
  const opts = { ...defaultOptions, ...options };
  i18n.init(opts.locale);
  moment.locale(opts.locale);
  moment.tz.setDefault(opts.timeZone);
  dynamicUiManager.setStickyOffset(opts.stickyOffset);
  registerScrollEvents(handleScrollIntoPastAttempt, pos => dynamicUiManager.handleScrollPositionChange(pos));
  if (!opts.flashAlertFunctions) {
    throw new Error('You must provide callbacks to handle flash messages');
  }
  initializeAlerts(opts.flashAlertFunctions);

  store.dispatch(initialOptions(opts));
  store.dispatch(getPlannerItems(moment.tz(opts.timeZone).startOf('day')));

  ReactDOM.render(applyTheme(
    <DynamicUiProvider manager={dynamicUiManager} >
      <Provider store={store}>
        <PlannerApp
          stickyOffset={opts.stickyOffset}
          stickyZIndex={opts.stickyZIndex}
          changeToDashboardCardView={opts.changeToDashboardCardView}
          plannerActive={plannerActive}
          currentUser={opts.currentUser}
        />
      </Provider>
    </DynamicUiProvider>
  , opts.theme), element);
}
Пример #2
0
/**
 * Updates moment and numberFormat preferences with settings from locale object
 * @param  {object} data locale data
 */
function buildMomentAndNumber( data ) {
	var momentLocale;
	if ( typeof data[ '' ] === 'undefined' || typeof data[ '' ].momentjs_locale === 'undefined' ) {
		return;
	}
	momentLocale = data[ '' ].momentjs_locale;
	moment.locale( i18nState.localeSlug, momentLocale );
	i18nState.numberFormatSettings = momentLocale.numberFormat;
}
Пример #3
0
    _safeDateFormat(date, locale) {
        if (date && date.isValid()) {
            return date.clone().locale(locale || moment.locale()).format('MM/DD/YYYY');
        }

        if (_.isNull(date)) {
            return null;
        }
    }
Пример #4
0
    _onChange(dateType, value) {
        const { type, locale, uxMode } = this.props;
        const newLocale = locale || moment.locale();

        if (uxMode === 'input' && type === 'dateRange') {
            const datesArray = value ? value.split('-') : '';

            if (value !== '' && value !== '__/__/____ - __/__/____') {
                _.map(datesArray, (date, index) => {
                    const newDate = moment(date.trim(), this._dateFormats, newLocale, true);
                    const dateType = index === 0 ? 'dateStart' : index === 1 ? 'dateEnd' : null;

                    if (newDate.isValid() &&
                        (!DatePickerUtils.isDayDisabled(newDate, this.props) &&
                        (index === 0 && !DatePickerUtils.isSameDay(this.props.dateStart, newDate)) ||
                        (index === 1 && !DatePickerUtils.isSameDay(this.props.dateEnd, newDate)))
                    ) {
                        this.props.onSelect(newDate, dateType);
                    }
                });
            } else {
                this.props.onSelect(null, null, true);
            }

            this.setState({
                maybeDateRange: {
                    dateEnd: value ? datesArray[1].trim() : '',
                    dateStart: value ? datesArray[0].trim() : ''
                }
            });
        } else if (uxMode === 'calendar' || uxMode === 'input' && type === 'singleDate') {
            const date = moment(value, this._dateFormats, newLocale, true);

            if (date.isValid() && !DatePickerUtils.isDayDisabled(date, this.props)) {
                this.props.onSelect(date);
            } else if (value === '' || value === '__/__/____') {
                this.props.onSelect(null, null, true);
            }

            if (uxMode === 'input') {
                this.setState({ maybeDate: value });
            }

            if (uxMode === 'calendar') {
                this.setState({
                    maybeDateRange: {
                        dateEnd: dateType === 'dateEnd' ? value : this.state.maybeDateRange.dateEnd,
                        dateStart: dateType === 'dateStart' ? value : this.state.maybeDateRange.dateStart
                    }
                });
            }
        }

        this.props.hasValue(value);
    }
Пример #5
0
 function constructLocalTimeString (timeZone, locale) {
   // if no timeZone is passed, use DEFAULT_TIMEZONE
   moment.tz.setDefault(DEFAULT_TIMEZONE)
   // if no locale is passed, use DEFAULT_LOCALE
   locale = locale || DEFAULT_LOCALE
   moment.locale(locale)
   var time = moment()
   if (timeZone) {
     time = time.tz(timeZone)
   }
   // return a locale-specific time
   return time.format('LTS (z) dddd, ll')
 }
Пример #6
0
 ntpClient.getNetworkTime('pool.ntp.org', 123, function(err, date) {
   if(err) {
     console.error(err);
     date = new Date();
   }
   moment.locale(config.language);
   time = moment(date).tz(config.timezone);
   res.end(JSON.stringify({
     "timestamp": time.format(),
     "date": time.format('dddd, D MMMM YYYY'),
     "locale": config.language
   }));
 });
Пример #7
0
var calendar = function(res){
  var icalURL = config.calendar;
  moment.locale(config.language);

  var now = moment();
  var nextHour = moment().add(1, 'hour');

  ical.fromURL(icalURL, {}, function(err, data) {
    var vevents = [];

    for (var k in data){
      var vevent = {};
      var ev = data[k];
      var end;
      var start;
      if( ev.type === 'VEVENT'){
        if ( ev.rrule === undefined){//regular date
          start = moment(ev.start).tz(config.timezone);
          if (nextHour.isBefore(start)){
            end = moment(ev.end).tz(config.timezone);
            if ( now.isBefore(end)){
              vevents.push({
                "start": start.format(dateFormatter),
                "summary": ev.summary
                });
            }
          }
        }else{ //periodic date, like as a birthday
          var vevent = {};
          var start = moment(ev.start).tz(config.timezone);
          start = start.format("DD/MM/")+now.get("year")+" 23:59:59";
          start = moment(start, "DD/MM/YYYY HH:mm:ss");
          if ( now.isBefore(start)){
            vevents.push({
              "start": start.format(dateFormatter),
              "summary": ev.summary
            })
          }
        }
      }
    }
    vevents.sort(function(a, b){
      var msA = moment(a.start, dateFormatter).format('X');
      var msB = moment(b.start, dateFormatter).format('X');
      return msA - msB;
    });
    res.end(JSON.stringify({
      "calendar": vevents.slice(0, 10)
      }));
  });
}
Пример #8
0
  beforeEach(() => {
    course = Factory.course();
    Factory.studentTaskPlans({ course, count: 8 });
    tasks = course.studentTaskPlans;

    moment.tz.setDefault('America/Chicago');
    moment.locale('en');
    chronokinesis.travel(mockedNow);
    mockedNow = moment('2017-10-14T12:00:00.000Z');

    jest.mock('../../../src/flux/time', () => ({
      TimeStore: {
        getNow: jest.fn(() => mockedNow),
      },
    }));
  });
Пример #9
0
export function initializePlanner (options) {
  if (initializedOptions) throw new Error('initializePlanner may not be called more than once');

  options = mergeDefaultOptions(options);

  if (!(options.env.MOMENT_LOCALE && options.env.TIMEZONE)) {
    throw new Error('env.MOMENT_LOCALE and env.TIMEZONE are required options for initializePlanner');
  }

  const {flashError, flashMessage, srFlashMessage} = options;
  if (!(flashError && flashMessage && srFlashMessage)) {
    throw new Error('flash message callbacks are required options for initializePlanner');
  }

  if (!options.convertApiUserContent) {
    throw new Error('convertApiUserContent is a required option for initializePlanner');
  }

  externalPlannerActive = () => options.getActiveApp() === 'planner';

  i18n.init(options.env.MOMENT_LOCALE);
  moment.locale(options.env.MOMENT_LOCALE);
  moment.tz.setDefault(options.env.TIMEZONE);
  initializeAlerts({
    visualSuccessCallback: flashMessage,
    visualErrorCallback: flashError,
    srAlertCallback: srFlashMessage,
  });
  initializeContent(options);
  initializeDateTimeFormatters(options.dateTimeFormatters);

  options.plannerNewActivityButtonId = plannerNewActivityButtonId;
  dynamicUiManager.setOffsetElementIds(plannerHeaderId, plannerNewActivityButtonId);
    
  if (options.externalFallbackFocusable) {
    dynamicUiManager.registerAnimatable(
      'item', externalFocusableWrapper(options.externalFallbackFocusable), -1, [specialFallbackFocusId('item')]
    );
  }

  initializeCourseAndGroupColors(options);

  initializedOptions = options;
  store.dispatch(initialOptions(options));
}
Пример #10
0
var nextWeeks = function (response){
  moment.locale(config.language);
  var city = config.cities[currentCity];
  var query = openweathermapUrl + 'forecast/daily?q=' + city+'&cnt=16&units=metric';
  debug(query);
  http.get(query, function(res) {
    var body = '';
    res.on('data', function(chunk) {
      body += chunk;
    });
    res.on('end', function() {
      var cityNameJson = "";
      var weatherJson = [];
      try{
        var weather = JSON.parse(body);
        cityNameJson = weather.city.name;
        weather.list.forEach(function(item){
          var date = moment.unix(item.dt);
          weatherJson.push({
            "date": date.format('YYYY-MM-DD'),
            "timestamp": date,
            "day": date.format('ddd'),
            "temp": {
              "max": Math.round(item.temp.max),
              "min": Math.round(item.temp.min)
            }
          })
        });
      }catch(e){
        debug("error in calling");
        cityNameJson = config.cities[currentCity];
        weatherJson  = [];
      }

      response.end(JSON.stringify({
          "city": cityNameJson,
          "weather16":weatherJson
      }));
      currentCity= (currentCity+1) % config.cities.length;
    });
  }).on('error', function(e) {
    console.log("Got error: ", e);
  });
}
Пример #11
0
  /**
  *
  * Get Date and Time using :
  * - moment.js [http://momentjs.com](http://momentjs.com)
  * - moment-timezone.js [http://momentjs.com/timezone/](http://momentjs.com/timezone/)
  *
  * ISO Timezones : [https://en.wikipedia.org/wiki/List_of_tz_database_time_zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
  * ISO Language Codes : [http://www.w3schools.com/tags/ref_language_codes.asp](http://www.w3schools.com/tags/ref_language_codes.asp)
  *
  * @param {string} timezone - ISO Timezone
  * @param {string} locale - ISO Language Code
  * @return {object}
  * ```json
  * {
  *   day: day,
  *   dayName: dayName,
  *   month: month,
  *   monthName: monthName,
  *   year: year,
  *   hours:   ( hours < 10 ? "0" : "" ) + hours,
  *   minutes: ( minutes < 10 ? "0" : "" ) + minutes,
  *   seconds: ( seconds < 10 ? "0" : "" ) + seconds,
  *   meridiem: meridiem,
  *   timezone: tz
  * }
  *```
  */
  getMoment(timezone, locale) {
    moment.locale(locale);
    const now = moment().tz(timezone);
    const tz = moment().tz(timezone).format('z');

    // Day
    const weekdays = moment.weekdays();
    const dayName = weekdays[now.get('day')];
    const day = now.get('date');

    // Month
    const months = moment.months();
    const monthName = months[now.month()];
    const month = now.get('month');

    // Year
    const year = now.get('year');

    // Time
    let hours = now.get('hour');
    const meridiem = (hours < 12) ? 'AM' : 'PM';
    hours = (this.props.config.meridiem && meridiem === 'PM') ? (hours - 12) : hours;
    const minutes = now.get('minute');
    const seconds = now.get('second');

    // return time object
    return {
      day,
      dayName,
      month,
      monthName,
      year,
      hours: (hours < 10 ? '0' : '') + hours,
      minutes: (minutes < 10 ? '0' : '') + minutes,
      seconds: (seconds < 10 ? '0' : '') + seconds,
      meridiem,
      timezone: tz
    };
  }
Пример #12
0
  async subs (opts) {
    let events = await global.db.engine.find('widgetsEventList')
    const onlineViewers = await global.users.getAllOnlineUsernames()
    const subscribers = (await global.db.engine.find('users', { is: { subscriber: true } })).map((o) => o.username)

    let onlineSubscribers = _.intersection(onlineViewers, subscribers)
    events = _.filter(_.orderBy(events, 'timestamp', 'desc'), (o) => { return o.event === 'sub' || o.event === 'resub' || o.event === 'subgift' })
    moment.locale(global.general.settings.lang)

    let lastSubAgo = ''
    let lastSubUsername = '******'
    let onlineSubCount = _.size(_.filter(onlineSubscribers, (o) => o !== getChannel() && o !== global.oauth.settings.bot.username.toLowerCase())) // except bot and user
    if (events.length > 0) {
      lastSubUsername = events[0].username
      lastSubAgo = moment(events[0].timestamp).fromNow()
    }

    let message = await prepare('subs', {
      lastSubAgo: lastSubAgo,
      lastSubUsername: lastSubUsername,
      onlineSubCount: onlineSubCount
    })
    sendMessage(message, opts.sender)
  }
Пример #13
0
			configDir: require('path').join(require('os').homedir(), 'acme', 'etc'),
			webrootPath: '/tmp/acme-challenges'
		})
	});
	server = https.createServer(glx.httpsOptions, glx.middleware(app));
}
server.listen(config.PORT);
let io = SocketIO.listen(server);
io.origins(function(origin, callback){
	if (!config.ORIGIN_REGEX.test(origin))
		return callback('origin not allowed', false);
	callback(null, true);
});
log(`[Socket.io] Server listening on port ${config.PORT}`);

moment.locale('en');
moment.tz.add('Europe/Budapest|CET CEST|-10 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6');
moment.tz.setDefault('Europe/Budapest');
const _respond = (message, status, extra) => {
	let response;
	if (message === true)
		response = {status:true};
	else if (_.isObject(message) && !status && !extra){
		message.status = true;
		response = message;
	}
	else response = {
		"message": message || 'Insufficient permissions',
		"status": Boolean(status),
	};
	if (extra)
Пример #14
0
 let withMomentLocale = (lang, callback) => {
     moment.locale(lang);
     let result = callback();
     moment.locale();
     return result;
 };
Пример #15
0
import {default as model_default, page as model_page, list as model_list} from '../models/page';
import {setString, option_format} from '../tool/common_tool.js';
import {system_config} from '../config.js';
import moment from 'moment-timezone';

moment.locale(system_config.System_country);//设置当地时间格式
export default (ctx, next) => {
    return model_default(ctx).then((result) => {
        if (result.post.length == 0) {
            return next();
        } else {
            result.post[0].post_content = marked(result.post[0].post_content.replace(/\r\n/ig, '<br/>'));
            result.post[0].post_date = moment(result.post[0].post_date).format('ll'); //格式化时间

            var posts = {
                options: option_format(result.options),
                post: result.post[0],
                post_comment: result.comment,
                post_comment_back: result.comment_back,
                post_tag: result.tag,
                post_category: result.category,
                friendly_link: result.friendly_link
            };

          return ctx.render('post', posts);
        }
    });
};

export var page = (ctx) => {
    return model_page(ctx).then((result) => {
const momentParse = function momentParse(str, format) {
  moment.locale("de");

  return moment.tz(str, format, true, "Europe/Berlin");
};
Пример #17
0
  getPage(uri, (err, res, body) => {
    if (err) {
      connector.logger.info(err)
      return callback('request error')
    }

    const $ = cheerio.load(body)
    const $subOrders = $('.submit.button-primary.btn')
    // Stop it.
    // This is a page composed of many orders.
    // Recursively fetch them individually.
    if ($subOrders.length !== 0) {
      const subOrdersUris = []
      $subOrders.each(function forEachSubOrders () {
        const $subOrder = $(this)
        subOrdersUris.push($subOrder.attr('href'))
      })

      return async.eachSeries(subOrdersUris, (subOrderUri, cb) => {
        getEvents(subOrderUri, events, cb)
      }, callback)
    }

    // We'll parse french dates
    moment.locale('fr')

    // Franglish stuffs
    const $orderHeader = $('.entete-commande')
    // "Title"
    const $roundTrip = $orderHeader.find('span')
    const $ticketDetail = $orderHeader.parent().find('.retrait-billet-detail')
    const $travels = $ticketDetail.find('.outward, .inward')
    // Reference...
    const $folder = $('.folder-box')

    const reference = $folder.find('.reference-dossier span').text()
    const ticketChoice =
      $folder.parent().find('.types-retrait .chosen-mode-name').text()
    const label =
      `${$roundTrip.eq(0).text().trim()}/${$roundTrip.eq(1).text().trim()}`

    $travels.each(function forEachTravels () {
      const $travel = $(this)
      const $date = $travel.find('.date-trajet')
      const $moreInfos = $travel.find('.travel_more_infos_table')

      const moreInfos = parseMoreInfos($, $moreInfos)
      const date = $date.find('p').eq(1).text()
                                        .trim()
      const travelType = $date.find('.label').text().trim()

      // When we have correpondances for example
      const $travelSegments = $travel.find('.travel')
      $travelSegments.each(function forEachTravelSegments () {
        const $travelSegment = $(this)
        const $departure = $travelSegment.find('.departure')
        const $arrival = $travelSegment.find('.arrival')

        // Yup, the generated HTML is just a joke.
        const beginHour = $departure.find('.hour p')
                                    .eq(1)
                                    .text()
                                    .trim()
        const beginStation = $departure.find('.station p')
                                       .eq(1)
                                       .text()
                                       .trim()
        const trainType =
          $departure.find('.train_picto').text()
                    .replace('Transporteur :', '')
                    .trim()
        const trainNumber =
          $departure.find('.train_number p').eq(1)
                                            .text()
                                            .trim()
        const trainInfo =
          $departure.find('.train_infos .train_class p').eq(1)
                                                        .text()
                                                        .trim()

        const arrivalHour = $arrival.find('.hour p').eq(1)
                                                    .text()
                                                    .trim()
        const arrivalStation = $arrival.find('.station p').eq(1)
                                                          .text()
                                                          .trim()

        const description = `${travelType}: ${label}`

        let details = `${beginStation} -> ${arrivalStation}\n`
        details += localization.t('konnector voyages_sncf reference')
        details += `: ${reference}\n`
        details += localization.t('konnector voyages_sncf ticket choice')
        details += `: ${ticketChoice}\n`
        details += `${trainType} ${trainNumber} - ${trainInfo}\n\n`

        // Add more informations for this travel for each passenger
        Object.keys(moreInfos).forEach((passenger) => {
          const moreInfo = moreInfos[passenger].shift()
          // Sometimes we don't have "more informations" for all travels
          if (moreInfo) {
            details +=
              `${passenger}: ${moreInfo.fare} - ${moreInfo.place_details}`
          }
        })

        const momentFormat = 'DD MMMM YYYY HH mm'
        // SNCF is in the french timezone
        const momentZone = 'Europe/Paris'

        const event = {
          description,
          details,
          id: date + trainType + trainNumber,
          start: moment.tz(`${date} ${beginHour}`, momentFormat, momentZone)
                .toISOString(),
          end: moment.tz(`${date} ${arrivalHour}`, momentFormat, momentZone)
              .toISOString(),
          place: beginStation
        }

        events.push(event)
      })
    })

    return callback()
  })
Пример #18
0
 before(() => {
   global.window = sinon.stub();
   moment.locale("en-GB");
   viewDataAdapter = new ViewDataAdapter(FAKE_CONFIG);
 });
Пример #19
0
 function setStartDayOfWeek(day) {
   const dow = moment.weekdays().indexOf(day);
   moment.updateLocale(moment.locale(), { week: { dow } });
 }
Пример #20
0
const fs      = require('fs');
const path    = require('path');
const morgan  = require('morgan');
const express = require('express');
const moment  = require('moment-timezone');

const PORT = process.env.PORT || 3000;
var app = express();

// Set norwegian local time
moment.locale("nb");
app.use(express.static(path.join(__dirname, 'public')));

// route index file
app.get('/', (req, res) => 
{
  res.sendFile(path.join(__dirname, '/public/index.html'));
});

// route hotdog page
app.get('/hotdog', (req, res) => 
{
  console.log("Fetching hotdogs");
 // res.sendFile(path.join(__dirname, '/public/hotdog.html'));
});


// Error 404. Send back to index file.
app.use(function(req, res, next) 
{
  res.status(404);
Пример #21
0
  restoreLocales = () => {
    const { abbr } = this.props.currentLocale;

    const localeOptions = omit(this.props.currentLocale, 'abbr');
    return moment.locale(abbr, localeOptions);
  };
Пример #22
0
// Description:
//   meetup script
//
// Dependencies:
//   None
//
// Configuration:
//   None
//
// Commands:
//   when is the next event ?  - returns the next upcoming meetup event

var moment = require('moment-timezone');
moment.locale('en-gb');

module.exports = function (robot) {
  var result;
  var API_KEY = process.env.MEETUP_API_KEY;
  var groups = require('../meetup-groups.json');
  var allGroupIds = groups.map(function (group) {
    return group.id;
  }).join('%2C');

  function processMessage(msg) {
    var room = msg.message.room.toLowerCase();
    var community = msg.match[1].toLowerCase();
    var meetupGroupId = phraseToId(community, groups) || phraseToId(room, groups);
    var knownGroup = true;
    if (!meetupGroupId) {
      knownGroup = false;
      meetupGroupId = allGroupIds;
Пример #23
0
var assert = require('assert'),
    fs = require('fs'),
    moment = require('moment-timezone'),
    parser = require('../parsers/itb');

moment.locale('sk');

describe('itb', function() {
    describe('parsing sample 2015-29-07', function () {

        var html = fs.readFileSync(__dirname + '/samples/ITB.2015-07-29.html', { encoding: "utf-8" });
        var menu;

        before(function (done) {
            parser.parse(html, moment("2015-07-30"), function (menuItems) {
                menu = menuItems;
                done();
            });
        });

        it("should return 8 items", function () {
            assert.equal(menu.length, 8);
        });

        it("1st item correct", function () {
            assert.equal(menu[0].isSoup, true);
            assert.equal(menu[0].text, "Richtárska");
            assert.equal(menu[0].price, 1);
        });

        it("2nd item correct", function () {
Пример #24
0
const express = require('express');
const bodyParser = require('body-parser');
const logger = require('morgan');
const dotenv = require('dotenv');
const mongoose = require('mongoose');
const cors = require('cors');
const moment = require('moment-timezone');

// routes
const clients = require('./routes/clients');
const loans = require('./routes/loans');
const charges = require('./routes/charges');
const users = require('./routes/users');
const payments = require('./routes/payments');

moment.locale('es');
moment.tz.setDefault('America/Mexico_City');

if (process.env.NODE_ENV !== 'production') {
  dotenv.load({ path: '../.env' });
}

const app = express();

mongoose.Promise = Promise;

mongoose.connect(process.env.MONGOLAB_URI || `${process.env.MONGODB_PORT_27017_TCP_ADDR}/prestamax`);
mongoose.connection.on('error', () => {
  console.error('MongoDB Connection Error. Please make sure that MongoDB is running.');
  process.exit(1);
});
 _localizeMoment(date) {
     return date.clone().locale(this.props.locale || moment.locale());
 }
Пример #26
0
 setLocaleTo: (locale) => expect(moment.locale()).toEqual(locale)
Пример #27
0
// @flow
'use strict';
const assert = require('assert');
const moment = require('moment-timezone');
moment.locale('fr');
export type SlotDef = {start: string, end: string, prob: number, duration: number}

module.exports.getNextSlots = function (start: string, end: string, calendar: Array<Array<SlotDef>>): Array<string> {
  assert(calendar.length === 7, 'bad calendar');
  const mStart = moment(start);
  const mEnd = moment(end);
  const startWD = mStart.weekday();
  const slots = [];
  let done = false;
  for (let i = 0; i < 7; i++) {
    if (done) break;
    const wd = (startWD + i) % 7;
    calendar[wd].forEach((slot) => {
      const sGps = /(\d{2}):(\d{2})/.exec(slot.start);
      const eGps = /(\d{2}):(\d{2})/.exec(slot.end);
      const slotStart = moment(start).add(i, 'd').hour(parseInt(sGps[1], 10)).minute(parseInt(sGps[2], 10)).second(0);
      if (slotStart > mEnd || done) {
        done = true;
        return;
      }
      const slotEnd = moment(start).add(i, 'd').hour(parseInt(eGps[1], 10)).minute(parseInt(eGps[2], 10)).second(0);
      assert(slotEnd > slotStart, 'start must be lt end...');
      /* eslint-disable no-unmodified-loop-condition */
      while (mStart > slotStart) {
        slotStart.add(slot.duration, 'minute');
      }
Пример #28
0
var metalsmith_browser_sync = require("metalsmith-browser-sync")
var metalsmith_request = require("metalsmith-request")
var metalsmith_metadata = require("metalsmith-metadata")
var metalsmith_filenames = require("metalsmith-filenames")
var metalsmith_beautify = require("metalsmith-beautify")
var metalsmith_clean_css = require("metalsmith-clean-css")
var metalsmith_collections = require("metalsmith-collections")
var metalsmith_feed = require("./custom_feed")
var metalsmith_excerpts = require("metalsmith-excerpts")
var metalsmith_sitemap = require("metalsmith-sitemap")
var metalsmith_dynamic_pages = require("./dynamic_pages")
var slug = require("slug")

var moment_fi = require("moment-timezone")
moment_fi.tz.setDefault("Europe/Helsinki")
moment_fi.locale("fi")

var moment_sv = require("moment-timezone")
moment_sv.tz.setDefault("Europe/Helsinki")
moment_fi.locale("sv")

var lodash = require("lodash-addons")

module.exports = new Metalsmith(__dirname)
  .use(metalsmith_images({}))
  .use(metalsmith_filenames())
  .use(metalsmith_metadata({
    site: "metadata/site.json"
  }))
  .use(metalsmith_request({
    domains: "https://admin.tkrekry.fi/api/organisation/domains",
Пример #29
0
const { readFile } = require('fs');
const moment = require('moment-timezone');
const showdown = require('showdown');
const converter = new showdown.Converter({ noHeaderId: true });

const getMp3Length = require('./getMp3Length');
const { MD_FOLDER, DATE_PARSE_FORMAT, DATE_SHOW_FORMAT } = require('./constants');

moment.locale('RU');
/**
 * Parse *.md file and return object
 *
 * @param   {String} file   - filename
 * @returns {Object}        object with only top level
 */
module.exports = (file) => {
    return new Promise((resolve, reject) => {
        readFile(`${MD_FOLDER}/${file}`, (err, data) => {
            if (err) {
                return reject(err);
            }

            const content = data.toString();
            const header = content.match(/^#.+/)[0];
            const paragraphs = content.match(/[^\n].*/g);

            const N = header.match(/\d+/)[0];
            const title = header.match(/\S+\s+.\d+/)[0];
            const summary = paragraphs[1]
                .replace(/.+\d+:/, '')
                .replace(/`/g, '')